Repository: cp2k/dbcsr Branch: develop Commit: b088a30daf33 Files: 395 Total size: 37.2 MB Directory structure: gitextract_o5s2z7tn/ ├── .ccls ├── .clang-format ├── .cmake-format.py ├── .codecov.yml ├── .fortls ├── .git-blame-ignore-revs ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ └── bug_report.md │ └── workflows/ │ ├── doc-generation.yml │ ├── docker-build-env.yml │ ├── release.yml │ ├── testing-gcc.yml │ ├── testing-linux.yml │ └── testing-macos.yml ├── .gitignore ├── .gitmodules ├── .packit.yaml ├── .pre-commit/ │ ├── check_header.py │ ├── clang-format-fypp.sh │ └── headers/ │ ├── c_cpp.1 │ ├── c_cpp.2 │ ├── c_cpp.3 │ ├── fortran.1 │ ├── fortran.2 │ ├── fypp.1 │ ├── script.1 │ └── script.2 ├── .pre-commit-config.yaml ├── .ruff.toml ├── AUTHORS ├── CMakeLists.txt ├── CONTRIBUTING.md ├── DBCSR.md ├── LICENSE ├── README.md ├── VERSION ├── cmake/ │ ├── CheckCompilerSupport.cmake │ ├── CompilerConfiguration.cmake │ ├── CustomTargets.cmake │ ├── GetGitRevisionDescription.cmake │ ├── GetGitRevisionDescription.cmake.in │ ├── compiler-tests/ │ │ ├── f2008-block_construct.f90 │ │ ├── f2008-contiguous.f90 │ │ ├── f2008-norm2.f90 │ │ └── f95-reshape-order-allocatable.f90 │ └── fypp-sources.cmake ├── docs/ │ ├── CMakeLists.txt │ ├── guide/ │ │ ├── 1-DBCSR/ │ │ │ ├── index.md │ │ │ └── publications.md │ │ ├── 2-user-guide/ │ │ │ ├── 1-installation/ │ │ │ │ ├── 1-cmake-build-recipes.md │ │ │ │ ├── 2-supported-compilers.md │ │ │ │ ├── 3-using-dbcsr-in-a-cmake-project.md │ │ │ │ ├── 4-docker.md │ │ │ │ └── index.md │ │ │ ├── 2-tests/ │ │ │ │ └── index.md │ │ │ ├── 3-examples/ │ │ │ │ └── index.md │ │ │ ├── 4-gpu/ │ │ │ │ └── index.md │ │ │ └── index.md │ │ ├── 3-developer-guide/ │ │ │ ├── 1-tooling/ │ │ │ │ └── index.md │ │ │ ├── 2-documentation/ │ │ │ │ └── index.md │ │ │ ├── 3-programming/ │ │ │ │ ├── 1-overview/ │ │ │ │ │ └── index.md │ │ │ │ ├── 2-accelerator-backend/ │ │ │ │ │ ├── 1-code-structure.md │ │ │ │ │ ├── 2-libsmm_acc/ │ │ │ │ │ │ ├── 1-kernels.md │ │ │ │ │ │ ├── 2-parameters.md │ │ │ │ │ │ ├── 3-tune.md │ │ │ │ │ │ └── index.md │ │ │ │ │ ├── 3-libsmm_ocl/ │ │ │ │ │ │ ├── 1-autotune.md │ │ │ │ │ │ ├── 2-bulktune.md │ │ │ │ │ │ └── index.md │ │ │ │ │ └── index.md │ │ │ │ └── index.md │ │ │ ├── 4-performance/ │ │ │ │ ├── 1-insights.md │ │ │ │ ├── 2-just-in-time-compilation.md │ │ │ │ └── index.md │ │ │ └── index.md │ │ └── index.md │ └── media/ │ └── logo/ │ └── logo.ppt ├── examples/ │ ├── .gitignore │ ├── CMakeLists.txt │ ├── README.md │ ├── dbcsr_example_1.F │ ├── dbcsr_example_2.F │ ├── dbcsr_example_3.F │ ├── dbcsr_example_3.cpp │ ├── dbcsr_tensor_example_1.F │ └── dbcsr_tensor_example_2.cpp ├── src/ │ ├── .gitignore │ ├── CMakeLists.txt │ ├── PACKAGE │ ├── acc/ │ │ ├── PACKAGE │ │ ├── README.md │ │ ├── acc.h │ │ ├── acc_bench.c │ │ ├── acc_bench.h │ │ ├── acc_libsmm.h │ │ ├── acc_triplets.sh │ │ ├── cuda/ │ │ │ ├── Makefile │ │ │ ├── PACKAGE │ │ │ ├── acc_cuda.cpp │ │ │ ├── acc_cuda.h │ │ │ ├── dbcsr_cuda_nvtx_cu.cpp │ │ │ └── dbcsr_cuda_profiling.F │ │ ├── cuda_hip/ │ │ │ ├── PACKAGE │ │ │ ├── acc_blas.cpp │ │ │ ├── acc_blas.h │ │ │ ├── acc_dev.cpp │ │ │ ├── acc_error.cpp │ │ │ ├── acc_error.h │ │ │ ├── acc_event.cpp │ │ │ ├── acc_init.cpp │ │ │ ├── acc_mem.cpp │ │ │ ├── acc_stream.cpp │ │ │ ├── acc_utils.cpp │ │ │ ├── acc_utils.h │ │ │ └── calculate_norms.cpp │ │ ├── dbcsr_acc_device.F │ │ ├── dbcsr_acc_devmem.F │ │ ├── dbcsr_acc_event.F │ │ ├── dbcsr_acc_hostmem.F │ │ ├── dbcsr_acc_init.F │ │ ├── dbcsr_acc_stream.F │ │ ├── dbcsr_acc_timings.F │ │ ├── hip/ │ │ │ ├── PACKAGE │ │ │ ├── acc_hip.cpp │ │ │ ├── acc_hip.h │ │ │ └── dbcsr_hip_profiling.F │ │ ├── libsmm_acc/ │ │ │ ├── .gitignore │ │ │ ├── CMakeLists.txt │ │ │ ├── PACKAGE │ │ │ ├── README.md │ │ │ ├── generate_kernels.py │ │ │ ├── generate_parameters.py │ │ │ ├── kernels/ │ │ │ │ ├── PACKAGE │ │ │ │ ├── README.md │ │ │ │ ├── __init__.py │ │ │ │ ├── autotuning_properties.json │ │ │ │ ├── gpu_properties.json │ │ │ │ ├── smm_acc.py │ │ │ │ ├── smm_acc_common.h │ │ │ │ ├── smm_acc_dnt_base.py │ │ │ │ ├── smm_acc_dnt_largeDB1.h │ │ │ │ ├── smm_acc_dnt_largeDB1.py │ │ │ │ ├── smm_acc_dnt_largeDB2.h │ │ │ │ ├── smm_acc_dnt_largeDB2.py │ │ │ │ ├── smm_acc_dnt_medium.h │ │ │ │ ├── smm_acc_dnt_medium.py │ │ │ │ ├── smm_acc_dnt_small.h │ │ │ │ ├── smm_acc_dnt_small.py │ │ │ │ ├── smm_acc_dnt_tiny.h │ │ │ │ ├── smm_acc_dnt_tiny.py │ │ │ │ ├── smm_acc_predict.py │ │ │ │ └── smm_acc_transpose.h │ │ │ ├── libcusmm/ │ │ │ │ ├── .gitignore │ │ │ │ └── PACKAGE │ │ │ ├── libsmm_acc.cpp │ │ │ ├── libsmm_acc.h │ │ │ ├── libsmm_acc_benchmark.cpp │ │ │ ├── libsmm_acc_benchmark.h │ │ │ ├── libsmm_acc_init.cpp │ │ │ ├── libsmm_acc_init.h │ │ │ ├── parameters/ │ │ │ │ ├── parameters_A100.json │ │ │ │ ├── parameters_H100.json │ │ │ │ ├── parameters_K20X.json │ │ │ │ ├── parameters_K40.json │ │ │ │ ├── parameters_K80.json │ │ │ │ ├── parameters_Mi100.json │ │ │ │ ├── parameters_Mi250.json │ │ │ │ ├── parameters_Mi300.json │ │ │ │ ├── parameters_Mi350.json │ │ │ │ ├── parameters_Mi50.json │ │ │ │ ├── parameters_P100.json │ │ │ │ └── parameters_V100.json │ │ │ ├── parameters_utils.h │ │ │ └── tune/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── archive.sh │ │ │ ├── cleanup.sh │ │ │ ├── requirements.txt │ │ │ ├── tune_collect.py │ │ │ ├── tune_merge.py │ │ │ ├── tune_setup.py │ │ │ └── tune_submit.py │ │ └── opencl/ │ │ ├── Makefile │ │ ├── PACKAGE │ │ ├── README.md │ │ ├── acc_getenv.sh │ │ ├── acc_opencl.c │ │ ├── acc_opencl.h │ │ ├── acc_opencl.sh │ │ ├── acc_opencl_event.c │ │ ├── acc_opencl_mem.c │ │ ├── acc_opencl_stream.c │ │ ├── common/ │ │ │ ├── opencl_atomics.h │ │ │ └── opencl_common.h │ │ └── smm/ │ │ ├── .gitignore │ │ ├── CMakeLists.txt │ │ ├── PACKAGE │ │ ├── README-autotune.md │ │ ├── README-bulktune.md │ │ ├── README.md │ │ ├── kernels/ │ │ │ ├── multiply.cl │ │ │ └── transpose.cl │ │ ├── opencl_libsmm.c │ │ ├── opencl_libsmm.h │ │ ├── opencl_test.sh │ │ ├── params/ │ │ │ ├── README.md │ │ │ ├── tune_multiply_A100.csv │ │ │ ├── tune_multiply_BMG.csv │ │ │ ├── tune_multiply_GH200.csv │ │ │ ├── tune_multiply_H100.csv │ │ │ ├── tune_multiply_Mi250.csv │ │ │ ├── tune_multiply_P100.csv │ │ │ ├── tune_multiply_PVC.csv │ │ │ └── tune_multiply_V100.csv │ │ ├── requirements.txt │ │ ├── tune_multiply.py │ │ └── tune_multiply.sh │ ├── base/ │ │ ├── PACKAGE │ │ ├── dbcsr_base_hooks.F │ │ ├── dbcsr_base_uses.f90 │ │ ├── dbcsr_kinds.F │ │ ├── dbcsr_machine.F │ │ ├── dbcsr_machine_internal.F │ │ └── dbcsr_machine_posix.f90 │ ├── block/ │ │ ├── PACKAGE │ │ ├── dbcsr_block_access.F │ │ ├── dbcsr_block_operations.F │ │ ├── dbcsr_index_operations.F │ │ └── dbcsr_iterator_operations.F │ ├── cmake/ │ │ └── DBCSRConfig.cmake.in │ ├── core/ │ │ ├── PACKAGE │ │ ├── dbcsr_array_types.F │ │ ├── dbcsr_config.F │ │ ├── dbcsr_dict.F │ │ ├── dbcsr_dict.fypp │ │ ├── dbcsr_error_handling.F │ │ ├── dbcsr_iter_types.F │ │ ├── dbcsr_lib.F │ │ ├── dbcsr_list.F │ │ ├── dbcsr_list.fypp │ │ ├── dbcsr_list_callstackentry.F │ │ ├── dbcsr_list_routinereport.F │ │ ├── dbcsr_list_routinestat.F │ │ ├── dbcsr_list_timerenv.F │ │ ├── dbcsr_log_handling.F │ │ ├── dbcsr_methods.F │ │ ├── dbcsr_print_messages.F │ │ ├── dbcsr_timings.F │ │ ├── dbcsr_timings_base_type.F │ │ ├── dbcsr_timings_report.F │ │ ├── dbcsr_timings_types.F │ │ └── dbcsr_types.F │ ├── data/ │ │ ├── PACKAGE │ │ ├── dbcsr.fypp │ │ ├── dbcsr_data_methods.F │ │ ├── dbcsr_data_methods_low.F │ │ ├── dbcsr_data_operations.F │ │ ├── dbcsr_data_types.F │ │ ├── dbcsr_mem_methods.F │ │ └── dbcsr_ptr_util.F │ ├── dbcsr.h │ ├── dbcsr_api.F │ ├── dbcsr_api_c.F │ ├── mm/ │ │ ├── PACKAGE │ │ ├── dbcsr_acc_operations.F │ │ ├── dbcsr_mm.F │ │ ├── dbcsr_mm_3d.F │ │ ├── dbcsr_mm_accdrv.F │ │ ├── dbcsr_mm_cannon.F │ │ ├── dbcsr_mm_common.F │ │ ├── dbcsr_mm_csr.F │ │ ├── dbcsr_mm_dist_operations.F │ │ ├── dbcsr_mm_hostdrv.F │ │ ├── dbcsr_mm_multrec.F │ │ ├── dbcsr_mm_sched.F │ │ ├── dbcsr_mm_types.F │ │ └── dbcsr_multiply_api.F │ ├── mpi/ │ │ ├── PACKAGE │ │ ├── dbcsr_mp_methods.F │ │ ├── dbcsr_mp_operations.F │ │ ├── dbcsr_mpiwrap.F │ │ └── dbcsr_mpiwrap.fypp │ ├── ops/ │ │ ├── PACKAGE │ │ ├── dbcsr_csr_conversions.F │ │ ├── dbcsr_io.F │ │ ├── dbcsr_operations.F │ │ ├── dbcsr_test_methods.F │ │ ├── dbcsr_tests.F │ │ └── dbcsr_transformations.F │ ├── tas/ │ │ ├── PACKAGE │ │ ├── dbcsr_tas.fypp │ │ ├── dbcsr_tas_base.F │ │ ├── dbcsr_tas_global.F │ │ ├── dbcsr_tas_io.F │ │ ├── dbcsr_tas_mm.F │ │ ├── dbcsr_tas_reshape_ops.F │ │ ├── dbcsr_tas_split.F │ │ ├── dbcsr_tas_test.F │ │ ├── dbcsr_tas_types.F │ │ └── dbcsr_tas_util.F │ ├── tensors/ │ │ ├── PACKAGE │ │ ├── dbcsr_allocate_wrap.F │ │ ├── dbcsr_array_list_methods.F │ │ ├── dbcsr_tensor.F │ │ ├── dbcsr_tensor.fypp │ │ ├── dbcsr_tensor.h │ │ ├── dbcsr_tensor_api.F │ │ ├── dbcsr_tensor_api_c.F │ │ ├── dbcsr_tensor_block.F │ │ ├── dbcsr_tensor_index.F │ │ ├── dbcsr_tensor_io.F │ │ ├── dbcsr_tensor_reshape.F │ │ ├── dbcsr_tensor_split.F │ │ ├── dbcsr_tensor_test.F │ │ └── dbcsr_tensor_types.F │ ├── utils/ │ │ ├── PACKAGE │ │ ├── dbcsr_array_sort.F │ │ ├── dbcsr_array_sort.fypp │ │ ├── dbcsr_blas_operations.F │ │ ├── dbcsr_btree.F │ │ ├── dbcsr_btree.fypp │ │ ├── dbcsr_files.F │ │ ├── dbcsr_hash_table.f90 │ │ ├── dbcsr_hash_table_types.f90 │ │ ├── dbcsr_min_heap.F │ │ ├── dbcsr_string_utilities.F │ │ └── dbcsr_toollib.F │ └── work/ │ ├── PACKAGE │ └── dbcsr_work_operations.F ├── tests/ │ ├── .gitignore │ ├── CMakeLists.txt │ ├── README.md │ ├── dbcsr_acc_test.c │ ├── dbcsr_performance_driver.F │ ├── dbcsr_performance_multiply.F │ ├── dbcsr_tas_unittest.F │ ├── dbcsr_tensor_test.cpp │ ├── dbcsr_tensor_unittest.F │ ├── dbcsr_test.cpp │ ├── dbcsr_test_add.F │ ├── dbcsr_test_csr_conversions.F │ ├── dbcsr_test_multiply.F │ ├── dbcsr_test_scale_by_vector.F │ ├── dbcsr_unittest1.F │ ├── dbcsr_unittest2.F │ ├── dbcsr_unittest3.F │ ├── dbcsr_unittest4.F │ ├── generate_libsmm_acc_timer_multiply.py │ ├── generate_libsmm_acc_unittest_multiply.py │ ├── input.perf │ ├── inputs/ │ │ ├── test_H2O.perf │ │ ├── test_rect1_dense.perf │ │ ├── test_rect1_sparse.perf │ │ ├── test_rect2_dense.perf │ │ ├── test_rect2_sparse.perf │ │ ├── test_singleblock.perf │ │ ├── test_square_dense.perf │ │ ├── test_square_sparse.perf │ │ ├── test_square_sparse_bigblocks.perf │ │ └── test_square_sparse_rma.perf │ ├── libsmm_acc_timer_multiply.cpp.template │ ├── libsmm_acc_unittest_multiply.cpp.template │ └── libsmm_acc_unittest_transpose.cpp └── tools/ ├── build_libsmm/ │ ├── COPYRIGHT │ ├── README │ ├── config/ │ │ ├── cray.cce │ │ ├── cray.gnu │ │ ├── cray.intel.libsci │ │ ├── cray.intel.mkl │ │ ├── cray_mic.intel │ │ ├── linux.gnu │ │ ├── linux.intel │ │ ├── local_libxsmm.gnu │ │ ├── mic.intel │ │ ├── none.wlm │ │ ├── pbs.wlm │ │ └── slurm.wlm │ ├── config.in │ ├── generate │ ├── generate.bash │ ├── lib_gen.f90 │ ├── make.gen │ ├── multrec_gen.f90 │ ├── mults.f90 │ ├── small_gen.f90 │ └── tiny_gen.f90 ├── docker/ │ ├── Dockerfile.build-env-latest-gcc │ ├── Dockerfile.build-env-rocm │ ├── Dockerfile.build-env-ubuntu │ ├── Dockerfile.build-env-ubuntu-cuda │ ├── Makefile │ ├── README.md │ └── lsan.supp └── fedora/ ├── dbcsr.rpmlintrc └── dbcsr.spec ================================================ FILE CONTENTS ================================================ ================================================ FILE: .ccls ================================================ clang %c -std=c17 %cpp -std=c++17 -Isrc/ ================================================ FILE: .clang-format ================================================ --- AlignAfterOpenBracket: DontAlign AlignEscapedNewlines: DontAlign AlignTrailingComments: false AllowShortCaseLabelsOnASingleLine: true AllowShortIfStatementsOnASingleLine: AllIfsAndElse AllowShortLoopsOnASingleLine: true BraceWrapping: AfterControlStatement: MultiLine BeforeCatch: true BeforeElse: true BreakBeforeBraces: Custom ColumnLimit: 132 ConstructorInitializerIndentWidth: 0 ContinuationIndentWidth: 2 IndentCaseLabels: true IndentPPDirectives: AfterHash IndentWidth: 2 KeepEmptyLinesAtTheStartOfBlocks: false MaxEmptyLinesToKeep: 2 PenaltyBreakAssignment: 50 PointerAlignment: Left ReflowComments: false SortIncludes: false SpaceAfterTemplateKeyword: false UseTab: Never ... ================================================ FILE: .cmake-format.py ================================================ # flake8: noqa with section("format"): separate_ctrl_name_with_space = True ================================================ FILE: .codecov.yml ================================================ coverage: precision: 1 round: down range: 60..100 comment: require_changes: true after_n_builds: 12 ================================================ FILE: .fortls ================================================ { "excl_paths": ["build"] } ================================================ FILE: .git-blame-ignore-revs ================================================ # git commit hashes with whitespace/reformatting changes only # Make git-blame use this file by running: # git config blame.ignoreRevsFile .git-blame-ignore-revs 21f91d84e3cda3eaf838a3b510077c9e01c8aeb8 fcfa8ae3551ae0d3517db59cbc3ebaea0dccc967 53891420300f402fd70afcbfb00e1b21024040d3 e948f9db58989f081fa0b4e4e4236e06b5566364 972f09eb17c021c4970ddbd08596869b43e88a33 8e647643ad149d2b886c74db1d50376066d65483 8ebeab6fd522ec54e89ab7c6dd14bae36efc8d67 3169190d69019d1221b1fee92e35d2501479f403 df7ea8fb053b17a0bb6f9c3b243652395cf9dbe7 224479c43e58305d2da2f41eff727baca5ef72c8 f4d6abdf94381392a496e736c8684f06664bd9e5 e8e1fe118ce19e6e6942405baeae2f96dbd620cb fa1838a1e4ae03b87c3c1e4b37ba4dc2b97d75ae 65f3f47c78c51548bb84332f239b79e6c0094d6f ================================================ FILE: .gitattributes ================================================ .gitattributes export-ignore .gitignore export-ignore .gitmodules export-ignore .travis.yml export-ignore .github export-ignore ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Create a report to help us improve --- **Describe the bug** A clear and concise description of what the bug is, including the stacktrace (if there was one). **To Reproduce** Steps to reproduce the behavior: 1. Built with the command: '...' 2. Run like this: '....' 3. On the architecture/host/platform: '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Environment:** - Operating system & version - Compiler vendor & version - Build environment (make or cmake) - Configuration of DBCSR (either the cmake flags or the `Makefile.inc`) - MPI implementation and version - If CUDA is being used: CUDA version and GPU architecture - BLAS/LAPACK implementation and version - If applicable: Runtime information (how many nodes, type of nodes, ...) ================================================ FILE: .github/workflows/doc-generation.yml ================================================ --- name: Generating documentation on: push: branches: - 'develop' tags: - 'v*' workflow_dispatch: jobs: build-and-deploy: runs-on: ubuntu-latest container: image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04:develop volumes: - "/etc/ssh/ssh_known_hosts:/etc/ssh/ssh_known_hosts:ro" steps: - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: true - name: Configure run: | mkdir -p build cd build cmake -G Ninja \ -DUSE_MPI=ON \ -DBUILD_TESTING=ON \ -DUSE_OPENMP=ON \ -DUSE_SMM=libxsmm \ -DMPI_EXECUTABLE_SUFFIX=.mpich \ .. - name: Build run: | cmake --build build -- doc touch build/doc/.nojekyll - name: Configure git to trust the workspace despite the different owner run: git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: Deploy Development Documentation if: github.repository == 'cp2k/dbcsr' && github.ref == 'refs/heads/develop' uses: JamesIves/github-pages-deploy-action@releases/v4 with: branch: gh-pages folder: build/doc target-folder: develop clean: true clean-exclude: | releases/ ssh-key: ${{ secrets.SSH_DEPLOY_KEY }} - name: Get the release version id: get_version run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\/v/} shell: bash - name: Deploy Release Documentation if: github.repository == 'cp2k/dbcsr' && contains(github.ref, 'tags') uses: JamesIves/github-pages-deploy-action@releases/v4 with: branch: gh-pages folder: build/doc target-folder: 'releases/v${{ steps.get_version.outputs.VERSION }}' ssh-key: ${{ secrets.SSH_DEPLOY_KEY }} # vim: set ts=2 sw=2 tw=0 : ================================================ FILE: .github/workflows/docker-build-env.yml ================================================ --- name: Publish DBCSR Build Environments to the GitHub Contrainer Registry on: push: branches: - 'develop' paths: - 'tools/docker/**' - '.github/workflows/docker-build-env.yml' schedule: # runs on the last commit of the repo's default branch - cron: '45 23 * * *' workflow_dispatch: jobs: docker-build-env: runs-on: ubuntu-latest if: github.repository == 'cp2k/dbcsr' # Only run from main repo strategy: matrix: include: - docker_image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04 context: tools/docker file: Dockerfile.build-env-ubuntu registry: ghcr.io - docker_image: ghcr.io/cp2k/dbcsr-build-env-latest-gcc context: tools/docker file: Dockerfile.build-env-latest-gcc registry: ghcr.io - docker_image: ghcr.io/cp2k/dbcsr-build-env-rocm context: tools/docker file: Dockerfile.build-env-rocm registry: ghcr.io - docker_image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04-cuda context: tools/docker file: Dockerfile.build-env-ubuntu-cuda registry: ghcr.io steps: - name: Checkout Repository uses: actions/checkout@v4 - name: Prepare id: prep run: | DOCKER_IMAGE=${{ matrix.docker_image }} VERSION=latest if [[ $GITHUB_REF == refs/tags/* ]]; then VERSION=${GITHUB_REF#refs/tags/} elif [[ $GITHUB_REF == refs/heads/* ]]; then VERSION=$(echo ${GITHUB_REF#refs/heads/} | sed -r 's#/+#-#g') elif [[ $GITHUB_REF == refs/pull/* ]]; then VERSION=pr-${{ github.event.number }} fi TAGS="${DOCKER_IMAGE}:${VERSION}" if [ "${{ github.event_name }}" = "push" ]; then TAGS="$TAGS,${DOCKER_IMAGE}:sha-${GITHUB_SHA::8}" fi echo "version=${VERSION}" >> $GITHUB_OUTPUT echo "tags=${TAGS}" >> $GITHUB_OUTPUT echo "created=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Container registry uses: docker/login-action@v3 with: registry: ${{ matrix.registry }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push container image uses: docker/build-push-action@v5 with: context: ${{ matrix.context }} file: ${{ matrix.context }}/${{ matrix.file }} push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.prep.outputs.tags }} labels: | org.opencontainers.image.source=${{ github.event.repository.html_url }} org.opencontainers.image.created=${{ steps.prep.outputs.created }} org.opencontainers.image.revision=${{ github.sha }} ================================================ FILE: .github/workflows/release.yml ================================================ --- name: Create release on: push: tags: - 'v*' jobs: build-and-upload: runs-on: ubuntu-latest container: image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04:develop steps: - uses: actions/checkout@v4 with: submodules: true - name: Configure run: | mkdir -p build cd build cmake -G Ninja \ -DUSE_MPI=ON \ -DBUILD_TESTING=ON \ -DUSE_OPENMP=ON \ -DUSE_SMM=libxsmm \ -DMPI_EXECUTABLE_SUFFIX=.mpich \ .. - name: Configure git to trust the workspace despite the different owner run: git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: Build Release Asset run: cmake --build build -- dist - name: Get the release version id: get_version run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\/v/} shell: bash - name: Create Release id: create_release uses: actions/create-release@latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref }} release_name: Release ${{ github.ref }} draft: true prerelease: true - name: Upload Release Asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./build/dist/dbcsr-${{ steps.get_version.outputs.VERSION }}.tar.gz asset_name: dbcsr-${{ steps.get_version.outputs.VERSION }}.tar.gz asset_content_type: application/gzip # vim: set ts=2 sw=2 tw=0 : ================================================ FILE: .github/workflows/testing-gcc.yml ================================================ --- name: Testing with latest gcc on: push: branches: - 'develop' pull_request: jobs: build-and-test: runs-on: ubuntu-latest container: image: ghcr.io/cp2k/dbcsr-build-env-latest-gcc:develop steps: - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: true - name: Configure run: | mkdir -p build cd build cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Debug \ -DBUILD_TESTING=ON \ -DUSE_MPI=OFF \ -DUSE_OPENMP=ON \ -DUSE_SMM=blas \ -DUSE_MPI_F08=ON \ .. - name: Build run: cmake --build build -- --verbose - name: Test run: | export LSAN_OPTIONS=suppressions=$PWD/tools/docker/lsan.supp cd build ctest --output-on-failure # vim: set ts=2 sw=2 tw=0 : ================================================ FILE: .github/workflows/testing-linux.yml ================================================ --- name: Testing on Linux on: push: branches: - 'develop' pull_request: jobs: ################################################################################## # Run pre-commit ################################################################################## pre-commit: runs-on: ubuntu-latest container: image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04:develop steps: - uses: actions/checkout@v4 - name: Run pre-commit run: | git config --global --add safe.directory "$GITHUB_WORKSPACE" pre-commit run --all-files || ( git status --short ; git diff ; exit 1 ) ################################################################################## # Build and test on linux, no accelerator ################################################################################## build-and-test: runs-on: ubuntu-latest container: image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04:develop strategy: matrix: use_mpi: [MPI=ON, MPI=OFF] use_openmp: [OPENMP=ON, OPENMP=OFF] use_smm: [SMM=blas, SMM=libxsmm] mpi_suffix: [openmpi, mpich] exclude: - use_mpi: MPI=OFF mpi_suffix: mpich steps: - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: true - name: Configure run: | mkdir -p build cd build cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Coverage \ -DBUILD_TESTING=ON \ -DUSE_${{ matrix.use_mpi }} \ -DUSE_${{ matrix.use_openmp }} \ -DUSE_${{ matrix.use_smm }} \ -DMPI_EXECUTABLE_SUFFIX=.${{ matrix.mpi_suffix }} \ -DMPIEXEC_PREFLAGS="$([ "${{ matrix.mpi_suffix }}" = "openmpi" ] && echo "-mca btl ^openib --allow-run-as-root --oversubscribe")" \ -DLCOV_ARGS="--test-name;${{ matrix.use_mpi }}-${{ matrix.use_openmp }}-${{ matrix.use_smm }}-cpu" \ -DTEST_MPI_RANKS=auto \ .. - name: Build run: cmake --build build -- --verbose - name: Test run: | cd build ctest --output-on-failure - name: Generate coverage info run: | cmake --build build -- cov-info mv build/coverage.info build/coverage-Linux-${{ matrix.use_mpi }}-${{ matrix.use_openmp }}-${{ matrix.use_smm }}-cpu.info - name: Upload coverage data uses: actions/upload-artifact@v4 with: name: coverage-data-${{ matrix.use_mpi }}-${{ matrix.use_openmp }}-${{ matrix.use_smm }}-${{ matrix.mpi_suffix }} path: build/coverage-*.info - name: Upload coverage data (generated files) uses: actions/upload-artifact@v4 if: matrix.use_mpi == 'MPI=ON' && matrix.use_openmp == 'OPENMP=ON' && matrix.use_smm == 'SMM=blas' && matrix.mpi_suffix == 'openmpi' with: name: coverage-data-${{ matrix.use_mpi }}-${{ matrix.use_openmp }}-${{ matrix.use_smm }}-${{ matrix.mpi_suffix }}-generated-files path: | build/src/dbcsr.h build/src/tensors/dbcsr_tensor.h ################################################################################## # Build on CUDA ################################################################################## build-on-cuda: runs-on: ubuntu-latest container: image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04-cuda:develop strategy: matrix: use_mpi: [MPI=ON, MPI=OFF] use_openmp: [OPENMP=ON] mpi_suffix: [mpich] steps: - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: true - name: Configure run: | mkdir -p build cd build cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Debug \ -DBUILD_TESTING=ON \ -DUSE_${{ matrix.use_mpi }} \ -DUSE_${{ matrix.use_openmp }} \ -DUSE_ACCEL=cuda \ -DWITH_GPU=H100 \ -DWITH_EXAMPLES=ON \ -DWITH_CUDA_PROFILING=ON \ .. - name: Build run: cmake --build build -- --verbose ################################################################################## # Build on OpenCL ################################################################################## build-on-opencl: runs-on: ubuntu-latest container: image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04-cuda:develop strategy: matrix: use_openmp: [OPENMP=ON] use_smm: [SMM=libxsmm] steps: - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: true - name: Configure run: | mkdir -p build cd build cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Debug \ -DBUILD_TESTING=ON \ -DUSE_${{ matrix.use_openmp }} \ -DUSE_${{ matrix.use_smm }} \ -DUSE_ACCEL=opencl \ -DWITH_EXAMPLES=ON \ .. - name: Build run: cmake --build build -- --verbose ################################################################################## # Build on ROCm ################################################################################## build-on-rocm: runs-on: ubuntu-latest container: image: ghcr.io/cp2k/dbcsr-build-env-rocm:develop strategy: matrix: use_mpi: [MPI=ON, MPI=OFF] use_openmp: [OPENMP=ON] mpi_suffix: [mpich] steps: - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: true - name: Configure run: | mkdir -p build cd build cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_TESTING=ON \ -DUSE_${{ matrix.use_mpi }} \ -DUSE_${{ matrix.use_openmp }} \ -DUSE_ACCEL=hip \ -DWITH_GPU=Mi250 \ -DWITH_EXAMPLES=ON \ -DCMAKE_PREFIX_PATH=/opt/rocm \ .. - name: Build run: cmake --build build -- --verbose coverage: name: Combine & check coverage. runs-on: ubuntu-latest needs: build-and-test container: image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04:develop steps: - uses: actions/checkout@v4 - name: Download coverage data uses: actions/download-artifact@v4.1.7 with: pattern: coverage-data-* merge-multiple: true - name: Combine coverage run: | mkdir -p build/src mv dbcsr.h tensors build/src/ echo *.info | xargs printf -- '-a %s\n' | xargs lcov -o merged.info genhtml merged.info -o htmlcov lcov --summary merged.info - name: Upload merged HTML report uses: actions/upload-artifact@v4 with: name: html-report path: htmlcov # vim: set ts=2 sw=2 tw=0 : ================================================ FILE: .github/workflows/testing-macos.yml ================================================ --- name: Testing on macOS on: push: branches: - 'develop' pull_request: jobs: build-and-test: runs-on: macos-latest strategy: matrix: use_mpi: [MPI=ON] use_openmp: [OPENMP=ON] use_smm: [SMM=blas] blas_impl: [accelerate,openblas] mpi_suffix: [mpich] # Brew openmpi doesn't provide mpi.mod steps: - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: true - name: Install common dependencies run: | env HOMEBREW_NO_AUTO_UPDATE=1 brew install \ ninja - name: Install ${{ matrix.mpi_suffix }} run: | env HOMEBREW_NO_AUTO_UPDATE=1 brew install ${{ matrix.mpi_suffix }} - name: Configure run: | mkdir -p build cd build env \ CC=gcc-15 CXX=g++-15 FC=gfortran-15 \ cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_TESTING=ON \ -DUSE_${{ matrix.use_mpi }} \ -DUSE_${{ matrix.use_openmp }} \ -DUSE_${{ matrix.use_smm }} \ $([ "${{ matrix.blas_impl }}" = "openblas" ] && echo '-DCMAKE_PREFIX_PATH=/usr/local/opt/openblas') \ -DMPIEXEC_PREFLAGS="$([ "${{ matrix.mpi_suffix }}" = "openmpi" ] && echo "-mca btl ^openib --allow-run-as-root")" \ -DTEST_MPI_RANKS=auto \ .. - name: Build run: cmake --build build -- --verbose - name: Test run: | cd build ctest --output-on-failure # vim: set ts=2 sw=2 tw=0 : ================================================ FILE: .gitignore ================================================ # ignore project specific locations & files /lib/ /obj/ /bin/ /doc/ /install/ *.callgraph # exclude personal makefile /Makefile.inc.* # The following covers some more, # Created by https://www.gitignore.io/api/vim,emacs,python,fortran ### Emacs ### # -*- mode: gitignore; -*- *~ \#*\# /.emacs.desktop /.emacs.desktop.lock *.elc auto-save-list tramp .\#* # Org-mode .org-id-locations *_archive # flymake-mode *_flymake.* # eshell files /eshell/history /eshell/lastdir # elpa packages /elpa/ # reftex files *.rel # AUCTeX auto folder /auto/ # cask packages .cask/ dist/ # Flycheck flycheck_*.el # server auth directory /server/ # projectiles files .projectile projectile-bookmarks.eld # directory configuration .dir-locals.el # saveplace places # url cache url/cache/ # cedet ede-projects.el # smex smex-items # company-statistics company-statistics-cache.el # anaconda-mode anaconda-mode/ ### Fortran ### # Prerequisites *.d # Compiled Object files *.slo *.lo *.o *.obj # Precompiled Headers *.gch *.pch # Compiled Dynamic libraries *.so *.dylib *.dll # Fortran module files *.mod *.smod # Compiled Static libraries *.lai *.la *.a *.lib # Executables *.exe *.out *.app ### Python ### # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions # Distribution / packaging .Python build/ develop-eggs/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache .pytest_cache/ nosetests.xml coverage.xml *.cover .hypothesis/ # Translations *.mo *.pot # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule.* # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ ### Vim ### # swap .sw[a-p] .*.sw[a-p] # session Session.vim # temporary .netrwhist # auto-generated tag files tags .tags .tags_swap # End of https://www.gitignore.io/api/vim,emacs,python,fortran spack-* .ccls-cache/ .DS_Store BUILD/ !tools/fedora/dbcsr.spec ================================================ FILE: .gitmodules ================================================ [submodule "tools/build_utils/fypp"] path = tools/build_utils/fypp url = https://github.com/aradi/fypp.git ================================================ FILE: .packit.yaml ================================================ specfile_path: tools/fedora/dbcsr.spec files_to_sync: - src: tools/fedora/ dest: ./ delete: true filters: - "protect .git*" - "protect sources" - "protect changelog" - .packit.yaml upstream_package_name: dbcsr downstream_package_name: dbcsr upstream_tag_template: v{version} targets: - fedora-development-x86_64 - fedora-development-aarch64 _: # Job templates - &build-in-packit job: copr_build - &build-at-lecris <<: *build-in-packit owner: lecris jobs: - <<: *build-at-lecris trigger: release project: release - <<: *build-at-lecris trigger: commit branch: master project: nightly - <<: *build-in-packit trigger: pull_request - job: propose_downstream trigger: release dist_git_branches: - fedora-rawhide - job: koji_build trigger: commit dist_git_branches: - fedora-all - job: bodhi_update trigger: commit dist_git_branches: - fedora-branched ================================================ FILE: .pre-commit/check_header.py ================================================ #!/usr/bin/env python3 # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### import argparse import re import mmap import sys import pathlib from collections import defaultdict from os import path, listdir from contextlib import contextmanager TYPES = { "c_cpp": [".c", ".h", ".cc", ".hh", ".cxx", ".hxx", ".cpp", ".hpp", ".cu", ".cl"], "fortran": [".F", ".f", ".f90", ".f03"], "script": [".py", ".sh"], "fypp": [".fypp"], } # max number of lines allowed between header and top of file ALLOWED_LINES = 5 # some assumed max line length to terminate early for large files MAX_LINE_LENGTH = 128 @contextmanager def mmap_open(name, mode="r"): access = mmap.ACCESS_READ if mode == "r" else mmap.ACCESS_WRITE with open(name, mode + "b") as fhandle: fmapped = mmap.mmap(fhandle.fileno(), 0, access=access) yield fmapped fmapped.close() def check_header(header_dir, files, verbose=False): retval = 0 header_re = defaultdict(list) header_len = defaultdict(list) for headerfile in listdir(header_dir): headertype = pathlib.Path(headerfile).stem if headertype in TYPES: with open(path.join(header_dir, headerfile), "rb") as fhandle: header_content = fhandle.read() header_re[headertype].append(re.compile(re.escape(header_content))) header_len[headertype].append(len(header_content)) else: print("no matching headerfile to file extensions") sys.exit(1) ext_map = {e: t for t, exts in TYPES.items() for e in exts} for fpath in files: _, fext = path.splitext(fpath) if fext not in ext_map: if verbose: print("? {} ... unknown file type, ignoring".format(fpath)) continue with mmap_open(fpath) as fmapped: header_type = ext_map[fext] for h_re, h_len in zip(header_re[header_type], header_len[header_type]): match = h_re.search(fmapped, 0, ALLOWED_LINES * MAX_LINE_LENGTH + h_len) if match: break if not match: print("✗ {} ... required header not found".format(fpath)) retval = 1 continue lines_above = fmapped[0 : match.start()].splitlines() if len(lines_above) > ALLOWED_LINES: print( "✗ {} ... header not within first {} lines".format( fpath, ALLOWED_LINES ) ) retval = 1 continue if verbose: print("✓ {}".format(fpath)) sys.exit(retval) if __name__ == "__main__": parser = argparse.ArgumentParser(description="Check files for header presence") parser.add_argument( "files", metavar="FILE", type=str, nargs="+", help="files to check" ) parser.add_argument("--verbose", "-v", action="store_true", default=False) args = parser.parse_args() header_dir = path.join(path.dirname(path.abspath(__file__)), "headers") check_header(header_dir, args.files, args.verbose) ================================================ FILE: .pre-commit/clang-format-fypp.sh ================================================ #!/usr/bin/env bash #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### # clang-format change FYPP directives, need to revert the changes. function sed_darwin() { sed -i "" "$@" } function sed_linux() { sed -i "$@" } function main() { local files="" for i in "$@"; do case $i in -*|--*) ;; *) files+="$i " ;; esac done clang-format "$@" # Fix FYPP directives uname="$(uname -s)" case "${uname}" in Darwin*) sed_fcn=sed_darwin ;; *) sed_fcn=sed_linux ;; esac for i in ${files}; do ${sed_fcn} -e '/\${$/ { N; s/\${\n[[:space:]]*/\${/; }' "$i" ${sed_fcn} -e 's/#[[:space:]]*: /#:/g' -e 's/} \$/}\$/g' "$i" done } main "$@" ================================================ FILE: .pre-commit/headers/c_cpp.1 ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ ================================================ FILE: .pre-commit/headers/c_cpp.2 ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ ================================================ FILE: .pre-commit/headers/c_cpp.3 ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ ================================================ FILE: .pre-commit/headers/fortran.1 ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! ================================================ FILE: .pre-commit/headers/fortran.2 ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! ================================================ FILE: .pre-commit/headers/fypp.1 ================================================ #!--------------------------------------------------------------------------------------------------! #! Copyright (C) by the DBCSR developers group - All rights reserved ! #! This file is part of the DBCSR library. ! #! ! #! For information on the license, see the LICENSE file. ! #! For further information please visit https://dbcsr.cp2k.org ! #! SPDX-License-Identifier: GPL-2.0+ ! #!--------------------------------------------------------------------------------------------------! ================================================ FILE: .pre-commit/headers/script.1 ================================================ #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### ================================================ FILE: .pre-commit/headers/script.2 ================================================ #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: BSD-3-Clause # #################################################################################################### ================================================ FILE: .pre-commit-config.yaml ================================================ default_language_version: python: python3 exclude: '^tools/(build_utils/fypp)' fail_fast: false minimum_pre_commit_version: 3.2.0 repos: - repo: https://github.com/astral-sh/ruff-pre-commit rev: 'v0.15.13' hooks: - id: ruff args: [ --fix, --exit-non-zero-on-fix ] exclude: >- (?x)^( .cp2k/.*| )$ - repo: https://github.com/psf/black-pre-commit-mirror rev: 26.5.0 hooks: - id: black name: Reformat Python files with the black code formatter files: '^.*(/PACKAGE)|(\.py)$' - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 hooks: - id: check-ast - id: check-yaml - id: check-symlinks - id: trailing-whitespace - repo: https://github.com/fortran-lang/fprettify rev: v0.3.7 hooks: - id: fprettify - repo: https://github.com/cheshirekow/cmake-format-precommit rev: v0.6.13 hooks: - id: cmake-format exclude: >- (?x)^( cmake/(CheckFortranSourceRuns|CompilerConfiguration|Find(BLAS|LAPACK)|GetGitRevisionDescription).cmake| )$ - repo: local hooks: - id: check-header name: check file headers entry: ./.pre-commit/check_header.py --verbose language: script types: [text] exclude: >- (?x)^( tools/.*| .cp2k/.*| .cmake-format.py| src/acc/hip/dbcsr_hip_profiling.F| )$ - id: check-doxygen-tags name: no doxygen tags present entry: '^\s*!>' language: pygrep types: [text] - id: clang-format-fypp name: clang-format-fypp description: Format files with ClangFormat, ignore FYPP directives. entry: ./.pre-commit/clang-format-fypp.sh language: python files: \.(c|cc|cxx|cpp|cl|frag|glsl|h|hpp|hxx|ih|ispc|ipp|java|js|m|mm|proto|textproto|vert)$ args: ['-i', '-fallback-style=none', '--style=file'] # specify version since clang-format is not stable version-to-version additional_dependencies: ['clang-format~=19.1.0'] ================================================ FILE: .ruff.toml ================================================ select = ["E", "F", "B"] line-length = 128 ignore = ["B905"] ================================================ FILE: AUTHORS ================================================ Alfio Lazzaro Andreas Gloeß Christian Pousa Dorothea Golze Fawzi Mohamed Florian Schiffmann Gina Sitaraman Harald Forbert H. Bani-Hashemian Iain Bethune Ilia Sivkov Jan Wilhelm Joost VandeVondele Juerg Hutter Leopold Grinberg Lianheng Tong Marcella Mauri-Iannuzzi Matthias Krack Maximilien Ambroise Nico Holmberg Ole Schuett Patrick Seewald Samuel Andermatt Sergey Chulkov Shoshana Alice Jakobovits Teodoro Laino Thomas Chassaing Urban Borstnik Valery Weber Vladimir Rybkin ================================================ FILE: CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.22) set(CMAKE_INTERPROCEDURAL_OPTIMIZATION FALSE FORCE) # include our cmake snippets set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) # DBCSR's source directory set(DBCSR_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) # ================================================================================================= # REQUIRE OUT-OF-SOURCE BUILDS file(TO_CMAKE_PATH "${PROJECT_BINARY_DIR}/CMakeLists.txt" LOC_PATH) if (EXISTS "${LOC_PATH}") message( FATAL_ERROR "You cannot build in a source directory (or any directory with a CMakeLists.txt file). Please make a build subdirectory." ) endif () # ================================================================================================= # PROJECT AND VERSION include(GetGitRevisionDescription) git_describe(GIT_DESC) if (GIT_DESC) string(REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${GIT_DESC}") string(REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${GIT_DESC}") string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${GIT_DESC}") string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+(.*)" "\\1" VERSION_GIT "${GIT_DESC}") git_local_changes(GIT_STATE) if ("${GIT_STATE}" STREQUAL "DIRTY") set(VERSION_GIT "${VERSION_GIT}-dirty") endif () execute_process( COMMAND git log -1 --format=%ai WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_COMMIT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) # take only the date from the git timestamp: string(REGEX REPLACE "^([0-9\\-]+) .*" "\\1" VERSION_DATE "${GIT_COMMIT_DATE}") else () file(STRINGS VERSION VERSION_INFO) foreach (line ${VERSION_INFO}) if (${line} MATCHES "^([^#].*)=[ \t]*(.*)$") set(key ${CMAKE_MATCH_1}) set(value ${CMAKE_MATCH_2}) string(REGEX REPLACE "[ \t\n]+$" "" key "${key}") string(REGEX REPLACE "[ \t\n]+$" "" value "${value}") set(VERSION_${key} "${value}") continue() endif () endforeach () endif () project( dbcsr DESCRIPTION "DBCSR: Distributed Block Compressed Sparse Row matrix library (https://dbcsr.cp2k.org)" ) set(dbcsr_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${VERSION_GIT}) set(dbcsr_APIVERSION ${VERSION_MAJOR}.${VERSION_MINOR}) # ================================================================================================= # OPTIONS include(CMakeDependentOption) option(BUILD_SHARED_LIBS "Build shared libraries" OFF) option(USE_OPENMP "Build with OpenMP support" ON) option(USE_MPI "Build with MPI support" ON) option(USE_MPI_F08 "Build with the mpi_f08 module support" OFF) option(BUILD_TESTING "Build dbcsr unit tests" OFF) cmake_dependent_option( WITH_C_API "Build the C API (ISO_C_BINDINGS)" ON "USE_MPI" OFF )# the ISO_C_BINDINGS require MPI unconditionally cmake_dependent_option(WITH_EXAMPLES "Build the examples" ON "USE_MPI" OFF )# all examples require MPI set(TEST_MPI_RANKS 2 CACHE STRING "Number of MPI ranks for testing") set(TEST_OMP_THREADS 2 CACHE STRING "Number of OpenMP threads for testing") set(USE_SMM "auto" CACHE STRING "Small Matrix Multiplication implementation to use (default: auto)") set_property(CACHE USE_SMM PROPERTY STRINGS auto blas libxsmm) set(USE_ACCEL "" CACHE STRING "Build with acceleration support (default: none)") set_property(CACHE USE_ACCEL PROPERTY STRINGS "" opencl cuda hip) set(SUPPORTED_CUDA_ARCHITECTURES K20X K40 K80 P100 V100 A100 H100) set(SUPPORTED_HIP_ARCHITECTURES Mi50 Mi100 Mi250 Mi300 Mi350) set(WITH_GPU $,"","P100"> CACHE STRING "Select GPU arch. and embed parameters (default: CUDA/HIP=P100, OPENCL=all)" ) set(WITH_GPU_PARAMS "${WITH_GPU}") set_property(CACHE WITH_GPU PROPERTY STRINGS ${SUPPORTED_CUDA_ARCHITECTURES} ${SUPPORTED_HIP_ARCHITECTURES}) option(WITH_CUDA_PROFILING "Enable profiling within CUDA" OFF) option(WITH_HIP_PROFILING "Enable profiling within HIP" OFF) # ================================================================================================= # LANGUAGES AND TESTING enable_language(Fortran) if ((WITH_C_API AND WITH_EXAMPLES) OR (NOT USE_ACCEL MATCHES "none")) enable_language(CXX) enable_language(C) if (NOT DEFINED CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) endif () if (NOT DEFINED CMAKE_C_STANDARD) set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) endif () endif () # =================================== OpenMP if (USE_OPENMP) find_package(OpenMP REQUIRED) endif () # =================================== LIBXSMM (rely on pkg-config) if (USE_SMM MATCHES "libxsmm|auto") if (USE_SMM MATCHES "libxsmm") set(LIBXSMM_REQUIRED "REQUIRED") endif () find_package(PkgConfig ${LIBXSMM_REQUIRED}) if (USE_OPENMP) if (BUILD_SHARED_LIBS OR USE_SMM MATCHES "libxsmm-shared") pkg_check_modules(LIBXSMMEXT IMPORTED_TARGET GLOBAL libxsmmext-shared) else () pkg_check_modules(LIBXSMMEXT IMPORTED_TARGET GLOBAL libxsmmext-static) endif () if (NOT LIBXSMMEXT_FOUND) pkg_check_modules(LIBXSMMEXT ${LIBXSMM_REQUIRED} IMPORTED_TARGET GLOBAL libxsmmext) endif () endif () if (BUILD_SHARED_LIBS OR USE_SMM MATCHES "libxsmm-shared") pkg_check_modules(LIBXSMM IMPORTED_TARGET GLOBAL libxsmmf-shared) else () pkg_check_modules(LIBXSMM IMPORTED_TARGET GLOBAL libxsmmf-static) endif () if (NOT LIBXSMM_FOUND) pkg_check_modules(LIBXSMM ${LIBXSMM_REQUIRED} IMPORTED_TARGET GLOBAL libxsmmf) endif () endif () # =================================== SMM (Small Matrix-Matrix multiplication) if (USE_SMM MATCHES "blas" OR (USE_SMM MATCHES "auto" AND NOT LIBXSMM_FOUND)) if (USE_ACCEL MATCHES "opencl") message(FATAL_ERROR "OpenCL requires USE_SMM=libxsmm") endif () message(STATUS "Using BLAS for Small Matrix Multiplication") elseif (USE_SMM MATCHES "libxsmm" OR USE_SMM MATCHES "auto") message(STATUS "Using libxsmm for Small Matrix Multiplication") else () message(FATAL_ERROR "Unknown SMM library specified") endif () # =================================== BLAS & LAPACK, PkgConfig find_package(LAPACK REQUIRED) # needed for some of the integrated test routines, # also calls find_package(BLAS) # =================================== Python this module looks preferably for # version 3 of Python. If not found, version 2 is searched. In CMake 3.15, if a # python virtual environment is activated, it will search the virtual # environment for a python interpreter before searching elsewhere in the system. # In CMake <3.15, the system is searched before the virtual environment. if (NOT Python_EXECUTABLE) # If the python interpreter is not specified (command line), try finding it: find_package( Python COMPONENTS Interpreter REQUIRED) endif () # =================================== MPI if (USE_MPI) get_property(REQUIRED_MPI_COMPONENTS GLOBAL PROPERTY ENABLED_LANGUAGES) if (NOT CMAKE_CROSSCOMPILING) # when cross compiling, assume the users know # what they are doing set(MPI_DETERMINE_LIBRARY_VERSION TRUE) endif () find_package( MPI COMPONENTS ${REQUIRED_MPI_COMPONENTS} REQUIRED) if (NOT MPI_Fortran_HAVE_F90_MODULE) message( FATAL_ERROR "\ The listed MPI implementation does not provide the required mpi.mod interface. \ When using the GNU compiler in combination with Intel MPI, please use the \ Intel MPI compiler wrappers. Check the INSTALL.md for more information.") endif () if (USE_MPI_F08) if (NOT MPI_Fortran_HAVE_F08_MODULE) message( FATAL_ERROR "The listed MPI implementation does not provide the required mpi_f08.mod interface." ) endif () endif () if ("${MPI_Fortran_LIBRARY_VERSION_STRING}" MATCHES "Open MPI v2.1" OR "${MPI_Fortran_LIBRARY_VERSION_STRING}" MATCHES "Open MPI v3.1") message( WARNING "RMA with ${MPI_Fortran_LIBRARY_VERSION_STRING} is not supported due to issues with its implementation." " Please use a newer version of OpenMPI or switch to MPICH if you plan on using MPI-RMA." ) endif () endif () # =================================== GPU backends if (NOT USE_ACCEL MATCHES "none") set(DBCSR_ACC_HEADER acc/acc.h acc/acc_bench.h acc/acc_libsmm.h) endif () if (USE_ACCEL MATCHES "opencl") find_package(OpenCL REQUIRED) set(DBCSR_OPENCL_SCRIPT ${DBCSR_SOURCE_DIR}/acc/opencl/acc_opencl.sh) set(DBCSR_OPENCL_COMMON acc/opencl/common/opencl_atomics.h acc/opencl/common/opencl_common.h) list(APPEND DBCSR_ACC_HEADER acc/opencl/smm/opencl_libsmm.h acc/opencl/acc_opencl.h) endif () if (USE_ACCEL MATCHES "cuda|hip") set(GPU_ARCH_NUMBER_K20X 35) set(GPU_ARCH_NUMBER_K40 35) set(GPU_ARCH_NUMBER_K80 37) set(GPU_ARCH_NUMBER_P100 60) set(GPU_ARCH_NUMBER_V100 70) set(GPU_ARCH_NUMBER_A100 80) set(GPU_ARCH_NUMBER_H100 90) set(GPU_ARCH_NUMBER_Mi50 gfx906) set(GPU_ARCH_NUMBER_Mi100 gfx908) set(GPU_ARCH_NUMBER_Mi250 gfx90a) set(GPU_ARCH_NUMBER_Mi300 gfx942) set(GPU_ARCH_NUMBER_Mi350 gfx950) endif () if (USE_ACCEL MATCHES "cuda") enable_language(CUDA) find_package(CUDAToolkit REQUIRED) if (NOT DEFINED CMAKE_CUDA_STANDARD) set(CMAKE_CUDA_STANDARD 14) set(CMAKE_CUDA_STANDARD_REQUIRED ON) endif () if (CUDAToolkit_VERSION LESS 5.5) message(FATAL_ERROR "CUDA version >= 5.5 is required.") endif () # Make sure the GPU required is supported list(FIND SUPPORTED_CUDA_ARCHITECTURES ${WITH_GPU} GPU_SUPPORTED) if (GPU_SUPPORTED EQUAL -1) message( FATAL_ERROR "GPU architecture requested (${WITH_GPU}) is not supported. " "Please choose from: ${SUPPORTED_CUDA_ARCHITECTURES}") endif () # set cuda architecture number and compilation flags set(ACC_ARCH_NUMBER ${GPU_ARCH_NUMBER_${WITH_GPU}}) message(STATUS "GPU target architecture: " ${WITH_GPU}) message(STATUS "Kernel parameters: " ${WITH_GPU_PARAMS}) message(STATUS "GPU architecture number: " ${ACC_ARCH_NUMBER}) message(STATUS "GPU profiling enabled: " ${WITH_CUDA_PROFILING}) endif () if (USE_ACCEL MATCHES "hip") if (NOT CMAKE_HIP_ARCHITECTURES) set(CMAKE_HIP_ARCHITECTURES OFF) endif () enable_language(HIP) if (NOT DEFINED CMAKE_HIP_STANDARD) set(CMAKE_HIP_STANDARD 14) set(CMAKE_HIP_STANDARD_REQUIRED ON) endif () # Make sure the GPU required is supported list(FIND SUPPORTED_HIP_ARCHITECTURES ${WITH_GPU} GPU_SUPPORTED) if (GPU_SUPPORTED EQUAL -1) message( FATAL_ERROR "GPU architecture requested (${WITH_GPU}) is not supported. " "Please choose from: ${SUPPORTED_HIP_ARCHITECTURES}") endif () # ROCm is typically installed in /opt/rocm; otherwise let the user set # ROCM_PATH as an environment variable or define. if (NOT DEFINED ROCM_PATH) if (NOT DEFINED ENV{ROCM_PATH}) set(ROCM_PATH "/opt/rocm" CACHE PATH "Path to ROCm installation") else () set(ROCM_PATH $ENV{ROCM_PATH} CACHE PATH "Path to ROCm installation") endif () endif () # Notice: this is not FindHIP.cmake for hip language support, but # hip-config.cmake which contains targets like hip::host for jitting. find_package(hip CONFIG REQUIRED HINTS ${ROCM_PATH}) message(STATUS "Build with HIP ${hip_VERSION}") if (hip_VERSION LESS 4.4.0) message(FATAL_ERROR "HIP version >= 4.4.0 is required.") endif () set(ACC_ARCH_NUMBER ${GPU_ARCH_NUMBER_${WITH_GPU}}) message(STATUS "GPU target architecture: " ${WITH_GPU}) message(STATUS "Kernel parameters: " ${WITH_GPU_PARAMS}) message(STATUS "GPU architecture number: " ${ACC_ARCH_NUMBER}) message(STATUS "GPU profiling enabled: " ${WITH_HIP_PROFILING}) # =================================== BLAS on GPU backend find_package(hipblas CONFIG REQUIRED HINTS ${ROCM_PATH}) # =================================== HIPRTC find_package(hiprtc REQUIRED) endif () # ================================================================================================= # OPTION HANDLING # make sure that the default build type is RELEASE set(default_build_type "Release") if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message( STATUS "Setting build type to '${default_build_type}' as none was specified.") set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build, options are: Debug Release Coverage." FORCE) # set the possible values of build type for cmake-gui set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "Coverage") endif () # compiler configuration could have impacted package discovery (above) include(CompilerConfiguration) include(CheckCompilerSupport) # subdirectories add_subdirectory(${DBCSR_SOURCE_DIR}) if (BUILD_TESTING) include(CTest) add_subdirectory(tests) endif () if (WITH_EXAMPLES) add_subdirectory(examples) endif () add_subdirectory(docs) include(CustomTargets) # Disable LTO set(CMAKE_INTERPROCEDURAL_OPTIMIZATION FALSE FORCE) ================================================ FILE: CONTRIBUTING.md ================================================ # Contributing to DBCSR The core of DBCSR is written in Fortran. All other languages must be supported through bindings. There is a single [API](./src/dbcsr_api.F) file for DBCSR, which is provided for external usage only. **Do not use the API for any internal DBCSR development!** Packages build on top of DBCSR, for example [DBCSR Tensors](./src/tensors), **must only use** the DBCSR API. Note that any change in the APIs will require a major release of the library. We support CMake for compilation, please keep the build system updated when adding/removing files. When adding new functions, it is extremely important to provide simple test programs, aka "unit tests", to check whether these functions are performing as they should. The directory [test](./tests) serves as infrastructure for that. If you do not feel comfortable integrating these tests with the build system, please notify the other developers. Having examples (under the directory [examples](./examples)) is also appreciated. They must be independent of the DBCSR compilation and only use the DBCSR APIs. DBCSR developers can find additional information on the [Development](https://github.com/cp2k/dbcsr/wiki/Development) wiki page. ## Fortran Code conventions The code is automatically formatted (via pre-commit hooks) by the [prettify tool](https://github.com/pseewald/fprettify/). Please make sure that you follow the following code conventions (based on [CP2K conventions](https://www.cp2k.org/dev:codingconventions)): 1. Every `USE` statement should have an `ONLY:` clause, which lists the imported symbols. 2. Every `OMP PARALLEL` region should declare `default(none)`. 3. Every static variable should be marked with the `SAVE` attribute. 4. Every Fortran module should contain the line `IMPLICIT NONE`. 5. Every conversion that might change value should be explicit. 6. Each `.F` file should contain either a `PROGRAM` or a single `MODULE`, whose name must start with the `dbcsr_` suffix and matches the filename. Then, it should start with the DBCSR header. Note that the name of the modules must be unique, even across different directories! 7. Use the routines from [MPI wrappers](./src/mpi) instead of calling MPI directly. 8. Don't use `UNIT=*` in `WRITE` or `PRINT` statements. Instead, request a unit from the logger: `iw=dbcsr_logger_get_default_unit_nr()` and write only if you actually received a unit: `IF(iw>0) WRITE (UNIT=iw, ,,,)`. 9. Avoid to use `STOP`. Prefer the DBCSR error handlers: `DBCSR_WARN`, `DBCSR_ABORT`, `DBCSR_ASSERT`. 10. Each preprocessor flag should start with two underscores and be documented in the [documentation](./docs/guide/3-developer-guide/3-programming/1-overview/index.md#list-of-macros-used-in-the-code). 11. All routines in the API must start with the `dbcsr_` namespace. For submodules API (e.g. [DBCSR Tensors](./src/tensors)), each function has to start with the `dbcsr__` namespace. 12. If you are including files (i.e. macro `#include`), note that the base directory is `src`, please use relative path to it (e.g. `#include "base/dbcsr_base_uses.f90"` instead of `#include "../base/dbcsr_base_uses.f90"`). 13. All Fortran keywords (`FUNCTION`, `SUBROUTINE`, data types...) must be in capital letters. **Most important, please avoid committing dead code and useless comments!** ================================================ FILE: DBCSR.md ================================================ --- project: DBCSR project_github: https://github.com/cp2k/dbcsr project_download: https://github.com/cp2k/dbcsr/releases project_website: https://dbcsr.cp2k.org summary: ![DBCSR](media/logo/logo.png) {: style="text-align: center"} author: DBCSR Authors github: https://github.com/cp2k/dbcsr/blob/master/AUTHORS fpp_extensions: F fixed_extensions: extensions: F preprocessor: cpp -traditional-cpp -E -Wno-invalid-pp-token include: ../src predocmark: > media_dir: @CMAKE_SOURCE_DIR@/docs/media md_base_dir: @CMAKE_SOURCE_DIR@ page_dir: @CMAKE_SOURCE_DIR@/docs/guide src_dir: ./src ./tests ./examples output_dir: @CMAKE_BINARY_DIR@/doc docmark_alt: # predocmark_alt: < display: public protected private source: true graph: false search: false favicon: @CMAKE_SOURCE_DIR@/docs/media/logo/logo.png version: @dbcsr_VERSION@ exclude: Makefile extra_filetypes: cpp # --- -------------------- DBCSR stands for **D**istributed **B**locked **C**ompressed **S**parse **R**ow. DBCSR is a library designed to efficiently perform sparse matrix-matrix multiplication, among other operations. It is MPI and OpenMP parallel and can exploit Nvidia and AMD GPUs via CUDA and HIP. To get started with DBCSR, go to - [Installation guide](page/2-user-guide/1-installation/index.html) - [User guide](page/2-user-guide/index.html) - [Developer guide](page/3-developer-guide/index.html) License ------- DBCSR's source code and related files and documentation are distributed under GPL. See the [LICENSE](https://github.com/cp2k/dbcsr/blob/develop/LICENSE) file for more details. How to cite ----------------- To cite DBCSR, use the following paper ```latex @article{dbcsr, title = {{Sparse Matrix Multiplication: The Distributed Block-Compressed Sparse Row Library}}, journal = {Parallel Computing}, volume = {40}, number = {5-6}, year = {2014}, issn = {0167-8191}, author = {Urban Borstnik and Joost VandeVondele and Valery Weber and Juerg Hutter} } ``` To cite the DBCSR software library, use: ```latex @misc{dbcsr-software, author = {The CP2K Developers Group}, title = {{DBCSR: Distributed Block Compressed Sparse Row matrix library}}, publisher = {GitHub}, journal = {GitHub repository}, year = {2020}, url = {https://github.com/cp2k/dbcsr} } ``` Contributing ----------------- Your contribution to the project is welcome! Please see [DBCSR's contribution guidelines](https://github.com/cp2k/dbcsr/blob/develop/CONTRIBUTING.md) and [this wiki page](https://github.com/cp2k/dbcsr/wiki/Development). ================================================ FILE: LICENSE ================================================ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. DBCSR: Distributed Block Compressed Sparse Row matrix library Copyright (C) by the DBCSR developers group - All rights reserved This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ================================================ FILE: README.md ================================================ # DBCSR: Distributed Block Compressed Sparse Row matrix library [![Build Status Linux](https://github.com/cp2k/dbcsr/actions/workflows/testing-linux.yml/badge.svg)](https://github.com/cp2k/dbcsr/actions/workflows/testing-linux.yml) [![Build Status MacOS](https://github.com/cp2k/dbcsr/actions/workflows/testing-macos.yml/badge.svg)](https://github.com/cp2k/dbcsr/actions/workflows/testing-macos.yml) [![Build Status Latest GCC](https://github.com/cp2k/dbcsr/actions/workflows/testing-gcc.yml/badge.svg)](https://github.com/cp2k/dbcsr/actions/workflows/testing-gcc.yml) [![codecov](https://codecov.io/gh/cp2k/dbcsr/branch/develop/graph/badge.svg)](https://codecov.io/gh/cp2k/dbcsr) [![Licence](https://img.shields.io/badge/license-GPL%20v2.0-blue.svg)](./LICENSE) [![GitHub Releases](https://img.shields.io/github/release-pre/cp2k/dbcsr.svg)](https://github.com/cp2k/dbcsr/releases) DBCSR is a library designed to efficiently perform sparse matrix-matrix multiplication, among other operations. It is MPI and OpenMP parallel and can exploit Nvidia and AMD GPUs via CUDA and HIP.

## How to Install Follow the [installation guide](https://cp2k.github.io/dbcsr/develop/page/2-user-guide/1-installation/index.html). ## Documentation Documentation is [available online](https://cp2k.github.io/dbcsr/) for the latest release. ## How to Cite To cite DBCSR, use the following paper ```latex @article{dbcsr, title = {{Sparse Matrix Multiplication: The Distributed Block-Compressed Sparse Row Library}}, journal = {Parallel Computing}, volume = {40}, number = {5-6}, year = {2014}, issn = {0167-8191}, author = {Urban Borstnik and Joost VandeVondele and Valery Weber and Juerg Hutter} } ``` To cite the DBCSR software library, use: ```latex @misc{dbcsr-software, author = {The CP2K Developers Group}, title = {{DBCSR: Distributed Block Compressed Sparse Row matrix library}}, publisher = {GitHub}, journal = {GitHub repository}, year = {2022}, url = {https://github.com/cp2k/dbcsr} } ``` ## Contributing to DBCSR Your contribution to the project is welcome! Please see [DBCSR's contribution guidelines](./CONTRIBUTING.md) and this [wiki page](https://github.com/cp2k/dbcsr/wiki/Development). For any help, please notify the other developers. ================================================ FILE: VERSION ================================================ MAJOR = 2 MINOR = 9 PATCH = 1 # A specific DATE (YYYY-MM-DD) fixes an official release, otherwise # it is considered Development version. DATE = 2025-12-19 ================================================ FILE: cmake/CheckCompilerSupport.cmake ================================================ include(CheckFortranSourceCompiles) set(CHECK_PROGRAMS f2008-norm2.f90 f2008-block_construct.f90 f2008-contiguous.f90 f95-reshape-order-allocatable.f90) set(_saved_fortran_flags "${CMAKE_Fortran_FLAGS}") set(CMAKE_Fortran_FLAGS "") set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) foreach (prog ${CHECK_PROGRAMS}) get_filename_component(prog_ext ${prog} EXT) # get the src extension to pass # along get_filename_component(prog_name ${prog} NAME_WE) file(READ "${CMAKE_CURRENT_LIST_DIR}/compiler-tests/${prog}" prog_src) CHECK_Fortran_SOURCE_COMPILES("${prog_src}" "${prog_name}" SRC_EXT "${prog_ext}") if (NOT ${prog_name}) message( FATAL_ERROR "Your compiler does not support all required F2008 features") endif () endforeach () unset(CMAKE_TRY_COMPILE_TARGET_TYPE) set(CMAKE_Fortran_FLAGS "${_saved_fortran_flags}") ================================================ FILE: cmake/CompilerConfiguration.cmake ================================================ if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffree-form -std=f2008ts -fimplicit-none -Werror=aliasing -Werror=ampersand -Werror=c-binding-type -Werror=intrinsic-shadow -Werror=intrinsics-std -Werror=line-truncation -Werror=tabs -Werror=target-lifetime -Werror=underflow -Werror=unused-but-set-parameter -Werror=unused-but-set-variable -Werror=unused-variable -Werror=unused-dummy-argument -Werror=conversion -Werror=zerotrip -Wno-maybe-uninitialized -Werror=unused-parameter") if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10) # comparison against CXX version rather than GFortran version set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch") # required for 10+ (MPI wrap) else () set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Werror=argument-mismatch") # gcc 10+ has this automatically endif () if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13) # comparison against CXX version rather than GFortran version set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Wno-error=uninitialized") # false positive (allocatable array) endif () include(CheckFortranCompilerFlag) check_fortran_compiler_flag("-Wno-error=deprecated-openmp" _fc_has_deprecated_openmp) if (_fc_has_deprecated_openmp) set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Wno-error=deprecated-openmp") endif () set(CMAKE_Fortran_FLAGS_RELEASE "-O3 -g -funroll-loops") set(CMAKE_Fortran_FLAGS_COVERAGE "-O0 -g --coverage -fno-omit-frame-pointer -fcheck=all,no-array-temps -ffpe-trap=invalid,zero,overflow -fbacktrace -finit-real=snan -finit-integer=-42 -finit-derived -Werror=realloc-lhs -finline-matmul-limit=0 -Werror") set(CMAKE_Fortran_FLAGS_DEBUG "-O2 -ggdb -fno-omit-frame-pointer -fcheck=all -ffpe-trap=invalid,zero,overflow -fbacktrace -finit-real=snan -finit-integer=-42 -finit-derived -finline-matmul-limit=0 -fsanitize=undefined -fsanitize=address -fsanitize-recover=all -Wall -Wextra -Werror -Werror=realloc-lhs -Wno-error=array-temporaries -Wno-error=compare-reals -Wno-error=function-elimination -Wno-error=surprising") if ((NOT (USE_MPI)) OR (NOT ("${MPI_Fortran_LIBRARY_VERSION_STRING}" MATCHES "Open MPI"))) set(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -fsanitize=leak") endif () elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -free -stand=f18 -fpp -heap-arrays") set(CMAKE_Fortran_FLAGS_RELEASE "-O3 -g") set(CMAKE_Fortran_FLAGS_DEBUG "-O2 -debug") elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -free -stand f18 -fpp -heap-arrays") set(CMAKE_Fortran_FLAGS_RELEASE "-O3 -g") set(CMAKE_Fortran_FLAGS_DEBUG "-O2 -debug") elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "PGI") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mfreeform -Mextend -Mallocatable=03") # -Mallocatable=03: enable F2003+ assignment semantics set(CMAKE_Fortran_FLAGS_RELEASE "-fast") set(CMAKE_Fortran_FLAGS_DEBUG "-g") elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "NAG") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -f2008 -free -Warn=reallocation -Warn=subnormal") set(CMAKE_Fortran_FLAGS_RELEASE "-O2") set(CMAKE_Fortran_FLAGS_DEBUG "-g -C") if (NOT OpenMP_FOUND) set(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -gline") # -gline is only supported without OpenMP set(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -C=all") # some checks are not available with OpenMP endif () elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -f free -M3105 -ME7212") # -M3105: hide a false-positive warning about modified loop variables due to loop fusing, promote warning 7212 to an error set(CMAKE_Fortran_FLAGS_RELEASE "-O2 -G2") set(CMAKE_Fortran_FLAGS_DEBUG "-G2") set(CMAKE_Fortran_MODOUT_FLAG "-ef") # override to get lower-case module file names elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffree-form -std=f2018 -cpp") set(CMAKE_Fortran_FLAGS_RELEASE "-O3") set(CMAKE_Fortran_FLAGS_DEBUG "-O0 -g") elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "Flang") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffree-form -cpp") set(CMAKE_Fortran_FLAGS_RELEASE "-O3") set(CMAKE_Fortran_FLAGS_DEBUG "-O0 -g") else () message(WARNING "\ Unknown Fortran compiler, trying without any additional (optimization) flags.\n\ You will most likely have to specify extra options for free-form Fortran 2008 for your compiler!\n\ Please open an issue at https://github.com/cp2k/dbcsr/issues with the reported compiler name and the required flags.") message("-- CMAKE_Fortran_COMPILER_ID: " ${CMAKE_Fortran_COMPILER_ID}) message("-- CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER}) endif () if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -g -funroll-loops -Wall -Wextra -Werror -Wno-missing-field-initializers") set(CMAKE_CXX_FLAGS_COVERAGE "-O0 -g --coverage -Wall -Wextra -Werror -Wno-missing-field-initializers") set(CMAKE_CXX_FLAGS_DEBUG "-O2 -ggdb -Wall -Wextra -Werror -Wno-missing-field-initializers -fsanitize=undefined -fsanitize=address -fsanitize-recover=all") if ((NOT (USE_MPI)) OR (NOT ("${MPI_Fortran_LIBRARY_VERSION_STRING}" MATCHES "Open MPI"))) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=leak") endif () elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -funroll-loops") set(CMAKE_CXX_FLAGS_COVERAGE "-O0 -g --coverage") set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -funroll-loops") set(CMAKE_CXX_FLAGS_COVERAGE "-O0 -g --coverage") set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") set(CMAKE_EXE_LINKER_FLAGS_COVERAGE "-lgcov") # Apple's Clang needs an extra elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -g") set(CMAKE_CXX_FLAGS_DEBUG "-O0 -debug") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -g") set(CMAKE_CXX_FLAGS_DEBUG "-O0 -debug") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "PGI") set(CMAKE_CXX_FLAGS_RELEASE "-fast") set(CMAKE_CXX_FLAGS_DEBUG "-g") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Cray") set(CMAKE_CXX_FLAGS_RELEASE "-O3") set(CMAKE_CXX_FLAGS_DEBUG "-G2") if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9) # prevent deallocation failures due to tcmalloc's free with glibc's aligned_alloc, see https://bugzilla.redhat.com/show_bug.cgi?id=1569391 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -h system_alloc") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -h system_alloc") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -h system_alloc") # since the detection of the implicitly linked libraries occurs before we can intervene, filter them out again list(FILTER CMAKE_C_IMPLICIT_LINK_LIBRARIES EXCLUDE REGEX "tcmalloc") list(FILTER CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES EXCLUDE REGEX "tcmalloc") endif () # OpenACC support with CCE is EOL: causes https://github.com/cp2k/dbcsr/issues/261 # eventually check compiler version (similar to -h system_alloc) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -hnoacc -h nomessage=1234") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -hnoacc -h nomessage=1234") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -hnoacc -M1234") else () message(WARNING "\ Unknown C++ compiler, trying without any additional (optimization) flags.\n\ You may have to specify flags for C++11/14 support manually.\n\ Please open an issue at https://github.com/cp2k/dbcsr/issues with the reported compiler name and the required flags.") message("-- CMAKE_CXX_COMPILER_ID: " ${CMAKE_CXX_COMPILER_ID}) message("-- CMAKE_CXX_COMPILER full path: " ${CMAKE_CXX_COMPILER}) endif () # inherit C flags from CXX set(CMAKE_C_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE}) set(CMAKE_C_FLAGS_COVERAGE ${CMAKE_CXX_FLAGS_COVERAGE}) set(CMAKE_C_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) ================================================ FILE: cmake/CustomTargets.cmake ================================================ # ================================================================================================= # BUILD DISTRIBUTION set(ARCHIVE_NAME "${CMAKE_PROJECT_NAME}-${dbcsr_VERSION}") add_custom_target( dist COMMENT "Building distribution: ${ARCHIVE_NAME}" COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/dist" COMMAND git archive-all "${CMAKE_BINARY_DIR}/dist/${ARCHIVE_NAME}.tar.gz" COMMAND ${CMAKE_COMMAND} -E echo "SHA512 Digests:" COMMAND ${CMAKE_COMMAND} -E sha512sum "${CMAKE_BINARY_DIR}/dist/${ARCHIVE_NAME}.tar.gz" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) # ================================================================================================= # LCOV - COVERAGE REPORTS GENERATION find_program( LCOV_EXE lcov DOC "path to the lcov executable (required to generate coverage reports)") find_program( GENHTML_EXE genhtml DOC "path to the genhtml executable (required to generate HTML coverage reports)" ) set(LCOV_ARGS CACHE STRING "specify additional arguments to pass to lcov for cov-info") add_custom_target( cov-info COMMAND "${LCOV_EXE}" --directory "${CMAKE_BINARY_DIR}" --base-dir "${CMAKE_SOURCE_DIR}" --no-external --capture ${LCOV_ARGS} --output-file coverage.info COMMAND "${LCOV_EXE}" --list coverage.info VERBATIM BYPRODUCTS coverage.info COMMENT "Generate coverage.info using lcov") add_custom_target( cov-genhtml COMMAND "${GENHTML_EXE}" coverage.info --output-directory cov-html COMMENT "Generate a HTML-based coverage report using lcov in ${CMAKE_BINARY_DIR}/cov-html" VERBATIM) # Note: this directory will not be cleaned by `cmake --build .. -- # clean` add_dependencies(cov-genhtml cov-info) ================================================ FILE: cmake/GetGitRevisionDescription.cmake ================================================ # - Returns a version string from Git # # These functions force a re-configure on each git commit so that you can # trust the values of the variables in your build system. # # get_git_head_revision( [ ...]) # # Returns the refspec and sha hash of the current head revision # # git_describe( [ ...]) # # Returns the results of git describe on the source tree, and adjusting # the output so that it tests false if an error occurs. # # git_get_exact_tag( [ ...]) # # Returns the results of git describe --exact-match on the source tree, # and adjusting the output so that it tests false if there was no exact # matching tag. # # git_local_changes() # # Returns either "CLEAN" or "DIRTY" with respect to uncommitted changes. # Uses the return code of "git diff-index --quiet HEAD --". # Does not regard untracked files. # # Requires CMake 2.6 or newer (uses the 'function' command) # # Original Author: # 2009-2010 Ryan Pavlik # http://academic.cleardefinition.com # Iowa State University HCI Graduate Program/VRAC # # Copyright Iowa State University 2009-2010. # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) if(__get_git_revision_description) return() endif() set(__get_git_revision_description YES) # We must run the following at "include" time, not at function call time, # to find the path to this module rather than the path to a calling list file get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH) function(get_git_head_revision _refspecvar _hashvar) set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}") set(GIT_DIR "${GIT_PARENT_DIR}/.git") while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}") get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH) if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT) # We have reached the root directory, we are not in git set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE) set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE) return() endif() set(GIT_DIR "${GIT_PARENT_DIR}/.git") endwhile() # check if this is a submodule if(NOT IS_DIRECTORY ${GIT_DIR}) file(READ ${GIT_DIR} submodule) string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule}) get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH) get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE) endif() if(NOT IS_DIRECTORY "${GIT_DIR}") file(READ ${GIT_DIR} worktree) string(REGEX REPLACE "gitdir: (.*)worktrees(.*)\n$" "\\1" GIT_DIR ${worktree}) endif() set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data") if(NOT EXISTS "${GIT_DATA}") file(MAKE_DIRECTORY "${GIT_DATA}") endif() if(NOT EXISTS "${GIT_DIR}/HEAD") return() endif() set(HEAD_FILE "${GIT_DATA}/HEAD") configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY) configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in" "${GIT_DATA}/grabRef.cmake" @ONLY) include("${GIT_DATA}/grabRef.cmake") set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE) set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE) endfunction() function(git_describe _var) if(NOT GIT_FOUND) find_package(Git QUIET) endif() get_git_head_revision(refspec hash) if(NOT GIT_FOUND) set(${_var} "GIT-NOTFOUND" PARENT_SCOPE) return() endif() if(NOT hash) set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE) return() endif() # TODO sanitize #if((${ARGN}" MATCHES "&&") OR # (ARGN MATCHES "||") OR # (ARGN MATCHES "\\;")) # message("Please report the following error to the project!") # message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}") #endif() #message(STATUS "Arguments to execute_process: ${ARGN}") execute_process(COMMAND "${GIT_EXECUTABLE}" describe ${hash} ${ARGN} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" RESULT_VARIABLE res OUTPUT_VARIABLE out ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) if(NOT res EQUAL 0) set(out "${out}-${res}-NOTFOUND") endif() set(${_var} "${out}" PARENT_SCOPE) endfunction() function(git_get_exact_tag _var) git_describe(out --exact-match ${ARGN}) set(${_var} "${out}" PARENT_SCOPE) endfunction() function(git_local_changes _var) if(NOT GIT_FOUND) find_package(Git QUIET) endif() get_git_head_revision(refspec hash) if(NOT GIT_FOUND) set(${_var} "GIT-NOTFOUND" PARENT_SCOPE) return() endif() if(NOT hash) set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE) return() endif() execute_process(COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD -- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" RESULT_VARIABLE res OUTPUT_VARIABLE out ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) if(res EQUAL 0) set(${_var} "CLEAN" PARENT_SCOPE) else() set(${_var} "DIRTY" PARENT_SCOPE) endif() endfunction() ================================================ FILE: cmake/GetGitRevisionDescription.cmake.in ================================================ # # Internal file for GetGitRevisionDescription.cmake # # Requires CMake 2.6 or newer (uses the 'function' command) # # Original Author: # 2009-2010 Ryan Pavlik # http://academic.cleardefinition.com # Iowa State University HCI Graduate Program/VRAC # # Copyright Iowa State University 2009-2010. # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) set(HEAD_HASH) file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024) string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS) if(HEAD_CONTENTS MATCHES "ref") # named branch string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}") if(EXISTS "@GIT_DIR@/${HEAD_REF}") configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY) else() configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY) file(READ "@GIT_DATA@/packed-refs" PACKED_REFS) if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}") set(HEAD_HASH "${CMAKE_MATCH_1}") endif() endif() else() # detached HEAD configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY) endif() if(NOT HEAD_HASH) file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024) string(STRIP "${HEAD_HASH}" HEAD_HASH) endif() ================================================ FILE: cmake/compiler-tests/f2008-block_construct.f90 ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! program main try: block exit try end block try end program ================================================ FILE: cmake/compiler-tests/f2008-contiguous.f90 ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! program main implicit none ! test whether the compiler supports the CONTIGUOUS keyword integer, allocatable, target :: targ(:) integer, contiguous, pointer :: ptr(:) ! allocated data is always contiguous allocate (targ(10)) ptr => targ ! IS_CONTIGUOUS was implemented in gcc-9 and is therefore not tested for yet end program ================================================ FILE: cmake/compiler-tests/f2008-norm2.f90 ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! program main implicit none real :: x(2) = [real :: 3, 4] if (abs(norm2(x) - 5.) > 1.0D-5) stop 1 end program ================================================ FILE: cmake/compiler-tests/f95-reshape-order-allocatable.f90 ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! program test_reshape integer, dimension(4) :: x = [1, 2, 3, 4] integer, dimension(:), allocatable :: order allocate (order(2)) order(:) = [2, 1] ! PGI <= 19.10 does not accept allocatables for the order parameter print *, reshape(x, shape=[2, 2], order=order) end program ================================================ FILE: cmake/fypp-sources.cmake ================================================ add_custom_target(fypp) # common target for all fypp calls # Use a system-provided fypp if available, otherwise the bundled one find_program( FYPP_EXECUTABLE fypp DOC "The FYPP preprocessor" PATHS ../tools/build_utils/fypp/bin) if (NOT FYPP_EXECUTABLE) message(FATAL_ERROR "Failed to find the FYPP preprocessor.") else () message(STATUS "FYPP preprocessor found.") endif () if ((CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") AND (CMAKE_GENERATOR STREQUAL "Ninja") AND (CMAKE_VERSION VERSION_GREATER_EQUAL 3.16)) set(fypp_flags --line-numbering --line-marker-format=gfortran5) elseif (CMAKE_BUILD_TYPE MATCHES COVERAGE) message( WARNING "Coverage build requested but your environment does not support Line Control directives in Fypp" ) message( WARNING "You need CMake 3.16+, Ninja (CMake-patched) and gfortran 5+ for this to work!" ) # otherwise the referenced lines in the Coverage report point to either the # original (unexpanded files) or to the Fypped sources which may then not be # picked up by the postprocessing tools. CMake 3.16+ and Ninja are needed # since older CMake (or CMake with make) are unable to parse Line Control # directives within line-continued USE stmts, see # https://gitlab.kitware.com/cmake/cmake/issues/18188 endif () function (ADD_FYPP_SOURCES OUTVAR) set(outfiles) foreach (f ${ARGN}) # first we might need to make the input file absolute get_filename_component(f "${f}" ABSOLUTE) get_filename_component(ext "${f}" EXT) # get the relative path of the file to the current source dir file(RELATIVE_PATH rf "${CMAKE_CURRENT_SOURCE_DIR}" "${f}") # set the output filename of fypped sources set(of "${CMAKE_CURRENT_BINARY_DIR}/${rf}") # create the output directory if it doesn't exist get_filename_component(d "${of}" PATH) if (NOT IS_DIRECTORY "${d}") file(MAKE_DIRECTORY "${d}") endif () if ("${f}" MATCHES ".F$") # append the output file to the list of outputs list(APPEND outfiles "${of}") # now add the custom command to generate the output file add_custom_command( OUTPUT "${of}" COMMAND ${Python_EXECUTABLE} ${FYPP_EXECUTABLE} ARGS ${fypp_flags} "${f}" "${of}" MAIN_DEPENDENCY "${f}" VERBATIM) elseif ("${f}" MATCHES ".h$") # append the output file to the list of outputs list(APPEND outfiles "${of}") # now add the custom command to generate the output file add_custom_command( OUTPUT "${of}" COMMAND ${Python_EXECUTABLE} ${FYPP_EXECUTABLE} ARGS "-F" "${f}" "${of}" DEPENDS "${f}") else () configure_file("${f}" "${of}" COPYONLY) endif () endforeach () # build a custom target to fypp seperately (required for example by the doc # target) add_custom_target("fypp_${OUTVAR}" DEPENDS ${outfiles}) add_dependencies(fypp "fypp_${OUTVAR}") # set the output list in the calling scope set(${OUTVAR} ${outfiles} PARENT_SCOPE) endfunction () ================================================ FILE: docs/CMakeLists.txt ================================================ # ================================================================================================= # FORD - DOCUMENTATION GENERATION find_program( FORD_EXE ford DOC "path to the ford executable (required to generate the documentation)") # Copy the FORD project-file into the build directory set(FORD_PROJECT_FILE "${CMAKE_BINARY_DIR}/DBCSR.md") configure_file(${CMAKE_SOURCE_DIR}/DBCSR.md "${FORD_PROJECT_FILE}") # Copy the FORD project-file into the build directory add_custom_target( doc COMMENT "Generating API documentation and doc pages" COMMAND "${FORD_EXE}" "${FORD_PROJECT_FILE}" VERBATIM) if (BUILD_TESTING) add_dependencies(doc doc_copy_tests) endif () if (WITH_C_API AND WITH_EXAMPLES) add_dependencies(doc doc_copy_examples) endif () add_dependencies(doc fypp) # only depend on the fypp step to avoid building # everything just for the docs ================================================ FILE: docs/guide/1-DBCSR/index.md ================================================ title: DBCSR # DBCSR DBCSR is a sparse matrix library designed to efficiently perform sparse matrix-matrix multiplication, among other operations. It is MPI and OpenMP parallel, and can exploit accelerators. DBCSR was developed as a part of [CP2K](https://github.com/cp2k/cp2k/), where it provides core functionality for [linear scaling electronic structure theory](https://dx.doi.org/10.1021%2Fct200897x). It is now released as a standalone library for integration in other projects. ================================================ FILE: docs/guide/1-DBCSR/publications.md ================================================ title: Publications # Publications - **General overview of the library** Urban Borstnik, Joost VandeVondele, Valery Weber, and Jürg Hutter. 2014. [Sparse Matrix Multiplication: The Distributed Block-Compressed Sparse Row Library](https://dx.doi.org/10.1016%2Fj.parco.2014.03.012). Parallel Comput. 40, 5-6 (2014), 47–58. - **Use of one-sided MPI and a 2.5D algorithm** Alfio Lazzaro, Joost VandeVondele, Jürg Hutter, and Ole Schütt. [Increasing the Efficiency of Sparse Matrix-Matrix Multiplication with a 2.5D Algorithm and One-Sided MPI](https://arxiv.org/abs/1705.10218). In Proceedings of the Platform for Advanced Scientific Computing Conference, PASC ’17, pages 3:1–3:9, New York, NY, USA, 2017. ACM. - **GPU-Backend** Ole Schütt, Peter Messmer, Jürg Hutter, and Joost VandeVondele. 2015. [GPU-Accelerated Sparse Matrix–Matrix Multiplication for Linear Scaling Density Functional Theory](https://dx.doi.org/10.1002%2F9781118670712.ch8). John Wiley and Sons, Chapter 8, 173–190. Ilia Sivkov, Alfio Lazzaro, and Jürg Hutter. [DBCSR: A Library for Dense Matrix Multiplications on Distributed GPU-Accelerated Systems](http://arxiv.org/abs/1910.04796). 2019. ================================================ FILE: docs/guide/2-user-guide/1-installation/1-cmake-build-recipes.md ================================================ title: CMake Build Recipes # DBCSR CMake Build Recipes Following are recipes for different combinations of compilers, platforms and libraries. Unless otherwise noted, the examples assume that after fetching/unpacking DBCSR you created a directory `build/` inside the DBCSR directory and switched into it using `cd build/`. The listed examples can usually be combined with other build options like *libxsmm* or *CUDA* even if the examples are not explicitly given. The instructions used for building in the Continuous Integration can be found in the `.ci/` folder or in the `.github/workflows/`. ## GNU ### GNU compiler, system MPI and system-provided OpenBLAS Most Linux systems provide the GNU compiler, a system MPI (OpenMPI or MPICH) using the GNU compiler as a backend and OpenBLAS for BLAS/LAPACK: ```bash cmake .. ``` ### GNU compiler, system MPI and Intel MKL To use the Intel MKL together with the GNU compiler and possibly a system-MPI, assuming that MKL is installed in `/sw/intel/mkl`. Verified with MKL provided as part of the Intel Parallel Studio XE 2019.5 installed in `/sw/intel` with an OS-provided GCC 7.4.1 on Linux openSUSE Leap 15.1, using CMake 3.12.0. 1. Make sure the MKL environment is properly loaded: ```bash source /sw/intel/mkl/bin/mklvars.sh intel64 ``` 2. Make sure CMake picks the Intel MKL over any system-provided BLAS library: ```bash cmake -DBLA_VENDOR=Intel10_64lp_seq .. ``` ## Intel Instructions for using Intel compiler or libraries for different parts on non-Cray systems. For Cray systems, please check further below. *Note*: in Intel Parallel Studio 2019 there is a potential issue that `mpirun` fails with the error `OFI addrinfo() failed` on local (non-cluster) installations. This can be worked around by setting `export I_MPI_FABRICS=shm`. ### Intel MPI, GNU Compiler and system-provided OpenBLAS Verified with Intel Parallel Studio XE 2019.5 installed in `/sw/intel` with an OS-provided GCC 7.4.1 on Linux openSUSE Leap 15.1, using CMake 3.12.0. 1. Make sure that the Intel environment is properly loaded: ```bash source /sw/intel/bin/compilervars.sh intel64 ``` 2. Use the Intel-provided MPI compiler wrappers for the GNU toolchain, to override CMake's auto-detection which may pick up the system MPI: ```bash CC=mpicc FC=mpifc CXX=mpicxx cmake .. ``` ### Intel MPI, GNU Compiler and Intel MKL Verified with Intel Parallel Studio XE 2019.5 installed in `/sw/intel` with an OS-provided GCC 7.4.1 on Linux openSUSE Leap 15.1, using CMake 3.12.0. 1. Make sure that the Intel environment is properly loaded: ```bash source /sw/intel/bin/compilervars.sh intel64 ``` 2. Use the Intel-provided MPI compiler wrappers for the GNU toolchain: ```bash CC=mpicc FC=mpifc CXX=mpicxx cmake -DBLA_VENDOR=Intel10_64lp_seq .. ``` ### Intel MPI, Intel Compiler and Intel MKL Verified with Intel Parallel Studio XE 2019.5 installed in `/sw/intel` on Linux openSUSE Leap 15.1, using CMake 3.12.0. 1. Make sure that the Intel environment is properly loaded: ```bash source /sw/intel/bin/compilervars.sh intel64 ``` 2. Use the Intel-provided MPI compiler wrappers: ```bash CC=mpiicc FC=mpiifort CXX=mpiicxx cmake -DBLA_VENDOR=Intel10_64lp_seq .. ``` ## MacOS Follow what is described in the previous sections. For GNU, if you have installed Command Line Tools by Apple and GCC with Homebrew that can lead to a conflict in which compiler CMake will use. Therefore, we suggest specifying GCC, for example ```bash CC=gcc-9 CXX=g++-9 cmake .. ``` where `-9` can be adapted to your version. ### PGI Please note that you need at least PGI >= 19.11. Assuming that your `$PATH` is set correctly such that `pgcc`, `pgc++` and `pgfortran` can be found, run the following to get a DBCSR version without MPI: ```bash CC=pgcc CXX=pgc++ FC=pgfortran cmake -DUSE_MPI=OFF .. ``` the `-DUSE_MPI=OFF` is needed here to avoid that CMake picks up any MPI installation, for example from Homebrew. To build with MPI you need an MPI implementation built for/with the PGI compiler, for example the MPICH usually bundled with the PGI installation. Make sure that `$PATH` is correctly set to include `mpicc` and `mpifort` from the PGI MPICH installation, then run: ```bash CC=mpicc CXX=mpicxx FC=mpifort MPICH_CC=pgcc cmake .. ``` ## Cray Some machines require additional environments to be loaded to either provide the modules specified below or to be able to properly build with the loaded modules. Please contact your cluster/datacenter administrator for more information. Example for the CSCS' Piz Daint: ```bash module load daint-mc # to build for the non-GPU partition module load daint-gpu # to build for the GPU partition ``` *Note*: the `libsci-cray` has different variants for MPI or OpenMP. When disabling either MPI or OpenMP support in DBCSR you might want to adjust the selected BLAS/LAPACK library accordingly (e.g. drop the `_mpi`, or `_mp`). ### CCE and libsci-cray Verified on CSCS' Piz Daint with CCE 10.0.2 and cray-libsci 20.06.1, using CMake 3.18.4. 1. Make sure that the `PrgEnv-cray` module is loaded: ```bash module load PrgEnv-cray ``` 2. While the MPI wrapper/compiler will be detected automatically, must the BLAS/LAPACK libraries be specified manually: ```bash cmake \ -DCMAKE_SYSTEM_NAME=CrayLinuxEnvironment \ -DBLAS_LIBRARIES="-lsci_cray_mpi_mp -lhugetlbfs" \ -DLAPACK_LIBRARIES="-lsci_cray_mpi_mp" \ .. ``` ### Intel Compiler and libsci-cray Verified on CSCS' Piz Daint with Intel 19.1 and cray-libsci 20.06.1, using CMake 3.18.4. 1. Make sure that the `PrgEnv-intel` module is loaded: ```bash module load PrgEnv-intel ``` 2. While the MPI wrapper/compiler will be detected automatically, must the BLAS/LAPACK libraries be specified manually: ```bash cmake \ -DCMAKE_SYSTEM_NAME=CrayLinuxEnvironment \ -DBLAS_LIBRARIES="-lsci_intel_mpi_mp -lhugetlbfs" \ -DLAPACK_LIBRARIES="-lsci_intel_mpi_mp" \ .. ``` ### GNU Compiler and libsci-cray Verified on CSCS' Piz Daint with GNU 8.3.0 and cray-libsci 20.06.1, using CMake 3.18.4. 1. Make sure that the `PrgEnv-gnu` module is loaded: ```bash module load PrgEnv-gnu ``` 2. While the MPI wrapper/compiler will be detected automatically, must the BLAS/LAPACK libraries be specified manually: ```bash cmake \ -DCMAKE_SYSTEM_NAME=CrayLinuxEnvironment \ -DBLAS_LIBRARIES="-lsci_gnu_mpi_mp -lhugetlbfs" \ -DLAPACK_LIBRARIES="-lsci_gnu_mpi_mp" \ .. ``` ## Any compiler ### Custom compiler flags In the DBCSR build system we preload the default compiler flags (especially the ones for Fortran) with flags required to build the code with a specific compiler, while additional optimization flags are added based on the CMake build type. This allows the user to override optimization flags by setting a custom build type and providing optimization flags for that build type as follows: ```bash cmake \ -DCMAKE_BUILD_TYPE=custom \ -DCMAKE_C_FLAGS_CUSTOM="-O3 -march=native" \ -DCMAKE_CXX_FLAGS_CUSTOM="-O3 -march=native" \ -DCMAKE_Fortran_FLAGS_CUSTOM="-O3 -march=native" \ .. ``` ================================================ FILE: docs/guide/2-user-guide/1-installation/2-supported-compilers.md ================================================ title: Supported Compilers # Supported compilers DBCSR uses the Fortran 2008+ standard, which requires up-to-date compilers. Currently direct testing is done with the following compilers: * GNU 11.2.0 Since DBCSR is a core library of CP2K, the code gets additional testing on a wider range of systems and compilers, you can find more information about this on [CP2K Compiler Support](https://www.cp2k.org/dev:compiler_support). ================================================ FILE: docs/guide/2-user-guide/1-installation/3-using-dbcsr-in-a-cmake-project.md ================================================ title: Using DBCSR in a CMake project # Using DBCSR in a CMake project We are providing CMake helper files to easily include DBCSR in any other CMake-based project. For this you have to build DBCSR using CMake as described above and then also install it. As a user being able to run commands as root, use: ```bash sudo cmake --build . -- install # will install to /usr/local ``` If you can not run commands as root, use `-DCMAKE_INSTALL_PREFIX=...` when calling CMake to set an alternative base installation path for DBCSR instead: ```bash cmake -DCMAKE_INSTALL_PREFIX=/my/custom/prefix .. cmake --build . -- install ``` In your project's CMake you can then easily search for the DBCSR library: ```cmake cmake_minimum_required(VERSION 3.22) enable_language(Fortran C CXX) # only request the required language find_package(DBCSR 2.0.0 CONFIG REQUIRED) find_package(MPI) # for Fortran: set(CMAKE_Fortran_FLAGS "-std=f2018") # your Fortran code likely needs to be F2018+ compatible as well add_executable(dbcsr_example_fortran dbcsr_example.f90) target_link_libraries(dbcsr_example_fortran DBCSR::dbcsr) # for C: add_executable(dbcsr_example_c dbcsr_example.c) target_link_libraries(dbcsr_example_c DBCSR::dbcsr_c MPI::MPI_C) # for C++: add_executable(dbcsr_example_cpp dbcsr_example.cpp) target_link_libraries(dbcsr_example_cpp DBCSR::dbcsr_c MPI::MPI_CXX) ``` If you installed DBCSR into a custom prefix, you have to make sure that CMake is able to find the DBCSR CMake configuration: ```bash DBCSR_DIR=/my/custom/prefix cmake .. ``` ================================================ FILE: docs/guide/2-user-guide/1-installation/4-docker.md ================================================ title: Docker Images {!./tools/docker/README.md!} ================================================ FILE: docs/guide/2-user-guide/1-installation/index.md ================================================ title: Install # Install ## Prerequisites You need: * [CMake](https://cmake.org/) (3.22+) * GNU make or Ninja * Fortran compiler which supports at least Fortran 2008 (including the TS 29113 when using the C-bindings) * BLAS+LAPACK implementation (reference, OpenBLAS and MKL have been tested. Note: DBCSR linked to OpenBLAS 0.3.6 gives wrong results on Power9 architectures.) * Python version installed (2.7 or 3.6+ have been tested) Optional: * [LIBXSMM](https://github.com/hfp/libxsmm) (1.10+, and `pkg-config`) for Small Matrix Multiplication acceleration * LAPACK implementation (reference, OpenBLAS-bundled and MKL have been tested), required when building the tests To build DBCSR's GPU backend: * CUDA Toolkit (targets NVIDIA GPUs, minimal version required: 5.5) with cuBLAS * Host C++ compiler which supports at least C++11 standard * or HIP compiler (targets NVIDIA or AMD GPUs) and hipBLAS (ROCm 4.5.2 was tested) * Host C++ compiler which supports at least C++11 standard * or OpenCL, i.e., development headers (`opencl-headers`), generic loader "ocl-icd" (`ocl-icd-opencl-dev`), * Vendor specific OpenCL package, e.g., [Intel Compute Runtime](https://github.com/intel/compute-runtime/releases/latest), or CUDA Toolkit (includes OpenCL) * Nvidia GPU mode shall be `DEFAULT` (`nvidia-smi -c DEFAULT`) if MPI puts multiple ranks onto a single GPU; MPS daemon with GPU mode `EXCLUSIVE_PROCESS` is not an option * For the OpenCL backend, a plain C compiler is sufficient (C90 standard) * Optionally, `clinfo` (can be useful to show available devices) DBCSR is tested against GNU and Intel compilers on Linux systems, and GNU compiler on MacOS systems. See a list of supported compilers [here](2-supported-compilers.html). ## Get DBCSR Download either a [release tarball](https://github.com/cp2k/dbcsr/releases) or clone the latest version from Git using: ```bash git clone --recursive https://github.com/cp2k/dbcsr.git ``` ## Build DBCSR can be compiled in four main variants: * Serial, i.e., no OpenMP and no MPI * OpenMP * MPI * OpenMP+MPI In addition, the variants can support accelerators. Run inside the `dbcsr` directory: ```bash mkdir build cd build cmake .. make ``` The configuration flags for the CMake command are (default first): ```bash -DUSE_MPI= -DUSE_OPENMP= -DUSE_SMM= -DUSE_ACCEL= -DWITH_CUDA_PROFILING= -DWITH_HIP_PROFILING= -DWITH_C_API= -DWITH_EXAMPLES= -DWITH_GPU= -DCMAKE_BUILD_TYPE= -DBUILD_TESTING= -DTEST_MPI_RANKS=<2|auto|N> -DTEST_OMP_THREADS=<2|N> ``` When providing a build of LIBXSMM, make sure the `lib` directory is added to the `PKG_CONFIG_PATH` variable prior to running `cmake`. For example, if LIBXSMM was checked out using Git to your home folder: ```bash export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:${HOME}/libxsmm/lib" ``` ### CMake Build Recipes For build recipes on different platforms, make sure to also read the [CMake Build Recipes](1-cmake-build-recipes.html). ### Building with spack DBCSR and its dependencies can be built with the [spack package manager](https://github.com/spack/spack): ```bash spack install dbcsr +openmp +mpi +cuda cuda_arch=70 spack install dbcsr +openmp +mpi +rocm amdgpu_target=gfx906 spack install dbcsr +openmp +mpi +opencl ^cuda ``` See `spack info dbcsr` for all supported variants. ### C/C++ Interface If MPI support is enabled (the default), the C API is automatically built. ================================================ FILE: docs/guide/2-user-guide/2-tests/index.md ================================================ title: Tests # Tests ## Correctness tests - [[dbcsr_unittest_1(program)]] (fortran) : test matrix operations: add, multiply and multiply-ghost - [[dbcsr_unittest_2(program)]] (fortran) : test matrix-multiply with large blocks (block size=100) and rectangular matrices (block size=5) - [[dbcsr_test_csr_conversions(program)]] (fortran) : test DBCSR to CSR conversion with random matrices - [[dbcsr_tas_unittest(program)]] (fortran) : unit test for tall-and-skinny matrices - [[dbcsr_tensor_unittest(program)]] (fortran) : unit test for tensor functionalities - [dbcsr_tensor_test](../../../sourcefile/dbcsr_tensor_test.cpp.html) (c++) : test the tensor contraction (13|2)x(54|21)=(3|45) 31 and other functions ### GPU-backend correctness tests: - [[dbcsr_unittest_3(program)]] (fortran) : test matrix-multiply with various block sizes that are run by the libsmm_acc GPU backend if DBCSR is compiled with GPU support - [libsmm_acc_unittest_multiply](../../../sourcefile/libsmm_acc_unittest_multiply.cpp.html) (c++) : tests all libsmm_acc transpose kernels - [libsmm_acc_unittest_transpose](../../../sourcefile/libsmm_acc_unittest_transpose.cpp.html) (c++) : tests all libsmm_acc batch-multiplication kernels ## Performance tests DBCSR performance tests: - [[dbcsr_performance_driver(program)]] (fortran) : performance tester for matrix operations. The input matrices can be described in an input file in order to test different configurations. See below. ### GPU backend performance tests: - [libsmm_acc_timer_multiply](../../../sourcefile/libsmm_acc_timer_multiply.cpp.html) (c++) : time all libsmm_acc batch-multiplication kernels ## Running Tests To run all the tests, use: ```bash make test ``` Or run individual tests from the `build` directory, as follows: ```bash srun -N 1 --ntasks-per-core 2 --ntasks-per-node 12 --cpus-per-task 2 ./tests/dbcsr_unittest_1 ``` Note that the tests of libsmm_acc (the GPU-backend) do not use MPI since libsmm_acc only operates on-node. Note that if you are using OpenMP builds, then you have to set the environment variable `OMP_NESTED=false`. ### Input Files for Performance Driver The test suite comes with a performance driver ([[dbcsr_performance_driver(program)]]), which evaluates the performance of matrix-matrix multiplication in DBCSR. Input matrices can be specified in an input file, passed to the executable as standard input, for example: a) To test pure MPI performance test using [n] nodes: ```bash mpirun -np [n] ./build/tests/dbcsr_perf tests/input.perf 2>&1 | tee perf.log ``` b) To test hybrid MPI/OpenMP performance test using [n] nodes, each spanning [t] threads: ```bash export OMP_NUM_THREADS=[t]; mpirun -np [n] ./build/tests/dbcsr_perf tests/input.perf 2>&1 | tee perf.log ``` ### How to Write Input Files Examples of input files can be found in `tests/inputs` for different sizes of matrices and different block sizes. You can also write custom input files: for more information, follow the template in `tests/input.perf`. ================================================ FILE: docs/guide/2-user-guide/3-examples/index.md ================================================ title: Examples # Examples - [[dbcsr_example_1(program)]] : how to create a dbcsr matrix (fortran) - [[dbcsr_example_2(program)]] : how to set a dbcsr matrix (fortran) - dbcsr_example_3: how to multiply two dbcsr matrices (in fortran: [[dbcsr_example_3(program)]]) and in c++: [dbcsr_example_3](../../../sourcefile/dbcsr_example_3.cpp.html)) - [[dbcsr_tensor_example_1(program)]] : how to create a dbcsr matrix (fortran) - the example can be run with different parameters, controlling block size, sparsity, verbosity and more - [dbcsr_tensor_example_2](../../../sourcefile/dbcsr_tensor_example_2.cpp.html): tensor contraction example (cpp) - tensor1 x tensor2 = tensor3, (13|2)x(54|21)=(3|45) ## Build Compile the DBCSR library, using `-DUSE_MPI=ON -DWITH_EXAMPLES=ON`. The examples require MPI. Furthermore, if you are using threading, MPI_THREAD_FUNNELED mode is required. ## Run You can run the examples, for instance from the `build` directory, as follows: ```bash srun -N 1 --ntasks-per-core 2 --ntasks-per-node 12 --cpus-per-task 2 ./examples/dbcsr_example_1 ``` ### Run tensor examples How to run (this example and DBCSR for tensors in general): - best performance is obtained by running with mpi and one openmp thread per rank. - ideally number of mpi ranks should be composed of small prime factors (e.g. powers of 2). - for sparse data & heterogeneous block sizes, DBCSR should be run on CPUs with libxsmm backend. - for dense data best performance is obtained by choosing homogeneous block sizes of 64 and by compiling with GPU support. ================================================ FILE: docs/guide/2-user-guide/4-gpu/index.md ================================================ title: GPUs # Introduction [CP2K](https://github.com/cp2k/cp2k/) was initially enabled for GPUs by the means of the DBCSR library. The original development focused on scalability and an assumption of a `1:1`-relationship between CPUs and GPUs (one CPU-socket drives one GPU). Multi-GPU asks for associating CPU-ranks with the closest GPU (affinity), but is usually a desparture in terms of algorithms as well (GPU to GPU communication). DBCSR associates ranks with GPUs based on a round-robin scheme using the rank-ID, i.e., GPU-affinity is only achieved with the help of the underlying MPI implementation or support from other runtimes. Aggregating GPU acceleration in as little as possible systems is contrary to the original design of DBCSR (and CP2K at that time). CP2K is a versatile toolbox covering a variety of workloads (input language), which imposes several hotspots beyond DBCSR ([status](https://www.cp2k.org/gpu)). CP2K or DBCSR can scale to thousands of nodes and furter benefit from thread-scalability once communication starts to dominate (due to higher total rank-counts). Thread-scalability (OpenMP) in DBCSR if not CP2K is not equally developed when compared to process scalability (MPI), i.e., higher rank-counts tend to yield better performance on smaller number of systems or nodes. With multiple ranks per GPU, context switches and other overhead can negatively impact performance. However, more ranks are needed to best drive the CPU-dominated portion of the code, and hence GPU and in particular multi-GPU acceleration poses a challenge. CP2K almost exclusively uses double-precision calculations on CPUs and GPUs (along with DBCSR's need for atomic update instructions for GPUs). Consumer focused GPU offerings often deliver a FLOP-rate ratio between single and double precision up to `SP:DP = 64:1`, which renders them unsuitable for CP2K like not beneficial when compared to modestly many CPU cores. Further, GPU accleration hinges on memory bandwidth rather than compute which further limits the benefit. # CUDA/HIP Backend Users interested to tune kernels for the CUDA/HIP backend and LIBSMM_ACC, can take a look at the [Developer Guide](../../3-developer-guide/3-programming/2-accelerator-backend/2-libsmm_acc/3-tune.html). Following the guide, [tuned parameters](https://github.com/cp2k/dbcsr/tree/develop/src/acc/libsmm_acc/parameters) can be collected for the desired GPU and potentially submitted for the benefit of others. # OpenCL Backend This section shows how to auto-tune a kernel for the OpenCL based LIBSMM library. The process builds a stand-alone driver program which is then driven by an [OpenTuner](https://opentuner.org/) based script guiding the auto-tuning of the desired kernel. The [Developer Guide](../../3-developer-guide/3-programming/2-accelerator-backend/3-libsmm_ocl/1-autotune.html) provides more information, e.g., about constraining execution time or parallelizing the tuning-process as well as how to select and tune an entire set of kernels. For simplicity, the GNU Compiler is used to build the afore mentioned driver program, both DBCSR and LIBXSMM are Git-cloned into the same common directory, e.g., the user's `HOME` directory, and the driver is built for tuning double-precision kernels (DP). ```bash cd ${HOME} git clone https://github.com/hfp/libxsmm.git cd libxsmm make GNU=1 -j cd ${HOME} git clone https://github.com/cp2k/dbcsr.git cd dbcsr/src/acc/opencl make ``` Tuning the 23x23x23-kernel for example is the default case. However, to better illustrate the options, M, N, and K are given explicitly. The `tune_multiply.py` script can be used interactively for example, and terminated with CTRL-C which writes a JSON-file with tuned parameters (note a file `.tune_multiply-double-32x32x32.json` is quietly written every time a better set of parameters is found), and then aggregates all JSON-files in the directory into a CSV-file (`tune_multiply.csv`). ```bash cd ${HOME}/dbcsr/src/acc/opencl/smm ./tune_multiply.py 23x23x23 ``` Beside of interactive termination, above process would also terminate based on OpenTuner's default or can be constrained by the number of steps (experiments), time to be spent, or a combination of both. Details can be found in the [Developer Guide](../../3-developer-guide/3-programming/2-accelerator-backend/2-libsmm_acc/3-tune.html). Suppose the 23x23x23-kernel was tuned for some time (e.g., 5-10 minutes), tuned parameters can be incorporated into the backend. The aggregated parameters (`tune_multiply.csv`) are automatically embedded when rebuilding the library and driver. ```bash cd ${HOME}/dbcsr/src/acc/opencl make ``` Important kernels can be further tuned (in addition to spending more time for the process) by widening the set of tuned parameters (`--tuning-level` or `-a` with "0" denoting an unrestricted set of tunables). ```bash cd ${HOME}/dbcsr/src/acc/opencl/smm ./tune_multiply.py 23x23x23 -a 0 ``` To "continue" tuning beyond the default level, the previously found parameters must be embedded (by rebuilding the library and driver program) or can be alternatively specified at runtime (`OPENCL_LIBSMM_SMM_PARAMS=/path/to/tune_multiply.csv`). ================================================ FILE: docs/guide/2-user-guide/index.md ================================================ title: User Guide ================================================ FILE: docs/guide/3-developer-guide/1-tooling/index.md ================================================ title: Tooling # Build System We support CMake for compilation. See [here](../../2-user-guide/1-installation/index.html) on how to compile and [here](../../2-user-guide/1-installation/1-cmake-build-recipes.html) for more CMake details. Compilations is based on [Fypp](https://github.com/aradi/fypp) meta-progamming package, which is available as submodule. # CI Setup DBCSR's CI setup is described in [DBCSR's Github wiki](https://github.com/cp2k/dbcsr/wiki/CI-Setup). # Development DBCSR's development (Git branching model, commit messages, releases, etc.) is described in [DBCSR's Github wiki](https://github.com/cp2k/dbcsr/wiki/Development). ================================================ FILE: docs/guide/3-developer-guide/2-documentation/index.md ================================================ title: Documentation # Documentation ## Build To build the documentation you need [FORD](https://github.com/Fortran-FOSS-Programmers/ford). Afterwards use the `doc` target for the CMake generated Makefile: ```bash mkdir build cd build cmake .. # will look for the `ford` binary make doc ``` Note that in order to generate the documentation with examples (recommended), the following options should be activated in cmake (these are the options' default values) ```bash cmake -DUSE_MPI=ON -DWITH_EXAMPLES=ON .. # these options are default and recommended. # If set off, the examples' documentation is not generated. ``` The documentation (HTML format) will be located in `doc/`. To view it, open `doc/index.html` in a browser. ## Add Pages To add pages to the documentation, write Markdown files and add them to the desired location in `dbcsr/docs/guide`. Note that subfolders of `guide` will only be added to the documentation pages if they contain a file `index.md`. For more information on writing pages, see [Ford's documentation](https://github.com/Fortran-FOSS-Programmers/ford/wiki/Writing-Pages). ================================================ FILE: docs/guide/3-developer-guide/3-programming/1-overview/index.md ================================================ title: Overview # Code Architecture ![DBCSR code architecture](dbcsr_mm_overview.png) ``` dbcsr/ -- src/ ---- acc/: contains all code related to accelerators ---- base/: base routines needed to abstract away some machine/compiler dependent functionality ---- block/: block level routines ---- core/: core matrix data structure ---- data/: data handling ---- dist/: data distribution and message passing ---- mm/: matrix-matrix multiplication ---- mpi/: wrappers of the MPI routines ---- ops/: high level operations ---- tas/: tall-and-skinny matrices ---- tensors/: block-sparse tensor framework ---- utils/: utilities ---- work/ ``` # Distribution Scheme Assumed square matrix with 20x20 matrix with 5x5 blocks and a 2x2 processor grid ![DBCSR distribution over processors](dbcsr_dist.png) ![DBCSR block scheme](dbcsr_blocks.png) # List of standard compiler flags * OpenMP flag to enable multi-threaded parallelization, e.g. `-fopenmp` for GNU and Intel compilers. * Warnings, e.g. `-Werror=aliasing -Werror=ampersand -Werror=c-binding-type -Werror=intrinsic-shadow -Werror=intrinsics-std -Werror=line-truncation -Werror=tabs -Werror=target-lifetime -Werror=underflow -Werror=unused-but-set-variable -Werror=unused-variable -Werror=unused-dummy-argument -Werror=conversion -Werror=zerotrip -Werror=uninitialized -Wno-maybe-uninitialized` for GNU compiler. * Error checkings (only `Coverage` and `Debug` builds), e.g. `-fcheck=all -ffpe-trap=invalid,zero,overflow -fbacktrace -finit-real=snan -finit-integer=-42 -finit-derived -Werror=realloc-lhs -finline-matmul-limit=0` for GNU compiler. # List of Macros used in the code | Macro | Explanation | Language | |-|-|-| | `__parallel` | Enable MPI runs | Fortran | | `__USE_MPI_F08` | Enable use of the modern `mpi_f08` module instead of the `mpi` module to reduce interfacing issues | Fortran | | `__NO_MPI_THREAD_SUPPORT_CHECK` | Workaround for MPI libraries that do not declare they are thread safe (funneled) but you want to use them with OpenMP code anyways | Fortran | | `__MKL` | Enable use of optimized Intel MKL functions | Fortran | `__NO_STATM_ACCESS`, `__STATM_RESIDENT` or `__STATM_TOTAL` | Toggle memory usage reporting between resident memory and total memory. In particular, macOS users must use `-D__NO_STATM_ACCESS` | Fortran | | `__NO_ABORT` | Avoid calling abort, but STOP instead (useful for coverage testing, and to avoid core dumps on some systems) | Fortran | | `__LIBXSMM` | Enable [LIBXSMM](https://github.com/hfp/libxsmm/) link for optimized small matrix multiplications on CPU | Fortran | | `__ACCELERATE` | Must be defined on macOS when Apple's Accelerate framework is used for BLAS and LAPACK (this is due to some interface incompatibilities between Accelerate and reference BLAS/LAPACK) | Fortran | | `NDEBUG` | Assertions are stripped ("compiled out"), `NDEBUG` is the ANSI-conforming symbol name (not `__NDEBUG`). Regular release builds may carry assertions for safety | Fortran, C, C++ | | `__CRAY_PM_ACCEL_ENERGY` or `__CRAY_PM_ENERGY` | Switch on collectin energy profiling on Cray systems | Fortran | | `__DBCSR_ACC` | Enable Accelerator compilation | Fortran, C, C++ | | `__OPENCL` | Enable OpenCL acceleration | C | | `__CUDA_PROFILING` | To turn on Nvidia Tools Extensions. It requires to link `-lnvToolsExt` | Fortran, C, C++ | | `__CUDA` | Enable CUDA acceleration | C, C++ | | `__HIP` | Enable HIP acceleration | C, C++ | ================================================ FILE: docs/guide/3-developer-guide/3-programming/2-accelerator-backend/1-code-structure.md ================================================ title: Code Structure # GPU Backend Code Architecture ``` dbcsr/ -- src/ ---- acc/: contains interfaces to ACC and LIBSMM (top-level) as well as backends (subdirectories) ------ cuda/: CUDA backend ------ hip/: HIP backend ------ cuda_hip/: common code for CUDA and HIP ------ libsmm_acc/: small matrix-matrix operations on GPU (can use either cuda or hip interface) ------ opencl/: OpenCL backend ------ opencl/smm/: LIBSMM implementation based on OpenCL ``` ================================================ FILE: docs/guide/3-developer-guide/3-programming/2-accelerator-backend/2-libsmm_acc/1-kernels.md ================================================ title: Kernels ![kernel parameters and memory](../../../../../media/images/libsmm_acc_parameters_and_memory.png){ width=50% } {!./src/acc/libsmm_acc/kernels/README.md!} ================================================ FILE: docs/guide/3-developer-guide/3-programming/2-accelerator-backend/2-libsmm_acc/2-parameters.md ================================================ title: Kernel Parameters # Kernel Parameters ## Batched Matrix-Matrix Multiplication Kernel Parameters The batched matrix-matrix multiplication kernels are templated on: * the characteristic dimensions of the multiplication: `m, n, k` * between 3-7 kernel parameters from (`M`, `N`, `w`, `v`, `threads`, `grouping`, `minblocks`), depending on the algorithm. ## Batched Matrix Transpose Kernel Parameters The batched transpose kernels are templated on: * the characteristic dimensions of the transpose: `m, n` ================================================ FILE: docs/guide/3-developer-guide/3-programming/2-accelerator-backend/2-libsmm_acc/3-tune.md ================================================ title: Autotuning Framework {!./src/acc/libsmm_acc/tune/README.md!} ================================================ FILE: docs/guide/3-developer-guide/3-programming/2-accelerator-backend/2-libsmm_acc/index.md ================================================ title: CUDA/HIP {!./src/acc/libsmm_acc/README.md!} ================================================ FILE: docs/guide/3-developer-guide/3-programming/2-accelerator-backend/3-libsmm_ocl/1-autotune.md ================================================ title: Autotune {!./src/acc/opencl/smm/README-autotune.md!} ================================================ FILE: docs/guide/3-developer-guide/3-programming/2-accelerator-backend/3-libsmm_ocl/2-bulktune.md ================================================ title: Parameters {!./src/acc/opencl/smm/README-bulktune.md!} ================================================ FILE: docs/guide/3-developer-guide/3-programming/2-accelerator-backend/3-libsmm_ocl/index.md ================================================ title: OpenCL {!./src/acc/opencl/README.md!} {!./src/acc/opencl/smm/README.md!} ================================================ FILE: docs/guide/3-developer-guide/3-programming/2-accelerator-backend/index.md ================================================ title: Accelerator Backend {!./src/acc/README.md!} ================================================ FILE: docs/guide/3-developer-guide/3-programming/index.md ================================================ title: Programming ================================================ FILE: docs/guide/3-developer-guide/4-performance/1-insights.md ================================================ title: Insights # Insights into Performance ## Read Timing & Statistics Reports At the end of an output file, a report of DBCSR's statistics and timings can be found. ### Statistics The STATISTICS section of the output file provides some information on matrix-matrix multiplications that were run and their performance characteristics. Example: ``` ------------------------------------------------------------------------------- - - - DBCSR STATISTICS - - - ------------------------------------------------------------------------------- COUNTER TOTAL BLAS SMM ACC flops 23 x 23 x 23 687272462200 0.0% 0.0% 100.0% flops inhomo. stacks 0 0.0% 0.0% 0.0% flops total 687.272462E+09 0.0% 0.0% 100.0% flops max/rank 687.272462E+09 0.0% 0.0% 100.0% matmuls inhomo. stacks 0 0.0% 0.0% 0.0% matmuls total 28243300 0.0% 0.0% 100.0% number of processed stacks 1600 0.0% 0.0% 100.0% average stack size 0.0 0.0 17652.1 marketing flops 1.076458E+12 ------------------------------------------------------------------------------- # multiplications 50 max memory usage/rank 16.650822E+09 # max total images/rank 1 # max 3D layers 1 # MPI messages exchanged 0 MPI messages size (bytes): total size 0.000000E+00 min size 0.000000E+00 max size 0.000000E+00 average size 0.000000E+00 MPI breakdown and total messages size (bytes): size <= 128 0 0 128 < size <= 8192 0 0 8192 < size <= 32768 0 0 32768 < size <= 131072 0 0 131072 < size <= 4194304 0 0 4194304 < size <= 16777216 0 0 16777216 < size 0 0 ------------------------------------------------------------------------------- ``` #### How to Read the Columns - `TOTAL`: total flops - `BLAS`: percentage of flops run on BLAS (this could be CUBLAS or HIPBLAS) - `SMM`: percentage of flops run on SMM (libsmm or libxsmm, CPU) - `ACC`: percentage of flops run on ACC (libsmm_acc, DBCSR's GPU-accelerated backend) #### How to Read the Rows (Counters) Every time "matrix-matrix multiplication" is mentionned in this paragraph, it refers *not* to the sparse multiplication of large matrices, but the multiplication of small dense blocks that the large sparse matrix was decomposed into. - `flops 23 x 23 x 23`: indicates that batched matrix-matrix multiplication kernels with matrix dimensions (m, n, k) = (23, 23, 23) was run, and provides info on its flops. If several batched matrix-matrix multiplications of different matrix dimensions (m, n, k) were run, they would appear as subsequent separate rows. - `flops inhomo. stacks`: flops of so-called "inhomogeneous stacks". These are stacks of batched-matrix-matrix multiplications where not all multiplications contained have the same matrix dimensions (m, n, k). - `flops total`: total flops for all stacks of matrix-matrix multiplication. - `flops max/rank`: flops of the MPI rank with the most flops. - `matmuls inhomo. stacks`: number of matrix-matrix multiplications run in inhomogeneous stacks. - `matmuls total`: number of matrix-matrix multiplications run in total. - `number of processed stacks`: number of stacks of batched matrix-matrix multiplication. - `average stack size`: average over all stacks of the stack size (i.e. the number of matrix-matrix multiplications that a stack contains). ### Timings Example of the statistics section of the output file: ``` ------------------------------------------------------------------------------- - - - T I M I N G - - - ------------------------------------------------------------------------------- SUBROUTINE CALLS ASD SELF TIME TOTAL TIME MAXRANK MAXIMUM AVERAGE MAXIMUM AVERAGE MAXIMUM dbcsr_performance_driver 1 1.0 0.000 0.000 102.563 102.563 0 dbcsr_perf_multiply_low 1 2.0 0.002 0.002 102.563 102.563 0 perf_multiply 1 3.0 0.003 0.003 102.077 102.077 0 [...] ------------------------------------------------------------------------------- ``` The columns describe: - `SUBROUTINE`: the name of the fortran subroutine (or c++ function) timed. - `CALLS`: number of times the subroutine was called. - `ASD`: average stack depth: the average number of entries on the call stack when this subroutine is called. - `SELF TIME`: how much time is spent in the subroutine, or in non-timed subroutines called by this subroutine. - `AVERAGE`: the self time averaged over all MPI ranks, - `MAXIMUM`: the self time maximum over all MPI ranks, - `AVERAGE` and `MAXIMUM` can be used to locate load-imbalance or synchronization points. - `TOTAL TIME`: how much time is spent in the subroutine, including the time spent in timed subroutines. - `AVERAGE`: averaged over all MPI ranks - `MAXIMUM`: maximum over all MPI ranks - `AVERAGE` and `MAXIMUM` can be used to locate load-imbalance or synchronization points. - `MAXRANKS`: #### Time spent in Just-In-Time (JIT) Compilation For performance debugging and in order to check how much time a program spends doing JIT, look for the functions `jit_kernel_multiply` and `jit_kernel_transpose`. #### How to Time a Function By default, the most important subroutines are timed in DBCSR. If you want to time a subroutine or function that is not timed already, call `timeset` with a routine name and a handle at the beginning of the function, and `timestop` with the same handle at the end of the function. For examples, just `grep` for `timeset` and `timestop` in the codebase. This can be done both in fortran code and in the c++ code. ================================================ FILE: docs/guide/3-developer-guide/4-performance/2-just-in-time-compilation.md ================================================ title: JIT # Just-In-Time (JIT) Compilation DBCSR's GPU backends rely on templated kernels for batched matrix multiplication and matrix transpose (CUDA/HIP as well as OpenCL backend). If DBCSR were to compile kernels for all possible triplets or MxNxKs (in the case of transposes, for all possible MxNs) ahead-of-time (AOT), it would not only bloat the size of the library but also take a long time to compile the code. Reducing the number of triplets to a "practical set" would either sacrifice performance or limit potential acceleration to certain workloads. Instead, kernels are generated Just-In-Time (JIT) or "on the fly", i.e., at runtime, as they are requested by the application and workload. For LIBSMM_ACC, the JIT infrastructure is based on [CUDA NVRTC](https://docs.nvidia.com/cuda/nvrtc/), a runtime compilation library for CUDA C++. The OpenCL based LIBSMM relies on the OpenCL runtime library to perform JIT compilation. No matter which runtime is used and whether JIT compilation is in the order of ~500ms per kernel or not, the compilation time becomes significant during the process of auto-tuning a set of kernels. Therefore extra documentation is provided in either case (CUDA/HIP or OpenCL) on how to collect tuned parameters or to eventually submit a set of tuned parameters for the benefit of others. To check how much time a program spends for JIT compilation, GPU-backends contribute `jit_kernel_multiply` and `jit_kernel_transpose` entries to the [timings report](1-insights.html). This report appears when the application terminates (final output). The OpenCL backend supports additional [Runtime Settings](../../3-developer-guide/3-programming/2-accelerator-backend/3-opencl-backend.html), e.g., to report compilation time on a per-kernel basis (`ACC_OPENCL_VERBOSE=2`). ================================================ FILE: docs/guide/3-developer-guide/4-performance/index.md ================================================ title: Performance ================================================ FILE: docs/guide/3-developer-guide/index.md ================================================ title: Developer Guide ================================================ FILE: docs/guide/index.md ================================================ title: Guide ================================================ FILE: examples/.gitignore ================================================ *.x ================================================ FILE: examples/CMakeLists.txt ================================================ set(DBCSR_PROGRAM_SRCS_FTN dbcsr_example_1.F dbcsr_example_2.F dbcsr_example_3.F dbcsr_tensor_example_1.F) set(DBCSR_PROGRAM_SRCS_CPP dbcsr_example_3.cpp dbcsr_tensor_example_2.cpp) # Compile Fortran examples foreach (dbcsr_program_src ${DBCSR_PROGRAM_SRCS_FTN}) get_filename_component(dbcsr_program_name ${dbcsr_program_src} NAME_WE) add_executable(${dbcsr_program_name} ${dbcsr_program_src}) target_link_libraries(${dbcsr_program_name} dbcsr) if (OpenMP_FOUND) target_link_libraries(${dbcsr_program_name} OpenMP::OpenMP_Fortran) endif () # with the Intel compiler CMake 3.12 seems to forget that the source is # actually Fortran and needs to be told explicitly: if (NOT "${CMAKE_Fortran_COMPILER_ID}" STREQUAL IntelLLVM) set_target_properties(${dbcsr_program_name} PROPERTIES LINKER_LANGUAGE Fortran) endif () endforeach () # override -Werror for certain translation units if ((CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") AND (CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)) set_source_files_properties(dbcsr_tensor_example_1.F PROPERTIES COMPILE_FLAGS -Wno-error) endif () # Compile C++ examples if (WITH_C_API) foreach (dbcsr_program_src ${DBCSR_PROGRAM_SRCS_CPP}) get_filename_component(dbcsr_program_name ${dbcsr_program_src} NAME_WE) set(dbcsr_program_name ${dbcsr_program_name}_cpp) add_executable(${dbcsr_program_name} ${dbcsr_program_src}) target_link_libraries(${dbcsr_program_name} dbcsr_c MPI::MPI_CXX) if (NOT "${CMAKE_Fortran_COMPILER_ID}" STREQUAL IntelLLVM) set_target_properties(${dbcsr_program_name} PROPERTIES LINKER_LANGUAGE Fortran) endif () if (OpenMP_FOUND) target_compile_options(${dbcsr_program_name} PRIVATE ${OpenMP_CXX_FLAGS}) target_link_libraries(${dbcsr_program_name} OpenMP::OpenMP_Fortran) endif () if (CMAKE_CXX_COMPILER_ID STREQUAL "Cray") # for recent Cray compiler versions CMake doesn't know target_compile_options(${dbcsr_program_name} PRIVATE "-hstd=c++14") else () target_compile_features(${dbcsr_program_name} PRIVATE cxx_std_14) endif () endforeach () endif () # =================================== DOCUMENTATION GENERATION Copy example # source files into the build directory so that their documentation can be # generated by FORD set(DBCSR_PROGRAM_SRCS ${DBCSR_PROGRAM_SRCS_FTN} ${DBCSR_PROGRAM_SRCS_CPP}) # Make a list of the copy commands set(example_copy_commands) foreach (example ${DBCSR_PROGRAM_SRCS}) list( APPEND example_copy_commands COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/examples/${example} ${CMAKE_BINARY_DIR}/examples) endforeach () add_custom_target( doc_copy_examples COMMENT "Copy examples for documentation generation" COMMAND mkdir -p ${CMAKE_BINARY_DIR}/examples ${example_copy_commands} VERBATIM) ================================================ FILE: examples/README.md ================================================ # Examples - [`dbcsr_example_1`](dbcsr_example_1.F): how to create a dbcsr matrix (fortran) - [`dbcsr_example_2`](dbcsr_example_2.F): how to set a dbcsr matrix (fortran) - `dbcsr_example_3`: how to multiply two dbcsr matrices ([fortran](dbcsr_example_3.F) and [cpp](dbcsr_example_3.cpp)) - [`dbcsr_tensor_example_1`](dbcsr_tensor_example_1.F): how to create a dbcsr matrix (fortran) - the example can be run with different parameters, controlling block size, sparsity, verbosity and more - [`dbcsr_tensor_example_2`](dbcsr_tensor_example_2.cpp): tensor contraction example (cpp) - tensor1 x tensor2 = tensor3, (13|2)x(54|21)=(3|45) ## Build Compile the DBCSR library, using `-DUSE_MPI=ON -DWITH_EXAMPLES=ON`. The examples require MPI. Furthermore, if you are using threading, MPI_THREAD_FUNNELED mode is required. ## Run You can run the examples, for instance from the `build` directory, as follows: ```bash srun -N 1 --ntasks-per-core 2 --ntasks-per-node 12 --cpus-per-task 2 ./examples/dbcsr_example_1 ``` ### Run tensor examples How to run (this example and DBCSR for tensors in general): * best performance is obtained by running with mpi and one openmp thread per rank. * ideally number of mpi ranks should be composed of small prime factors (e.g. powers of 2). * for sparse data & heterogeneous block sizes, DBCSR should be run on CPUs with libxsmm backend. * for dense data best performance is obtained by choosing homogeneous block sizes of 64 and by compiling with GPU support. ================================================ FILE: examples/dbcsr_example_1.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! PROGRAM dbcsr_example_1 !! DBCSR example 1: !! This example shows how to create a DBCSR matrix USE mpi USE dbcsr_api, ONLY: & dbcsr_create, dbcsr_distribution_new, dbcsr_distribution_release, dbcsr_distribution_type, & dbcsr_finalize, dbcsr_finalize_lib, dbcsr_init_lib, dbcsr_print, dbcsr_release, & dbcsr_type, dbcsr_type_no_symmetry, dbcsr_type_real_8 IMPLICIT NONE TYPE(dbcsr_type) :: matrix_a INTEGER, DIMENSION(:), POINTER :: col_blk_sizes, row_blk_sizes INTEGER :: group, numnodes, mynode, nblkrows_total, & nblkcols_total, ierr INTEGER, DIMENSION(2) :: npdims INTEGER, DIMENSION(:), POINTER :: col_dist, row_dist TYPE(dbcsr_distribution_type) :: dist LOGICAL, DIMENSION(2) :: period = .TRUE. !$ INTEGER :: provided_tsl !*************************************************************************************** ! ! initialize mpi !$ IF (.FALSE.) THEN CALL mpi_init(ierr) IF (ierr /= 0) STOP "Error in MPI_Init" !$ ELSE !$ CALL mpi_init_thread(MPI_THREAD_FUNNELED, provided_tsl, ierr) !$ IF (ierr /= 0) STOP "Error in MPI_Init_thread" !$ IF (provided_tsl .LT. MPI_THREAD_FUNNELED) THEN !$ STOP "MPI library does not support the requested level of threading (MPI_THREAD_FUNNELED)." !$ END IF !$ END IF ! ! setup the mpi environment CALL mpi_comm_size(MPI_COMM_WORLD, numnodes, ierr) IF (ierr /= 0) STOP "Error in MPI_Comm_size" npdims(:) = 0 CALL mpi_dims_create(numnodes, 2, npdims, ierr) IF (ierr /= 0) STOP "Error in MPI_Dims_create" CALL mpi_cart_create(MPI_COMM_WORLD, 2, npdims, period, .FALSE., group, ierr) IF (ierr /= 0) STOP "Error in MPI_Cart_create" CALL mpi_comm_rank(MPI_COMM_WORLD, mynode, ierr) IF (ierr /= 0) STOP "Error in MPI_Comm_rank" WRITE (*, *) 'mynode ', mynode, ' numnodes', numnodes !*************************************************************************************** ! ! initialize the DBCSR library CALL dbcsr_init_lib(MPI_COMM_WORLD) ! ! the matrix will contain nblkrows_total row blocks and nblkcols_total column blocks nblkrows_total = 4 nblkcols_total = 3 ! ! set the block size for each row and column ALLOCATE (row_blk_sizes(nblkrows_total), col_blk_sizes(nblkcols_total)) row_blk_sizes(:) = 2 col_blk_sizes(:) = 3 ! ! set the row and column distributions (here the distribution is set randomly) CALL random_dist(row_dist, nblkrows_total, npdims(1)) CALL random_dist(col_dist, nblkcols_total, npdims(2)) ! ! set the DBCSR distribution object CALL dbcsr_distribution_new(dist, group=group, row_dist=row_dist, col_dist=col_dist, reuse_arrays=.TRUE.) ! ! create the DBCSR matrix, i.e. a double precision non symmetric matrix ! with nblkrows_total x nblkcols_total blocks and ! sizes "sum(row_blk_sizes)" x "sum(col_blk_sizes)", distributed as ! specified by the dist object CALL dbcsr_create(matrix=matrix_a, & name="this is my matrix a", & dist=dist, & matrix_type=dbcsr_type_no_symmetry, & row_blk_size=row_blk_sizes, & col_blk_size=col_blk_sizes, & data_type=dbcsr_type_real_8, & reuse_arrays=.TRUE.) ! ! finalize the DBCSR matrix CALL dbcsr_finalize(matrix_a) ! ! print the *empty* matrix CALL dbcsr_print(matrix_a) ! ! release the matrix CALL dbcsr_release(matrix_a) ! ! release the distribution CALL dbcsr_distribution_release(dist) !*************************************************************************************** ! ! free comm CALL mpi_comm_free(group, ierr) IF (ierr /= 0) STOP "Error in MPI_Comm_free" ! finalize the DBCSR library CALL dbcsr_finalize_lib() ! ! finalize mpi CALL mpi_finalize(ierr) IF (ierr /= 0) STOP "Error in MPI_finalize" !*************************************************************************************** CONTAINS SUBROUTINE random_dist(dist_array, dist_size, nbins) INTEGER, DIMENSION(:), INTENT(out), POINTER :: dist_array INTEGER, INTENT(in) :: dist_size, nbins INTEGER :: i ALLOCATE (dist_array(dist_size)) DO i = 1, dist_size dist_array(i) = MODULO(nbins - i, nbins) END DO END SUBROUTINE random_dist END PROGRAM dbcsr_example_1 ================================================ FILE: examples/dbcsr_example_2.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! PROGRAM dbcsr_example_2 !! DBCSR example 2: !! This example shows how to set a DBCSR matrix USE mpi USE dbcsr_api, ONLY: & dbcsr_create, dbcsr_distribution_get, dbcsr_distribution_new, dbcsr_distribution_release, & dbcsr_distribution_type, dbcsr_finalize, dbcsr_finalize_lib, dbcsr_get_stored_coordinates, & dbcsr_init_lib, dbcsr_nblkcols_total, dbcsr_nblkrows_total, dbcsr_print, dbcsr_put_block, & dbcsr_release, dbcsr_type, dbcsr_type_no_symmetry, dbcsr_type_real_8 IMPLICIT NONE TYPE(dbcsr_type) :: matrix_a INTEGER, DIMENSION(:), POINTER :: col_blk_sizes, row_blk_sizes INTEGER :: group, numnodes, mynode, ierr, & nblkrows_total, nblkcols_total, node_holds_blk, max_nze, nze, & row, col, row_s, col_s, max_row_size, max_col_size INTEGER, DIMENSION(2) :: npdims INTEGER, DIMENSION(:), POINTER :: col_dist, row_dist TYPE(dbcsr_distribution_type) :: dist REAL(KIND=KIND(0.0D0)), DIMENSION(:), ALLOCATABLE :: values LOGICAL, DIMENSION(2) :: period = .TRUE. !$ INTEGER :: provided_tsl !*************************************************************************************** ! ! initialize mpi !$ IF (.FALSE.) THEN CALL mpi_init(ierr) IF (ierr /= 0) STOP "Error in MPI_Init" !$ ELSE !$ CALL mpi_init_thread(MPI_THREAD_FUNNELED, provided_tsl, ierr) !$ IF (ierr /= 0) STOP "Error in MPI_Init_thread" !$ IF (provided_tsl .LT. MPI_THREAD_FUNNELED) THEN !$ STOP "MPI library does not support the requested level of threading (MPI_THREAD_FUNNELED)." !$ END IF !$ END IF ! ! setup the mpi environment CALL mpi_comm_size(MPI_COMM_WORLD, numnodes, ierr) IF (ierr /= 0) STOP "Error in MPI_Comm_size" npdims(:) = 0 CALL mpi_dims_create(numnodes, 2, npdims, ierr) IF (ierr /= 0) STOP "Error in MPI_Dims_create" CALL mpi_cart_create(MPI_COMM_WORLD, 2, npdims, period, .FALSE., group, ierr) IF (ierr /= 0) STOP "Error in MPI_Cart_create" CALL mpi_comm_rank(MPI_COMM_WORLD, mynode, ierr) IF (ierr /= 0) STOP "Error in MPI_Comm_rank" WRITE (*, *) 'mynode ', mynode, ' numnodes', numnodes !*************************************************************************************** ! ! initialize the DBCSR library CALL dbcsr_init_lib(MPI_COMM_WORLD) ! ! the matrix will contain nblkrows_total row blocks and nblkcols_total column blocks nblkrows_total = 4 nblkcols_total = 4 ! ! set the block size for each row and column ALLOCATE (row_blk_sizes(nblkrows_total), col_blk_sizes(nblkcols_total)) row_blk_sizes(:) = 2 col_blk_sizes(:) = 2 ! ! set the row and column distributions (here the distribution is set randomly) CALL random_dist(row_dist, nblkrows_total, npdims(1)) CALL random_dist(col_dist, nblkcols_total, npdims(2)) ! ! set the DBCSR distribution object CALL dbcsr_distribution_new(dist, group=group, row_dist=row_dist, col_dist=col_dist, reuse_arrays=.TRUE.) ! ! create the DBCSR matrix, i.e. a double precision non symmetric matrix ! with nblkrows_total x nblkcols_total blocks and ! sizes "sum(row_blk_sizes)" x "sum(col_blk_sizes)", distributed as ! specified by the dist object CALL dbcsr_create(matrix=matrix_a, & name="this is my matrix a", & dist=dist, & matrix_type=dbcsr_type_no_symmetry, & row_blk_size=row_blk_sizes, & col_blk_size=col_blk_sizes, & data_type=dbcsr_type_real_8) ! ! get the node id from the matrix CALL dbcsr_distribution_get(dist, mynode=mynode) ! ! get the maximum block size of the matrix max_row_size = MAXVAL(row_blk_sizes) max_col_size = MAXVAL(col_blk_sizes) max_nze = max_row_size*max_col_size ! ! allocate a 1d buffer that is needed to put a block ! into the matrix (2d buffer can also be used) ALLOCATE (values(max_nze)) ! ! loop over the blocks, build a tridiagonal matrix DO row = 1, dbcsr_nblkrows_total(matrix_a) DO col = MAX(row - 1, 1), MIN(row + 1, dbcsr_nblkcols_total(matrix_a)) ! ! get the node id that holds this (row, col) block row_s = row; col_s = col CALL dbcsr_get_stored_coordinates(matrix_a, row_s, col_s, node_holds_blk) ! ! put the block on the right node IF (node_holds_blk .EQ. mynode) THEN ! ! get the size of the block nze = row_blk_sizes(row_s)*col_blk_sizes(col_s) ! ! fill the matrix with the random block CALL RANDOM_NUMBER(values(1:nze)) CALL dbcsr_put_block(matrix_a, row_s, col_s, values(1:nze)) END IF END DO END DO DEALLOCATE (values) ! ! finalize the DBCSR matrix CALL dbcsr_finalize(matrix_a) ! ! print the matrix CALL dbcsr_print(matrix_a) ! ! release the matrix CALL dbcsr_release(matrix_a) CALL dbcsr_distribution_release(dist) DEALLOCATE (row_blk_sizes, col_blk_sizes) !*************************************************************************************** ! ! free comm CALL mpi_comm_free(group, ierr) IF (ierr /= 0) STOP "Error in MPI_Comm_free" ! finalize the DBCSR library CALL dbcsr_finalize_lib() ! ! finalize mpi CALL mpi_finalize(ierr) IF (ierr /= 0) STOP "Error in MPI_finalize" !*************************************************************************************** CONTAINS SUBROUTINE random_dist(dist_array, dist_size, nbins) INTEGER, DIMENSION(:), INTENT(out), POINTER :: dist_array INTEGER, INTENT(in) :: dist_size, nbins INTEGER :: i ALLOCATE (dist_array(dist_size)) DO i = 1, dist_size dist_array(i) = MODULO(nbins - i, nbins) END DO END SUBROUTINE random_dist END PROGRAM dbcsr_example_2 ================================================ FILE: examples/dbcsr_example_3.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! PROGRAM dbcsr_example_3 !! DBCSR example 3: !! This example shows how to multiply two dbcsr matrices USE mpi USE dbcsr_api, ONLY: & dbcsr_create, dbcsr_distribution_get, dbcsr_distribution_new, dbcsr_distribution_release, & dbcsr_distribution_type, dbcsr_finalize, dbcsr_finalize_lib, dbcsr_get_stored_coordinates, & dbcsr_init_lib, dbcsr_multiply, dbcsr_nblkcols_total, dbcsr_nblkrows_total, dbcsr_print, & dbcsr_put_block, dbcsr_release, dbcsr_type, dbcsr_type_no_symmetry, dbcsr_type_real_8 IMPLICIT NONE TYPE(dbcsr_type) :: matrix_a, matrix_b, matrix_c INTEGER, DIMENSION(:), POINTER :: col_blk_sizes, row_blk_sizes INTEGER :: group, numnodes, mynode, ierr, & nblkrows_total, nblkcols_total, & node_holds_blk, max_nze, nze, row, col, row_s, col_s, & max_row_size, max_col_size INTEGER, DIMENSION(2) :: npdims INTEGER, DIMENSION(:), POINTER :: col_dist, row_dist TYPE(dbcsr_distribution_type) :: dist REAL(KIND=KIND(0.0D0)), DIMENSION(:), ALLOCATABLE :: values LOGICAL, DIMENSION(2) :: period = .TRUE. !$ INTEGER :: provided_tsl !*************************************************************************************** ! ! initialize mpi !$ IF (.FALSE.) THEN CALL mpi_init(ierr) IF (ierr /= 0) STOP "Error in MPI_Init" !$ ELSE !$ CALL mpi_init_thread(MPI_THREAD_FUNNELED, provided_tsl, ierr) !$ IF (ierr /= 0) STOP "Error in MPI_Init_thread" !$ IF (provided_tsl .LT. MPI_THREAD_FUNNELED) THEN !$ STOP "MPI library does not support the requested level of threading (MPI_THREAD_FUNNELED)." !$ END IF !$ END IF ! ! setup the mpi environment CALL mpi_comm_size(MPI_COMM_WORLD, numnodes, ierr) IF (ierr /= 0) STOP "Error in MPI_Comm_size" npdims(:) = 0 CALL mpi_dims_create(numnodes, 2, npdims, ierr) IF (ierr /= 0) STOP "Error in MPI_Dims_create" CALL mpi_cart_create(MPI_COMM_WORLD, 2, npdims, period, .FALSE., group, ierr) IF (ierr /= 0) STOP "Error in MPI_Cart_create" CALL mpi_comm_rank(MPI_COMM_WORLD, mynode, ierr) IF (ierr /= 0) STOP "Error in MPI_Comm_rank" WRITE (*, *) 'mynode ', mynode, ' numnodes', numnodes !*************************************************************************************** ! ! initialize the DBCSR library CALL dbcsr_init_lib(MPI_COMM_WORLD) ! ! the matrix will contain nblkrows_total row blocks and nblkcols_total column blocks nblkrows_total = 4 nblkcols_total = 4 ! ! set the block size for each row and column ALLOCATE (row_blk_sizes(nblkrows_total), col_blk_sizes(nblkcols_total)) row_blk_sizes(:) = 2 col_blk_sizes(:) = 2 ! ! set the row and column distributions (here the distribution is set randomly) CALL random_dist(row_dist, nblkrows_total, npdims(1)) CALL random_dist(col_dist, nblkcols_total, npdims(2)) ! ! set the dbcsr distribution object CALL dbcsr_distribution_new(dist, group=group, row_dist=row_dist, col_dist=col_dist, reuse_arrays=.TRUE.) ! ! create the dbcsr matrices, i.e. a double precision non symmetric matrix ! with nblkrows_total x nblkcols_total blocks and ! sizes "sum(row_blk_sizes)" x "sum(col_blk_sizes)", distributed as ! specified by the dist object CALL dbcsr_create(matrix=matrix_a, & name="this is my matrix a", & dist=dist, & matrix_type=dbcsr_type_no_symmetry, & row_blk_size=row_blk_sizes, & col_blk_size=col_blk_sizes, & data_type=dbcsr_type_real_8) CALL dbcsr_create(matrix=matrix_b, & name="this is my matrix b", & dist=dist, & matrix_type=dbcsr_type_no_symmetry, & row_blk_size=row_blk_sizes, & col_blk_size=col_blk_sizes, & data_type=dbcsr_type_real_8) CALL dbcsr_create(matrix=matrix_c, & name="this is my matrix c", & dist=dist, & matrix_type=dbcsr_type_no_symmetry, & row_blk_size=row_blk_sizes, & col_blk_size=col_blk_sizes, & data_type=dbcsr_type_real_8) ! get the maximum block size of the matrix max_row_size = MAXVAL(row_blk_sizes) max_col_size = MAXVAL(col_blk_sizes) max_nze = max_row_size*max_col_size ! ! set up the a matrix CALL dbcsr_distribution_get(dist, mynode=mynode) ALLOCATE (values(max_nze)) DO row = 1, dbcsr_nblkrows_total(matrix_a) DO col = MAX(row - 1, 1), MIN(row + 1, dbcsr_nblkcols_total(matrix_a)) row_s = row; col_s = col CALL dbcsr_get_stored_coordinates(matrix_a, row_s, col_s, node_holds_blk) IF (node_holds_blk .EQ. mynode) THEN nze = row_blk_sizes(row_s)*col_blk_sizes(col_s) CALL RANDOM_NUMBER(values(1:nze)) CALL dbcsr_put_block(matrix_a, row_s, col_s, values(1:nze)) END IF END DO END DO DEALLOCATE (values) ! ! set up the b matrix CALL dbcsr_distribution_get(dist, mynode=mynode) ALLOCATE (values(max_nze)) DO row = 1, dbcsr_nblkrows_total(matrix_b) DO col = MAX(row - 1, 1), MIN(row + 1, dbcsr_nblkcols_total(matrix_b)) row_s = row; col_s = col CALL dbcsr_get_stored_coordinates(matrix_b, row_s, col_s, node_holds_blk) IF (node_holds_blk .EQ. mynode) THEN nze = row_blk_sizes(row_s)*col_blk_sizes(col_s) CALL RANDOM_NUMBER(values(1:nze)) CALL dbcsr_put_block(matrix_b, row_s, col_s, values(1:nze)) END IF END DO END DO DEALLOCATE (values) ! ! finalize the dbcsr matrices CALL dbcsr_finalize(matrix_a) CALL dbcsr_finalize(matrix_b) CALL dbcsr_finalize(matrix_c) ! ! multiply the matrices CALL dbcsr_multiply('N', 'N', 1.0D0, matrix_a, matrix_b, 0.0D0, matrix_c) ! ! print the matrices CALL dbcsr_print(matrix_a) CALL dbcsr_print(matrix_b) CALL dbcsr_print(matrix_c) ! ! release the matrices CALL dbcsr_release(matrix_a) CALL dbcsr_release(matrix_b) CALL dbcsr_release(matrix_c) CALL dbcsr_distribution_release(dist) DEALLOCATE (row_blk_sizes, col_blk_sizes) ! free comm CALL mpi_comm_free(group, ierr) IF (ierr /= 0) STOP "Error in MPI_Comm_free" ! finalize the DBCSR library CALL dbcsr_finalize_lib() ! ! finalize mpi CALL mpi_finalize(ierr) IF (ierr /= 0) STOP "Error in MPI_finalize" !*************************************************************************************** CONTAINS SUBROUTINE random_dist(dist_array, dist_size, nbins) INTEGER, DIMENSION(:), INTENT(out), POINTER :: dist_array INTEGER, INTENT(in) :: dist_size, nbins INTEGER :: i ALLOCATE (dist_array(dist_size)) DO i = 1, dist_size dist_array(i) = MODULO(nbins - i, nbins) END DO END SUBROUTINE random_dist END PROGRAM dbcsr_example_3 ================================================ FILE: examples/dbcsr_example_3.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #include #include #include #include #include #include #include #include #include // Random distribution by using round-robin assignment // of blocks to processors std::vector random_dist(int dist_size, int nbins) { std::vector dist(dist_size); for (int i = 0; i < dist_size; i++) dist[i] = i % nbins; return dist; } // DBCSR example 3 // This example shows how to multiply two DBCSR matrices int main(int argc, char* argv[]) { // initialize MPI MPI_Init(&argc, &argv); // setup the mpi environment int mpi_size, mpi_rank; MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); // make 2D grid int dims[2] = {0}; MPI_Dims_create(mpi_size, 2, dims); int periods[2] = {1}; int reorder = 0; MPI_Comm group; MPI_Cart_create(MPI_COMM_WORLD, 2, dims, periods, reorder, &group); int coord[2]; MPI_Cart_coords(group, mpi_rank, 2, coord); for (int i = 0; i != mpi_size; ++i) { if (mpi_rank == i) { std::cout << "I'm processor " << mpi_rank << " over " << mpi_size << " proc" << ", (" << coord[0] << ", " << coord[1] << ") in the 2D grid" << std::endl; } MPI_Barrier(MPI_COMM_WORLD); } // initialize the DBCSR library c_dbcsr_init_lib(MPI_COMM_WORLD, nullptr); // Total number of blocks int nrows_1 = 4; int ncols_1 = 5; int nrows_2 = 5; int ncols_2 = 4; // Block sizes std::vector row_blk_sizes_1 = {2, 3, 5, 2}; std::vector col_blk_sizes_1 = {3, 3, 4, 6, 2}; std::vector row_blk_sizes_2 = col_blk_sizes_1; std::vector col_blk_sizes_2 = {5, 2, 5, 3}; auto row_dist_1 = random_dist(nrows_1, dims[0]); auto col_dist_1 = random_dist(ncols_1, dims[1]); auto row_dist_2 = random_dist(nrows_2, dims[0]); auto col_dist_2 = random_dist(ncols_2, dims[1]); dbcsr_distribution dist1 = nullptr; dbcsr_distribution dist2 = nullptr; dbcsr_distribution dist3 = nullptr; //create distributions c_dbcsr_distribution_new(&dist1, group, row_dist_1.data(), row_dist_1.size(), col_dist_1.data(), col_dist_1.size()); c_dbcsr_distribution_new(&dist2, group, row_dist_2.data(), row_dist_2.size(), col_dist_2.data(), col_dist_2.size()); c_dbcsr_distribution_new(&dist3, group, row_dist_1.data(), row_dist_1.size(), col_dist_2.data(), col_dist_2.size()); // Fill all blocks, i.e. dense matrices auto fill_matrix = [&](void* matrix, std::vector& irblks, std::vector& icblks) { std::vector block; std::vector loc_irblks, loc_icblks; for (int i = 0; i != (int)irblks.size(); ++i) { int blk_proc = -1; int ix = irblks[i]; int jx = icblks[i]; c_dbcsr_get_stored_coordinates(matrix, ix, jx, &blk_proc); if (mpi_rank == blk_proc) { loc_irblks.push_back(ix); loc_icblks.push_back(jx); } } c_dbcsr_reserve_blocks(matrix, loc_irblks.data(), loc_icblks.data(), loc_irblks.size()); void* iter = nullptr; c_dbcsr_iterator_start(&iter, matrix, nullptr, nullptr, nullptr, nullptr, nullptr); while (c_dbcsr_iterator_blocks_left(iter)) { int i = -1; int j = -1; int nblk = -1; int rsize = -1; int csize = -1; bool tr = false; double* blk = nullptr; c_dbcsr_iterator_next_2d_block_d(iter, &i, &j, &blk, &tr, &nblk, &rsize, &csize, nullptr, nullptr); std::generate(blk, blk + rsize * csize, [&]() { return static_cast(std::rand()) / RAND_MAX; }); } c_dbcsr_iterator_stop(&iter); }; dbcsr_matrix matrix_a = nullptr; dbcsr_matrix matrix_b = nullptr; dbcsr_matrix matrix_c = nullptr; c_dbcsr_create_new(&matrix_a, "matrix a", dist1, dbcsr_type_no_symmetry, row_blk_sizes_1.data(), row_blk_sizes_1.size(), col_blk_sizes_1.data(), col_blk_sizes_1.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); c_dbcsr_create_new(&matrix_b, "matrix b", dist2, dbcsr_type_no_symmetry, row_blk_sizes_2.data(), row_blk_sizes_2.size(), col_blk_sizes_2.data(), col_blk_sizes_2.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); c_dbcsr_create_new(&matrix_c, "matrix c", dist3, dbcsr_type_no_symmetry, row_blk_sizes_1.data(), row_blk_sizes_1.size(), col_blk_sizes_2.data(), col_blk_sizes_2.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); // indices of non-zero blocks std::vector irblks_1 = {0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3}; std::vector icblks_1 = {0, 1, 2, 4, 0, 2, 3, 1, 3, 4, 0, 1, 2}; std::vector irblks_2 = {0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4}; std::vector icblks_2 = {0, 2, 3, 0, 1, 2, 3, 0, 2, 3, 1, 2, 3, 0, 1, 2, 3}; std::vector irblks_3 = {0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3}; std::vector icblks_3 = {0, 1, 2, 3, 0, 2, 3, 1, 2, 3, 0, 1, 2, 3}; fill_matrix(matrix_a, irblks_1, icblks_1); c_dbcsr_finalize(matrix_a); fill_matrix(matrix_b, irblks_2, icblks_2); c_dbcsr_finalize(matrix_b); fill_matrix(matrix_c, irblks_3, icblks_3); c_dbcsr_finalize(matrix_c); // Compute C = 3.0 * A * B + 2.0 * C c_dbcsr_multiply_d('N', 'N', 3.0, matrix_a, matrix_b, 2.0, matrix_c, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); c_dbcsr_print(matrix_c); // release the matrices c_dbcsr_release(&matrix_a); c_dbcsr_release(&matrix_b); c_dbcsr_release(&matrix_c); c_dbcsr_distribution_release(&dist1); c_dbcsr_distribution_release(&dist2); c_dbcsr_distribution_release(&dist3); MPI_Comm_free(&group); // finalize the DBCSR library c_dbcsr_finalize_lib(); // finalize MPI MPI_Finalize(); return 0; } ================================================ FILE: examples/dbcsr_tensor_example_1.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! program dbcsr_tensor_example_1 !! Sparse tensor contraction example use mpi use dbcsr_api, only: & dbcsr_type, dbcsr_distribution_type, dbcsr_init_lib, dbcsr_distribution_new, & dbcsr_type_no_symmetry, dbcsr_create, dbcsr_iterator_start, dbcsr_iterator_blocks_left, & dbcsr_iterator_stop, dbcsr_iterator_next_block, dbcsr_iterator_type, dbcsr_put_block, & dbcsr_reserve_blocks, dbcsr_scalar, dbcsr_finalize_lib, dbcsr_distribution_release, & dbcsr_nblkrows_total, dbcsr_type_real_8, dbcsr_release, dbcsr_nblkcols_total, dbcsr_finalize, & dbcsr_get_stored_coordinates, dbcsr_get_info, dbcsr_filter, dbcsr_checksum use dbcsr_tensor_api, only: & dbcsr_t_create, dbcsr_t_copy_matrix_to_tensor, & dbcsr_t_pgrid_type, dbcsr_t_type, dbcsr_t_distribution_type, dbcsr_t_nblks_total, & dbcsr_t_reserve_blocks, dbcsr_t_iterator_start, dbcsr_t_iterator_blocks_left, & dbcsr_t_iterator_next_block, dbcsr_t_iterator_stop, dbcsr_t_default_distvec, dbcsr_t_put_block, & dbcsr_t_copy, dbcsr_t_distribution_new, dbcsr_t_distribution_destroy, dbcsr_t_write_blocks, dbcsr_t_contract, & dbcsr_t_copy_tensor_to_matrix, dbcsr_t_destroy, dbcsr_t_pgrid_destroy, dbcsr_t_nblks_total, & dbcsr_t_pgrid_create, dbcsr_t_iterator_type, dbcsr_t_get_stored_coordinates, dbcsr_t_get_info, dbcsr_t_filter, & dbcsr_t_checksum, dbcsr_t_clear, dbcsr_t_batched_contract_init, dbcsr_t_batched_contract_finalize use iso_fortran_env, only: & output_unit, real64, int64 ! -------------------------------------------------------------------------------------------------- ! this example implements the sparse tensor contraction (einstein notation) ! c(n,o) = c(n,o) + a(i,j,k) x a(l,m,k) x b(i,l,n) x (b(m,o,j) + b(o,m,j)) ! ! the tensors have the following shape and entries: ! a: n x n x 2n: a(i,j,k) = exp(-1/3*alpha*((i-j)**2+(i-k)**2+(j-k)**2)) ! b: n x n x n: b(i,j,k) = exp(-1/3*beta*((i-j)**2+(i-k)**2+(j-k)**2)) ! c: n x n: c(i,j) = exp(-1/2*gamma*(i-j)**2) ! ! due to the exponential decay of the tensor elements w.r.t. difference between two indices, ! all tensors are sparse. neglect of small tensor elements is controlled by threshold 'filter_eps': ! tensor blocks with frobenius norm < filter_eps are neglected. ! ! block sizes are set randomly in this example to demonstrate a heterogeneous sparsity pattern, ! these should ideally be adapted to the natural sparsity pattern of the problem ! (e.g. blocks corresponding to a set of gaussian basis functions with same exponent) ! ! DBCSR provides two basic operations in terms of which any tensor contraction can be expressed: ! dbcsr_t_contract: contraction of a pair of tensors ! dbcsr_t_copy: copy supporting redistribution and index permutation ! ! by default, DBCSR supports tensors of ranks between 2 and 4. ! higher ranks can be enabled by adapting 'maxrank' in 'dbcsr_tensor.fypp'. ! ! the above contraction is executed in the following order: ! 1) d(i,j,l,m) = a(i,j,k) x a(l,m,k) ! 2) e(j,m,n) = d(i,j,l,m) x b(i,l,n) ! 3) f(j,m,o) = b(m,o,j) + b(o,m,j) ! 4) c(n,o) = c(n,o) + e(j,m,n) x f(j,m,o) ! ! how to run (this example and DBCSR for tensors in general): ! - best performance is obtained by running with mpi and one openmp thread per rank. ! - ideally number of mpi ranks should be composed of small prime factors (e.g. powers of 2). ! - for sparse data & heterogeneous block sizes, DBCSR should be run on CPUs with libxsmm backend. ! - for dense data best performance is obtained by choosing homogeneous block sizes of 64 and by ! compiling with GPU support. ! -------------------------------------------------------------------------------------------------- ! ------ Parameters ------ ! example type: ! - 1: debug (small & verbose) ! - 2: default (medium size) ! - 3: large (requires parallelism) ! - 4: large, batched contraction to reduce memory (does not require parallelism) integer, parameter :: example_type = 2 ! filter threshold (larger value means more sparse but less accurate) real(real64), parameter :: filter_eps = 1.0e-08_real64 ! number of batches in one dimension (to reduce memory footprint) integer, parameter :: nbatch = 8 ! exponents for gaussians real(real64) :: alpha, beta, gamma ! maximum block size (actual block sizes are random between 1 and this number) integer :: max_bsize ! tensor size in one dimension (n) integer :: nel ! tune sparsity by scaling exponent for calculation of tensor elements real(real64) :: scale_exp ! contract all tensors at once logical :: contract_direct ! contract in batches (memory saving) logical :: contract_batched ! verbosity level ! 0: essential output ! 1: tensor log ! 2: verbose tensor log ! 3: verbose tensor log and print all tensor data integer :: verbosity integer :: & ierr, numnodes, mynode, node_holds_blk, io_unit, io_unit_dbcsr, ind, row, col, blk, group, & i, j, k, l, n, o, i_arr, j_arr, k_arr, l_arr, n_arr, o_arr, blk_size, & min_exp, min_exp_ij, min_exp_ik, min_exp_jk, min_exp_il, min_exp_in, min_exp_ln, & ibatch, jbatch, lbatch, mbatch integer, dimension(:), allocatable :: & offset_i, offset_j, offset_l, offset_k, offset_n, tmp, & start_batch_i, start_batch_j, start_batch_l, start_batch_m, & end_batch_i, end_batch_j, end_batch_l, end_batch_m integer, dimension(:), allocatable, target :: & blk_ind_1, blk_ind_2, blk_ind_3, & blk_size_i, blk_size_j, blk_size_k, blk_size_l, blk_size_m, blk_size_n, blk_size_o, & dist_1, dist_2, dist_3, dist_4 integer, dimension(:, :), allocatable :: bounds_1, bounds_2, bounds_3 integer, dimension(:), pointer :: & row_dist, col_dist, row_blk_size, col_blk_size, row_offset, col_offset integer, dimension(2) :: shape_2d, blk_ind_2d, blk_size_2d, blk_offset_2d, pdims_2d integer, dimension(3) :: blk_ind_3d, pdims_3d, shape_3d, blk_size_3d, blk_offset_3d integer, dimension(4) :: shape_4d, pdims_4d integer, dimension(7) :: shape_ijklmno integer(int64) :: nflop_sum, nflop real(real64) :: cs, t1, t0, time, flop_rate real(real64), dimension(:, :), pointer :: blk_values_2d real(real64), dimension(:, :, :), allocatable :: blk_values_3d logical :: tr logical, dimension(2) :: period = .true. type(dbcsr_type) :: c_matrix type(dbcsr_distribution_type) :: dist_matrix type(dbcsr_iterator_type) :: iter_matrix type(dbcsr_t_pgrid_type) :: pgrid_3d, pgrid_4d type(dbcsr_t_distribution_type) :: dist_tensor type(dbcsr_t_type) :: a_ijk, a_lmk, b_iln, c_no, d_ijlm, e_jmn, f_jmo type(dbcsr_t_iterator_type) :: iter_tensor ! prefactor in exponent for tensor data alpha = 1.0_real64; beta = 0.5_real64; gamma = 2.0_real64 ! parameters for different example types select case (example_type) case (1) nel = 10 max_bsize = 3 verbosity = 3 scale_exp = 10.0_real64 contract_direct = .true. contract_batched = .false. case (2) nel = 200 max_bsize = 10 verbosity = 1 scale_exp = 0.01_real64 contract_direct = .true. contract_batched = .false. case (3) nel = 2000 max_bsize = 10 verbosity = 1 scale_exp = 0.01_real64 contract_direct = .true. contract_batched = .false. case (4) nel = 2000 max_bsize = 10 verbosity = 0 scale_exp = 0.01_real64 contract_direct = .false. contract_batched = .true. end select alpha = alpha*scale_exp beta = beta*scale_exp gamma = gamma*scale_exp ! initialize mpi call mpi_init(ierr) if (ierr /= 0) stop "error in mpi_init" call mpi_comm_size(mpi_comm_world, numnodes, ierr) if (ierr /= 0) stop "error in mpi_comm_size" call mpi_comm_rank(mpi_comm_world, mynode, ierr) if (ierr /= 0) stop "error in mpi_comm_rank" ! initialize DBCSR call dbcsr_init_lib(mpi_comm_world) ! prepare output io_unit_dbcsr = -1 io_unit = -1 if (mynode == 0 .and. verbosity > 0) io_unit_dbcsr = output_unit if (mynode == 0) io_unit = output_unit ! create block sizes call random_blk_sizes(nel, shape_ijklmno(1), blk_size_i) call random_blk_sizes(nel, shape_ijklmno(2), blk_size_j) call random_blk_sizes(2*nel, shape_ijklmno(3), blk_size_k) call random_blk_sizes(nel, shape_ijklmno(4), blk_size_l) call random_blk_sizes(nel, shape_ijklmno(5), blk_size_m) call random_blk_sizes(nel, shape_ijklmno(6), blk_size_n) call random_blk_sizes(nel, shape_ijklmno(7), blk_size_o) ! ------ create matrix c[no] ------ ! shape (number of blocks in each dimension) shape_2d = shape_ijklmno(6:7) ! set up 2-dimensional process grid pdims_2d(:) = 0 call mpi_dims_create(numnodes, 2, pdims_2d, ierr) if (ierr /= 0) stop "error in mpi_dims_create" call mpi_cart_create(mpi_comm_world, 2, pdims_2d, period, .false., group, ierr) if (ierr /= 0) stop "error in mpi_cart_create" ! row and column distribution (mapping blocks in each dimension to process grid coordinate) ! this routine creates a load-balanced distribution for heterogeneous block sizes, alternatively ! any custom distribution can be used allocate (dist_1(shape_2d(1))) call dbcsr_t_default_distvec(shape_2d(1), pdims_2d(1), blk_size_n, dist_1) allocate (dist_2(shape_2d(2))) call dbcsr_t_default_distvec(shape_2d(2), pdims_2d(2), blk_size_o, dist_2) ! convert to pointers because DBCSR matrix api only accepts pointers row_dist => dist_1 col_dist => dist_2 ! create distribution call dbcsr_distribution_new(dist_matrix, group=group, row_dist=row_dist, col_dist=col_dist) deallocate (dist_1, dist_2) ! convert to pointers since DBCSR matrix api only accepts pointers row_blk_size => blk_size_n col_blk_size => blk_size_o ! create DBCSR matrix call dbcsr_create(matrix=c_matrix, name="c[n|o]", dist=dist_matrix, matrix_type=dbcsr_type_no_symmetry, & row_blk_size=row_blk_size, col_blk_size=col_blk_size, data_type=dbcsr_type_real_8) call dbcsr_distribution_release(dist_matrix) ! ------ fill matrix c[no] ------ ! reserve non-zero blocks. for performance it is important to first reserve all present blocks ! before calculating them and inserting them into DBCSR matrix. call dbcsr_get_info(c_matrix, row_blk_offset=row_offset, col_blk_offset=col_offset) ind = 0 allocate (blk_ind_1(0), blk_ind_2(0)) do row = 1, dbcsr_nblkrows_total(c_matrix) do col = 1, dbcsr_nblkcols_total(c_matrix) ! only consider blocks that are local to this rank (according to distribution) call dbcsr_get_stored_coordinates(c_matrix, row, col, node_holds_blk) if (node_holds_blk /= mynode) cycle ! calculate largest matrix element to determine an upper bound for block frobenius norm ! block is reserved only if this estimate is larger than the filter_eps parameter min_exp = block_minabsdiff(row_offset(row), col_offset(col), row_blk_size(row), col_blk_size(col)) blk_size = row_blk_size(row)*col_blk_size(col) if (blk_size*exp(-0.5*gamma*real(min_exp**2)) < filter_eps) cycle ind = ind + 1 ! store index of block to be reserved call move_alloc(blk_ind_1, tmp) allocate (blk_ind_1(ind)) blk_ind_1(:ind - 1) = tmp; deallocate (tmp) call move_alloc(blk_ind_2, tmp) allocate (blk_ind_2(ind)) blk_ind_2(:ind - 1) = tmp; deallocate (tmp) blk_ind_1(ind) = row blk_ind_2(ind) = col end do end do ! reserve blocks call dbcsr_reserve_blocks(c_matrix, blk_ind_1, blk_ind_2) deallocate (blk_ind_1, blk_ind_2) ! iterate over reserved matrix blocks to fill them with data call dbcsr_iterator_start(iter_matrix, c_matrix) do while (dbcsr_iterator_blocks_left(iter_matrix)) call dbcsr_iterator_next_block(iter_matrix, blk_ind_2d(1), blk_ind_2d(2), blk_values_2d, tr, & row_size=blk_size_2d(1), col_size=blk_size_2d(2), & row_offset=blk_offset_2d(1), col_offset=blk_offset_2d(2)) do n_arr = 1, blk_size_2d(1) do o_arr = 1, blk_size_2d(2) ! get matrix element index n & o from block offset n = n_arr + blk_offset_2d(1) - 1 o = o_arr + blk_offset_2d(2) - 1 ! calculate matrix element blk_values_2d(n_arr, o_arr) = exp(-0.5*gamma*real((n - o)**2)) end do end do end do call dbcsr_iterator_stop(iter_matrix) ! finalize the DBCSR matrix call dbcsr_finalize(c_matrix) ! sparsity refinement by removing small blocks call dbcsr_filter(c_matrix, filter_eps) ! create tensor from DBCSR matrix for tensor contraction and copy data ! (alternatively we could have directly created c_matrix as a tensor) call dbcsr_t_create(c_matrix, c_no) call dbcsr_t_copy_matrix_to_tensor(c_matrix, c_no) ! ------ create tensor a[ijk] ------ ! note: tensor api is analogous to matrix api with a few differences of technical and historical nature shape_3d = shape_ijklmno(1:3) ! n-rank tensor requires an n-dimensional process grid: ! 'dbcsr_t_pgrid_create' is analogous to 'mpi_cart_create' but comes with some additional defaults. ! If the tensor dimensions vary significantly in size, it's important for performance to use the ! optional argument 'tensor_dims' to specify the tensor (block) dimensions. pdims_3d(:) = 0 call dbcsr_t_pgrid_create(mpi_comm_world, pdims_3d, pgrid_3d) allocate (dist_1(shape_3d(1))) call dbcsr_t_default_distvec(shape_3d(1), pdims_3d(1), blk_size_i, dist_1) allocate (dist_2(shape_3d(2))) call dbcsr_t_default_distvec(shape_3d(2), pdims_3d(2), blk_size_j, dist_2) allocate (dist_3(shape_3d(3))) call dbcsr_t_default_distvec(shape_3d(3), pdims_3d(3), blk_size_k, dist_3) call dbcsr_t_distribution_new(dist_tensor, pgrid_3d, dist_1, dist_2, dist_3) deallocate (dist_1, dist_2, dist_3) ! create tensor. Compared with dbcsr_create this takes 2 additional arguments to control how the ! tensor is internally represented as a matrix: ! - map1_2d: which tensor dimensions are mapped to the first matrix dimension (in this case i & j) ! - map2_2d: which tensor dimensions are mapped to the second matrix dimension (in this case k) ! (these arguments need to be given for performance reasons, see documentation of dbcsr_t_contract ! for more info) call dbcsr_t_create(a_ijk, "a[ij|k]", dist_tensor, & map1_2d=[1, 2], map2_2d=[3], & data_type=dbcsr_type_real_8, & blk_size_1=blk_size_i, blk_size_2=blk_size_j, blk_size_3=blk_size_k) call dbcsr_t_distribution_destroy(dist_tensor) ! ------ create a[lmk] ------ ! note: normally we can just create an exact copy by calling: ! call dbcsr_t_create(a_ijk, a_lmk) ! call dbcsr_t_copy(a_ijk, a_lmk) ! here we need to create from scratch since the tensors have different block sizes shape_3d = shape_ijklmno([4, 5, 3]) allocate (dist_1(shape_3d(1))) call dbcsr_t_default_distvec(shape_3d(1), pdims_3d(1), blk_size_l, dist_1) allocate (dist_2(shape_3d(2))) call dbcsr_t_default_distvec(shape_3d(2), pdims_3d(2), blk_size_m, dist_2) allocate (dist_3(shape_3d(3))) call dbcsr_t_default_distvec(shape_3d(3), pdims_3d(3), blk_size_k, dist_3) call dbcsr_t_distribution_new(dist_tensor, pgrid_3d, dist_1, dist_2, dist_3) deallocate (dist_1, dist_2, dist_3) call dbcsr_t_create(a_lmk, "a[lm|k]", dist_tensor, [1, 2], [3], dbcsr_type_real_8, & blk_size_l, blk_size_m, blk_size_k) call dbcsr_t_distribution_destroy(dist_tensor) ! ------ fill tensor a[ijk] and copy to a[lmk] ------ allocate (offset_i(dbcsr_t_nblks_total(a_ijk, 1))) allocate (offset_j(dbcsr_t_nblks_total(a_ijk, 2))) allocate (offset_k(dbcsr_t_nblks_total(a_ijk, 3))) call dbcsr_t_get_info(a_ijk, blk_offset_1=offset_i, blk_offset_2=offset_j, blk_offset_3=offset_k) ind = 0 allocate (blk_ind_1(0), blk_ind_2(0), blk_ind_3(0)) do i = 1, dbcsr_t_nblks_total(a_ijk, 1) do j = 1, dbcsr_t_nblks_total(a_ijk, 2) do k = 1, dbcsr_t_nblks_total(a_ijk, 3) call dbcsr_t_get_stored_coordinates(a_ijk, [i, j, k], node_holds_blk) if (node_holds_blk /= mynode) cycle min_exp_ij = block_minabsdiff(offset_i(i), offset_j(j), blk_size_i(i), blk_size_j(j)) min_exp_ik = block_minabsdiff(offset_i(i), offset_k(k), blk_size_i(i), blk_size_k(k)) min_exp_jk = block_minabsdiff(offset_j(j), offset_k(k), blk_size_j(j), blk_size_k(k)) blk_size = blk_size_i(i)*blk_size_j(j)*blk_size_k(k) if (blk_size*exp(-1./3*alpha*real(min_exp_ij**2 + min_exp_ik**2 + min_exp_jk**2)) < filter_eps) cycle ind = ind + 1 call move_alloc(blk_ind_1, tmp) allocate (blk_ind_1(ind)) blk_ind_1(:ind - 1) = tmp; deallocate (tmp) call move_alloc(blk_ind_2, tmp) allocate (blk_ind_2(ind)) blk_ind_2(:ind - 1) = tmp; deallocate (tmp) call move_alloc(blk_ind_3, tmp) allocate (blk_ind_3(ind)) blk_ind_3(:ind - 1) = tmp; deallocate (tmp) blk_ind_1(ind) = i blk_ind_2(ind) = j blk_ind_3(ind) = k end do end do end do call dbcsr_t_reserve_blocks(a_ijk, blk_ind_1, blk_ind_2, blk_ind_3) deallocate (blk_ind_1, blk_ind_2, blk_ind_3) call dbcsr_t_iterator_start(iter_tensor, a_ijk) do while (dbcsr_t_iterator_blocks_left(iter_tensor)) ! direct access to block pointers via iterator is not possible in the tensor api ! the iterator goes over indices and then we call 'put_block' call dbcsr_t_iterator_next_block(iter_tensor, blk_ind_3d, blk, blk_size=blk_size_3d, blk_offset=blk_offset_3d) allocate (blk_values_3d(blk_size_3d(1), blk_size_3d(2), blk_size_3d(3))) do i_arr = 1, blk_size_3d(1) do j_arr = 1, blk_size_3d(2) do k_arr = 1, blk_size_3d(3) i = i_arr + blk_offset_3d(1) - 1 j = j_arr + blk_offset_3d(2) - 1 k = k_arr + blk_offset_3d(3) - 1 blk_values_3d(i_arr, j_arr, k_arr) = exp(-1./3*alpha*real((i - j)**2 + (i - k)**2 + (j - k)**2)) end do end do end do call dbcsr_t_put_block(a_ijk, blk_ind_3d, blk_size_3d, blk_values_3d) deallocate (blk_values_3d) end do call dbcsr_t_iterator_stop(iter_tensor) call dbcsr_t_filter(a_ijk, filter_eps) ! no need to finalize for tensors, this is done internally ! fill tensor (lmk) by copying from a[ijk] call dbcsr_t_copy(a_ijk, a_lmk) call dbcsr_t_filter(a_lmk, filter_eps) ! ------ create tensor b[iln] ------ shape_3d = shape_ijklmno([1, 4, 6]) allocate (dist_1(shape_3d(1))) call dbcsr_t_default_distvec(shape_3d(1), pdims_3d(1), blk_size_i, dist_1) allocate (dist_2(shape_3d(2))) call dbcsr_t_default_distvec(shape_3d(2), pdims_3d(2), blk_size_l, dist_2) allocate (dist_3(shape_3d(3))) call dbcsr_t_default_distvec(shape_3d(3), pdims_3d(3), blk_size_n, dist_3) call dbcsr_t_distribution_new(dist_tensor, pgrid_3d, dist_1, dist_2, dist_3) deallocate (dist_1, dist_2, dist_3) call dbcsr_t_create(b_iln, "b[il|n]", dist_tensor, [1, 2], [3], dbcsr_type_real_8, & blk_size_i, blk_size_l, blk_size_n) call dbcsr_t_distribution_destroy(dist_tensor) ! ------ fill tensor b[iln] ------ allocate (offset_l(dbcsr_t_nblks_total(b_iln, 2))) allocate (offset_n(dbcsr_t_nblks_total(b_iln, 3))) call dbcsr_t_get_info(b_iln, blk_offset_2=offset_l, blk_offset_3=offset_n) ind = 0 allocate (blk_ind_1(0), blk_ind_2(0), blk_ind_3(0)) do i = 1, dbcsr_t_nblks_total(b_iln, 1) do l = 1, dbcsr_t_nblks_total(b_iln, 2) do n = 1, dbcsr_t_nblks_total(b_iln, 3) call dbcsr_t_get_stored_coordinates(b_iln, [i, l, n], node_holds_blk) if (node_holds_blk /= mynode) cycle min_exp_il = block_minabsdiff(offset_i(i), offset_l(l), blk_size_i(i), blk_size_l(l)) min_exp_in = block_minabsdiff(offset_i(i), offset_n(n), blk_size_i(i), blk_size_n(n)) min_exp_ln = block_minabsdiff(offset_l(l), offset_n(n), blk_size_l(l), blk_size_n(n)) blk_size = blk_size_i(i)*blk_size_l(l)*blk_size_n(n) if (blk_size*exp(-1./3*beta*real(min_exp_il**2 + min_exp_in**2 + min_exp_ln**2)) < filter_eps) cycle ind = ind + 1 call move_alloc(blk_ind_1, tmp) allocate (blk_ind_1(ind)) blk_ind_1(:ind - 1) = tmp; deallocate (tmp) call move_alloc(blk_ind_2, tmp) allocate (blk_ind_2(ind)) blk_ind_2(:ind - 1) = tmp; deallocate (tmp) call move_alloc(blk_ind_3, tmp) allocate (blk_ind_3(ind)) blk_ind_3(:ind - 1) = tmp; deallocate (tmp) blk_ind_1(ind) = i blk_ind_2(ind) = l blk_ind_3(ind) = n end do end do end do call dbcsr_t_reserve_blocks(b_iln, blk_ind_1, blk_ind_2, blk_ind_3) deallocate (blk_ind_1, blk_ind_2, blk_ind_3) call dbcsr_t_iterator_start(iter_tensor, b_iln) do while (dbcsr_t_iterator_blocks_left(iter_tensor)) call dbcsr_t_iterator_next_block(iter_tensor, blk_ind_3d, blk, blk_size=blk_size_3d, blk_offset=blk_offset_3d) allocate (blk_values_3d(blk_size_3d(1), blk_size_3d(2), blk_size_3d(3))) do i_arr = 1, blk_size_3d(1) do l_arr = 1, blk_size_3d(2) do n_arr = 1, blk_size_3d(3) i = i_arr + blk_offset_3d(1) - 1 l = l_arr + blk_offset_3d(2) - 1 n = n_arr + blk_offset_3d(3) - 1 blk_values_3d(i_arr, l_arr, n_arr) = exp(-1./3*beta*real((i - l)**2 + (i - n)**2 + (l - n)**2)) end do end do end do call dbcsr_t_put_block(b_iln, blk_ind_3d, blk_size_3d, blk_values_3d) deallocate (blk_values_3d) end do call dbcsr_t_iterator_stop(iter_tensor) call dbcsr_t_filter(b_iln, filter_eps) ! ------ create tensor e[jmn] ------ shape_3d = shape_ijklmno([2, 5, 6]) allocate (dist_1(shape_3d(1))) call dbcsr_t_default_distvec(shape_3d(1), pdims_3d(1), blk_size_j, dist_1) allocate (dist_2(shape_3d(2))) call dbcsr_t_default_distvec(shape_3d(2), pdims_3d(2), blk_size_m, dist_2) allocate (dist_3(shape_3d(3))) call dbcsr_t_default_distvec(shape_3d(3), pdims_3d(3), blk_size_n, dist_3) call dbcsr_t_distribution_new(dist_tensor, pgrid_3d, dist_1, dist_2, dist_3) deallocate (dist_1, dist_2, dist_3) call dbcsr_t_create(e_jmn, "e[jm|n]", dist_tensor, [1, 2], [3], dbcsr_type_real_8, & blk_size_j, blk_size_m, blk_size_n) call dbcsr_t_distribution_destroy(dist_tensor) ! ------ create tensor f[jmo] ------ shape_3d = shape_ijklmno([2, 5, 7]) allocate (dist_1(shape_3d(1))) call dbcsr_t_default_distvec(shape_3d(1), pdims_3d(1), blk_size_j, dist_1) allocate (dist_2(shape_3d(2))) call dbcsr_t_default_distvec(shape_3d(2), pdims_3d(2), blk_size_m, dist_2) allocate (dist_3(shape_3d(3))) call dbcsr_t_default_distvec(shape_3d(3), pdims_3d(3), blk_size_o, dist_3) call dbcsr_t_distribution_new(dist_tensor, pgrid_3d, dist_1, dist_2, dist_3) deallocate (dist_1, dist_2, dist_3) call dbcsr_t_create(f_jmo, "f[jm|o]", dist_tensor, [1, 2], [3], dbcsr_type_real_8, & blk_size_j, blk_size_m, blk_size_o) call dbcsr_t_distribution_destroy(dist_tensor) ! ------ create and fill tensor f[jmo] ------ ! ------ f(j,m,o) = b(m,o,j) + b(o,m,j) ------ ! note: order argument of dbcsr_t_copy allows for arbitrary index permutations ! (same convention as fortran reshape intrinsic) ! f(j,m,o) = b(m,o,j) call dbcsr_t_copy(b_iln, f_jmo, order=[2, 3, 1]) ! f(j,m,o) = f(j,m,o) + b(o,m,j) call dbcsr_t_copy(b_iln, f_jmo, order=[3, 2, 1], summation=.true.) call dbcsr_t_filter(f_jmo, filter_eps) ! ------ create tensor d[i,j,l,m] ------ shape_4d = shape_ijklmno([1, 2, 4, 5]) pdims_4d(:) = 0 call dbcsr_t_pgrid_create(mpi_comm_world, pdims_4d, pgrid_4d) allocate (dist_1(shape_4d(1))) call dbcsr_t_default_distvec(shape_4d(1), pdims_4d(1), blk_size_i, dist_1) allocate (dist_2(shape_4d(2))) call dbcsr_t_default_distvec(shape_4d(2), pdims_4d(2), blk_size_j, dist_2) allocate (dist_3(shape_4d(3))) call dbcsr_t_default_distvec(shape_4d(3), pdims_4d(3), blk_size_l, dist_3) allocate (dist_4(shape_4d(4))) call dbcsr_t_default_distvec(shape_4d(4), pdims_4d(4), blk_size_m, dist_4) call dbcsr_t_distribution_new(dist_tensor, pgrid_4d, dist_1, dist_2, dist_3, dist_4) deallocate (dist_1, dist_2, dist_3, dist_4) call dbcsr_t_create(d_ijlm, "d[ij|lm]", dist_tensor, [1, 2], [3, 4], dbcsr_type_real_8, & blk_size_i, blk_size_j, blk_size_l, blk_size_m) call dbcsr_t_distribution_destroy(dist_tensor) ! ------ write tensors (for debugging purposes only) ------ if (verbosity == 3) call dbcsr_t_write_blocks(a_ijk, io_unit_dbcsr, output_unit) if (verbosity == 3) call dbcsr_t_write_blocks(b_iln, io_unit_dbcsr, output_unit) if (verbosity == 3) call dbcsr_t_write_blocks(c_no, io_unit_dbcsr, output_unit) if (contract_direct) then ! ------ d(i,j,l,m) = a(i,j,k) x a(l,m,k) ------ ! performance measurement nflop_sum = 0 call cpu_time(t0) ! contract_1: indices of first tensor to sum ! notcontract_1: all other indices of first tensor ! contract_2: indices of second tensor to sum (corresponding to contract_1) ! notcontract_2: all other indices of second tensor ! map_1: indices of result tensor corresponding to notcontract_1 ! map_2: indices of result tensor corresponding to notcontract_2 call dbcsr_t_contract(alpha=dbcsr_scalar(1.0_real64), tensor_1=a_ijk, tensor_2=a_lmk, & beta=dbcsr_scalar(0.0_real64), tensor_3=d_ijlm, & contract_1=[3], notcontract_1=[1, 2], & contract_2=[3], notcontract_2=[1, 2], & map_1=[1, 2], map_2=[3, 4], & filter_eps=filter_eps, & unit_nr=io_unit_dbcsr, log_verbose=verbosity >= 2, & flop=nflop) nflop_sum = nflop_sum + nflop ! ------ e(j,m,n) = d(i,j,l,m) x b(i,l,n) ------ ! note: tensor d was created with map1_2d, map2_2d arguments inconsistent with ! contract_1 and notcontract_1 since this tensor was created with the previous contraction in mind. ! in this case tensor will be redistributed to the correct layout automatically. call dbcsr_t_contract(dbcsr_scalar(1.0_real64), d_ijlm, b_iln, dbcsr_scalar(0.0_real64), e_jmn, & contract_1=[1, 3], notcontract_1=[2, 4], & contract_2=[1, 2], notcontract_2=[3], & map_1=[1, 2], map_2=[3], & filter_eps=filter_eps, & unit_nr=io_unit_dbcsr, log_verbose=verbosity >= 2, & flop=nflop) nflop_sum = nflop_sum + nflop ! free memory call dbcsr_t_clear(d_ijlm) ! ------ c(n,o) = c(n,o) + e(j,m,n) x f(j,m,o) ------ ! summation to c is done by setting beta parameter to 1 call dbcsr_t_contract(dbcsr_scalar(1.0_real64), e_jmn, f_jmo, dbcsr_scalar(1.0_real64), c_no, & contract_1=[1, 2], notcontract_1=[3], & contract_2=[1, 2], notcontract_2=[3], & map_1=[1], map_2=[2], & filter_eps=filter_eps, & unit_nr=io_unit_dbcsr, log_verbose=verbosity >= 2, & flop=nflop) nflop_sum = nflop_sum + nflop ! free memory call dbcsr_t_clear(e_jmn) call cpu_time(t1) ! ------ verify result by calculating checksum of c ------ cs = dbcsr_t_checksum(c_no) if (io_unit > 0) write (io_unit, "(a, e20.13)") "checksum matrix c", cs ! ------ write contraction result (for debugging purposes only) ------ if (verbosity == 3) call dbcsr_t_write_blocks(c_no, io_unit_dbcsr, output_unit) ! ------ output performance measurements ------ ! useful to test strong scaling & overhead of batched contraction time = t1 - t0 flop_rate = real(nflop_sum, real64)/(1.0e09_real64*time) if (io_unit > 0) then write (io_unit, "(a,t73,es8.2)") "performance: total number of flops:", real(nflop_sum*numnodes) write (io_unit, "(a,t66,f15.2)") "performance: total execution time:", time write (io_unit, "(a,t66,f15.2)") "performance: contraction flop rate (gflops / mpi rank):", flop_rate end if end if if (contract_batched) then ! ------ batched contraction ------ ! reduce memory by contracting over batches (such that intermediate tensors are never fully held in memory) ! indices i,j,l,m are split into n batches each (these indices belong to largest tensor d[ijlm]) ! performance measurement nflop_sum = 0 call cpu_time(t0) call create_batches(blk_size_i, nbatch, start_batch_i, end_batch_i) call create_batches(blk_size_j, nbatch, start_batch_j, end_batch_j) call create_batches(blk_size_l, nbatch, start_batch_l, end_batch_l) call create_batches(blk_size_m, nbatch, start_batch_m, end_batch_m) call dbcsr_t_copy_matrix_to_tensor(c_matrix, c_no) ! for better performance (avoiding communications) call init routine on all tensors that appear ! in multiple contraction calls with the same bounds: call dbcsr_t_batched_contract_init(c_no) ! iterate over index batches do jbatch = 1, nbatch do mbatch = 1, nbatch do ibatch = 1, nbatch call dbcsr_t_batched_contract_init(a_ijk) do lbatch = 1, nbatch ! ------ d(i,j,l,m) = a(i,j,k) x a(l,m,k) ------ ! specify bounds corresponding to the contraction index sets allocate (bounds_2(2, 2), bounds_3(2, 2)) ! bounds corresponding to notcontract_1 indices i,j bounds_2(:, 1) = [start_batch_i(ibatch), end_batch_i(ibatch)] bounds_2(:, 2) = [start_batch_j(jbatch), end_batch_j(jbatch)] ! bounds corresponding to notcontract_2 indices l,m bounds_3(:, 1) = [start_batch_l(lbatch), end_batch_l(lbatch)] bounds_3(:, 2) = [start_batch_m(mbatch), end_batch_m(mbatch)] call dbcsr_t_contract(dbcsr_scalar(1.0_real64), a_ijk, a_lmk, & dbcsr_scalar(0.0_real64), d_ijlm, & contract_1=[3], notcontract_1=[1, 2], & contract_2=[3], notcontract_2=[1, 2], & map_1=[1, 2], map_2=[3, 4], & bounds_2=bounds_2, & bounds_3=bounds_3, & filter_eps=filter_eps, & unit_nr=io_unit_dbcsr, & flop=nflop) nflop_sum = nflop_sum + nflop deallocate (bounds_2, bounds_3) ! ------ e(j,m,n) = d(i,j,l,m) x b(i,l,n) ------ allocate (bounds_1(2, 2), bounds_2(2, 2)) ! bounds corresponding to contract indices i,l bounds_1(:, 1) = [start_batch_i(ibatch), end_batch_i(ibatch)] bounds_1(:, 2) = [start_batch_l(lbatch), end_batch_l(lbatch)] ! bounds corresponding to notcontract_1 indices j,m bounds_2(:, 1) = [start_batch_j(jbatch), end_batch_j(jbatch)] bounds_2(:, 2) = [start_batch_m(mbatch), end_batch_m(mbatch)] ! note: we sum up contributions from batches i & l, thus beta parameter set to 1 call dbcsr_t_contract(dbcsr_scalar(1.0_real64), d_ijlm, b_iln, dbcsr_scalar(1.0_real64), e_jmn, & contract_1=[1, 3], notcontract_1=[2, 4], & contract_2=[1, 2], notcontract_2=[3], & map_1=[1, 2], map_2=[3], & bounds_1=bounds_1, bounds_2=bounds_2, & filter_eps=filter_eps, & unit_nr=io_unit_dbcsr, & flop=nflop) nflop_sum = nflop_sum + nflop deallocate (bounds_1, bounds_2) ! free memory call dbcsr_t_clear(d_ijlm) end do ! complete batched contraction of a call dbcsr_t_batched_contract_finalize(a_ijk) end do ! ------ c(n,o) = c(n,o) + e(j,m,n) x f(j,m,o) ------ allocate (bounds_1(2, 2)) ! bounds corresponding to contract indices j,m bounds_1(:, 1) = [start_batch_j(jbatch), end_batch_j(jbatch)] bounds_1(:, 2) = [start_batch_m(mbatch), end_batch_m(mbatch)] call dbcsr_t_contract(dbcsr_scalar(1.0_real64), e_jmn, f_jmo, dbcsr_scalar(1.0_real64), c_no, & contract_1=[1, 2], notcontract_1=[3], & contract_2=[1, 2], notcontract_2=[3], & map_1=[1], map_2=[2], & bounds_1=bounds_1, & filter_eps=filter_eps, & unit_nr=io_unit_dbcsr, & flop=nflop) nflop_sum = nflop_sum + nflop deallocate (bounds_1) ! free memory call dbcsr_t_clear(e_jmn) end do end do ! complete batched contraction of c call dbcsr_t_batched_contract_finalize(c_no) call cpu_time(t1) ! ------ verify result by calculating checksum of c ------ cs = dbcsr_t_checksum(c_no) if (io_unit > 0) write (io_unit, "(a, e20.13)") "checksum matrix c", cs ! ------ output performance measurements ------ ! useful to test strong scaling & overhead of batched contraction time = t1 - t0 flop_rate = real(nflop_sum, real64)/(1.0e09_real64*time) if (io_unit > 0) then write (io_unit, "(a,t73,es8.2)") "performance (batched): total number of flops:", real(nflop_sum*numnodes) write (io_unit, "(a,t66,f15.2)") "performance (batched): total execution time:", time write (io_unit, "(a,t66,f15.2)") "performance (batched): contraction flop rate (gflops / mpi rank):", flop_rate end if deallocate (start_batch_i, start_batch_j, start_batch_l, start_batch_m, & end_batch_i, end_batch_j, end_batch_l, end_batch_m) end if ! ------ copy tensor c to matrix c ------ call dbcsr_t_copy_tensor_to_matrix(c_no, c_matrix) ! ------ cleanup ------ call dbcsr_t_pgrid_destroy(pgrid_3d) call dbcsr_t_pgrid_destroy(pgrid_4d) call dbcsr_release(c_matrix) call dbcsr_t_destroy(c_no) call dbcsr_t_destroy(a_ijk) call dbcsr_t_destroy(e_jmn) call dbcsr_t_destroy(a_lmk) call dbcsr_t_destroy(b_iln) call dbcsr_t_destroy(f_jmo) call dbcsr_t_destroy(d_ijlm) deallocate (blk_size_i, blk_size_j, blk_size_k, blk_size_l, blk_size_m, blk_size_n, blk_size_o, & offset_i, offset_j, offset_k, offset_l, offset_n) call mpi_comm_free(group, ierr) if (ierr /= 0) stop "error in mpi_comm_free" ! finalize libdbcsr call dbcsr_finalize_lib() ! finalize mpi call mpi_finalize(ierr) if (ierr /= 0) stop "error in mpi_finalize" contains subroutine random_blk_sizes(total_size, nblk, blk_sizes) ! random block sizes such that sum is equal to total_size integer, intent(in) :: total_size integer, intent(out) :: nblk integer, intent(out), allocatable :: blk_sizes(:) integer, allocatable :: tmp(:) integer :: mynode, ierr, blk_sum, bsize real :: rand call mpi_comm_rank(mpi_comm_world, mynode, ierr) if (ierr /= 0) stop "error in mpi_comm_rank" if (mynode == 0) then blk_sum = 0 allocate (blk_sizes(0)) nblk = 0 do while (blk_sum < total_size) call random_number(rand) bsize = int(rand*max_bsize + 1) if (blk_sum + bsize > total_size) bsize = total_size - blk_sum blk_sum = blk_sum + bsize nblk = nblk + 1 call move_alloc(blk_sizes, tmp) allocate (blk_sizes(nblk)) blk_sizes(1:nblk - 1) = tmp; deallocate (tmp) blk_sizes(nblk) = bsize end do end if call mpi_bcast(nblk, 1, mpi_integer, 0, mpi_comm_world, ierr) if (ierr /= 0) stop "error in mpi_bcast" if (mynode /= 0) allocate (blk_sizes(nblk)) call mpi_bcast(blk_sizes, nblk, mpi_integer, 0, mpi_comm_world, ierr) if (ierr /= 0) stop "error in mpi_bcast" end subroutine function block_minabsdiff(offset_1, offset_2, size_1, size_2) ! get minimum difference between row and column indices belonging to a block defined by its ! size and offset integer, intent(in) :: offset_1, offset_2, size_1, size_2 integer :: block_minabsdiff integer, dimension(2) :: limits_1, limits_2 limits_1 = offset_1 - 1 + [1, size_1] limits_2 = offset_2 - 1 + [1, size_2] if (limits_1(2) < limits_2(1)) then block_minabsdiff = limits_2(1) - limits_1(2) elseif (limits_2(2) < limits_1(1)) then block_minabsdiff = limits_1(1) - limits_2(2) else block_minabsdiff = 0 end if end function subroutine create_batches(blk_sizes, nbatch, start_batch, end_batch) ! create tensor batches: split index at block boundaries such that each batch contains approximately ! the same number of tensor elements. integer, dimension(:), intent(in) :: blk_sizes integer, intent(in) :: nbatch integer, dimension(:), allocatable, intent(out) :: start_batch, end_batch integer :: nel, nel_batch, nblk, blk_sum, batch_sum, iblk integer, dimension(:), allocatable :: tmp nblk = size(blk_sizes) nel = sum(blk_sizes) nel_batch = nel/nbatch ibatch = 0 blk_sum = 0; batch_sum = nel_batch allocate (end_batch(0:nbatch)) allocate (start_batch(1:nbatch)) end_batch(0) = 0 do iblk = 1, nblk blk_sum = blk_sum + blk_sizes(iblk) if (blk_sum >= batch_sum) then ibatch = ibatch + 1 end_batch(ibatch) = blk_sum start_batch(ibatch) = end_batch(ibatch - 1) + 1 batch_sum = min(batch_sum + nel_batch, nel) end if end do call move_alloc(end_batch, tmp) allocate (end_batch(1:nbatch)) end_batch(:) = tmp(1:) end subroutine end program ================================================ FILE: examples/dbcsr_tensor_example_2.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #include #include #include #include #include #include #include #include #include #include #include //-------------------------------------------------------------------------------------------------! // Example: tensor contraction (13|2)x(54|21)=(3|45) // tensor1 x tensor2 = tensor3 //-------------------------------------------------------------------------------------------------! std::vector random_dist(int dist_size, int nbins) { std::vector dist(dist_size); for (int i = 0; i < dist_size; i++) dist[i] = i % nbins; return dist; } void printvec(std::vector& v) { for (auto i : v) { std::cout << i << " "; } std::cout << '\n' << std::endl; } void fill_random(dbcsr_t_tensor tensor, std::vector> nzblocks) { int myrank, mpi_size; int dim = nzblocks.size(); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); std::random_device rd; std::mt19937_64 gen(rd()); std::uniform_real_distribution<> dis(-1.0, 1.0); if (myrank == 0) std::cout << "Filling Tensor..." << std::endl; if (myrank == 0) std::cout << "Dimension: " << dim << std::endl; int nblocks = nzblocks[0].size(); std::vector> mynzblocks(dim); std::vector idx(dim); for (int i = 0; i != nblocks; ++i) { // make index out of nzblocks for (int j = 0; j != dim; ++j) idx[j] = nzblocks[j][i]; int proc = -1; c_dbcsr_t_get_stored_coordinates(tensor, idx.data(), &proc); if (proc == myrank) { for (int j = 0; j != dim; ++j) mynzblocks[j].push_back(idx[j]); } } std::vector dataptr(4, nullptr); for (int i = 0; i != dim; ++i) { dataptr[i] = mynzblocks[i].size() == 0 ? nullptr : &mynzblocks[i][0]; } if (myrank == 0) std::cout << "Reserving blocks..." << std::endl; if (mynzblocks[0].size() != 0) c_dbcsr_t_reserve_blocks_index(tensor, mynzblocks[0].size(), dataptr[0], dataptr[1], dataptr[2], dataptr[3]); auto fill_rand = [&](std::vector& blk) { for (auto& e : blk) { e = dis(gen); } }; dbcsr_t_iterator iter = nullptr; c_dbcsr_t_iterator_start(&iter, tensor); std::vector loc_idx(dim); std::vector blk_sizes(dim); std::vector block(1); int blk = 0; int blk_proc = 0; while (c_dbcsr_t_iterator_blocks_left(iter)) { c_dbcsr_t_iterator_next_block(iter, loc_idx.data(), &blk, &blk_proc, blk_sizes.data(), nullptr); int tot = 1; for (int i = 0; i != dim; ++i) { tot *= blk_sizes[i]; } block.resize(tot); fill_rand(block); c_dbcsr_t_put_block(tensor, loc_idx.data(), blk_sizes.data(), block.data(), nullptr, nullptr); } c_dbcsr_t_iterator_stop(&iter); MPI_Barrier(MPI_COMM_WORLD); } int main(int argc, char* argv[]) { MPI_Init(&argc, &argv); int mpi_size, mpi_rank; MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); c_dbcsr_init_lib(MPI_COMM_WORLD, nullptr); dbcsr_t_pgrid pgrid_3d = nullptr; dbcsr_t_pgrid pgrid_4d = nullptr; std::vector dims4(4); std::vector dims3(3); MPI_Fint fcomm = MPI_Comm_c2f(MPI_COMM_WORLD); c_dbcsr_t_pgrid_create(&fcomm, dims3.data(), dims3.size(), &pgrid_3d, nullptr); c_dbcsr_t_pgrid_create(&fcomm, dims4.data(), dims4.size(), &pgrid_4d, nullptr); if (mpi_rank == 0) { std::cout << "pgrid3-dimensions:" << std::endl; printvec(dims3); std::cout << "pgrid4-dimensions:" << std::endl; printvec(dims4); } // block sizes std::vector blk1, blk2, blk3, blk4, blk5; // blk indices of non-zero blocks std::vector nz11, nz12, nz13, nz21, nz22, nz24, nz25, nz33, nz34, nz35; blk1 = {3, 9, 12, 1}; blk2 = {4, 2, 3, 1, 9, 2, 32, 10, 5, 8, 7}; blk3 = {7, 3, 8, 7, 9, 5, 10, 23, 2}; blk4 = {8, 1, 4, 13, 6}; blk5 = {4, 2, 22}; nz11 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3}; nz12 = {2, 4, 4, 4, 5, 5, 6, 7, 9, 10, 10, 0, 0, 3, 6, 6, 8, 9, 1, 1, 4, 5, 7, 7, 8, 10, 10, 1, 3, 4, 4, 7}; nz13 = {6, 2, 4, 8, 5, 7, 1, 7, 2, 1, 2, 0, 3, 5, 1, 6, 4, 7, 2, 6, 0, 3, 2, 6, 7, 4, 7, 8, 5, 0, 1, 6}; nz21 = {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3}; nz22 = {0, 2, 3, 5, 9, 1, 1, 3, 4, 4, 5, 5, 5, 6, 6, 8, 8, 8, 9, 10, 0, 2, 2, 3, 4, 5, 7, 8, 10, 10, 0, 2, 3, 5, 9, 10}; nz24 = {2, 4, 1, 2, 1, 2, 4, 0, 0, 3, 1, 2, 3, 0, 3, 2, 3, 3, 1, 0, 2, 0, 0, 2, 3, 2, 3, 1, 1, 2, 0, 0, 2, 1, 4, 4}; nz25 = {0, 2, 1, 0, 0, 1, 2, 0, 2, 0, 1, 2, 1, 0, 2, 1, 2, 1, 0, 1, 2, 0, 1, 2, 1, 1, 1, 2, 0, 1, 0, 2, 1, 0, 2, 1}; nz33 = {1, 3, 4, 4, 4, 5, 5, 7}; nz34 = {2, 1, 0, 0, 2, 1, 3, 4}; nz35 = {2, 1, 0, 1, 2, 1, 0, 0}; // (13|2)x(54|21)=(3|45) // distribute blocks std::vector dist11 = random_dist(blk1.size(), dims3[0]); std::vector dist12 = random_dist(blk2.size(), dims3[1]); std::vector dist13 = random_dist(blk3.size(), dims3[2]); std::vector dist21 = random_dist(blk1.size(), dims4[0]); std::vector dist22 = random_dist(blk2.size(), dims4[1]); std::vector dist23 = random_dist(blk4.size(), dims4[2]); std::vector dist24 = random_dist(blk5.size(), dims4[3]); std::vector dist31 = random_dist(blk3.size(), dims3[0]); std::vector dist32 = random_dist(blk4.size(), dims3[1]); std::vector dist33 = random_dist(blk5.size(), dims3[2]); if (mpi_rank == 0) { std::cout << "dist11:" << std::endl; printvec(dist11); std::cout << "dist12:" << std::endl; printvec(dist12); std::cout << "dist13:" << std::endl; printvec(dist13); std::cout << "dist21:" << std::endl; printvec(dist21); std::cout << "dist22:" << std::endl; printvec(dist22); std::cout << "dist23:" << std::endl; printvec(dist23); std::cout << "dist24:" << std::endl; printvec(dist24); std::cout << "dist31:" << std::endl; printvec(dist31); std::cout << "dist32:" << std::endl; printvec(dist32); std::cout << "dist33:" << std::endl; printvec(dist33); } dbcsr_t_distribution dist1 = nullptr; dbcsr_t_distribution dist2 = nullptr; dbcsr_t_distribution dist3 = nullptr; // (13|2)x(54|21)=(3|45) std::vector map11, map12, map21, map22, map31, map32; map11 = {0, 2}; map12 = {1}; map21 = {3, 2}; map22 = {1, 0}; map31 = {0}; map32 = {1, 2}; if (mpi_rank == 0) std::cout << "Creating dist objects..." << '\n' << std::endl; // create distribution objects c_dbcsr_t_distribution_new( &dist1, pgrid_3d, dist11.data(), dist11.size(), dist12.data(), dist12.size(), dist13.data(), dist13.size(), nullptr, 0); c_dbcsr_t_distribution_new(&dist2, pgrid_4d, dist21.data(), dist21.size(), dist22.data(), dist22.size(), dist23.data(), dist23.size(), dist24.data(), dist24.size()); c_dbcsr_t_distribution_new( &dist3, pgrid_3d, dist31.data(), dist31.size(), dist32.data(), dist32.size(), dist33.data(), dist33.size(), nullptr, 0); MPI_Barrier(MPI_COMM_WORLD); // create tensors // (13|2)x(54|21)=(3|45) dbcsr_t_tensor tensor1 = nullptr; dbcsr_t_tensor tensor2 = nullptr; dbcsr_t_tensor tensor3 = nullptr; if (mpi_rank == 0) std::cout << "Creating tensors..." << std::endl; c_dbcsr_t_create_new(&tensor1, "(13|2)", dist1, map11.data(), map11.size(), map12.data(), map12.size(), nullptr, blk1.data(), blk1.size(), blk2.data(), blk2.size(), blk3.data(), blk3.size(), nullptr, 0); c_dbcsr_t_create_new(&tensor2, "(54|21)", dist2, map21.data(), map21.size(), map22.data(), map22.size(), nullptr, blk1.data(), blk1.size(), blk2.data(), blk2.size(), blk4.data(), blk4.size(), blk5.data(), blk5.size()); c_dbcsr_t_create_new(&tensor3, "(3|45)", dist3, map31.data(), map31.size(), map32.data(), map32.size(), nullptr, blk3.data(), blk3.size(), blk4.data(), blk4.size(), blk5.data(), blk5.size(), nullptr, 0); MPI_Barrier(MPI_COMM_WORLD); // fill the tensors if (mpi_rank == 0) std::cout << "Tensor 1" << '\n' << std::endl; fill_random(tensor1, {nz11, nz12, nz13}); if (mpi_rank == 0) std::cout << "Tensor 2" << '\n' << std::endl; fill_random(tensor2, {nz21, nz22, nz24, nz25}); if (mpi_rank == 0) std::cout << "Tensor 3" << '\n' << std::endl; fill_random(tensor3, {nz33, nz34, nz35}); // contracting // (13|2)x(54|21)=(3|45) MPI_Barrier(MPI_COMM_WORLD); if (mpi_rank == 0) std::cout << "Contracting..." << std::endl; // cn : indices to be contracted // noncn : indices not to be contracted // mapn : how nonc indices map to tensor 3 std::vector c1, nonc1, c2, nonc2, map1, map2; c1 = {0, 1}; nonc1 = {2}; c2 = {0, 1}; nonc2 = {2, 3}; map1 = {0}; map2 = {1, 2}; int unit_nr = -1; if (mpi_rank == 0) unit_nr = 6; bool log_verbose = true; // tensor_3(map_1, map_2) := 0.2 * tensor_1(notcontract_1, contract_1) // * tensor_2(contract_2, notcontract_2) // + 0.8 * tensor_3(map_1, map_2) c_dbcsr_t_contract_r_dp(0.2, tensor1, tensor2, 0.8, tensor3, c1.data(), c1.size(), nonc1.data(), nonc1.size(), c2.data(), c2.size(), nonc2.data(), nonc2.size(), map1.data(), map1.size(), map2.data(), map2.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, &unit_nr, &log_verbose); c_dbcsr_t_destroy(&tensor1); c_dbcsr_t_destroy(&tensor2); c_dbcsr_t_destroy(&tensor3); c_dbcsr_t_pgrid_destroy(&pgrid_3d, nullptr); c_dbcsr_t_pgrid_destroy(&pgrid_4d, nullptr); c_dbcsr_t_distribution_destroy(&dist1); c_dbcsr_t_distribution_destroy(&dist2); c_dbcsr_t_distribution_destroy(&dist3); c_dbcsr_finalize_lib(); MPI_Finalize(); return 0; } ================================================ FILE: src/.gitignore ================================================ !/dist/ ================================================ FILE: src/CMakeLists.txt ================================================ # ================================================================================================= # INCLUDE include(fypp-sources) include(GNUInstallDirs) # required to get a proper LIBDIR variable include(CMakePackageConfigHelpers) # ================================================================================================= # SOURCE FILE LISTS add_fypp_sources( DBCSR_FORTRAN_SRCS dbcsr_api.F acc/cuda/dbcsr_cuda_profiling.F acc/dbcsr_acc_device.F acc/dbcsr_acc_devmem.F acc/dbcsr_acc_event.F acc/dbcsr_acc_hostmem.F acc/dbcsr_acc_init.F acc/dbcsr_acc_stream.F acc/dbcsr_acc_timings.F acc/hip/dbcsr_hip_profiling.F base/dbcsr_base_hooks.F base/dbcsr_kinds.F base/dbcsr_machine.F base/dbcsr_machine_internal.F block/dbcsr_block_access.F block/dbcsr_block_operations.F block/dbcsr_index_operations.F block/dbcsr_iterator_operations.F core/dbcsr_array_types.F core/dbcsr_config.F core/dbcsr_lib.F core/dbcsr_methods.F core/dbcsr_types.F core/dbcsr_dict.F core/dbcsr_error_handling.F core/dbcsr_iter_types.F core/dbcsr_list_callstackentry.F core/dbcsr_list.F core/dbcsr_list_routinereport.F core/dbcsr_list_routinestat.F core/dbcsr_list_timerenv.F core/dbcsr_log_handling.F core/dbcsr_print_messages.F core/dbcsr_timings_base_type.F core/dbcsr_timings.F core/dbcsr_timings_report.F core/dbcsr_timings_types.F data/dbcsr_data_operations.F data/dbcsr_data_methods.F data/dbcsr_data_methods_low.F data/dbcsr_data_types.F data/dbcsr_mem_methods.F data/dbcsr_ptr_util.F dist/dbcsr_dist_methods.F dist/dbcsr_dist_operations.F dist/dbcsr_dist_util.F mm/dbcsr_acc_operations.F mm/dbcsr_mm_3d.F mm/dbcsr_mm_accdrv.F mm/dbcsr_mm_cannon.F mm/dbcsr_mm_common.F mm/dbcsr_mm_csr.F mm/dbcsr_mm_dist_operations.F mm/dbcsr_mm.F mm/dbcsr_mm_hostdrv.F mm/dbcsr_mm_multrec.F mm/dbcsr_mm_sched.F mm/dbcsr_mm_types.F mm/dbcsr_multiply_api.F mpi/dbcsr_mp_methods.F mpi/dbcsr_mp_operations.F mpi/dbcsr_mpiwrap.F ops/dbcsr_csr_conversions.F ops/dbcsr_io.F ops/dbcsr_operations.F ops/dbcsr_test_methods.F ops/dbcsr_tests.F ops/dbcsr_transformations.F tas/dbcsr_tas_base.F tas/dbcsr_tas_global.F tas/dbcsr_tas_io.F tas/dbcsr_tas_mm.F tas/dbcsr_tas_reshape_ops.F tas/dbcsr_tas_split.F tas/dbcsr_tas_test.F tas/dbcsr_tas_types.F tas/dbcsr_tas_util.F tensors/dbcsr_allocate_wrap.F tensors/dbcsr_array_list_methods.F tensors/dbcsr_tensor_api.F tensors/dbcsr_tensor_block.F tensors/dbcsr_tensor.F tensors/dbcsr_tensor_index.F tensors/dbcsr_tensor_io.F tensors/dbcsr_tensor_reshape.F tensors/dbcsr_tensor_split.F tensors/dbcsr_tensor_test.F tensors/dbcsr_tensor_types.F utils/dbcsr_array_sort.F utils/dbcsr_blas_operations.F utils/dbcsr_btree.F utils/dbcsr_files.F utils/dbcsr_min_heap.F utils/dbcsr_string_utilities.F utils/dbcsr_toollib.F work/dbcsr_work_operations.F) set(DBCSR_HIP_AND_CUDA_SRCS acc/libsmm_acc/libsmm_acc_benchmark.cpp acc/libsmm_acc/libsmm_acc_init.cpp acc/libsmm_acc/libsmm_acc.cpp acc/cuda_hip/calculate_norms.cpp acc/cuda_hip/acc_blas.cpp acc/cuda_hip/acc_dev.cpp acc/cuda_hip/acc_error.cpp acc/cuda_hip/acc_event.cpp acc/cuda_hip/acc_utils.cpp acc/cuda_hip/acc_init.cpp acc/cuda_hip/acc_mem.cpp acc/cuda_hip/acc_stream.cpp) set(DBCSR_CUDA_SRCS ${DBCSR_HIP_AND_CUDA_SRCS} acc/cuda/acc_cuda.cpp acc/cuda/dbcsr_cuda_nvtx_cu.cpp) set(DBCSR_HIP_SRCS ${DBCSR_HIP_AND_CUDA_SRCS} acc/hip/acc_hip.cpp) if (USE_ACCEL MATCHES "hip") set_source_files_properties(acc/cuda_hip/calculate_norms.cpp PROPERTIES LANGUAGE HIP) set_source_files_properties(acc/cuda_hip/calculate_norms.cpp PROPERTIES COMPILE_FLAGS "-fPIE") elseif (USE_ACCEL MATCHES "cuda") set_source_files_properties(acc/cuda_hip/calculate_norms.cpp PROPERTIES LANGUAGE CUDA) set_source_files_properties(acc/cuda_hip/calculate_norms.cpp PROPERTIES COMPILE_FLAGS "--x cu") endif () set(DBCSR_OPENCL_SRCS acc/opencl/smm/opencl_libsmm.c acc/opencl/acc_opencl.c acc/opencl/acc_opencl_event.c acc/opencl/acc_opencl_mem.c acc/opencl/acc_opencl_stream.c) # set the __SHORT_FILE__ per file for dbcsr sources foreach (dbcsr_src ${DBCSR_FORTRAN_SRCS}) # add_fypp_sources returns a path in the current binary dir get_filename_component(short_file "${dbcsr_src}" NAME) set_source_files_properties( ${dbcsr_src} PROPERTIES COMPILE_DEFINITIONS __SHORT_FILE__="${short_file}") endforeach () # override -Werror for certain translation units if ((CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") AND (CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)) set_source_files_properties(mpi/dbcsr_mpiwrap.F PROPERTIES COMPILE_FLAGS -Wno-error) endif () set(DBCSR_SRCS ${DBCSR_FORTRAN_SRCS}) if (USE_ACCEL MATCHES "cuda") set(DBCSR_SRCS ${DBCSR_SRCS} ${DBCSR_CUDA_SRCS}) elseif (USE_ACCEL MATCHES "hip") set(DBCSR_SRCS ${DBCSR_SRCS} ${DBCSR_HIP_SRCS}) elseif (USE_ACCEL MATCHES "opencl") set(DBCSR_SRCS ${DBCSR_SRCS} ${DBCSR_OPENCL_SRCS}) endif () # ================================================================================================= # DBCSR LIBRARY add_library(dbcsr ${DBCSR_SRCS}) # -fPIC can also be used in the static case. Addresses are resolved during the # linking process set_target_properties( dbcsr PROPERTIES VERSION ${dbcsr_VERSION} SOVERSION ${dbcsr_APIVERSION} POSITION_INDEPENDENT_CODE ON) if (USE_ACCEL MATCHES "hip") set_target_properties(dbcsr PROPERTIES HIP_ARCHITECTURES "${ACC_ARCH_NUMBER}") elseif (USE_ACCEL MATCHES "cuda") set_target_properties(dbcsr PROPERTIES CUDA_ARCHITECTURES "${ACC_ARCH_NUMBER}") endif () if (USE_SMM MATCHES "libxsmm" OR (USE_SMM MATCHES "auto" AND LIBXSMM_FOUND)) target_compile_definitions(dbcsr PRIVATE __LIBXSMM) target_link_directories(dbcsr PUBLIC ${LIBXSMM_LIBRARY_DIRS}) if (USE_OPENMP) target_link_libraries(dbcsr PRIVATE PkgConfig::LIBXSMMEXT) endif () target_link_libraries(dbcsr PRIVATE PkgConfig::LIBXSMM) target_link_libraries(dbcsr PRIVATE ${BLAS_LIBRARIES}) endif () if (BLAS_LIBRARIES MATCHES "mkl_") target_compile_definitions(dbcsr PRIVATE __MKL) endif () if (APPLE) # fix /proc/self/statm can not be opened on macOS target_compile_definitions(dbcsr PRIVATE __NO_STATM_ACCESS) if (BLAS_LIBRARIES MATCHES "Accelerate") target_compile_definitions(dbcsr PRIVATE __ACCELERATE) endif () endif () # set -DNDEBUG for Release builds target_compile_definitions(dbcsr PRIVATE $<$:NDEBUG>) target_link_libraries(dbcsr PRIVATE ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) target_include_directories( dbcsr PRIVATE base) # do not export those includes, but some srcs do an # unprefixed include # make sure dependencies of dbcsr find the dbcsr_api.mod file plus some files # they usually include: target_include_directories( dbcsr PUBLIC $ $ $) target_compile_definitions(dbcsr PRIVATE __STATM_TOTAL) set_target_properties(dbcsr PROPERTIES LINKER_LANGUAGE Fortran) if (MPI_FOUND) # once built, a user of the dbcsr library can not influence anything anymore # by setting those flags: target_compile_definitions(dbcsr PRIVATE __parallel) # If requested, use the MPI_F08 module if (USE_MPI_F08) target_compile_definitions(dbcsr PRIVATE __USE_MPI_F08) endif () # Instead of resetting the compiler for MPI, we are adding the compiler flags # otherwise added by the mpifort-wrapper directly; based on hints from: # https://cmake.org/pipermail/cmake/2012-June/050991.html Here we assume that # the MPI implementation found uses the same compiler as the Fortran compiler # we found prior. Otherwise we might be adding incompatible compiler flags at # this point. when built against MPI, a dbcsr consumer has to specify the MPI # flags as well, therefore: PUBLIC target_link_libraries(dbcsr PUBLIC MPI::MPI_Fortran) # Workaround https://gitlab.kitware.com/cmake/cmake/-/issues/27231 get_target_property(opts MPI::MPI_Fortran INTERFACE_COMPILE_OPTIONS) set_target_properties( MPI::MPI_Fortran PROPERTIES INTERFACE_COMPILE_OPTIONS "$<$:${opts}>") unset(opts) endif () target_link_libraries( dbcsr PRIVATE $<$:OpenMP::OpenMP_C> $<$:OpenMP::OpenMP_CXX> $<$:OpenMP::OpenMP_Fortran>) # todo, make this a bit better with opencl. if (USE_ACCEL MATCHES "cuda|hip") add_subdirectory(acc/libsmm_acc) endif () if (USE_ACCEL MATCHES "opencl") add_subdirectory(acc/opencl/smm) endif () if (USE_ACCEL) target_compile_definitions( dbcsr PRIVATE __DBCSR_ACC $<$:__CUDA> $<$:__OPENCL> $<$:ARCH_NUMBER=${ACC_ARCH_NUMBER}> $<$:__HIP> $<$:ARCH_NUMBER=${ACC_ARCH_NUMBER}> $<$:__CUDA_PROFILING> $<$:__HIP_PROFILING>) target_link_libraries( dbcsr PRIVATE $<$:CUDA::cudart> $<$:CUDA::cuda_driver> $<$:CUDA::cublas> $<$:CUDA::nvrtc> $<$:CUDA::nvToolsExt> $<$:roc::hipblas> $<$:hiprtc::hiprtc> $<$:hip::host> $<$:roctx64> $<$:roctracer64> $<$:OpenCL::OpenCL>) endif () # ================================================================================================= # DBCSR's C API if (WITH_C_API) # Build the C API as a separate library add_fypp_sources(DBCSR_C_SRCS dbcsr.h dbcsr_api_c.F tensors/dbcsr_tensor_api_c.F tensors/dbcsr_tensor.h) add_library(dbcsr_c ${DBCSR_C_SRCS}) set_target_properties(dbcsr_c PROPERTIES LINKER_LANGUAGE Fortran) set_target_properties( dbcsr_c PROPERTIES VERSION ${dbcsr_VERSION} SOVERSION ${dbcsr_APIVERSION} POSITION_INDEPENDENT_CODE ON) target_link_libraries(dbcsr_c PRIVATE dbcsr) target_link_libraries(dbcsr_c PUBLIC MPI::MPI_C) # the C API always needs MPI target_include_directories( dbcsr_c PUBLIC $ # change order so compiler # first checks binary # directory $ $) endif () # ================================================================================================= # INSTALL set(config_install_dir "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") set(config_namespace "DBCSR::") # Install targets install( TARGETS dbcsr EXPORT DBCSRTargets LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") # See https://gitlab.kitware.com/cmake/cmake/-/issues/19608 # CMAKE_INSTALL_Fortran_MODULES may not be an "official" variable if (NOT CMAKE_INSTALL_Fortran_MODULES) set(CMAKE_INSTALL_Fortran_MODULES "${CMAKE_INSTALL_INCLUDEDIR}") endif () install(FILES "${CMAKE_CURRENT_BINARY_DIR}/dbcsr_api.mod" DESTINATION "${CMAKE_INSTALL_Fortran_MODULES}") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/dbcsr_tensor_api.mod" DESTINATION "${CMAKE_INSTALL_Fortran_MODULES}") if (WITH_C_API) install( TARGETS dbcsr_c EXPORT DBCSRTargets COMPONENT C LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") install( FILES "${CMAKE_CURRENT_BINARY_DIR}/dbcsr.h" "${CMAKE_CURRENT_BINARY_DIR}/tensors/dbcsr_tensor.h" COMPONENT C DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") endif () if (USE_ACCEL MATCHES "opencl") foreach (FILE ${DBCSR_ACC_HEADER}) cmake_path(GET FILE PARENT_PATH SUBDIR) install(FILES "${FILE}" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${SUBDIR}") endforeach () install(PROGRAMS "${DBCSR_OPENCL_SCRIPT}" DESTINATION "${CMAKE_INSTALL_DATADIR}/opencl") foreach (FILE ${DBCSR_OPENCL_COMMON}) cmake_path(GET FILE PARENT_PATH SUBDIR) install(FILES "${FILE}" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${SUBDIR}") endforeach () endif () configure_package_config_file( cmake/DBCSRConfig.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/DBCSRConfig.cmake" INSTALL_DESTINATION "${config_install_dir}") write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/DBCSRConfigVersion.cmake" VERSION "${dbcsr_VERSION}" COMPATIBILITY SameMajorVersion) install( EXPORT DBCSRTargets NAMESPACE "${config_namespace}" DESTINATION "${config_install_dir}") install(FILES ${CMAKE_CURRENT_BINARY_DIR}/DBCSRConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/DBCSRConfigVersion.cmake DESTINATION ${config_install_dir}) ================================================ FILE: src/PACKAGE ================================================ { "description": "Distributed Block Compressed Sparse Row, A sparse matrix library", "archive": "libdbcsr", "requires": ["base", "mpi", "data", "dist", "block", "ops", "mm", "core", "utils", "work"], "public": ["*.F"] } ================================================ FILE: src/acc/PACKAGE ================================================ { "description": "Generic accelerator API", "archive": "libdbcsr", "requires": ["../base", "../core", "cuda", "hip", "opencl", "libsmm_acc"] } ================================================ FILE: src/acc/README.md ================================================ # ACCelerator Interface ## Backends The accelerator interface (ACC) consists of ISO_C_BINDING based Fortran code of DBCSR's [ACC-backend interface](https://github.com/cp2k/dbcsr/blob/develop/src/acc/acc.h) and [LIBSMM/ACC-interface](https://github.com/cp2k/dbcsr/blob/develop/src/acc/acc_libsmm.h). The interface is implemented by CUDA (for Nvidia GPUs), the HIP (for AMD GPUs), and the OpenCL accelerator backends. The code for both the CUDA and the HIP backend is unified, and can be found in the `cuda` directory. At compile-time either one or the other backend is chosen per macro (`__CUDA` or `__HIP`). Similarly, the code for the OpenCL backend is activated by a build-time macro (`__OPENCL`). ## Miniapp There is one stand-alone sample code or driver exercising the ACC-interface. The driver code (only depending on above mentioned interfaces) can be built locally and in a rather self-contained fashion, i.e., no DBCSR library is needed (except runtime libraries such as CUDA, HIP, OpenCL). For OpenCL, the LIBXSMM library is mandatory and preferred as baseline and for validation in any case. To build LIBXSMM, a folder `libxsmm` in parallel to DBCSR's root directory (`dbcsr`) is expected to be present and prebuilt. ```bash git clone -b main https://github.com/libxsmm/libxsmm.git cd libxsmm make GNU=1 -j ``` To build the driver code (`opencl` in below example), change into the respective backend folder (`cuda` or `opencl`), and invoke `make` (`DBG=0|1|2` is supported among other optional key-value pairs). ```bash git clone https://github.com/cp2k/dbcsr.git cd dbcsr/src/acc/opencl make ``` **NOTE**: To activate a certain device, the driver considers an environment variable called `DEVICE`. For example, `DEVICE=1 ./acc_bench` activates the second device (at least two devices must be discovered). This environment variable is implemented by the driver code and meant to work across backends, i.e., the OpenCL backend also supports `ACC_OPENCL_DEVICE=1` (see Developer Guide for the OpenCL backend). The driver supports command line options (_nrepeat_, _stack_size_, _m_, _n_, _k_, ...). Command line arguments are positional but allow `0` as placeholder to refer to the default value (`acc_bench 0 0 5 13 5` performs the default number of repetitions with the default stacksize when running the 5x13x5-kernel). For example, running the tranpose benchmark may look like: ```bash $ OMP_PROC_BIND=TRUE ./acc_bench 3 30000 23 23 23 Activated device0 (ndevices=8) acc_bench 3 30000 23 23 23 1875 18750 18750 typename (id=3): double copy-in (2058 MB): 92 ms 21.9 GB/s transpose: 0.23 ms 3187.9 GFLOPS/s device: 0.18 ms 4122.8 GFLOPS/s host: 0.57 ms 1278.1 GFLOPS/s diff.cur: 3.20547e-15 (|36.6983-36.6983|=5.47118e-13) ``` For timing, comparison (host code), and validation, LIBXSMM is required. The driver exercises the respective backend. For example with the CUDA backend: ```bash cd src/acc/cuda make WITH_GPU=P100 ../acc_bench ``` For the OpenCL backend: ```bash cd src/acc/opencl make ../acc_bench ``` In above cases, `acc_bench` is built using the respective backend. The driver code can be built for double-precision (default) or single-precision using a build-time macro (`make ELEM_TYPE=float` or `-DELEM_TYPE=float` in general). ================================================ FILE: src/acc/acc.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #ifndef DBCSR_ACC_H #define DBCSR_ACC_H #include #define DBCSR_STRINGIFY_AUX(SYMBOL) #SYMBOL #define DBCSR_STRINGIFY(SYMBOL) DBCSR_STRINGIFY_AUX(SYMBOL) #define DBCSR_CONCATENATE2(A, B) A##B #define DBCSR_CONCATENATE(A, B) DBCSR_CONCATENATE2(A, B) /** used to mark variables used */ #define DBCSR_MARK_USED(x) (void)(x) #if defined(__cplusplus) extern "C" { #endif /** types */ typedef int c_dbcsr_acc_bool_t; /** initialization and finalization */ int c_dbcsr_acc_init(void); int c_dbcsr_acc_finalize(void); void c_dbcsr_acc_clear_errors(void); /** devices */ int c_dbcsr_acc_get_ndevices(int* ndevices); int c_dbcsr_acc_set_active_device(int device_id); int c_dbcsr_acc_device_synchronize(void); /** streams */ int c_dbcsr_acc_stream_priority_range(int* least, int* greatest); int c_dbcsr_acc_stream_create(void** stream_p, const char* name, /** lower number is higher priority */ int priority); int c_dbcsr_acc_stream_destroy(void* stream); int c_dbcsr_acc_stream_sync(void* stream); int c_dbcsr_acc_stream_wait_event(void* stream, void* event); /** events */ int c_dbcsr_acc_event_create(void** event_p); int c_dbcsr_acc_event_destroy(void* event); int c_dbcsr_acc_event_record(void* event, void* stream); int c_dbcsr_acc_event_query(void* event, c_dbcsr_acc_bool_t* has_occurred); int c_dbcsr_acc_event_synchronize(void* event); /** memory */ int c_dbcsr_acc_dev_mem_allocate(void** dev_mem, size_t nbytes); int c_dbcsr_acc_dev_mem_deallocate(void* dev_mem); int c_dbcsr_acc_dev_mem_set_ptr(void** dev_mem, void* other, size_t lb); int c_dbcsr_acc_host_mem_allocate(void** host_mem, size_t nbytes, void* stream); int c_dbcsr_acc_host_mem_deallocate(void* host_mem, void* stream); int c_dbcsr_acc_memcpy_h2d(const void* host_mem, void* dev_mem, size_t nbytes, void* stream); int c_dbcsr_acc_memcpy_d2h(const void* dev_mem, void* host_mem, size_t nbytes, void* stream); int c_dbcsr_acc_memcpy_d2d(const void* devmem_src, void* devmem_dst, size_t nbytes, void* stream); int c_dbcsr_acc_memset_zero(void* dev_mem, size_t offset, size_t nbytes, void* stream); int c_dbcsr_acc_dev_mem_info(size_t* mem_free, size_t* mem_total); void c_dbcsr_timeset(const char** routineN, const int* routineN_len, int* handle); void c_dbcsr_timestop(const int* handle); #if defined(__cplusplus) } #endif #endif /*DBCSR_ACC_H*/ ================================================ FILE: src/acc/acc_bench.c ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #include "acc_libsmm.h" #include "acc_bench.h" #include #include #include #if defined(__LIBXSMM) # if defined(LIBXSMM_DEFAULT_CONFIG) # include # else # include # if !defined(LIBXSMM_TIMER_H) # include # endif # if !defined(LIBXSMM_SYNC_H) # include # endif # endif # if defined(LIBXSMM_VERSION_NUMBER) && LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER # define USE_LIBXSMM # endif #endif #if defined(USE_LIBXSMM) # if defined(_OPENMP) # define ACC_BENCH_USEOMP(FUNC) LIBXSMM_USEOMP(FUNC) # else # define ACC_BENCH_USEOMP(FUNC) (FUNC) # endif # define ACC_BENCH_GEMM_BATCH(IPREC, OPREC, TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, STRIDE_A, B, LDB, STRIDE_B, BETA, C, LDC, \ STRIDE_C, INDEX_STRIDE, INDEX_BASE, BATCHSIZE) \ ACC_BENCH_USEOMP(libxsmm_gemm_batch) \ (IPREC, OPREC, TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, STRIDE_A, B, LDB, STRIDE_B, BETA, C, LDC, STRIDE_C, INDEX_STRIDE, \ INDEX_BASE, BATCHSIZE) # define PRINTF(...) \ do { \ const size_t print_buffer_size = sizeof(print_buffer) - print_offset; \ const int print_buffer_result = LIBXSMM_SNPRINTF(print_buffer + print_offset, print_buffer_size, __VA_ARGS__); \ assert(0 <= print_buffer_result && print_buffer_result < (int)print_buffer_size); \ print_offset += print_buffer_result; \ } while (0) #else # define PRINTF(...) printf(__VA_ARGS__) #endif #if !defined(DEDUPLICATE) && 0 # define DEDUPLICATE #endif #if !defined(ELEM_TYPE) # define ELEM_TYPE double #endif #if !defined(ALIGNMENT) # define ALIGNMENT 64 #endif #if !defined(BATCHGRAIN) # define BATCHGRAIN 100 #endif #if !defined(BATCHSIZE) # define BATCHSIZE (300 * BATCHGRAIN) #endif #if !defined(NRAND) # define NRAND BATCHSIZE #endif #if !defined(NREPEAT) # define NREPEAT 3 #endif #if !defined(XREPEAT) # define XREPEAT 66 #endif #if !defined(TRANSPOSE) # define TRANSPOSE #endif #if !defined(VALIDATE) # define VALIDATE #endif #if !defined(WARMUP) # define WARMUP 2 #endif #if !defined(DELIMS) # define DELIMS ",;:|/\n\t " #endif #define ACC_BENCH_SMM_EPSILON(T) DBCSR_CONCATENATE(ACC_BENCH_SMM_EPSILON_, T) #define ACC_BENCH_SMM_EPSILON_double 1E-3 #define ACC_BENCH_SMM_EPSILON_float 2E-3 #define ROUNDUP2(N, NPOT) ((((unsigned long long)N) + ((NPOT) - 1)) & ~((NPOT) - 1)) #define CHECK(EXPR, RPTR, VALUE) \ do { \ if (NULL != ((const void*)(RPTR))) { \ if (0 == *((const int*)(RPTR)) || (0 > *((const int*)(RPTR)) && 0 == (VALUE))) { \ const int check_r_ = (EXPR); \ if (0 != check_r_) { \ *((int*)(RPTR)) = check_r_; \ assert(0 > check_r_ && 0 == (VALUE)); \ } \ } \ } \ else { \ (EXPR); \ } \ } while (0) static void parse_params(int argc, char* argv[], FILE** file, const char** snr, const char** sss, const char** ssm, const char** ssn, const char** ssk, const char** snc, const char** sna, const char** snb) { char buffer[1024], *args[8]; int i; assert(file && snr && sss && ssm && ssn && ssk && snc && sna && snb); --argc; if (NULL == *file) *file = (1 <= argc ? fopen(argv[1], "r") : NULL); if (NULL == *file) { for (i = 0; i < argc; ++i) args[i] = argv[i + 1]; } else { /* input file is specified */ argc = 0; if (NULL != fgets(buffer, sizeof(buffer), *file)) { char* arg = strtok(buffer, DELIMS); while (NULL == arg && NULL != fgets(buffer, sizeof(buffer), *file)) { arg = strtok(buffer, DELIMS); } for (; NULL != arg; arg = strtok(NULL, DELIMS)) { if (argc * sizeof(*args) < sizeof(args)) args[argc++] = arg; else { /* malformed command-line */ fclose(*file); *file = NULL; break; } } } else { fclose(*file); *file = NULL; } } i = 0; if (i < argc) { const char* x1 = strchr(args[i], 'x'); const char* x2 = (NULL == x1 ? NULL : strchr(x1 + 1, 'x')); if (NULL == x1 || NULL == x2) { /* accept "M N K" */ *snr = args[i++]; *sss = (i < argc ? args[i++] : NULL); if (i < argc) { x1 = strchr(args[i], 'x'); x2 = (NULL == x1 ? NULL : strchr(x1 + 1, 'x')); *ssm = args[i++]; if (NULL == x1 || NULL == x2) { /* accept "M N K" */ *ssn = (i < argc ? args[i++] : NULL); *ssk = (i < argc ? args[i++] : NULL); } else { /* accept "MxNxK" */ *ssn = x1 + 1; *ssk = x2 + 1; } } } else { /* accept "MxNxK" */ *ssm = args[i++]; *ssn = x1 + 1; *ssk = x2 + 1; } } *snc = (i < argc ? args[i++] : NULL); *sna = (i < argc ? args[i++] : NULL); *snb = (i < argc ? args[i++] : NULL); } static size_t parse_nbytes(const char* nbytes, size_t* nelems) { size_t result = 0; if (NULL != nelems) *nelems = 0; if (NULL != nbytes && '\0' != *nbytes) { size_t u = strlen(nbytes) - 1; const char units[] = "kmgKMG", *const unit = strchr(units, nbytes[u]); char* end = NULL; /* take parsed value with increased type-width */ const long long int ibytes = strtol(nbytes, &end, 10); if (NULL != end) { /* no obvious error */ /* value is given without unit */ if (NULL == unit && '\0' == *end) { result = (size_t)ibytes; if (NULL != nelems) *nelems = result; } /* must match allowed set of units */ else if (NULL != unit && *unit == *end) { result = (size_t)ibytes; if (NULL != nelems) *nelems = result; u = (unit - units) % 3 + 1; result <<= u * 10; } } } return result; } int main(int argc, char* argv[]) { const char* const env_check = getenv("CHECK"); const double check = (NULL == env_check ? -1 : fabs(atof(env_check) * ACC_BENCH_SMM_EPSILON(ELEM_TYPE))); #if defined(WARMUP) && (0 < WARMUP) && !defined(_DEBUG) const int warmup = MAX(WARMUP, 2) / 2 * 2; #else const int warmup = 0; #endif int result = c_dbcsr_acc_init(), *rnd = NULL, nok = 0, m = 0, n = 0, k = 0, i; const char *snr = NULL, *sss = NULL; const char *ssm = NULL, *ssn = NULL, *ssk = NULL; const char *snc = NULL, *sna = NULL, *snb = NULL; FILE* file = NULL; #if !defined(__OFFLOAD_UNIFIED_MEMORY) || !defined(DEDUPLICATE) const char* const env_nrepeat_h2d = getenv("NREPEAT_H2D"); const int nrepeat_h2d = (NULL == env_nrepeat_h2d ? 1 : MAX(atoi(env_nrepeat_h2d), 1)); #endif #if defined(USE_LIBXSMM) double perf_h2d = 0, perf_dev = 0, perf_hst = 0; const char* const env_check_h2d = getenv("CHECK_H2D"); const char* const env_check_dev = getenv("CHECK_DEV"); const char* const env_check_hst = getenv("CHECK_HST"); # if defined(__OPENCL) const char* const env_nrepeat_smm = getenv("NREPEAT_SMM"); const int nrepeat_smm = (NULL == env_nrepeat_smm ? 1 : MAX(atoi(env_nrepeat_smm), 1)); # else const int nrepeat_smm = 1; # endif # if defined(VALIDATE) double maxdiff = 0; # else DBCSR_MARK_USED(check); # endif #else DBCSR_MARK_USED(check); #endif CHECK(libsmm_acc_init(), &result, check); /* note: libsmm_acc_init() may imply acc_init() */ if (EXIT_SUCCESS == result) { int ndevices = 0; result = c_dbcsr_acc_get_ndevices(&ndevices); if (EXIT_SUCCESS == result && 0 < ndevices) { const char* const env_device = getenv("DEVICE"); const char* const env_rank = (NULL != getenv("PMI_RANK") ? getenv("PMI_RANK") : getenv("OMPI_COMM_WORLD_LOCAL_RANK")); const int rank = (NULL != env_rank ? atoi(env_rank) : -1); int device = ((NULL == env_device || '\0' == *env_device) ? 0 : atoi(env_device)); device = ((0 <= device && device < ndevices) ? (0 <= rank ? (rank % ndevices) : device) : -1); result = c_dbcsr_acc_set_active_device(device); if (EXIT_SUCCESS == result) { printf("Activated device%i (ndevices=%i)\n", device, ndevices); } else { fprintf(stderr, "ERROR: Failed to activate device!\n"); } } else { fprintf(stderr, "ERROR: No ACC-device found!\n"); if (EXIT_SUCCESS == result) result = EXIT_FAILURE; } if (EXIT_SUCCESS == result) { rnd = (int*)malloc(sizeof(int) * NRAND); if (NULL != rnd) { srand(25071975); /* seed rng */ for (i = 0; i < NRAND; ++i) rnd[i] = rand(); parse_params(argc, argv, &file, &snr, &sss, &ssm, &ssn, &ssk, &snc, &sna, &snb); } else result = EXIT_FAILURE; } } else { fprintf(stderr, "ERROR: ACC initialization failed!\n"); } while (EXIT_SUCCESS == result || (NULL != file && 0 > result && 0 == check)) { const int inr = (NULL != snr ? atoi(snr) : 0); const int ism = (NULL != ssm ? atoi(ssm) : 0); const int isn = (NULL != ssn ? atoi(ssn) : 0); const int isk = (NULL != ssk ? atoi(ssk) : 0); const int inc = (NULL != snc ? atoi(snc) : 0); const int ina = (NULL != sna ? atoi(sna) : 0); const int inb = (NULL != snb ? atoi(snb) : 0); if (NULL != file && 0 > result && 0 == check) result = EXIT_SUCCESS; m = (0 < ism ? ism : 23); n = (0 < isn ? isn : m); k = (0 < isk ? isk : m); { #if defined(ALIGNMENT) && (0 < ALIGNMENT) const int ma = (int)ROUNDUP2(sizeof(ELEM_TYPE) * m, ALIGNMENT); const int ka = (int)ROUNDUP2(sizeof(ELEM_TYPE) * k, ALIGNMENT); const int mn = ma * n / (int)sizeof(ELEM_TYPE); const int mk = ma * k / (int)sizeof(ELEM_TYPE); const int kn = ka * n / (int)sizeof(ELEM_TYPE); #else const int mn = m * n, mk = m * k, kn = k * n; #endif const int max_kernel_dim = ceil(sqrt(m * n)); int *stack_hst = NULL, *stack_dev = NULL, *trans_hst = NULL, *trans_dev = NULL; ELEM_TYPE *amat_hst = NULL, *bmat_hst = NULL, *cmat_hst = NULL; ELEM_TYPE *amat_dev = NULL, *bmat_dev = NULL, *cmat_dev = NULL; void* stream = NULL; #if defined(USE_LIBXSMM) libxsmm_timer_tickint start; int print_offset = 0; char print_buffer[1024] = ""; # if defined(TRANSPOSE) && defined(VALIDATE) double transpose = 0; # endif double duration = 0; #endif const char* const env_batchsize_smm = getenv("BATCHSIZE_SMM"); const int xrepeat = (0 != check ? NREPEAT : XREPEAT); int nrepeat = (0 < inr ? inr : xrepeat); int stack_size, na, nb, nc, nr, r; if (NULL == env_batchsize_smm) { stack_size = 0; if (NULL != sss) { size_t nelems, s; const size_t nbytes = parse_nbytes(sss, &nelems); if (nbytes != nelems) { while (1) { nc = (0 < inc ? MIN(inc, stack_size) : MAX(stack_size / 16, 1)); na = (0 < ina ? ina : (10 * nc)); nb = (0 < inb ? inb : (10 * nc)); s = sizeof(ELEM_TYPE) * (mk * na + kn * nb) + sizeof(int) * 3 * stack_size; if (s < nbytes) ++stack_size; else break; } } else stack_size = (int)nelems; } } else { /* parse SMM_BATCHSIZE=batchsize,nrepfactor */ i = strcspn(env_batchsize_smm, DELIMS); if (i < (int)sizeof(DELIMS)) { r = atoi(env_batchsize_smm + i + 1); if (0 < r) nrepeat = r; } stack_size = atoi(env_batchsize_smm); } if (0 >= stack_size) { /* trigger default */ if (0 > stack_size) { /* randomize batchsize */ const int r = rnd[nok % NRAND], ss = -stack_size, bs = (1 < ss ? ss : BATCHSIZE); const int limit = (BATCHGRAIN < ss ? ((bs + BATCHGRAIN - 1) / BATCHGRAIN) : ss); stack_size = (r % limit + 1) * BATCHGRAIN; nrepeat = MAX((BATCHSIZE * nrepeat + stack_size - 1) / stack_size, xrepeat); } else stack_size = BATCHSIZE; /* plain default */ } nc = (0 < inc ? MIN(inc, stack_size) : MAX(stack_size / 16, 1)); na = (0 < ina ? ina : (10 * nc)); nb = (0 < inb ? inb : (10 * nc)); nr = nrepeat * nc; assert(m <= (mn / n) && 0 == (mn % n)); assert(m <= (mk / k) && 0 == (mk % k)); assert(k <= (kn / n) && 0 == (kn % n)); PRINTF( "%s%s%i %i %i %i %i %i %i %i\n", 0 < argc ? argv[0] : "", 0 < argc ? " " : "", nrepeat, stack_size, m, n, k, nc, na, nb); PRINTF("typename (id=%i): %s\n", DBCSR_TYPE(ELEM_TYPE), DBCSR_STRINGIFY(ELEM_TYPE)); if (MAX_KERNEL_DIM < max_kernel_dim) { fprintf(stderr, "ERROR: Matrix shape (%i) exceeds MAX_KERNEL_DIM=%i\n", max_kernel_dim, MAX_KERNEL_DIM); result = EXIT_FAILURE; } CHECK(c_dbcsr_acc_stream_create(&stream, "stream", -1 /*default priority*/), &result, check); CHECK(c_dbcsr_acc_host_mem_allocate((void**)(void*)&amat_hst, sizeof(ELEM_TYPE) * mk * na, stream), &result, check); CHECK(c_dbcsr_acc_host_mem_allocate((void**)(void*)&bmat_hst, sizeof(ELEM_TYPE) * kn * nb, stream), &result, check); CHECK(c_dbcsr_acc_host_mem_allocate((void**)(void*)&cmat_hst, sizeof(ELEM_TYPE) * mn * nc, stream), &result, check); CHECK(c_dbcsr_acc_host_mem_allocate((void**)(void*)&stack_hst, sizeof(int) * 3 * stack_size, stream), &result, check); CHECK(c_dbcsr_acc_host_mem_allocate((void**)(void*)&trans_hst, sizeof(int) * nb, stream), &result, check); CHECK(c_dbcsr_acc_stream_sync(stream), &result, check); /* ensure host-data is allocated */ if (NULL != amat_hst && NULL != bmat_hst && NULL != trans_hst && NULL != stack_hst) { init_stack(stack_hst, stack_size, NRAND, rnd, mn, mk, kn, nc, na, nb); #if defined(_OPENMP) # pragma omp parallel #endif { #if defined(_OPENMP) # pragma omp for nowait #endif for (i = 0; i < na; ++i) INIT_MAT(ELEM_TYPE, i /*seed*/ + 42, &amat_hst[i * mk], m, k, 1.0 / (nr * na)); #if defined(_OPENMP) # pragma omp for #endif for (i = 0; i < nb; ++i) { INIT_MAT(ELEM_TYPE, i /*seed*/ + 24, &bmat_hst[i * kn], k, n, 1.0 / (nr * nb)); trans_hst[i] = i * kn; } } } #if !defined(__OFFLOAD_UNIFIED_MEMORY) || !defined(DEDUPLICATE) CHECK(c_dbcsr_acc_dev_mem_allocate((void**)(void*)&amat_dev, sizeof(ELEM_TYPE) * mk * na), &result, check); CHECK(c_dbcsr_acc_dev_mem_allocate((void**)(void*)&bmat_dev, sizeof(ELEM_TYPE) * kn * nb), &result, check); CHECK(c_dbcsr_acc_dev_mem_allocate((void**)(void*)&cmat_dev, sizeof(ELEM_TYPE) * mn * nc), &result, check); CHECK(c_dbcsr_acc_dev_mem_allocate((void**)(void*)&stack_dev, sizeof(int) * 3 * stack_size), &result, check); CHECK(c_dbcsr_acc_dev_mem_allocate((void**)(void*)&trans_dev, sizeof(int) * nb), &result, check); CHECK(c_dbcsr_acc_memset_zero(cmat_dev, 0 /*offset*/, sizeof(ELEM_TYPE) * mn * nc, stream), &result, check); CHECK(c_dbcsr_acc_memcpy_h2d(trans_hst, trans_dev, sizeof(int) * nb, stream), &result, check); # if defined(USE_LIBXSMM) CHECK(c_dbcsr_acc_stream_sync(stream), &result, check); start = libxsmm_timer_tick(); # endif CHECK(c_dbcsr_acc_memcpy_h2d(amat_hst, amat_dev, sizeof(ELEM_TYPE) * mk * na, stream), &result, check); CHECK(c_dbcsr_acc_memcpy_h2d(bmat_hst, bmat_dev, sizeof(ELEM_TYPE) * kn * nb, stream), &result, check); CHECK(c_dbcsr_acc_memcpy_h2d(stack_hst, stack_dev, sizeof(int) * 3 * stack_size, stream), &result, check); if (1 < nrepeat_h2d) { # if defined(USE_LIBXSMM) CHECK(c_dbcsr_acc_stream_sync(stream), &result, check); start = libxsmm_timer_tick(); # endif for (r = 0; r < nrepeat_h2d; ++r) { CHECK(c_dbcsr_acc_memcpy_h2d(amat_hst, amat_dev, sizeof(ELEM_TYPE) * mk * na, stream), &result, check); CHECK(c_dbcsr_acc_memcpy_h2d(bmat_hst, bmat_dev, sizeof(ELEM_TYPE) * kn * nb, stream), &result, check); CHECK(c_dbcsr_acc_memcpy_h2d(stack_hst, stack_dev, sizeof(int) * 3 * stack_size, stream), &result, check); } } # if defined(USE_LIBXSMM) CHECK(c_dbcsr_acc_stream_sync(stream), &result, check); if (NULL != amat_hst && NULL != bmat_hst && NULL != stack_hst && EXIT_SUCCESS == result) { const size_t size = (sizeof(ELEM_TYPE) * (mk * na + kn * nb) + sizeof(int) * 3 * stack_size); duration = libxsmm_timer_duration(start, libxsmm_timer_tick()) / nrepeat_h2d; perf_h2d = size / (duration * (1ULL << 30)); PRINTF("copy-in (%i MB): %.2g ms %.1f GB/s\n", (int)((size + (1 << 19)) >> 20), 1000.0 * duration, perf_h2d); } # endif #else amat_dev = amat_hst; bmat_dev = bmat_hst; cmat_dev = cmat_hst; stack_dev = stack_hst; trans_dev = trans_hst; CHECK(c_dbcsr_acc_memset_zero(cmat_dev, 0 /*offset*/, sizeof(ELEM_TYPE) * mn * nc, stream), &result, check); #endif #if defined(TRANSPOSE) && defined(VALIDATE) /* warmup execution and prebuild transpose-kernel */ for (r = 0; r < warmup / 2; ++r) { CHECK(libsmm_acc_transpose(trans_dev, 0 /*offset*/, nb, bmat_dev, DBCSR_TYPE(ELEM_TYPE), k, n, MAX_KERNEL_DIM, stream), &result, check); CHECK(libsmm_acc_transpose(trans_dev, 0 /*offset*/, nb, bmat_dev, DBCSR_TYPE(ELEM_TYPE), n, k, MAX_KERNEL_DIM, stream), &result, check); } # if defined(USE_LIBXSMM) CHECK(c_dbcsr_acc_stream_sync(stream), &result, check); start = libxsmm_timer_tick(); # endif /* to perform NN-SMMs on the device, all B-matrices are transposed upfront (SMM-kernel is limited to NT) */ CHECK(libsmm_acc_transpose(trans_dev, 0 /*offset*/, nb, bmat_dev, DBCSR_TYPE(ELEM_TYPE), k, n, MAX_KERNEL_DIM, stream), &result, check); # if defined(USE_LIBXSMM) CHECK(c_dbcsr_acc_stream_sync(stream), &result, check); transpose = libxsmm_timer_duration(start, libxsmm_timer_tick()); # endif #endif /* warmup execution and prebuild SMM-kernel */ for (r = 0; r < warmup; ++r) { CHECK(libsmm_acc_process(stack_hst, stack_dev, stack_size, DBCSR_TYPE(ELEM_TYPE), amat_dev, bmat_dev, cmat_dev, m, n, k, MAX_KERNEL_DIM, 1 /*homogeneous*/, stream, stream), &result, check); } CHECK(c_dbcsr_acc_memset_zero(cmat_dev, 0 /*offset*/, sizeof(ELEM_TYPE) * mn * nc, stream), &result, check); #if defined(USE_LIBXSMM) CHECK(c_dbcsr_acc_stream_sync(stream), &result, check); start = libxsmm_timer_tick(); #endif for (r = 0; r < nrepeat; ++r) { /* GPU-kernel is limited to C += Ai * Bi^T, i.e., NT (for NN, all Bi must be transposed upfront) */ CHECK(libsmm_acc_process(stack_hst, stack_dev, stack_size, DBCSR_TYPE(ELEM_TYPE), amat_dev, bmat_dev, cmat_dev, m, n, k, MAX_KERNEL_DIM, 1 /*homogeneous*/, stream, stream), &result, check); } #if defined(USE_LIBXSMM) CHECK(c_dbcsr_acc_stream_sync(stream), &result, check); duration = libxsmm_timer_duration(start, libxsmm_timer_tick()); if (EXIT_SUCCESS == result) { if (0 < duration) { # if defined(TRANSPOSE) && defined(VALIDATE) PRINTF("transpose: %.2g ms %.1f GFLOPS/s\n", 1000.0 * (duration + transpose) / (nrepeat * nrepeat_smm), 1E-9 * ((size_t)2 * m * n * k * stack_size * nrepeat * nrepeat_smm) / (duration + transpose)); # endif perf_dev = 1E-9 * ((size_t)2 * m * n * k * stack_size * nrepeat * nrepeat_smm) / duration; PRINTF("device: %.2g ms %.1f GFLOPS/s\n", 1000.0 * duration / (nrepeat * nrepeat_smm), perf_dev); } else { # if defined(TRANSPOSE) PRINTF("transpose: 0 ms 0 GFLOPS/s\n"); # endif PRINTF("device: 0 ms 0 GFLOPS/s\n"); } } # if defined(VALIDATE) if (EXIT_SUCCESS == result) { ELEM_TYPE* const gold_hst = (ELEM_TYPE*)(0 != check ? libxsmm_malloc(sizeof(ELEM_TYPE) * mn * nc) : NULL); /* determine host's performance independent of current result code/status */ if (NULL != gold_hst && NULL != amat_hst && NULL != bmat_hst && NULL != stack_hst) { const ELEM_TYPE alpha = 1, beta = 1; const char transa = 'N'; # if defined(TRANSPOSE) const char transb = 'N'; # else const char transb = 'T'; # endif memset(gold_hst, 0, sizeof(ELEM_TYPE) * mn * nc); for (r = 0; r < warmup; ++r) { ACC_BENCH_GEMM_BATCH(LIBXSMM_DATATYPE(ELEM_TYPE), LIBXSMM_DATATYPE(ELEM_TYPE), &transa, &transb, m, n, k, &alpha, amat_hst, &m /*lda*/, stack_hst + 0 /*stride_a*/, bmat_hst, &k /*ldb*/, stack_hst + 1 /*stride_b*/, &beta, gold_hst, &m /*ldc*/, stack_hst + 2 /*stride_c*/, sizeof(int) * 3, 1 /*index_base*/, stack_size); } memset(gold_hst, 0, sizeof(ELEM_TYPE) * mn * nc); start = libxsmm_timer_tick(); /* CPU-kernel operates on data that is not initialized in NUMA-aware fashion */ for (r = 0; r < (nrepeat * nrepeat_smm); ++r) { ACC_BENCH_GEMM_BATCH(LIBXSMM_DATATYPE(ELEM_TYPE), LIBXSMM_DATATYPE(ELEM_TYPE), &transa, &transb, m, n, k, &alpha, amat_hst, &m /*lda*/, stack_hst + 0 /*stride_a*/, bmat_hst, &k /*ldb*/, stack_hst + 1 /*stride_b*/, &beta, gold_hst, &m /*ldc*/, stack_hst + 2 /*stride_c*/, sizeof(int) * 3, 1 /*index_base*/, stack_size); } duration = libxsmm_timer_duration(start, libxsmm_timer_tick()); perf_hst = 1E-9 * ((size_t)2 * m * n * k * stack_size * nrepeat * nrepeat_smm) / duration; PRINTF("host: %.2g ms %.1f GFLOPS/s\n", 1000.0 * duration / (nrepeat * nrepeat_smm), perf_hst); /* validate correctness in case of successful result code/status */ if (EXIT_SUCCESS == result) { # if !defined(__OFFLOAD_UNIFIED_MEMORY) || !defined(DEDUPLICATE) /* transfer result from device to host for validation */ CHECK(c_dbcsr_acc_memcpy_d2h(cmat_dev, cmat_hst, sizeof(ELEM_TYPE) * mn * nc, stream), &result, check); CHECK(c_dbcsr_acc_stream_sync(stream), &result, check); # endif # if defined(USE_LIBXSMM) if (EXIT_SUCCESS == result) { libxsmm_matdiff_info diff; /* validate result buffers at once (including excess/padded space) */ result = libxsmm_matdiff(&diff, LIBXSMM_DATATYPE(ELEM_TYPE), mn, nc, gold_hst, cmat_hst, &mn, &mn); if (EXIT_SUCCESS == result) { # if defined(USE_LIBXSMM) && LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER const double epsilon = libxsmm_matdiff_epsilon(&diff); /* 1.0 - diff.rsq */ # else const double epsilon = diff.normf_rel; # endif PRINTF("diff.cur: %g", epsilon); if (maxdiff < epsilon && NULL != file) maxdiff = epsilon; if (0 < epsilon) { if (LIBXSMM_NOTNAN(diff.v_tst)) { PRINTF(" (|%g-%g|=%g)\n", diff.v_ref, diff.v_tst, diff.linf_abs); } else { PRINTF(" (%g)\n", diff.v_tst); } } else { PRINTF("\n"); } if (0 < check && check < epsilon) result = EXIT_FAILURE; } else fprintf(stderr, "ERROR: failed to validate!\n"); } # endif } } libxsmm_free(gold_hst); } # endif #endif CHECK(c_dbcsr_acc_host_mem_deallocate(stack_hst, stream), NULL, check); CHECK(c_dbcsr_acc_host_mem_deallocate(trans_hst, stream), NULL, check); CHECK(c_dbcsr_acc_host_mem_deallocate(amat_hst, stream), NULL, check); CHECK(c_dbcsr_acc_host_mem_deallocate(bmat_hst, stream), NULL, check); CHECK(c_dbcsr_acc_host_mem_deallocate(cmat_hst, stream), NULL, check); #if !defined(__OFFLOAD_UNIFIED_MEMORY) || !defined(DEDUPLICATE) CHECK(c_dbcsr_acc_dev_mem_deallocate(stack_dev), NULL, check); CHECK(c_dbcsr_acc_dev_mem_deallocate(trans_dev), NULL, check); CHECK(c_dbcsr_acc_dev_mem_deallocate(amat_dev), NULL, check); CHECK(c_dbcsr_acc_dev_mem_deallocate(bmat_dev), NULL, check); CHECK(c_dbcsr_acc_dev_mem_deallocate(cmat_dev), NULL, check); #endif CHECK(c_dbcsr_acc_stream_destroy(stream), NULL, check); if (0 == result || (0 > result && 0 == check)) { parse_params(argc, argv, &file, &snr, &sss, &ssm, &ssn, &ssk, &snc, &sna, &snb); if (NULL != file) PRINTF("\n"); ++nok; } #if defined(USE_LIBXSMM) if (0 == result) { LIBXSMM_STDIO_ACQUIRE(); fputs(print_buffer, stdout); LIBXSMM_STDIO_RELEASE(); } else #endif { if (0 > result) fprintf(stderr, "WARNING: %ix%ix%i-kernel not available or unsuitable!\n", m, n, k); } if (NULL == file && (0 == result || (0 > result && 0 == check))) break; } } free(rnd); /* release array of random numbers */ #if !defined(__CUDA) CHECK(libsmm_acc_finalize(), NULL, check); #endif CHECK(c_dbcsr_acc_finalize(), NULL, check); #if defined(USE_LIBXSMM) && defined(VALIDATE) if (1 < nok) printf("\ndiff.max: %g\n", maxdiff); #endif if (EXIT_SUCCESS == result) { #if defined(USE_LIBXSMM) if (NULL != env_check_h2d && 0 < perf_h2d) { const double check_h2d = atof(env_check_h2d); if (perf_h2d < check_h2d) result = EXIT_FAILURE; } if (NULL != env_check_dev && 0 < perf_dev) { const double check_dev = atof(env_check_dev); if (perf_dev < check_dev) result = EXIT_FAILURE; } if (NULL != env_check_hst && 0 < perf_hst) { const double check_hst = atof(env_check_hst); if (perf_hst < check_hst) result = EXIT_FAILURE; } if (EXIT_SUCCESS != result) fprintf(stderr, "\nFAILED\n\n"); #endif } else { if (NULL != file) fclose(file); if (0 < result) fprintf(stderr, "\nFAILED\n\n"); else if (0 == check) result = EXIT_SUCCESS; } return result; } ================================================ FILE: src/acc/acc_bench.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #ifndef DBCSR_ACC_BENCH_H #define DBCSR_ACC_BENCH_H #include #include #if !defined(MIN) # define MIN(A, B) ((A) < (B) ? (A) : (B)) #endif #if !defined(MAX) # define MAX(A, B) ((B) < (A) ? (A) : (B)) #endif #if !defined(INLINE) && (defined(__cplusplus) || (defined(__STDC_VERSION__) && (199901L <= __STDC_VERSION__) /*C99*/)) # define INLINE inline #else # define INLINE #endif #if !defined(MAX_KERNEL_DIM) # define MAX_KERNEL_DIM 80 #endif #define INIT_MAT(ELEM_TYPE, SEED, MAT, M, N, SCALE) \ do { \ const double init_mat_seed1_ = (SCALE) * (SEED) + (SCALE); \ int init_mat_i_, init_mat_j_; \ for (init_mat_i_ = 0; init_mat_i_ < (N); ++init_mat_i_) { \ for (init_mat_j_ = 0; init_mat_j_ < (M); ++init_mat_j_) { \ const int init_mat_k_ = init_mat_i_ * (M) + init_mat_j_; \ ((ELEM_TYPE*)(MAT))[init_mat_k_] = (ELEM_TYPE)(init_mat_seed1_ * (init_mat_k_ + 1)); \ } \ } \ } while (0) /** * Artificial stack-setup for DBCSR/ACC benchmarks. * The arguments rnd and rnd_size optionally allow * to supply an array of (pseudo-)random-numbers. */ static INLINE void init_stack( int* stack, int stack_size, int rnd_size, const int* rnd, int mn, int mk, int kn, int nc, int na, int nb) { /* navg matrix products are accumulated into a C-matrix */ const int navg = stack_size / nc; const int nimb = MAX(1, navg - 4); /* imbalance */ int i = 0, c = 0, ntop = 0; assert(0 < nc && nc <= stack_size); while (i < stack_size) { const int r = ((NULL == rnd || 0 >= rnd_size) ? rand() : rnd[i % rnd_size]), next = c + 1; ntop += navg + (r % (2 * nimb) - nimb); if (stack_size < ntop) ntop = stack_size; for (; i < ntop; ++i) { /* setup one-based indexes */ int a, b; if (NULL != rnd && 0 < rnd_size) { a = rnd[(2 * i + 0) % rnd_size] % na; b = rnd[(2 * i + 1) % rnd_size] % nb; } else { a = rand() % na; b = rand() % nb; } *stack++ = a * mk + 1; /* A-index */ *stack++ = b * kn + 1; /* B-index */ *stack++ = c * mn + 1; /* C-index */ } if (next < nc) c = next; } } #endif /*DBCSR_ACC_BENCH_H*/ ================================================ FILE: src/acc/acc_libsmm.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #ifndef DBCSR_ACC_LIBSMM_H #define DBCSR_ACC_LIBSMM_H #include "acc.h" #define DBCSR_TYPE(T) DBCSR_CONCATENATE(DBCSR_TYPE_, T) #define DBCSR_TYPE_double dbcsr_type_real_8 #define DBCSR_TYPE_float dbcsr_type_real_4 #define LIBSMM_ACC_TRANSPOSE_ROUTINE_NAME_STRPTR ((const char**)((uintptr_t)&libsmm_acc_transpose_routine_name_ptr)) #define LIBSMM_ACC_TRANSPOSE_ROUTINE_NAME_LENPTR (&libsmm_acc_transpose_routine_name_len) #define LIBSMM_ACC_TRANSPOSE_ROUTINE_NAME_STR (libsmm_acc_transpose_routine_name_str) #define LIBSMM_ACC_PROCESS_ROUTINE_NAME_STRPTR ((const char**)((uintptr_t)&libsmm_acc_process_routine_name_ptr)) #define LIBSMM_ACC_PROCESS_ROUTINE_NAME_LENPTR (&libsmm_acc_process_routine_name_len) #define LIBSMM_ACC_PROCESS_ROUTINE_NAME_STR (libsmm_acc_process_routine_name_str) #if defined(__cplusplus) extern "C" { #endif typedef enum libsmm_acc_data_t { dbcsr_type_real_4 = 1, dbcsr_type_real_8 = 3, dbcsr_type_complex_4 = 5, dbcsr_type_complex_8 = 7 } libsmm_acc_data_t; int libsmm_acc_init(void); int libsmm_acc_finalize(void); c_dbcsr_acc_bool_t libsmm_acc_is_thread_safe(void); int libsmm_acc_transpose(const int* dev_trs_stack, int offset, int stack_size, void* dev_data, libsmm_acc_data_t datatype, int m, int n, int max_kernel_dim, void* stream); int libsmm_acc_process(const int* host_param_stack, const int* dev_param_stack, int stack_size, libsmm_acc_data_t datatype, const void* dev_a_data, const void* dev_b_data, void* dev_c_data, int m_max, int n_max, int k_max, int max_kernel_dim, c_dbcsr_acc_bool_t def_mnk, void* stack_stream, void* c_stream); int c_calculate_norms(const double* mat, int nblks, const int* offsets, const int* nelems, float* norms, void* stream_ptr); static const char libsmm_acc_transpose_routine_name_str[] = "jit_kernel_transpose"; static const char* const libsmm_acc_transpose_routine_name_ptr = libsmm_acc_transpose_routine_name_str; static const int libsmm_acc_transpose_routine_name_len = (int)sizeof(libsmm_acc_transpose_routine_name_str) - 1; static const char libsmm_acc_process_routine_name_str[] = "jit_kernel_multiply"; static const char* const libsmm_acc_process_routine_name_ptr = libsmm_acc_process_routine_name_str; static const int libsmm_acc_process_routine_name_len = (int)sizeof(libsmm_acc_process_routine_name_str) - 1; #if defined(__cplusplus) } #endif #endif /*DBCSR_ACC_LIBSMM_H*/ ================================================ FILE: src/acc/acc_triplets.sh ================================================ #!/usr/bin/env bash #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: BSD-3-Clause # #################################################################################################### XARGS=$(command -v xargs) SORT=$(command -v sort) HEAD=$(command -v head) SED=$(command -v gsed) CUT=$(command -v cut) # GNU sed is desired (macOS) if [ ! "${SED}" ]; then SED=$(command -v sed) fi if [ "${XARGS}" ] && [ "${SORT}" ] && [ "${HEAD}" ] && [ "${SED}" ] && [ "${CUT}" ]; then LINES=0 while test $# -gt 0; do case "$1" in -h|--help) HELP=1 shift $#;; -l|--lines) LINES=1 shift;; -r|--bound) BOUNDL=$2 BOUNDU=$3 shift 3;; -m|--limit) MAXEXT=$2 shift 2;; -n|--triplets) MAXNUM=$2 shift 2;; -a|--amat) CUTSEL=-f1,3 shift;; -b|--bmat) CUTSEL=-f3,2 shift;; -c|--cmat) CUTSEL=-f1,2 shift;; -k|--specid) case "$2" in 0) TRIPLETS="23, 6, 14 16 29, 5 16 13 24 26, 9 16 22, 32, 64, 78, 16 29 55";; 1) TRIPLETS="23, 6, 14 16 29, 5 32 13 24 26, 9 32 22, 32, 64, 78, 16 29 55";; 2) TRIPLETS="23, 6, 14 16 29, 5 32 13 24 26, 9 32 22, 32, 64, 78, 16 29 55, 12";; 3) TRIPLETS="23, 6, 14 16 29, 14 32 29, 5 32 13 24 26, 9 32 22, 32, 64, 78, 16 29 55, 32 29 55, 12";; 4) TRIPLETS="23, 6, 14 16 29, 14 32 29, 5 32 13 24 26, 9 32 22, 32, 64, 78, 16 29 55, 32 29 55, 12, 13 26 28 32 45";; 5) TRIPLETS="23, 6, 14 16 29, 14 32 29, 5 32 13 24 26, 9 32 22, 32, 64, 78, 16 29 55, 32 29 55, 12, 13 26 28 32 45, 7 13 25 32";; 6) TRIPLETS="23, 6, 14 16 29, 14 32 29, 5 32 13 24 26, 9 32 22, 64, 78, 16 29 55, 32 29 55, 12, 4 5 7 9 13 25 26 28 32 45";; 7) TRIPLETS="23, 6, 14 16 29, 14 32 29, 5 32 13 24 26, 9 32 22, 64, 78, 16 29 55, 32 29 55, 12, 4 5 7 9 13 25 26 28 32 45, 4 10";; 8) TRIPLETS="23, 6, 14 16 29, 14 32 29, 5 32 13 24 26, 9 32 22, 64, 78, 16 29 55, 32 29 55, 12, 4 5 7 9 13 25 26 28 32 45, 4 10 15";; 9) TRIPLETS="23, 6, 14 16 29, 14 32 29, 5 32 13 24 26, 9 32 22, 64, 78, 16 29 55, 32 29 55, 12, 4 5 7 9 13 25 26 28 32 45, 4 10 15, 6 7 8";; *) TRIPLETS=" \ 4 5 7 9 13 25 26 28 32 45, \ 13 14 25 26 32, \ 5 32 13 24 26, \ 14 16 29, \ 14 32 29, \ 16 29 55, \ 32 29 55, \ 9 32 22, \ 4 10 15, \ 6 7 8, \ 23, \ 64, \ 78, \ 12, \ 6";; esac shift 2;; *) if [ "" = "$(echo "$*" | ${SED} -n "s/[0-9]*[[:space:]]*,*//gp")" ]; then TRIPLETS="$*" else >&2 echo "ERROR: invalid triplet specification!" fi break;; esac done if [[ "${TRIPLETS}" && (! "${HELP}" || "0" = "${HELP}") ]]; then for SPECS in $(echo "${TRIPLETS}" | ${SED} -e "s/[[:space:]][[:space:]]*/x/g" -e "s/,/ /g"); do SPEC=$(echo "${SPECS}" | ${SED} -e "s/^x//g" -e "s/x$//g" -e "s/x/,/g") if [ "${MAXEXT}" ] && [ "0" != "$((0]\"" eval "${ECHO} \" Options must precede triplet specification\"" eval "${ECHO} \" -l|--lines: lines instead of list of words\"" eval "${ECHO} \" -r|--bound L U: limit L**3 < MNK <= U**3\"" eval "${ECHO} \" -m|--limit N: limit any shape extent to N\"" eval "${ECHO} \" -n|--triplets N: limit number of triplet\"" eval "${ECHO} \" -a|--amat: select MxK instead of MxNxK\"" eval "${ECHO} \" -b|--bmat: select KxN instead of MxNxK\"" eval "${ECHO} \" -c|--cmat: select MxN instead of MxNxK\"" eval "${ECHO} \" -k|--specid N: predefined triplets\"" eval "${ECHO} \" 0-10: older to newer (larger), e.g.,\"" eval "${ECHO} \" -k 0: 201 kernels\"" eval "${ECHO} \" -k 10: 1266 kernels\"" eval "${ECHO} \" , e.g., 134 kernels\"" eval "${ECHO} \" 23, 5 32 13 24 26, 4 9\"" eval "${ECHO}" if [ "${HELP}" ] || [ "0" = "${HELP}" ]; then exit 0; fi >&2 echo "ERROR: invalid or no given!" exit 1 fi else >&2 echo "ERROR: missing prerequisites!" exit 1 fi ================================================ FILE: src/acc/cuda/Makefile ================================================ # This Makefile builds the SMM benchmark driver without building DBCSR. # It is for testing and comparison with other implementations. MAKDIR := $(subst //,,$(dir $(firstword $(MAKEFILE_LIST)))/) ACCDIR := $(MAKDIR)/.. DIRSMM := $(ACCDIR)/libsmm_acc INCACC := $(wildcard $(MAKDIR)/*.h*) $(ACCDIR)/acc.h SRCACC := $(wildcard $(ACCDIR)/cuda_hip/*.cpp) \ $(wildcard $(MAKDIR)/*.cpp) \ $(NULL) OBJACC := $(SRCACC:.cpp=.o) GPUSMM := $(wildcard $(DIRSMM)/kernels/*.h*) INCSMM := $(wildcard $(DIRSMM)/*.h*) \ $(DIRSMM)/parameters.h \ $(DIRSMM)/smm_acc_kernels.h \ $(ACCDIR)/acc_libsmm.h \ $(ACCDIR)/acc_bench.h \ $(NULL) SRCSMM := $(wildcard $(DIRSMM)/*.cpp) OBJSMM := $(SRCSMM:.cpp=.o) INCALL := $(INCACC) $(INCSMM) LIBXSMMROOT := $(wildcard $(ACCDIR)/../../../../../libxsmm) ifeq (,$(LIBXSMMROOT)) LIBXSMMROOT := $(wildcard $(HOME)/libxsmm) endif UNAME := $(shell uname) HEADERONLY ?= 0 STATIC ?= 1 INTEL ?= 0 GNU ?= 0 DEV ?= 0 # C++ baseline standard CXXSTD ?= -std=c++14 # select from set of predefined triplet specifications SPECID ?= 0 # limit shape in tests (zero or negative for unlimited) MAXEXT ?= 48 # number of tests (zero or negative for unlimited) NSMMS ?= 10 COMMAND := $(shell which command 2>/dev/null) ifneq (,$(COMMAND)) which = $(shell $(COMMAND) -v $1) else which = $(shell which $(firstword $1) 2>/dev/null) endif PYTHON := $(call which,python3) ifeq (,$(PYTHON)) PYTHON := $(call which,python) endif WITH_GPU := $(if $(WITH_GPU),$(WITH_GPU),$(GPUVER)) ifeq (,$(WITH_GPU)) ifneq (,$(call which,nvidia-smi)) GPU_NAME := $(shell nvidia-smi --query-gpu=gpu_name --format=csv,noheader -i 0 2>/dev/null | tr -c [:alnum:] " ") WITH_GPU := $(filter K20X K40 K80 P100 V100 A100 H100,$(GPU_NAME)) endif endif ifeq (,$(WITH_GPU)) WITH_GPU := P100 endif NVCC ?= $(call which,nvcc) CUDA_PATH ?= $(if $(NVCC),$(abspath $(dir $(NVCC))/..)) ifeq ($(WITH_GPU),K20X) ARCH_NUMBER = 35 else ifeq ($(WITH_GPU),K40) ARCH_NUMBER = 35 else ifeq ($(WITH_GPU),K80) ARCH_NUMBER = 37 else ifeq ($(WITH_GPU),P100) ARCH_NUMBER = 60 else ifeq ($(WITH_GPU),V100) ARCH_NUMBER = 70 else ifeq ($(WITH_GPU),A100) ARCH_NUMBER = 80 else ifeq ($(WITH_GPU),H100) ARCH_NUMBER = 90 else ifeq (,$(ARCH_NUMBER)) $(error Unknown ARCH_NUMBER since WITH_GPU="$(WITH_GPU)" is not recognized) endif CFLAGS := -fPIC \ -Wall -Wextra -pedantic \ -Wno-variadic-macros \ -Wno-long-long \ $(NULL) DFLAGS := \ -DARCH_NUMBER=$(ARCH_NUMBER) \ -D__CUDA \ $(NULL) ifneq (,$(ELEM_TYPE)) DFLAGS += -DELEM_TYPE=$(ELEM_TYPE) endif ifneq (0,$(INTEL)) ifneq (1,$(INTEL)) CXX := icpx CC := icx else CXX := icpc CC := icc endif AR := $(if $(call which,xiar),xiar,ar) else CXX := g++ CC := gcc ifneq (Darwin,$(UNAME)) AR := gcc-ar else AR := ar endif endif ifeq (0,$(DEV)) CFLAGS += \ -Wno-unused-parameter \ -Wno-format \ $(NULL) endif ifneq (0,$(DBG)) ifeq (,$(DBG)) DFLAGS += -DNDEBUG CFLAGS += -O2 else ifneq (1,$(DBG)) DFLAGS += -D_DEBUG endif CFLAGS += -O0 endif else DFLAGS += -DNDEBUG -DNDBGDEV CFLAGS += -O2 SYM := 0 endif ifneq (0,$(SYM)) CFLAGS += -g endif ifneq (0,$(OMP)) ifneq (0,$(INTEL)) CFLAGS += -qopenmp LDFLAGS += -qopenmp else ifneq (Darwin,$(UNAME)) CFLAGS += -fopenmp LDFLAGS += -fopenmp else # macOS CFLAGS += -Xpreprocessor -fopenmp LDFLAGS += -lomp endif endif ifneq (,$(LIBXSMMROOT)) ifneq (0,$(STATIC)) ifeq (0,$(HEADERONLY)) ifneq (0,$(OMP)) LDFLAGS += $(LIBXSMMROOT)/lib/libxsmmext.a endif LDFLAGS += $(LIBXSMMROOT)/lib/libxsmm.a else CFLAGS_XSMM += -DLIBXSMM_DEFAULT_CONFIG endif LDFLAGS += $(LIBXSMMROOT)/lib/libxsmmnoblas.a else LDFLAGS += -L$(LIBXSMMROOT)/lib ifneq (Darwin,$(UNAME)) LDFLAGS += -Wl,-rpath=$(LIBXSMMROOT)/lib endif ifneq (0,$(OMP)) LDFLAGS += -lxsmmext endif LDFLAGS += -lxsmm -lxsmmnoblas endif CFLAGS_XSMM += -pthread -D__LIBXSMM -I$(LIBXSMMROOT)/include LDFLAGS += -pthread -ldl -lm endif ifneq (,$(CUDA_PATH)) CUDA_LIBDIR := $(if $(wildcard $(CUDA_PATH)/lib64),lib64,lib) LDFLAGS += -L$(CUDA_PATH)/$(CUDA_LIBDIR)/stubs -Wl,-rpath=$(CUDA_PATH)/$(CUDA_LIBDIR)/stubs LDFLAGS += -L$(CUDA_PATH)/$(CUDA_LIBDIR) -Wl,-rpath=$(CUDA_PATH)/$(CUDA_LIBDIR) CUDAINC := $(strip $(lastword $(sort $(wildcard $(CUDA_PATH)/../cuda/*/targets/x86_64-linux/include/cuda.h)))) ifneq (,$(CUDAINC)) CFLAGS += -I$(abspath $(dir $(CUDAINC))) else CFLAGS += -I$(CUDA_PATH)/include endif endif # Collect all paths in LD_LIBRARY_PATH and LD_LIBRARY_PATH/stubs, and append to LDFLAGS LD_LIBRARY_DIRS := $(wildcard $(subst :, ,$(LD_LIBRARY_PATH))) LD_LIBSTUB_PATH := $(wildcard $(patsubst %,%/stubs,$(LD_LIBRARY_DIRS))) LIBPATHS := $(foreach DIR,$(LD_LIBRARY_DIRS),$(if $(filter -L$(DIR),$(LDFLAGS)),$(NULL),-L$(DIR))) LIBSTUBS := $(foreach DIR,$(LD_LIBSTUB_PATH),$(if $(filter -L$(DIR),$(LDFLAGS)),$(NULL),-L$(DIR))) LDFLAGS += $(LIBPATHS) $(LIBSTUBS) -lcudart -lcublas -lnvrtc -lcuda CXXFLAGS += $(CXXSTD) $(CFLAGS) .PHONY: bench bench: $(ACCDIR)/acc_bench .PHONY: all all: bench $(ACCDIR)/dbcsr_acc_test .PHONY: test test: test-interface test-smm .PHONY: test-interface test-interface: $(ACCDIR)/dbcsr_acc_test @echo "--- DBCSR Backend Interface" $(ACCDIR)/dbcsr_acc_test $(MAKDIR)/test-smm.log: bench $(eval SHAPES = $(shell $(ACCDIR)/acc_triplets.sh -k $(SPECID) -m $(MAXEXT) -n $(NSMMS))) @echo "--- DBCSR CUDA SMMs ($(words $(SHAPES)))" @echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" ifneq (,$(LD_PRELOAD)) @echo "LD_PRELOAD=${LD_PRELOAD}" endif @echo "NVCC: $$($(NVCC) --version | head -n1)" @echo "CXX: $$($(CXX) --version | head -n1)" @echo "CC: $$($(CC) --version | head -n1)" @echo "runtime libraries:" @ldd $(ACCDIR)/acc_bench @echo "hostname: $$(hostname)" @echo @echo "$(SHAPES)" | xargs -n1 | (CHECK=$(if $(CHECK),$(CHECK),1) stdbuf --output=L \ $(ACCDIR)/acc_bench /dev/stdin 2>$(MAKDIR)/test-smm.err && rm $(MAKDIR)/test-smm.err) | tee $@ .PHONY: test-smm test-smm: $(MAKDIR)/test-smm.log ifneq (,$(call which,datamash)) ifeq (,$(shell datamash geomean 2>&1 | grep invalid)) @echo "geomean: $$(sed -n "/device:/p" $< 2>/dev/null | datamash -W -R 1 geomean 4) GFLOPS/s" endif @echo "median: $$(sed -n "/device:/p" $< 2>/dev/null | datamash -W -R 1 median 4) GFLOPS/s" @echo "mean: $$(sed -n "/device:/p" $< 2>/dev/null | datamash -W -R 1 mean 4) GFLOPS/s" endif @if [ -s $(MAKDIR)/test-smm.err ]; then \ echo && cat $(MAKDIR)/test-smm.err; \ if [ "0" != "$(if $(CHECK),$(CHECK),1)" ]; then exit 1; fi; \ fi PARDIR := $(DIRSMM)/parameters PARAMS := $(wildcard $(PARDIR)/parameters_$(WITH_GPU).json) $(DIRSMM)/parameters.h: $(MAKDIR)/Makefile $(DIRSMM)/generate_parameters.py $(PARAMS) @cd $(DIRSMM) && $(PYTHON) ../libsmm_acc/generate_parameters.py --gpu_version=$(WITH_GPU) --base_dir=../libsmm_acc/parameters $(DIRSMM)/smm_acc_kernels.h: $(GPUSMM) $(MAKDIR)/Makefile $(DIRSMM)/generate_kernels.py $(PARAMS) @cd $(DIRSMM) && $(PYTHON) ../libsmm_acc/generate_kernels.py ../libsmm_acc/kernels .PHONY: backend backend: $(ACCDIR)/dbcsr_acc.a $(ACCDIR)/dbcsr_acc.a: $(OBJACC) $(DIRSMM)/libsmm_acc_init.o $(AR) -rs $@ $^ .PHONY: libsmm libsmm: $(ACCDIR)/dbcsr_acc_smm.a $(ACCDIR)/dbcsr_acc_smm.a: $(OBJSMM) $(AR) -rs $@ $^ %.o: %.cpp $(INCALL) $(MAKDIR)/Makefile $(CXX) $(DFLAGS) $(CXXFLAGS) $(CFLAGS_XSMM) -c $< -o $@ %.o: %.cu $(INCALL) $(MAKDIR)/Makefile $(NVCC) $(DFLAGS) -allow-unsupported-compiler $(CXXSTD) \ --compiler-options="$(filter-out $(CXXSTD),$(CXXFLAGS)) $(CFLAGS_XSMM)" -c $< -o $@ $(ACCDIR)/cuda_hip/calculate_norms.o: $(ACCDIR)/cuda_hip/calculate_norms.cpp $(INCALL) $(MAKDIR)/Makefile $(NVCC) $(DFLAGS) -allow-unsupported-compiler $(CXXSTD) -x cu \ --compiler-options="$(filter-out $(CXXSTD) -pedantic,$(CXXFLAGS)) $(CFLAGS_XSMM)" -c $< -o $@ $(MAKDIR)/acc_bench.o: $(ACCDIR)/acc_bench.c $(MAKDIR)/Makefile ifneq (0,$(LIBXSMM)) $(CC) $(DFLAGS) $(CFLAGS) $(CFLAGS_XSMM) -c $< -o $@ else $(CC) $(DFLAGS) $(CFLAGS) -c $< -o $@ endif $(ACCDIR)/acc_bench: $(MAKDIR)/acc_bench.o $(ACCDIR)/dbcsr_acc.a $(ACCDIR)/dbcsr_acc_smm.a $(CXX) $^ $(LDFLAGS) -o $@ $(MAKDIR)/dbcsr_acc_test.o: $(ACCDIR)/../../tests/dbcsr_acc_test.c $(MAKDIR)/Makefile $(CC) $(DFLAGS) $(CFLAGS) -I$(ACCDIR)/.. -c $< -o $@ $(ACCDIR)/dbcsr_acc_test: $(MAKDIR)/dbcsr_acc_test.o $(ACCDIR)/dbcsr_acc.a $(ACCDIR)/dbcsr_acc_smm.a $(CXX) $^ $(LDFLAGS) -o $@ .PHONY: clean clean: @rm -f $(OBJACC) $(OBJSMM) @rm -f $(MAKDIR)/dbcsr_acc_test.o @rm -f $(MAKDIR)/acc_bench.o @rm -f $(DIRSMM)/parameters.h @rm -f $(DIRSMM)/smm_acc_kernels.h @rm -f $(MAKDIR)/test-smm.err .PHONY: realclean realclean: clean @rm -f $(ACCDIR)/dbcsr_acc.a $(ACCDIR)/dbcsr_acc_smm.a @rm -f $(ACCDIR)/acc_bench @rm -f $(ACCDIR)/dbcsr_acc_test @rm -f $(MAKDIR)/test-smm.log ================================================ FILE: src/acc/cuda/PACKAGE ================================================ { "description": "Cuda backend for accelerator API", "archive":"libdbcsr", "requires": ["../../base"] } ================================================ FILE: src/acc/cuda/acc_cuda.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #include "acc_cuda.h" nvrtcResult nvrtcGetLowLevelCode(nvrtcProgram prog, char* code) { return nvrtcGetPTX(prog, code); } nvrtcResult nvrtcGetLowLevelCodeSize(nvrtcProgram prog, size_t* codeSizeRet) { return nvrtcGetPTXSize(prog, codeSizeRet); } CUresult cuLaunchJITKernel(CUfunction f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ, unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, CUstream stream, void** kernelParams, void** extra) { return cuLaunchKernel( f, gridDimX, gridDimY, gridDimZ, blockDimX, blockDimY, blockDimZ, sharedMemBytes, stream, kernelParams, extra); } // CUDA Runtime API: flag values CUevent_flags CUEventDefault = CU_EVENT_DEFAULT; CUstream_flags CUStreamDefault = CU_STREAM_DEFAULT; CUsharedconfig CUSharedMemBankSizeEightByte = CU_SHARED_MEM_CONFIG_EIGHT_BYTE_BANK_SIZE; cublasStatus_t ACC_BLAS_STATUS_SUCCESS = CUBLAS_STATUS_SUCCESS; cublasOperation_t ACC_BLAS_OP_N = CUBLAS_OP_N; cublasOperation_t ACC_BLAS_OP_T = CUBLAS_OP_T; nvrtcResult ACC_RTC_SUCCESS = NVRTC_SUCCESS; ================================================ FILE: src/acc/cuda/acc_cuda.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #ifndef ACC_CUDA_H #define ACC_CUDA_H #include #include #include #include #include #define ACC(x) cuda##x #define ACC_DRV(x) CU##x #define ACC_DRV_FUNC_PREFIX(x) cu##x #define ACC_RTC(x) nvrtc##x #define ACC_BLAS(x) cublas##x #define BACKEND "CUDA" /* Macros for CUDA error handling * Wrap calls to CUDA runtime API (CUDART) */ #define ACC_API_CALL(func, args) \ do { \ cudaError_t result = ACC(func) args; \ if (result != cudaSuccess) { \ printf("\nCUDA RUNTIME API error: %s failed with error %s (%s::%d)\n", #func, cudaGetErrorName(result), __FILE__, __LINE__); \ exit(1); \ } \ } while (0) /* Wrap calls to CUDA driver API */ #define ACC_DRV_CALL(func, args) \ do { \ CUresult result = ACC_DRV_FUNC_PREFIX(func) args; \ if (result != CUDA_SUCCESS) { \ const char* msg; \ cuGetErrorName(result, &msg); \ printf("\nCUDA DRIVER API ERROR: %s failed with error %s (%s::%d)\n", #func, msg, __FILE__, __LINE__); \ exit(1); \ } \ } while (0) /* Wrap calls to CUDA NVRTC API */ #define ACC_RTC_CALL(func, args) \ do { \ nvrtcResult result = ACC_RTC(func) args; \ if (result != NVRTC_SUCCESS) { \ printf("\nNVRTC ERROR: %s failed with error %s\n", #func, nvrtcGetErrorString(result)); \ exit(1); \ } \ } while (0) /* Wrap calls to CUDA CUBLAS API */ #define ACC_BLAS_CALL(func, args) \ do { \ cublasStatus_t result = ACC_BLAS(func) args; \ if (result != CUBLAS_STATUS_SUCCESS) { \ const char* error_name = "CUBLAS_ERRROR"; \ if (result == CUBLAS_STATUS_NOT_INITIALIZED) { \ error_name = "CUBLAS_STATUS_NOT_INITIALIZED"; \ } \ else if (result == CUBLAS_STATUS_ALLOC_FAILED) { \ error_name = "CUBLAS_STATUS_ALLOC_FAILED"; \ } \ else if (result == CUBLAS_STATUS_INVALID_VALUE) { \ error_name = "CUBLAS_STATUS_INVALID_VALUE"; \ } \ else if (result == CUBLAS_STATUS_ARCH_MISMATCH) { \ error_name = "CUBLAS_STATUS_ARCH_MISMATCH"; \ } \ else if (result == CUBLAS_STATUS_MAPPING_ERROR) { \ error_name = "CUBLAS_STATUS_MAPPING_ERROR"; \ } \ else if (result == CUBLAS_STATUS_EXECUTION_FAILED) { \ error_name = "CUBLAS_STATUS_EXECUTION_FAILED"; \ } \ else if (result == CUBLAS_STATUS_INTERNAL_ERROR) { \ error_name = "CUBLAS_STATUS_INTERNAL_ERROR"; \ } \ printf("\nCUBLAS ERROR: %s failed with error %s\n", #func, error_name); \ exit(1); \ } \ } while (0) extern nvrtcResult nvrtcGetLowLevelCode(nvrtcProgram prog, char* code); extern nvrtcResult nvrtcGetLowLevelCodeSize(nvrtcProgram prog, size_t* codeSizeRet); extern CUresult cuLaunchJITKernel(CUfunction f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ, unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, CUstream stream, void** kernelParams, void** extra); /* CUDA Runtime API: flag values */ extern CUevent_flags CUEventDefault; extern CUstream_flags CUStreamDefault; extern CUsharedconfig CUSharedMemBankSizeEightByte; /* CUBLAS status and operations */ extern cublasStatus_t ACC_BLAS_STATUS_SUCCESS; extern cublasOperation_t ACC_BLAS_OP_N; extern cublasOperation_t ACC_BLAS_OP_T; /* NVRTC error status */ extern nvrtcResult ACC_RTC_SUCCESS; #endif /*ACC_CUDA_H*/ ================================================ FILE: src/acc/cuda/dbcsr_cuda_nvtx_cu.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #if defined(__CUDA_PROFILING) # include # include # include # include const uint32_t colormap[] = {0xFFFFFF00, // Yellow 0xFFFF00FF, // Fuchsia 0xFFFF0000, // Red 0xFFC0C0C0, // Silver 0xFF808080, // Gray 0xFF808000, // Olive 0xFF800080, // Purple 0xFF800000, // Maroon 0xFF00FFFF, // Aqua 0xFF00FF00, // Lime 0xFF008080, // Teal 0xFF008000, // Green 0xFF0000FF, // Blue 0xFF000080}; // Navy //============================================================================== extern "C" int cuda_nvtx_range_push_cu(const char* message) { // assembling event attribute nvtxEventAttributes_t eventAttrib = {0}; eventAttrib.version = NVTX_VERSION; eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; eventAttrib.message.ascii = message; // colors are picked based on a (very simple) hash value of the message int hash = 0; for (size_t i = 0; i < strlen(message); i++) hash += i * message[i] * message[i]; eventAttrib.colorType = NVTX_COLOR_ARGB; eventAttrib.color = colormap[hash % 14]; // these field could be filled with useful stuff eventAttrib.payloadType = NVTX_PAYLOAD_TYPE_INT64; eventAttrib.payload.llValue = 123; eventAttrib.category = 42; int level = nvtxRangePushEx(&eventAttrib); return (level); } //============================================================================== extern "C" int cuda_nvtx_range_pop_cu() { int level = nvtxRangePop(); return (level); } //============================================================================== extern "C" void cuda_nvtx_name_osthread_cu(char* name) { nvtxNameOsThread(pthread_self(), name); } #endif ================================================ FILE: src/acc/cuda/dbcsr_cuda_profiling.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_cuda_profiling !! routines for profiling cuda USE ISO_C_BINDING, ONLY: C_CHAR, & C_INT, & C_NULL_CHAR, & C_SIZE_T USE dbcsr_kinds, ONLY: default_string_length, & int_8 #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_thread_num IMPLICIT NONE PRIVATE PUBLIC :: cuda_nvtx_init, cuda_nvtx_range_push, cuda_nvtx_range_pop #if defined( __CUDA_PROFILING ) INTERFACE FUNCTION cuda_nvtx_range_push_dc(message) RESULT(level) & BIND(C, name="cuda_nvtx_range_push_cu") IMPORT CHARACTER(kind=C_CHAR), DIMENSION(*), & INTENT(IN) :: message INTEGER(KIND=C_INT) :: level END FUNCTION cuda_nvtx_range_push_dc END INTERFACE INTERFACE FUNCTION cuda_nvtx_range_pop_dc() RESULT(level) & BIND(C, name="cuda_nvtx_range_pop_cu") IMPORT INTEGER(KIND=C_INT) :: level END FUNCTION cuda_nvtx_range_pop_dc END INTERFACE INTERFACE SUBROUTINE cuda_nvtx_name_osthread_cu(name) & BIND(C, name="cuda_nvtx_name_osthread_cu") IMPORT CHARACTER(KIND=C_CHAR), DIMENSION(*) :: name END SUBROUTINE cuda_nvtx_name_osthread_cu END INTERFACE #endif CONTAINS SUBROUTINE cuda_nvtx_init() #if defined( __CUDA_PROFILING ) CHARACTER(len=default_string_length) :: threadname INTEGER :: ithread !$OMP PARALLEL DEFAULT (NONE), PRIVATE (ithread,threadname) ithread = 0 !$ ithread = OMP_GET_THREAD_NUM() WRITE (threadname, "(I3,A,I2,A)") ithread CALL cuda_nvtx_name_osthread_cu(TRIM(threadname)//c_null_char) !$OMP END PARALLEL #endif END SUBROUTINE cuda_nvtx_init SUBROUTINE cuda_nvtx_range_push(routineN) CHARACTER(LEN=*), INTENT(IN) :: routineN #if defined( __CUDA_PROFILING ) INTEGER :: level level = cuda_nvtx_range_push_dc(TRIM(routineN)//CHAR(0)) #else CALL dbcsr_abort(__LOCATION__, "cuda_nvtx_range_push: "// & "__CUDA_PROFILING not compiled in, but called with:"//TRIM(routineN)) #endif END SUBROUTINE cuda_nvtx_range_push SUBROUTINE cuda_nvtx_range_pop() #if defined( __CUDA_PROFILING ) INTEGER :: level level = cuda_nvtx_range_pop_dc() #else DBCSR_ABORT("cuda_nvtx_range_push: __CUDA_PROFILING not compiled in.") #endif END SUBROUTINE cuda_nvtx_range_pop END MODULE dbcsr_cuda_profiling ================================================ FILE: src/acc/cuda_hip/PACKAGE ================================================ { "description": "CUDA/HIP backend for accelerator API", "archive":"libdbcsr", "requires": ["../../base", "..", "../cuda", "../hip"] } ================================================ FILE: src/acc/cuda_hip/acc_blas.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #include #include "acc_blas.h" #include "acc_error.h" /****************************************************************************/ int acc_blas_create(ACC_BLAS(Handle_t) * *handle) { *handle = (ACC_BLAS(Handle_t)*)malloc(sizeof(ACC_BLAS(Handle_t))); ACC_BLAS_CALL(Create, (*handle)); return (0); } /****************************************************************************/ int acc_blas_destroy(ACC_BLAS(Handle_t) * handle) { ACC_BLAS(Status_t) cStatus = ACC_BLAS(Destroy)(*handle); free(handle); if (cStatus != ACC_BLAS_STATUS_SUCCESS) { printf("ACC BLAS finalization failed\n"); return (-1); } return (0); } /****************************************************************************/ int acc_blas_dgemm(ACC_BLAS(Handle_t) * handle, char transa, char transb, int m, int n, int k, int a_offset, int b_offset, int c_offset, const double* a_data, const double* b_data, double* c_data, double alpha, double beta, ACC(Stream_t) * stream) { ACC_BLAS(Operation_t) cTransa = transa == 'N' ? ACC_BLAS_OP_N : ACC_BLAS_OP_T; ACC_BLAS(Operation_t) cTransb = transb == 'N' ? ACC_BLAS_OP_N : ACC_BLAS_OP_T; int& lda = transa == 'N' ? m : k; int& ldb = transb == 'N' ? k : n; ACC_BLAS_CALL(SetStream, (*handle, *stream)); ACC_BLAS_CALL(Dgemm, (*handle, cTransa, cTransb, m, n, k, &alpha, &a_data[a_offset], lda, &b_data[b_offset], ldb, &beta, &c_data[c_offset], lda)); return (0); } ================================================ FILE: src/acc/cuda_hip/acc_blas.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #ifndef ACC_BLAS_H #define ACC_BLAS_H #if defined(__CUDA) # include "../cuda/acc_cuda.h" #elif defined(__HIP) # include "../hip/acc_hip.h" #endif #include #include "acc_error.h" /****************************************************************************/ int acc_blas_create(ACC_BLAS(Handle_t) * *handle); /****************************************************************************/ int acc_blas_destroy(ACC_BLAS(Handle_t) * handle); /****************************************************************************/ int acc_blas_dgemm(ACC_BLAS(Handle_t) * handle, char transa, char transb, int m, int n, int k, int a_offset, int b_offset, int c_offset, const double* a_data, const double* b_data, double* c_data, double alpha, double beta, ACC(Stream_t) * stream); #endif /* ACC_BLAS_H */ ================================================ FILE: src/acc/cuda_hip/acc_dev.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #if defined(__CUDA) # include "../cuda/acc_cuda.h" #elif defined(__HIP) # include "../hip/acc_hip.h" #endif #include "acc_error.h" #include "../acc.h" #include #include /****************************************************************************/ extern "C" int c_dbcsr_acc_get_ndevices(int* n_devices) { ACC_API_CALL(GetDeviceCount, (n_devices)); return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_device_synchronize() { ACC_API_CALL(DeviceSynchronize, ()); return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_set_active_device(int device_id) { int myDevice; ACC_API_CALL(SetDevice, (device_id)); ACC_API_CALL(GetDevice, (&myDevice)); if (myDevice != device_id) return -1; // establish context ACC_API_CALL(Free, (0)); #if defined(__CUDA) || defined(__HIP_PLATFORM_NVCC__) static bool once = false; if (!once) { ACC_API_CALL(DeviceSetLimit, (ACC(LimitPrintfFifoSize), (size_t)1000000000)); once = true; } #endif return 0; } ================================================ FILE: src/acc/cuda_hip/acc_error.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #if defined(__CUDA) # include "../cuda/acc_cuda.h" #elif defined(__HIP) # include "../hip/acc_hip.h" #endif #include "acc_error.h" #include #include /****************************************************************************/ int acc_error_check(ACC(Error_t) error) { if (error != ACC(Success)) { printf(BACKEND " error: %s\n", ACC(GetErrorString)(error)); return -1; } return 0; } extern "C" void c_dbcsr_acc_clear_errors() { ACC(GetLastError)(); } ================================================ FILE: src/acc/cuda_hip/acc_error.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #ifndef LIBSMM_ACC_H #define LIBSMM_ACC_H #if defined(__CUDA) # include "../cuda/acc_cuda.h" #elif defined(__HIP) # include "../hip/acc_hip.h" #endif int acc_error_check(ACC(Error_t) acc_error); #endif /* LIBSMM_ACC_H */ ================================================ FILE: src/acc/cuda_hip/acc_event.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #if defined(__CUDA) # include "../cuda/acc_cuda.h" #elif defined(__HIP) # include "../hip/acc_hip.h" #endif #include "acc_error.h" #include "../acc.h" #include #include static const int verbose_print = 0; /****************************************************************************/ extern "C" int c_dbcsr_acc_event_create(void** event_p) { *event_p = malloc(sizeof(ACC(Event_t))); ACC(Event_t)* acc_event = (ACC(Event_t)*)*event_p; ACC(Error_t) cErr = ACC(EventCreate)(acc_event); if (verbose_print) printf("EventCreate) : %p -> %ld\n", *event_p, (long int)*acc_event); if (acc_error_check(cErr)) return -1; if (acc_error_check(ACC(GetLastError)())) return -1; return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_event_destroy(void* event) { ACC(Event_t)* acc_event = (ACC(Event_t*))event; c_dbcsr_acc_clear_errors(); if (verbose_print) printf("EventDestroy, called\n"); if (event == NULL) return 0; /* not an error */ ACC(Error_t) cErr = ACC(EventDestroy)(*acc_event); free(acc_event); if (acc_error_check(cErr)) return -1; if (acc_error_check(ACC(GetLastError)())) return -1; return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_event_record(void* event, void* stream) { ACC(Event_t)* acc_event = (ACC(Event_t)*)event; ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream; if (verbose_print) printf("EventRecord): %p -> %ld, %p -> %ld\n", (const void*)acc_event, (long int)*acc_event, (const void*)acc_stream, (long int)*acc_stream); ACC_API_CALL(EventRecord, (*acc_event, *acc_stream)); return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_event_query(void* event, int* has_occurred) { if (verbose_print) printf("dbcsr_acc_event_query called\n"); ACC(Event_t)* acc_event = (ACC(Event_t)*)event; ACC(Error_t) cErr = ACC(EventQuery)(*acc_event); if (cErr == ACC(Success)) { *has_occurred = 1; return 0; } if (cErr == ACC(ErrorNotReady)) { *has_occurred = 0; return 0; } return -1; // something went wrong } /****************************************************************************/ extern "C" int c_dbcsr_acc_stream_wait_event(void* stream, void* event) { if (verbose_print) printf("c_dbcsr_acc_stream_wait_event called\n"); ACC(Event_t)* acc_event = (ACC(Event_t)*)event; ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream; // flags: Parameters for the operation (must be 0) ACC_API_CALL(StreamWaitEvent, (*acc_stream, *acc_event, 0)); return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_event_synchronize(void* event) { if (verbose_print) printf("EventSynchronize called\n"); ACC(Event_t)* acc_event = (ACC(Event_t)*)event; ACC_API_CALL(EventSynchronize, (*acc_event)); return 0; } ================================================ FILE: src/acc/cuda_hip/acc_init.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #if defined(__CUDA) # include "../cuda/acc_cuda.h" #elif defined(__HIP) # include "../hip/acc_hip.h" #endif #include "../acc.h" #include "../acc_libsmm.h" #include /****************************************************************************/ extern "C" int c_dbcsr_acc_init() { int myDevice, runtimeVersion; // Driver boilerplate ACC_DRV_CALL(Init, (0)); ACC_DRV(device) acc_device; ACC_API_CALL(GetDevice, (&myDevice)); ACC_DRV_CALL(DeviceGet, (&acc_device, myDevice)); #if defined(__CUDA) ACC_DRV(context) ctx; ACC_DRV_CALL(DevicePrimaryCtxRetain, (&ctx, acc_device)); #endif ACC_API_CALL(RuntimeGetVersion, (&runtimeVersion)); // Initialize libsmm_acc, DBCSR's GPU backend return libsmm_acc_init(); } /****************************************************************************/ extern "C" int c_dbcsr_acc_finalize() { int myDevice; // Release driver resources ACC_DRV(device) acc_device; ACC_API_CALL(GetDevice, (&myDevice)); ACC_DRV_CALL(DeviceGet, (&acc_device, myDevice)); #if defined(__CUDA) ACC_DRV_CALL(DevicePrimaryCtxRelease, (acc_device)); #endif return libsmm_acc_finalize(); } ================================================ FILE: src/acc/cuda_hip/acc_mem.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #if defined(__CUDA) # include "../cuda/acc_cuda.h" #elif defined(__HIP) # include "../hip/acc_hip.h" #endif #include "acc_error.h" #include "../acc.h" #include #include static const int verbose_print = 0; // some api calls have changed, but we wrap them internally #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" /****************************************************************************/ extern "C" int c_dbcsr_acc_dev_mem_allocate(void** dev_mem, size_t n) { ACC_API_CALL(Malloc, ((void**)dev_mem, (size_t)n)); if (dev_mem == NULL) return -2; if (verbose_print) printf("Device allocation address %p, size %ld\n", *dev_mem, (long)n); return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_dev_mem_deallocate(void* dev_mem) { if (verbose_print) printf("Device deallocation address %p\n", dev_mem); ACC_API_CALL(Free, ((void*)dev_mem)); return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_host_mem_allocate(void** host_mem, size_t n, void* stream) { unsigned int flag = ACC(HostAllocDefault); DBCSR_MARK_USED(stream); ACC_API_CALL(HostAlloc, ((void**)host_mem, (size_t)n, flag)); if (host_mem == NULL) return -2; if (verbose_print) printf("Allocating %zd bytes of host pinned memory at %p\n", n, *host_mem); return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_host_mem_deallocate(void* host_mem, void* stream) { DBCSR_MARK_USED(stream); if (verbose_print) printf("Host pinned deallocation address %p\n", host_mem); ACC_API_CALL(FreeHost, ((void*)host_mem)); return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_dev_mem_set_ptr(void** dev_mem, void* other, size_t lb) { (*dev_mem) = ((char*)other) + lb; return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_memcpy_h2d(const void* host_mem, void* dev_mem, size_t count, void* stream) { ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream; if (verbose_print) printf("Copying %zd bytes from host address %p to device address %p \n", count, host_mem, dev_mem); ACC_API_CALL(MemcpyAsync, (dev_mem, host_mem, count, ACC(MemcpyHostToDevice), *acc_stream)); return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_memcpy_d2h(const void* dev_mem, void* host_mem, size_t count, void* stream) { ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream; if (verbose_print) printf("Copying %zd bytes from device address %p to host address %p\n", count, dev_mem, host_mem); ACC_API_CALL(MemcpyAsync, (host_mem, dev_mem, count, ACC(MemcpyDeviceToHost), *acc_stream)); if (verbose_print) printf("d2h %f\n", *((double*)host_mem)); return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_memcpy_d2d(const void* devmem_src, void* devmem_dst, size_t count, void* stream) { ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream; if (verbose_print) printf("Copying %zd bytes from device address %p to device address %p \n", count, devmem_src, devmem_dst); if (stream == NULL) { ACC_API_CALL(Memcpy, (devmem_dst, devmem_src, count, ACC(MemcpyDeviceToDevice))); } else { ACC_API_CALL(MemcpyAsync, (devmem_dst, devmem_src, count, ACC(MemcpyDeviceToDevice), *acc_stream)); } return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_memset_zero(void* dev_mem, size_t offset, size_t length, void* stream) { ACC(Error_t) cErr; ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream; if (stream == NULL) { cErr = ACC(Memset)((void*)(((char*)dev_mem) + offset), (int)0, length); } else { cErr = ACC(MemsetAsync)((void*)(((char*)dev_mem) + offset), (int)0, length, *acc_stream); } if (verbose_print) printf("Zero at device address %p, offset %d, len %d\n", dev_mem, (int)offset, (int)length); if (acc_error_check(cErr)) return -1; if (acc_error_check(ACC(GetLastError)())) return -1; return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_dev_mem_info(size_t* free, size_t* avail) { ACC_API_CALL(MemGetInfo, (free, avail)); return 0; } #pragma GCC diagnostic pop ================================================ FILE: src/acc/cuda_hip/acc_stream.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #if defined(__CUDA) # include "../cuda/acc_cuda.h" #elif defined(__HIP) # include "../hip/acc_hip.h" #endif #include "acc_error.h" #include "../acc.h" #include #include #if defined(__CUDA_PROFILING) # include #endif static const int verbose_print = 0; /****************************************************************************/ extern "C" int c_dbcsr_acc_stream_priority_range(int* least, int* greatest) { *least = -1; *greatest = -1; ACC_API_CALL(DeviceGetStreamPriorityRange, (least, greatest)); return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_stream_create(void** stream_p, const char* name, int priority) { ACC(Error_t) cErr; *stream_p = malloc(sizeof(ACC(Stream_t))); ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)*stream_p; if (priority > 0) { unsigned int flags = ACC(StreamNonBlocking); cErr = ACC(StreamCreateWithPriority)(acc_stream, flags, priority); } else { cErr = ACC(StreamCreate)(acc_stream); } if (verbose_print) printf("StreamCreate : %p -> %p \n", *stream_p, (const void*)*acc_stream); if (acc_error_check(cErr)) return -1; if (acc_error_check(ACC(GetLastError)())) return -1; #if defined(__CUDA_PROFILING) nvtxNameCudaStreamA(*acc_stream, name); #else DBCSR_MARK_USED(name); #endif return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_stream_destroy(void* stream) { ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream; c_dbcsr_acc_clear_errors(); if (verbose_print) printf("StreamDestroy called\n"); if (stream == NULL) return 0; /* not an error */ ACC(Error_t) cErr = ACC(StreamDestroy)(*acc_stream); free(acc_stream); if (acc_error_check(cErr)) return -1; if (acc_error_check(ACC(GetLastError)())) return -1; return 0; } /****************************************************************************/ extern "C" int c_dbcsr_acc_stream_sync(void* stream) { ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream; c_dbcsr_acc_clear_errors(); ACC_API_CALL(StreamSynchronize, (*acc_stream)); return 0; } ================================================ FILE: src/acc/cuda_hip/acc_utils.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #include "acc_utils.h" #if defined(__CUDA) # include "../cuda/acc_cuda.h" #elif defined(__HIP) # include "../hip/acc_hip.h" #endif //=========================================================================== int acc_get_gpu_warp_size() { int device = 0; ACC(DeviceProp) prop; ACC_API_CALL(GetDevice, (&device)); ACC_API_CALL(GetDeviceProperties, (&prop, device)); return prop.warpSize; } ================================================ FILE: src/acc/cuda_hip/acc_utils.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #ifndef ACC_UTILS_H #define ACC_UTILS_H int acc_get_gpu_warp_size(void); #endif /*ACC_UTILS_H*/ ================================================ FILE: src/acc/cuda_hip/calculate_norms.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ /***************************************************************************** * Authors: Gina Sitaraman * *****************************************************************************/ /* * Execution configuration: * gridDim.x = number of matrix blocks in this batched norms calculation * = length of the batched norms calculation stack * blockIdx.x = {0, ..., gridDim.x-1} * blockDim.x = warp size (for now, assuming warp size is going to be 64 or 32) * threadIdx.x = {0, ..., blockDim.x-1} * Execute batched norms calculation * Function arguments * --- norms: (pointer to global memory): * output array of norms, one per matrix in the stack * --- offsets: (pointer to global memory): * array of offsets, indicating where each block starts in the "mat" buffer * --- nelems: (pointer to global memory): * array of integers, indicating the number of elements in each matrix/block * --- mat (pointer to global memory): * arrays containing the matrices for which norms are calculated * Algorithm specificities: * --- warp level primitives are used to reduce within a warp/wavefront, and * shared memory is used if more than one warp/wavefront is detected */ #if defined(__CUDA) # include "../cuda/acc_cuda.h" #elif defined(__HIP) # include "../hip/acc_hip.h" #endif #include "acc_utils.h" template __global__ void calculate_norms_d( float* __restrict__ norms, const int* __restrict__ offsets, const int* __restrict__ nelems, const double* __restrict__ mat) { __shared__ double buf[(blocksz + warpsz - 1) / warpsz]; double d, sum = 0.0; /* Get the offset in the stack that this thread block should handle */ int blkoffset = offsets[blockIdx.x]; /* Get the number of elements in this matrix */ int nelem = nelems[blockIdx.x]; /* Loop over nelem matrix elements for this block */ for (int i = threadIdx.x; i < nelem; i += blockDim.x) { /* Load matrix elements, reduce in register */ d = mat[blkoffset + i]; sum += d * d; } __syncthreads(); /* reduce in warp to one value using warp level primitives */ #if defined(__CUDA) unsigned mask = 0xffffffff; for (int offset = warpsz / 2; offset > 0; offset /= 2) { sum += __shfl_down_sync(mask, sum, offset); } #elif defined(__HIP) for (int offset = warpsz / 2; offset > 0; offset /= 2) { sum += __shfl_down(sum, offset); } #endif /* reduce between warps if needed */ if (blocksz > warpsz) { if (threadIdx.x % warpsz == 0) { int warpid = threadIdx.x / warpsz; buf[warpid] = sum; } __syncthreads(); if (threadIdx.x == 0) { for (int i = 1; i < blocksz / warpsz; ++i) { sum += buf[i]; } } } if (threadIdx.x == 0) { /* write out this stack's dot product */ norms[blockIdx.x] = sum; } } extern "C" int c_calculate_norms( const double* mat, int nblks, const int* offsets, const int* nelems, float* norms, void* stream_ptr) { int warp_size = acc_get_gpu_warp_size(); dim3 grid(nblks); dim3 block(warp_size); ACC_DRV(stream) stream = *((ACC_DRV(stream)*)stream_ptr); /* block size may be a multiple of warp_size as well */ if (warp_size == 64) { calculate_norms_d<64, 64><<>>(norms, offsets, nelems, mat); } else if (warp_size == 32) { calculate_norms_d<32, 32><<>>(norms, offsets, nelems, mat); } else { fprintf(stderr, "Found warp size other than 64 or 32, aborting..\n"); return -1; } return 0; } ================================================ FILE: src/acc/dbcsr_acc_device.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_acc_device #if defined (__DBCSR_ACC) USE ISO_C_BINDING, ONLY: C_INT #endif #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_level IMPLICIT NONE PUBLIC :: dbcsr_acc_get_ndevices, dbcsr_acc_set_active_device, dbcsr_acc_clear_errors PUBLIC :: acc_device_synchronize PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_acc_device' #if defined (__DBCSR_ACC) INTERFACE FUNCTION acc_get_ndevices_cu(n_devices) RESULT(istat) & BIND(C, name="c_dbcsr_acc_get_ndevices") IMPORT INTEGER(KIND=C_INT), INTENT(OUT) :: n_devices INTEGER(KIND=C_INT) :: istat END FUNCTION acc_get_ndevices_cu FUNCTION acc_set_active_device_cu(device_id) RESULT(istat) & BIND(C, name="c_dbcsr_acc_set_active_device") IMPORT INTEGER(KIND=C_INT), INTENT(IN), VALUE :: device_id INTEGER(KIND=C_INT) :: istat END FUNCTION acc_set_active_device_cu FUNCTION acc_device_synchronize_cu() RESULT(istat) & BIND(C, name="c_dbcsr_acc_device_synchronize") IMPORT INTEGER(KIND=C_INT) :: istat END FUNCTION acc_device_synchronize_cu SUBROUTINE acc_clear_errors_cu() & BIND(C, name="c_dbcsr_acc_clear_errors") END SUBROUTINE acc_clear_errors_cu END INTERFACE #endif CONTAINS FUNCTION dbcsr_acc_get_ndevices() RESULT(n) !! Get number of accelerator devices INTEGER :: n !! number of accelerator devices #if defined (__DBCSR_ACC) INTEGER :: istat #endif n = 0 #if defined (__DBCSR_ACC) istat = acc_get_ndevices_cu(n) IF (istat /= 0) & DBCSR_ABORT("dbcsr_acc_get_ndevices: failed") #endif END FUNCTION dbcsr_acc_get_ndevices SUBROUTINE dbcsr_acc_set_active_device(device_id) !! Set active accelerator device INTEGER :: device_id #if defined (__DBCSR_ACC) INTEGER :: istat !$ IF (0 == omp_get_level()) THEN istat = 0 !$OMP PARALLEL DEFAULT(NONE) SHARED(device_id) REDUCTION(MAX:istat) istat = acc_set_active_device_cu(device_id) !$OMP END PARALLEL !$ ELSE istat = acc_set_active_device_cu(device_id) !$ END IF IF (istat /= 0) & DBCSR_ABORT("dbcsr_acc_set_active_device: failed") #else MARK_USED(device_id) DBCSR_ABORT("__DBCSR_ACC not compiled in") #endif END SUBROUTINE dbcsr_acc_set_active_device SUBROUTINE dbcsr_acc_clear_errors() !! Clear GPU errors #if defined (__DBCSR_ACC) CALL acc_clear_errors_cu() #else DBCSR_ABORT("__DBCSR_ACC not compiled in") #endif END SUBROUTINE dbcsr_acc_clear_errors SUBROUTINE acc_device_synchronize() !! Fortran-wrapper for waiting for work on all streams to complete #if defined (__DBCSR_ACC) INTEGER :: istat istat = acc_device_synchronize_cu() IF (istat /= 0) & DBCSR_ABORT("acc_device_synchronize failed") #else DBCSR_ABORT("__DBCSR_ACC not compiled in") #endif END SUBROUTINE acc_device_synchronize END MODULE dbcsr_acc_device ================================================ FILE: src/acc/dbcsr_acc_devmem.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_acc_devmem !! Accelerator support #if defined (__DBCSR_ACC) USE ISO_C_BINDING, ONLY: C_INT, C_SIZE_T, C_PTR, C_LOC, C_NULL_PTR, C_ASSOCIATED #endif USE dbcsr_kinds, ONLY: int_4, & int_4_size, & int_8, & int_8_size, & real_4, & real_4_size, & real_8, & real_8_size USE dbcsr_acc_stream, ONLY: acc_stream_associated, & acc_stream_cptr, & acc_stream_synchronize, & acc_stream_type USE dbcsr_acc_device, ONLY: dbcsr_acc_set_active_device USE dbcsr_config, ONLY: get_accdrv_active_device_id #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE PUBLIC :: acc_devmem_type PUBLIC :: acc_devmem_allocate_bytes, acc_devmem_deallocate PUBLIC :: acc_devmem_setzero_bytes PUBLIC :: acc_devmem_allocated PUBLIC :: acc_devmem_dev2host, acc_devmem_host2dev PUBLIC :: acc_devmem_size_in_bytes PUBLIC :: acc_devmem_ensure_size_bytes PUBLIC :: acc_devmem_cptr PUBLIC :: acc_devmem_set_cptr PUBLIC :: acc_devmem_info INTERFACE acc_devmem_dev2host MODULE PROCEDURE dev2host_i4_1D MODULE PROCEDURE dev2host_i8_1D MODULE PROCEDURE dev2host_r4_1D MODULE PROCEDURE dev2host_r8_1D MODULE PROCEDURE dev2host_c4_1D MODULE PROCEDURE dev2host_c8_1D END INTERFACE acc_devmem_dev2host INTERFACE acc_devmem_host2dev MODULE PROCEDURE host2dev_i4_1D MODULE PROCEDURE host2dev_i8_1D MODULE PROCEDURE host2dev_r4_1D MODULE PROCEDURE host2dev_r8_1D MODULE PROCEDURE host2dev_c4_1D MODULE PROCEDURE host2dev_c8_1D MODULE PROCEDURE host2dev_i4_2D MODULE PROCEDURE host2dev_i8_2D MODULE PROCEDURE host2dev_r4_2D MODULE PROCEDURE host2dev_r8_2D MODULE PROCEDURE host2dev_c4_2D MODULE PROCEDURE host2dev_c8_2D END INTERFACE acc_devmem_host2dev TYPE acc_devmem_type PRIVATE INTEGER :: size_in_bytes = -1 #if defined (__DBCSR_ACC) TYPE(C_PTR) :: cptr = C_NULL_PTR #endif END TYPE acc_devmem_type #if defined (__DBCSR_ACC) INTERFACE FUNCTION acc_interface_dev_mem_info(free, avail) RESULT(istat) BIND(C, name="c_dbcsr_acc_dev_mem_info") IMPORT INTEGER(KIND=C_SIZE_T), INTENT(OUT) :: free, avail INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_dev_mem_info END INTERFACE INTERFACE FUNCTION acc_interface_dev_mem_alloc(mem, n) RESULT(istat) BIND(C, name="c_dbcsr_acc_dev_mem_allocate") IMPORT TYPE(C_PTR) :: mem INTEGER(KIND=C_SIZE_T), INTENT(IN), & VALUE :: n INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_dev_mem_alloc END INTERFACE INTERFACE FUNCTION acc_interface_dev_mem_dealloc(mem) RESULT(istat) BIND(C, name="c_dbcsr_acc_dev_mem_deallocate") IMPORT TYPE(C_PTR), VALUE :: mem INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_dev_mem_dealloc END INTERFACE INTERFACE FUNCTION acc_interface_dev_mem_set_ptr(mem, other, lb) RESULT(istat) BIND(C, name="c_dbcsr_acc_dev_mem_set_ptr") IMPORT TYPE(C_PTR) :: mem TYPE(C_PTR), VALUE :: other INTEGER(KIND=C_SIZE_T), INTENT(IN), & VALUE :: lb INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_dev_mem_set_ptr END INTERFACE INTERFACE FUNCTION acc_interface_memzero(this, offset, length, stream_ptr) RESULT(istat) BIND(C, name="c_dbcsr_acc_memset_zero") IMPORT TYPE(C_PTR), INTENT(IN), VALUE :: this INTEGER(KIND=C_SIZE_T), INTENT(IN), & VALUE :: offset, length TYPE(C_PTR), VALUE :: stream_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_memzero END INTERFACE INTERFACE FUNCTION acc_interface_memcpy_h2d(host, dev, count, stream_ptr) RESULT(istat) & BIND(C, name="c_dbcsr_acc_memcpy_h2d") IMPORT TYPE(C_PTR), INTENT(IN), VALUE :: host TYPE(C_PTR), VALUE :: dev INTEGER(KIND=C_SIZE_T), INTENT(IN), & VALUE :: count TYPE(C_PTR), VALUE :: stream_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_memcpy_h2d END INTERFACE INTERFACE FUNCTION acc_interface_memcpy_d2h(dev, host, count, stream_ptr) RESULT(istat) & BIND(C, name="c_dbcsr_acc_memcpy_d2h") IMPORT TYPE(C_PTR), INTENT(IN), VALUE :: dev TYPE(C_PTR), VALUE :: host INTEGER(KIND=C_SIZE_T), INTENT(IN), & VALUE :: count TYPE(C_PTR), VALUE :: stream_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_memcpy_d2h END INTERFACE INTERFACE FUNCTION acc_interface_memcpy_d2d(dev_src, dev_dst, count, stream_ptr) RESULT(istat) & BIND(C, name="c_dbcsr_acc_memcpy_d2d") IMPORT TYPE(C_PTR), INTENT(IN), VALUE :: dev_src TYPE(C_PTR), VALUE :: dev_dst INTEGER(KIND=C_SIZE_T), INTENT(IN), & VALUE :: count TYPE(C_PTR), VALUE :: stream_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_memcpy_d2d END INTERFACE #endif CONTAINS SUBROUTINE acc_devmem_ensure_size_bytes(this, stream, requested_size_in_bytes, nocopy, zero_pad) !! Ensures that given devmem has at least the requested size. TYPE(acc_devmem_type), & INTENT(INOUT) :: this !! device memory TYPE(acc_stream_type), INTENT(IN) :: stream !! on which zeroing and memcopying is performed INTEGER, INTENT(IN) :: requested_size_in_bytes !! requested size in bytes LOGICAL, INTENT(IN), OPTIONAL :: nocopy, zero_pad !! if after growin old content should NOT be copied over. Default: false. !! if after growing the new memory should be zeroed. Default: false. #if ! defined (__DBCSR_ACC) MARK_USED(this) MARK_USED(stream) MARK_USED(requested_size_in_bytes) MARK_USED(nocopy) MARK_USED(zero_pad) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else LOGICAL :: my_nocopy, my_zero_pad TYPE(C_PTR) :: old_cptr, new_cptr, stream_cptr INTEGER :: new_size, old_size, istat IF (this%size_in_bytes < 0) & DBCSR_ABORT("acc_devmem_ensure_size_bytes: not allocated") IF (.NOT. acc_stream_associated(stream)) & DBCSR_ABORT("acc_devmem_ensure_size_bytes: stream not associated") IF (this%size_in_bytes < requested_size_in_bytes) THEN !WRITE (*,*) "acc_devmem_ensure_size_bytes: growing dev_mem to: ", data_size CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) new_size = requested_size_in_bytes old_size = this%size_in_bytes old_cptr = this%cptr new_cptr = C_NULL_PTR istat = acc_interface_dev_mem_alloc(new_cptr, INT(new_size, KIND=C_SIZE_T)) IF (istat /= 0) & DBCSR_ABORT("acc_devmem_ensure_size_bytes: alloc failed") this%cptr = new_cptr this%size_in_bytes = requested_size_in_bytes my_zero_pad = .FALSE. IF (PRESENT(zero_pad)) my_zero_pad = zero_pad IF (my_zero_pad) & CALL acc_devmem_setzero_bytes(this, first_byte=old_size + 1, stream=stream) my_nocopy = .FALSE. IF (PRESENT(nocopy)) my_nocopy = nocopy IF (.NOT. my_nocopy) THEN stream_cptr = acc_stream_cptr(stream) istat = acc_interface_memcpy_d2d(old_cptr, new_cptr, INT(old_size, KIND=C_SIZE_T), stream_cptr) IF (istat /= 0) & DBCSR_ABORT("acc_devmem_ensure_size_bytes: memcpy failed") END IF CALL acc_stream_synchronize(stream) istat = acc_interface_dev_mem_dealloc(old_cptr) IF (istat /= 0) & DBCSR_ABORT("acc_devmem_ensure_size_bytes: dealloc failed") END IF #endif END SUBROUTINE acc_devmem_ensure_size_bytes FUNCTION acc_devmem_allocated(this) RESULT(res) !! Returns a logical, which indicates if the given devmem is allocated. TYPE(acc_devmem_type), INTENT(IN) :: this LOGICAL :: res !! true if device memory is allocated, false otherwise #if defined (__DBCSR_ACC) DBCSR_ASSERT(C_ASSOCIATED(this%cptr) .OR. this%size_in_bytes <= 0) #endif res = this%size_in_bytes >= 0 END FUNCTION acc_devmem_allocated FUNCTION acc_devmem_size_in_bytes(this) RESULT(res) !! Returns size of given devmem in terms of item count (not bytes!) TYPE(acc_devmem_type), INTENT(IN) :: this INTEGER :: res !! size of device memory (item count) IF (this%size_in_bytes < 0) & DBCSR_ABORT("acc_devmem_len: not allocated") res = this%size_in_bytes END FUNCTION acc_devmem_size_in_bytes #if ! defined (__DBCSR_ACC) FUNCTION acc_devmem_cptr(this) RESULT(res) !! Returns C-pointer to data of given devmem. INTEGER, INTENT(IN) :: this !! device memory LOGICAL :: res !! false (accelerator support is not enabled) MARK_USED(this) res = .FALSE. END FUNCTION acc_devmem_cptr #else FUNCTION acc_devmem_cptr(this) RESULT(res) !! Returns C-pointer to data of given devmem. TYPE(acc_devmem_type), INTENT(IN) :: this TYPE(C_PTR) :: res !! C-pointer to data of given devmem IF (this%size_in_bytes < 0) & DBCSR_ABORT("acc_devmem_cptr: not allocated") res = this%cptr END FUNCTION acc_devmem_cptr #endif SUBROUTINE acc_devmem_set_cptr(this, pointee, size_in_bytes, lb_in_bytes) !! Allocates a given devmem. TYPE(acc_devmem_type), INTENT(INOUT) :: this TYPE(acc_devmem_type), INTENT(IN) :: pointee INTEGER, INTENT(IN) :: size_in_bytes, lb_in_bytes #if ! defined (__DBCSR_ACC) MARK_USED(this) MARK_USED(pointee) MARK_USED(size_in_bytes) MARK_USED(lb_in_bytes) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat IF (this%size_in_bytes >= 0) & DBCSR_ABORT("acc_devmem_set_cptr: already allocated") IF (pointee%size_in_bytes < 0 .AND. size_in_bytes > 0) & DBCSR_ABORT("acc_devmem_set_cptr: out-of-bounds") IF (size_in_bytes > 0) THEN IF ((lb_in_bytes + size_in_bytes) .GT. pointee%size_in_bytes) & DBCSR_ABORT("acc_devmem_set_cptr: out-of-bounds") this%size_in_bytes = size_in_bytes istat = acc_interface_dev_mem_set_ptr(this%cptr, pointee%cptr, INT(lb_in_bytes, KIND=C_SIZE_T)) ELSE ! Empty buffers this%size_in_bytes = pointee%size_in_bytes this%cptr = pointee%cptr END IF #endif END SUBROUTINE acc_devmem_set_cptr SUBROUTINE acc_devmem_info(free, total) INTEGER(KIND=int_8), INTENT(OUT) :: free, total #if defined(__DBCSR_ACC) INTEGER(KIND=C_INT) :: istat INTEGER(KIND=C_SIZE_T) :: free_c, total_c CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_dev_mem_info(free_c, total_c) IF (istat /= 0) & DBCSR_ABORT("acc_devmem_info: failed") free = free_c total = total_c #else free = 0 total = 0 #endif END SUBROUTINE acc_devmem_info SUBROUTINE acc_devmem_allocate_bytes(this, size_in_bytes) !! Allocates a given devmem. TYPE(acc_devmem_type), INTENT(INOUT) :: this INTEGER, INTENT(IN) :: size_in_bytes #if ! defined (__DBCSR_ACC) MARK_USED(this) MARK_USED(size_in_bytes) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat IF (this%size_in_bytes >= 0) & DBCSR_ABORT("acc_devmem_alloc: already allocated") this%size_in_bytes = size_in_bytes IF (size_in_bytes > 0) THEN CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_dev_mem_alloc(this%cptr, INT(this%size_in_bytes, KIND=C_SIZE_T)) IF (istat /= 0) & DBCSR_ABORT("acc_devmem_allocate: failed") END IF #endif END SUBROUTINE acc_devmem_allocate_bytes SUBROUTINE acc_devmem_deallocate(this) !! Deallocates a given devmem. TYPE(acc_devmem_type), INTENT(INOUT) :: this #if ! defined (__DBCSR_ACC) MARK_USED(this) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat IF (this%size_in_bytes < 0) & DBCSR_ABORT("acc_devmem_deallocate: double free") IF (this%size_in_bytes > 0) THEN CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_dev_mem_dealloc(this%cptr) IF (istat /= 0) & DBCSR_ABORT("acc_devmem_deallocate: failed") END IF this%size_in_bytes = -1 #endif END SUBROUTINE acc_devmem_deallocate SUBROUTINE acc_devmem_setzero_bytes(this, first_byte, last_byte, stream) !! Sets entries in given devmem to zero, asynchronously. TYPE(acc_devmem_type), INTENT(INOUT) :: this INTEGER, INTENT(IN), OPTIONAL :: first_byte, last_byte !! begin of region to zero, defaults to 1 if not given. !! end of region to zero, defaults to size if not given. TYPE(acc_stream_type), INTENT(IN) :: stream !! stream on which zeroing is performed. #if ! defined (__DBCSR_ACC) MARK_USED(this) MARK_USED(first_byte) MARK_USED(last_byte) MARK_USED(stream) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat INTEGER(KIND=C_SIZE_T) :: length, offset TYPE(C_PTR) :: stream_cptr offset = 0 length = this%size_in_bytes IF (PRESENT(first_byte)) THEN offset = first_byte - 1 length = length - offset END IF IF (PRESENT(last_byte)) THEN length = last_byte IF (PRESENT(first_byte)) length = length - first_byte END IF stream_cptr = acc_stream_cptr(stream) IF (length > 0) THEN CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_memzero(this%cptr, offset, length, stream_cptr) IF (istat /= 0) & DBCSR_ABORT("acc_devmem_setzero: failed") END IF #endif END SUBROUTINE acc_devmem_setzero_bytes #if defined (__DBCSR_ACC) SUBROUTINE host2dev_raw(this, hostmem_cptr, n_bytes, stream) !! Helper-routine performing actuall host2dev transfers. TYPE(acc_devmem_type), INTENT(IN) :: this TYPE(C_PTR) :: hostmem_cptr INTEGER, INTENT(IN) :: n_bytes TYPE(acc_stream_type), INTENT(IN) :: stream !! stream used for memory transfer INTEGER :: istat TYPE(C_PTR) :: stream_cptr IF (this%size_in_bytes < n_bytes) & DBCSR_ABORT("acc_devmem_host2dev: devmem too small") stream_cptr = acc_stream_cptr(stream) IF (n_bytes > 0) THEN CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_memcpy_h2d(hostmem_cptr, this%cptr, & INT(n_bytes, KIND=C_SIZE_T), stream_cptr) IF (istat /= 0) & DBCSR_ABORT("acc_devmem_host2dev: failed") END IF END SUBROUTINE host2dev_raw #endif #if defined (__DBCSR_ACC) SUBROUTINE dev2host_raw(this, hostmem_cptr, n_bytes, stream) !! Helper-routine performing actual dev2host transfers. TYPE(acc_devmem_type), INTENT(IN) :: this TYPE(C_PTR) :: hostmem_cptr INTEGER, INTENT(IN) :: n_bytes TYPE(acc_stream_type), INTENT(IN) :: stream INTEGER :: istat TYPE(C_PTR) :: stream_cptr IF (.NOT. acc_devmem_allocated(this)) RETURN IF (this%size_in_bytes < n_bytes) & DBCSR_ABORT("acc_devmem_dev2host: this too small") stream_cptr = acc_stream_cptr(stream) IF (n_bytes > 0) THEN CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_memcpy_d2h(this%cptr, hostmem_cptr, & INT(n_bytes, KIND=C_SIZE_T), stream_cptr) IF (istat /= 0) & DBCSR_ABORT("acc_devmem_dev2host: failed") END IF END SUBROUTINE dev2host_raw #endif #:set instances = [ ('i4', 'int_4_size', 'INTEGER(kind=int_4)'), & ('i8', 'int_8_size', 'INTEGER(kind=int_8)'), & ('r4', 'real_4_size', 'REAL(kind=real_4)'), & ('r8', 'real_8_size', 'REAL(kind=real_8)'), & ('c4', '2*real_4_size', 'COMPLEX(kind=real_4)'), & ('c8', '2*real_8_size', 'COMPLEX(kind=real_8)') ] #:for nametype, size, type in instances SUBROUTINE host2dev_${nametype}$_1D(this, hostmem, stream) !! Transfers 1D fortran-array from host to GPU devmem. TYPE(acc_devmem_type), INTENT(IN) :: this ${type}$, DIMENSION(:), POINTER :: hostmem TYPE(acc_stream_type), INTENT(IN) :: stream #if ! defined (__DBCSR_ACC) MARK_USED(this) MARK_USED(hostmem) MARK_USED(stream) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else CALL host2dev_raw(this, C_LOC(hostmem(1)), ${size}$*SIZE(hostmem), stream) #endif END SUBROUTINE host2dev_${nametype}$_1D SUBROUTINE host2dev_${nametype}$_2D(this, hostmem, stream) !! Transfers 2D fortran-array from host to GPU devmem. TYPE(acc_devmem_type), INTENT(IN) :: this ${type}$, DIMENSION(:, :), POINTER :: hostmem TYPE(acc_stream_type), INTENT(IN) :: stream #if ! defined (__DBCSR_ACC) MARK_USED(this) MARK_USED(hostmem) MARK_USED(stream) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else CALL host2dev_raw(this, C_LOC(hostmem(1, 1)), ${size}$*SIZE(hostmem), stream) #endif END SUBROUTINE host2dev_${nametype}$_2D SUBROUTINE dev2host_${nametype}$_1D(this, hostmem, stream) !! Transfers GPU devmem to 1D fortran-array. TYPE(acc_devmem_type), INTENT(IN) :: this ${type}$, DIMENSION(:), POINTER :: hostmem TYPE(acc_stream_type), INTENT(IN) :: stream #if ! defined (__DBCSR_ACC) MARK_USED(this) MARK_USED(hostmem) MARK_USED(stream) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else CALL dev2host_raw(this, C_LOC(hostmem(1)), ${size}$*SIZE(hostmem), stream) #endif END SUBROUTINE dev2host_${nametype}$_1D #:endfor END MODULE dbcsr_acc_devmem ================================================ FILE: src/acc/dbcsr_acc_event.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_acc_event !! Accelerator support #if defined (__DBCSR_ACC) USE ISO_C_BINDING, ONLY: C_INT, C_NULL_PTR, C_PTR, C_ASSOCIATED, C_NULL_PTR #endif USE dbcsr_acc_stream, ONLY: acc_stream_cptr, & acc_stream_type USE dbcsr_acc_device, ONLY: dbcsr_acc_set_active_device USE dbcsr_config, ONLY: get_accdrv_active_device_id #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_acc_event' PUBLIC :: acc_event_type PUBLIC :: acc_event_create, acc_event_destroy PUBLIC :: acc_event_record, acc_event_query PUBLIC :: acc_stream_wait_event, acc_event_synchronize TYPE acc_event_type PRIVATE #if defined (__DBCSR_ACC) TYPE(C_PTR) :: cptr = C_NULL_PTR #else INTEGER :: dummy = 1 #endif END TYPE acc_event_type #if defined (__DBCSR_ACC) INTERFACE FUNCTION acc_interface_event_create(event_ptr) RESULT(istat) BIND(C, name="c_dbcsr_acc_event_create") IMPORT TYPE(C_PTR) :: event_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_event_create END INTERFACE INTERFACE FUNCTION acc_interface_event_destroy(event_ptr) RESULT(istat) BIND(C, name="c_dbcsr_acc_event_destroy") IMPORT TYPE(C_PTR), VALUE :: event_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_event_destroy END INTERFACE INTERFACE FUNCTION acc_interface_event_query(event_ptr, has_occurred) RESULT(istat) BIND(C, name="c_dbcsr_acc_event_query") IMPORT TYPE(C_PTR), VALUE :: event_ptr INTEGER(KIND=C_INT) :: has_occurred, istat END FUNCTION acc_interface_event_query END INTERFACE INTERFACE FUNCTION acc_interface_event_record(event_ptr, stream_ptr) RESULT(istat) BIND(C, name="c_dbcsr_acc_event_record") IMPORT TYPE(C_PTR), VALUE :: event_ptr, stream_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_event_record END INTERFACE INTERFACE FUNCTION acc_interface_stream_wait_event(stream_ptr, event_ptr) RESULT(istat) BIND(C, name="c_dbcsr_acc_stream_wait_event") IMPORT TYPE(C_PTR), VALUE :: stream_ptr, event_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_stream_wait_event END INTERFACE INTERFACE FUNCTION acc_interface_event_synchronize(event_ptr) RESULT(istat) BIND(C, name="c_dbcsr_acc_event_synchronize") IMPORT TYPE(C_PTR), VALUE :: event_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_event_synchronize END INTERFACE #endif CONTAINS SUBROUTINE acc_stream_wait_event(stream, event) !! Fortran-wrapper for making a GPU compute stream wait on an event. !! Because of fortran circular dependency restriction this can not go into acc_stream.F TYPE(acc_stream_type), INTENT(IN) :: stream TYPE(acc_event_type), INTENT(IN) :: event #if ! defined (__DBCSR_ACC) MARK_USED(stream) MARK_USED(event) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat TYPE(C_PTR) :: stream_cptr stream_cptr = acc_stream_cptr(stream) IF (.NOT. C_ASSOCIATED(event%cptr)) & DBCSR_ABORT("acc_stream_wait_event: event not allocated") IF (.NOT. C_ASSOCIATED(stream_cptr)) & DBCSR_ABORT("acc_stream_wait_event: stream not allocated") CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_stream_wait_event(stream_cptr, event%cptr) IF (istat /= 0) & DBCSR_ABORT("acc_stream_wait_event failed") #endif END SUBROUTINE acc_stream_wait_event SUBROUTINE acc_event_record(this, stream) !! Fortran-wrapper for recording a CUDA/HIP event. TYPE(acc_event_type), INTENT(IN) :: this TYPE(acc_stream_type), INTENT(IN) :: stream #if ! defined (__DBCSR_ACC) MARK_USED(this) MARK_USED(stream) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat TYPE(C_PTR) :: stream_cptr stream_cptr = acc_stream_cptr(stream) IF (.NOT. C_ASSOCIATED(this%cptr)) & DBCSR_ABORT("acc_event_record: event not allocated") IF (.NOT. C_ASSOCIATED(stream_cptr)) & DBCSR_ABORT("acc_event_record: stream not allocated") CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_event_record(this%cptr, stream_cptr) IF (istat /= 0) & DBCSR_ABORT("acc_event_record failed") #endif END SUBROUTINE acc_event_record SUBROUTINE acc_event_create(this) !! Fortran-wrapper for creation of a CUDA/HIP event. TYPE(acc_event_type), & INTENT(INOUT) :: this #if ! defined (__DBCSR_ACC) MARK_USED(this) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat IF (C_ASSOCIATED(this%cptr)) & DBCSR_ABORT("acc_event_create: already allocated") CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_event_create(this%cptr) IF (istat /= 0 .OR. .NOT. C_ASSOCIATED(this%cptr)) & DBCSR_ABORT("acc_event_create: failed") #endif END SUBROUTINE acc_event_create SUBROUTINE acc_event_destroy(this) !! Fortran-wrapper for destruction of a CUDA/HIP event. TYPE(acc_event_type), & INTENT(INOUT) :: this #if ! defined (__DBCSR_ACC) MARK_USED(this) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat IF (.NOT. C_ASSOCIATED(this%cptr)) & DBCSR_ABORT("acc_event_destroy: event not allocated") CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_event_destroy(this%cptr) IF (istat /= 0) & DBCSR_ABORT("acc_event_destroy failed") this%cptr = C_NULL_PTR #endif END SUBROUTINE acc_event_destroy FUNCTION acc_event_query(this) RESULT(res) !! Fortran-wrapper for querying a CUDA/HIP event's status. TYPE(acc_event_type), INTENT(IN) :: this LOGICAL :: res !! true if event has occurred, false otherwise #if ! defined (__DBCSR_ACC) res = .FALSE. MARK_USED(this) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat, has_occurred IF (.NOT. C_ASSOCIATED(this%cptr)) & DBCSR_ABORT("acc_event_query: event not allocated") CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_event_query(this%cptr, has_occurred) IF (istat /= 0) & DBCSR_ABORT("acc_event_query failed") res = (has_occurred == 1) #endif END FUNCTION acc_event_query SUBROUTINE acc_event_synchronize(this) !! Fortran-wrapper for waiting for the completion of a HIP/CUDA event. TYPE(acc_event_type), INTENT(IN) :: this #if ! defined (__DBCSR_ACC) MARK_USED(this) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat IF (.NOT. C_ASSOCIATED(this%cptr)) & DBCSR_ABORT("acc_event_synchronize: event not allocated") CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_event_synchronize(this%cptr) IF (istat < 0) & DBCSR_ABORT("acc_event_synchronize failed") #endif END SUBROUTINE acc_event_synchronize END MODULE dbcsr_acc_event ================================================ FILE: src/acc/dbcsr_acc_hostmem.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_acc_hostmem !! Accelerator support #if defined (__DBCSR_ACC) USE ISO_C_BINDING, ONLY: C_INT, C_SIZE_T, C_PTR, C_LOC, C_F_POINTER #endif USE dbcsr_kinds, ONLY: int_4, & int_4_size, & int_8, & int_8_size, & real_4, & real_4_size, & real_8, & real_8_size USE dbcsr_acc_stream, ONLY: acc_stream_associated, & acc_stream_cptr, & acc_stream_type USE dbcsr_acc_device, ONLY: dbcsr_acc_set_active_device USE dbcsr_config, ONLY: get_accdrv_active_device_id #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_acc_hostmem' LOGICAL, PARAMETER :: careful_mod = .TRUE. PUBLIC :: acc_hostmem_allocate, acc_hostmem_deallocate INTERFACE acc_hostmem_allocate MODULE PROCEDURE acc_hostmem_alloc_i4, acc_hostmem_alloc_i8 MODULE PROCEDURE acc_hostmem_alloc_r4, acc_hostmem_alloc_r8 MODULE PROCEDURE acc_hostmem_alloc_c4, acc_hostmem_alloc_c8 MODULE PROCEDURE acc_hostmem_alloc_i4_2D, acc_hostmem_alloc_i8_2D MODULE PROCEDURE acc_hostmem_alloc_r4_2D, acc_hostmem_alloc_r8_2D MODULE PROCEDURE acc_hostmem_alloc_c4_2D, acc_hostmem_alloc_c8_2D END INTERFACE INTERFACE acc_hostmem_deallocate MODULE PROCEDURE acc_hostmem_dealloc_i4, acc_hostmem_dealloc_i8 MODULE PROCEDURE acc_hostmem_dealloc_r4, acc_hostmem_dealloc_r8 MODULE PROCEDURE acc_hostmem_dealloc_c4, acc_hostmem_dealloc_c8 MODULE PROCEDURE acc_hostmem_dealloc_i4_2D, acc_hostmem_dealloc_i8_2D MODULE PROCEDURE acc_hostmem_dealloc_r4_2D, acc_hostmem_dealloc_r8_2D MODULE PROCEDURE acc_hostmem_dealloc_c4_2D, acc_hostmem_dealloc_c8_2D END INTERFACE #if defined (__DBCSR_ACC) INTERFACE FUNCTION acc_interface_host_mem_alloc(mem, n, stream_ptr) RESULT(istat) BIND(C, name="c_dbcsr_acc_host_mem_allocate") IMPORT TYPE(C_PTR) :: mem INTEGER(KIND=C_SIZE_T), INTENT(IN), & VALUE :: n TYPE(C_PTR), VALUE :: stream_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_host_mem_alloc END INTERFACE INTERFACE FUNCTION acc_interface_host_mem_dealloc(mem, stream_ptr) RESULT(istat) BIND(C, name="c_dbcsr_acc_host_mem_deallocate") IMPORT TYPE(C_PTR), VALUE :: mem, stream_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_host_mem_dealloc END INTERFACE #endif CONTAINS #if defined (__DBCSR_ACC) SUBROUTINE acc_hostmem_alloc_raw(host_mem_c_ptr, n_bytes, stream) !! Helper-routine performing allocation of host-pinned GPU memory. TYPE(C_PTR), INTENT(OUT) :: host_mem_c_ptr !! pointer to allocated memory INTEGER(KIND=C_SIZE_T), INTENT(IN) :: n_bytes !! number of bytes to allocate TYPE(acc_stream_type), INTENT(IN) :: stream INTEGER :: istat TYPE(C_PTR) :: stream_cptr IF (.NOT. acc_stream_associated(stream)) & DBCSR_ABORT("acc_hostmem_alloc_raw: stream not associated") stream_cptr = acc_stream_cptr(stream) CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_host_mem_alloc(host_mem_c_ptr, n_bytes, stream_cptr) IF (istat /= 0) & DBCSR_ABORT("acc_hostmem_alloc_raw: Could not allocate host pinned memory") END SUBROUTINE acc_hostmem_alloc_raw #endif #if defined (__DBCSR_ACC) SUBROUTINE acc_hostmem_dealloc_raw(host_mem_c_ptr, stream) TYPE(C_PTR), INTENT(IN) :: host_mem_c_ptr TYPE(acc_stream_type), INTENT(IN) :: stream INTEGER :: istat TYPE(C_PTR) :: stream_cptr ! Workaround for a segmentation fault on ORNL's Summit !$OMP CRITICAL IF (.NOT. acc_stream_associated(stream)) & DBCSR_ABORT("acc_hostmem_dealloc_raw: stream not associated") stream_cptr = acc_stream_cptr(stream) CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_host_mem_dealloc(host_mem_c_ptr, stream_cptr) IF (istat /= 0) & DBCSR_ABORT("acc_hostmem_dealloc_raw: Could not deallocate host pinned memory") !$OMP END CRITICAL END SUBROUTINE acc_hostmem_dealloc_raw #endif #:set instances = [ & ('i4', 'int_4_size', 'INTEGER(kind=int_4)'), & ('i8', 'int_8_size', 'INTEGER(kind=int_8)'), & ('r4', 'real_4_size', 'REAL(kind=real_4)'), & ('r8', 'real_8_size', 'REAL(kind=real_8)'), & ('c4', '2*real_4_size', 'COMPLEX(kind=real_4)'), & ('c8', '2*real_8_size', 'COMPLEX(kind=real_8)') ] #:for nametype, size, type in instances SUBROUTINE acc_hostmem_alloc_${nametype}$ (host_mem, n, stream) !! Allocates 1D fortan-array as GPU host-pinned memory. ${type}$, DIMENSION(:), POINTER :: host_mem !! pointer to array INTEGER, INTENT(IN) :: n !! size given in terms of item-count (not bytes!) TYPE(acc_stream_type), INTENT(IN) :: stream #if defined (__DBCSR_ACC) TYPE(C_PTR) :: host_mem_c_ptr INTEGER(KIND=C_SIZE_T) :: n_bytes n_bytes = INT(${size}$, KIND=C_SIZE_T)* & INT(MAX(1, n), KIND=C_SIZE_T) CALL acc_hostmem_alloc_raw(host_mem_c_ptr, n_bytes, stream) CALL C_F_POINTER(host_mem_c_ptr, host_mem, (/MAX(1, n)/)) #else MARK_USED(host_mem) MARK_USED(n) MARK_USED(stream) DBCSR_ABORT("acc_hostmem_alloc_${nametype}$: ACC not compiled in.") #endif END SUBROUTINE acc_hostmem_alloc_${nametype}$ SUBROUTINE acc_hostmem_alloc_${nametype}$_2D(host_mem, n1, n2, stream) !! Allocates 2D fortan-array as GPU host-pinned memory. ${type}$, DIMENSION(:, :), POINTER :: host_mem !! pointer to array INTEGER, INTENT(IN) :: n1, n2 !! sizes given in terms of item-count (not bytes!) !! sizes given in terms of item-count (not bytes!) TYPE(acc_stream_type), INTENT(IN) :: stream #if defined (__DBCSR_ACC) TYPE(C_PTR) :: host_mem_c_ptr INTEGER(KIND=C_SIZE_T) :: n_bytes n_bytes = INT(${size}$, KIND=C_SIZE_T)* & INT(MAX(1, n1), KIND=C_SIZE_T)*INT(MAX(1, n2), KIND=C_SIZE_T) CALL acc_hostmem_alloc_raw(host_mem_c_ptr, n_bytes, stream) CALL C_F_POINTER(host_mem_c_ptr, host_mem, (/MAX(1, n1), MAX(1, n2)/)) #else MARK_USED(host_mem) MARK_USED(n1) MARK_USED(n2) MARK_USED(stream) DBCSR_ABORT("acc_hostmem_alloc_${nametype}$_2D: ACC not compiled in.") #endif END SUBROUTINE acc_hostmem_alloc_${nametype}$_2D SUBROUTINE acc_hostmem_dealloc_${nametype}$ (host_mem, stream) !! Deallocates a 1D fortan-array, which is GPU host-pinned memory. ${type}$, DIMENSION(:), POINTER :: host_mem !! pointer to array TYPE(acc_stream_type), INTENT(IN) :: stream IF (SIZE(host_mem) == 0) RETURN #if defined (__DBCSR_ACC) CALL acc_hostmem_dealloc_raw(C_LOC(host_mem(1)), stream) #else MARK_USED(host_mem) MARK_USED(stream) DBCSR_ABORT("acc_hostmem_dealloc_${nametype}$: ACC not compiled in.") #endif END SUBROUTINE acc_hostmem_dealloc_${nametype}$ SUBROUTINE acc_hostmem_dealloc_${nametype}$_2D(host_mem, stream) !! Deallocates a 2D fortan-array, which is GPU host-pinned memory. ${type}$, DIMENSION(:, :), POINTER :: host_mem !! pointer to array TYPE(acc_stream_type), INTENT(IN) :: stream IF (SIZE(host_mem) == 0) RETURN #if defined (__DBCSR_ACC) CALL acc_hostmem_dealloc_raw(C_LOC(host_mem(1, 1)), stream) #else MARK_USED(host_mem) MARK_USED(stream) DBCSR_ABORT("acc_hostmem_dealloc_${nametype}$: ACC not compiled in.") #endif END SUBROUTINE acc_hostmem_dealloc_${nametype}$_2D #:endfor END MODULE dbcsr_acc_hostmem ================================================ FILE: src/acc/dbcsr_acc_init.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_acc_init !! Accelerator support #if defined (__DBCSR_ACC) USE ISO_C_BINDING, ONLY: C_INT, C_CHAR, C_PTR, C_NULL_PTR, C_NULL_CHAR, C_ASSOCIATED #endif USE dbcsr_acc_device, ONLY: dbcsr_acc_set_active_device USE dbcsr_config, ONLY: get_accdrv_active_device_id #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_acc_init' PUBLIC :: acc_init, acc_finalize #if defined (__DBCSR_ACC) INTERFACE FUNCTION acc_interface_drv_init() RESULT(istat) BIND(C, name="c_dbcsr_acc_init") IMPORT INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_drv_init END INTERFACE INTERFACE FUNCTION acc_interface_drv_finalize() RESULT(istat) BIND(C, name="c_dbcsr_acc_finalize") IMPORT INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_drv_finalize END INTERFACE #endif CONTAINS SUBROUTINE acc_init() #if ! defined (__DBCSR_ACC) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat ! Set active device first CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) !$OMP PARALLEL DEFAULT(NONE) PRIVATE(istat) !$OMP MASTER istat = acc_interface_drv_init() IF (istat /= 0) & DBCSR_ABORT("acc_init failed") !$OMP END MASTER !$OMP END PARALLEL #endif END SUBROUTINE acc_init SUBROUTINE acc_finalize() #if ! defined (__DBCSR_ACC) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat !$OMP PARALLEL DEFAULT(NONE) PRIVATE(istat) !$OMP MASTER istat = acc_interface_drv_finalize() IF (istat /= 0) & DBCSR_ABORT("acc_finalize failed") !$OMP END MASTER !$OMP END PARALLEL #endif END SUBROUTINE acc_finalize END MODULE dbcsr_acc_init ================================================ FILE: src/acc/dbcsr_acc_stream.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_acc_stream !! Accelerator support #if defined (__DBCSR_ACC) USE ISO_C_BINDING, ONLY: C_INT, C_CHAR, C_PTR, C_NULL_PTR, C_NULL_CHAR, C_ASSOCIATED #endif USE dbcsr_acc_device, ONLY: dbcsr_acc_set_active_device USE dbcsr_config, ONLY: get_accdrv_active_device_id #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_acc_stream' PUBLIC :: acc_stream_type PUBLIC :: acc_stream_create, acc_stream_destroy PUBLIC :: acc_stream_synchronize PUBLIC :: acc_stream_priority_range PUBLIC :: acc_stream_equal, acc_stream_associated PUBLIC :: acc_stream_cptr TYPE acc_stream_type PRIVATE #if defined (__DBCSR_ACC) TYPE(C_PTR) :: cptr = C_NULL_PTR #else INTEGER :: dummy = 1 #endif END TYPE acc_stream_type #if defined (__DBCSR_ACC) INTERFACE FUNCTION acc_interface_stream_create(stream_ptr, name, priority) RESULT(istat) BIND(C, name="c_dbcsr_acc_stream_create") IMPORT TYPE(C_PTR) :: stream_ptr CHARACTER(KIND=C_CHAR), DIMENSION(*) :: name INTEGER(KIND=C_INT), VALUE :: priority INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_stream_create END INTERFACE INTERFACE FUNCTION acc_interface_stream_priority_range(least, greatest) RESULT(istat) BIND(C, name="c_dbcsr_acc_stream_priority_range") IMPORT INTEGER(KIND=C_INT) :: least, greatest, istat END FUNCTION acc_interface_stream_priority_range END INTERFACE INTERFACE FUNCTION acc_interface_stream_destroy(stream_ptr) RESULT(istat) BIND(C, name="c_dbcsr_acc_stream_destroy") IMPORT TYPE(C_PTR), VALUE :: stream_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_stream_destroy END INTERFACE INTERFACE FUNCTION acc_interface_stream_sync(stream_ptr) RESULT(istat) BIND(C, name="c_dbcsr_acc_stream_sync") IMPORT TYPE(C_PTR), VALUE :: stream_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_stream_sync END INTERFACE #endif CONTAINS #if ! defined (__DBCSR_ACC) FUNCTION acc_stream_cptr(this) RESULT(res) !! Returns C-pointer of given stream. INTEGER, INTENT(in) :: this !! stream ID LOGICAL :: res !! false (accelerator support is not enabled) MARK_USED(this) res = .FALSE. END FUNCTION acc_stream_cptr #else FUNCTION acc_stream_cptr(this) RESULT(res) !! Returns C-pointer of given stream. TYPE(acc_stream_type), INTENT(in) :: this !! stream ID TYPE(C_PTR) :: res !! C-pointer of a given stream res = this%cptr END FUNCTION acc_stream_cptr #endif SUBROUTINE acc_stream_create(this, name, priority) !! Fortran-wrapper for creation of a CUDA/HIP stream. TYPE(acc_stream_type), INTENT(OUT) :: this CHARACTER(LEN=*), INTENT(IN) :: name INTEGER, INTENT(IN), OPTIONAL :: priority #if ! defined (__DBCSR_ACC) MARK_USED(this) MARK_USED(name) MARK_USED(priority) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat, my_priority my_priority = -1 IF (PRESENT(priority)) & my_priority = priority IF (C_ASSOCIATED(this%cptr)) & DBCSR_ABORT("acc_stream_create: stream already allocated") CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_stream_create(this%cptr, name//c_null_char, my_priority) IF (istat /= 0 .OR. .NOT. C_ASSOCIATED(this%cptr)) & DBCSR_ABORT("acc_stream_create failed") #endif END SUBROUTINE acc_stream_create SUBROUTINE acc_stream_destroy(this) !! Fortran-wrapper for destruction of a CUDA/HIP stream. TYPE(acc_stream_type), & INTENT(INOUT) :: this #if ! defined (__DBCSR_ACC) MARK_USED(this) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat IF (.NOT. C_ASSOCIATED(this%cptr)) & DBCSR_ABORT("acc_stream_destroy: stream not allocated") CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_stream_destroy(this%cptr) IF (istat /= 0) & DBCSR_ABORT("acc_stream_destroy failed") this%cptr = C_NULL_PTR #endif END SUBROUTINE acc_stream_destroy SUBROUTINE acc_stream_synchronize(this) !! Fortran-wrapper for waiting for CUDA/HIP stream tasks to complete. TYPE(acc_stream_type), & INTENT(IN) :: this #if ! defined (__DBCSR_ACC) MARK_USED(this) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat IF (.NOT. C_ASSOCIATED(this%cptr)) & DBCSR_ABORT("acc_stream_synchronize: stream not allocated") CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id()) istat = acc_interface_stream_sync(this%cptr) IF (istat /= 0) & DBCSR_ABORT("acc_stream_synchronize failed") #endif END SUBROUTINE acc_stream_synchronize SUBROUTINE acc_stream_priority_range(least, greatest) !! Fortran-wrapper for getting CUDA/HIP streams' priority range. INTEGER, INTENT(OUT) :: least, greatest #if ! defined (__DBCSR_ACC) least = -1; greatest = -1 ! assign intent-out arguments to silence compiler warnings DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else INTEGER :: istat istat = acc_interface_stream_priority_range(least, greatest) IF (istat /= 0) & DBCSR_ABORT("acc_stream_priority_range failed") #endif END SUBROUTINE acc_stream_priority_range FUNCTION acc_stream_equal(this, other) RESULT(res) !! Checks if two streams are equal TYPE(acc_stream_type), INTENT(IN) :: this, other LOGICAL :: res !! true if equal, false otherwise #if ! defined (__DBCSR_ACC) MARK_USED(this) MARK_USED(other) res = .TRUE. #else res = C_ASSOCIATED(this%cptr, other%cptr) #endif END FUNCTION acc_stream_equal FUNCTION acc_stream_associated(this) RESULT(res) !! Checks if a streams is associated TYPE(acc_stream_type), INTENT(IN) :: this LOGICAL :: res !! true if associated, false otherwise #if ! defined (__DBCSR_ACC) MARK_USED(this) res = .FALSE. #else res = C_ASSOCIATED(this%cptr) #endif END FUNCTION acc_stream_associated END MODULE dbcsr_acc_stream ================================================ FILE: src/acc/dbcsr_acc_timings.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_acc_timings !! Accelerator support USE ISO_C_BINDING, ONLY: C_INT, C_PTR, C_F_POINTER #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_acc_timings' CONTAINS SUBROUTINE f_dbcsr_timeset(routineN, routineN_len, handle) BIND(C, name="c_dbcsr_timeset") TYPE(C_PTR), INTENT(IN) :: routineN INTEGER(KIND=C_INT), INTENT(IN) :: routineN_len INTEGER(KIND=C_INT), INTENT(OUT) :: handle CHARACTER, POINTER :: a(:) CHARACTER(len=routineN_len) :: routineName INTEGER :: i CALL C_F_POINTER(routineN, a, [routineN_len]) ! Convert character array "a" to scalar character string ! "routineName" DO i = 1, routineN_len routineName(i:i) = a(i) END DO CALL timeset(routineName, handle) END SUBROUTINE f_dbcsr_timeset SUBROUTINE f_dbcsr_timestop(handle) BIND(C, name="c_dbcsr_timestop") INTEGER(KIND=C_INT), INTENT(IN) :: handle CALL timestop(handle) END SUBROUTINE f_dbcsr_timestop END MODULE dbcsr_acc_timings ================================================ FILE: src/acc/hip/PACKAGE ================================================ { "description": "HIP backend for accelerator API", "archive":"libdbcsr", "requires": ["../../base"] } ================================================ FILE: src/acc/hip/acc_hip.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #include "acc_hip.h" #if !defined(__HIP_PLATFORM_NVCC__) hipError_t hipHostAlloc(void** ptr, size_t size, unsigned int flags) { return hipHostMalloc(ptr, size, flags); } hipError_t hipFreeHost(void* ptr) { return hipHostFree(ptr); } #endif hiprtcResult hiprtcGetLowLevelCode(hiprtcProgram prog, char* code) { return hiprtcGetCode(prog, code); } hiprtcResult hiprtcGetLowLevelCodeSize(hiprtcProgram prog, size_t* codeSizeRet) { return hiprtcGetCodeSize(prog, codeSizeRet); } hipError_t hipEventCreate(hipEvent_t* event, unsigned flags) { return hipEventCreateWithFlags(event, flags); } hipError_t hipStreamCreate(hipStream_t* stream, unsigned int flags) { return hipStreamCreateWithFlags(stream, flags); } hipError_t hipLaunchJITKernel(hipFunction_t f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ, unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, hipStream_t stream, void** kernelParams, void** extra) { return hipModuleLaunchKernel( f, gridDimX, gridDimY, gridDimZ, blockDimX, blockDimY, blockDimZ, sharedMemBytes, stream, kernelParams, extra); } hipblasStatus_t ACC_BLAS_STATUS_SUCCESS = HIPBLAS_STATUS_SUCCESS; hipblasOperation_t ACC_BLAS_OP_N = HIPBLAS_OP_N; hipblasOperation_t ACC_BLAS_OP_T = HIPBLAS_OP_T; hiprtcResult ACC_RTC_SUCCESS = HIPRTC_SUCCESS; ================================================ FILE: src/acc/hip/acc_hip.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #ifndef ACC_HIP_H #define ACC_HIP_H #include #include #if __has_include() # include #else # include #endif #include #include #define ACC(x) hip##x #define ACC_DRV(x) ACC(x) #define ACC_BLAS(x) hipblas##x #define ACC_RTC(x) hiprtc##x #define BACKEND "HIP" /* Macro for HIP error handling * Wrap calls to HIP API */ #define HIP_API_CALL(func, args) \ do { \ hipError_t result = ACC(func) args; \ if (result != hipSuccess) { \ printf("\nHIP error: %s failed with error %s (%s::%d)\n", #func, hipGetErrorName(result), __FILE__, __LINE__); \ exit(1); \ } \ } while (0) /* HIP does not differentiate between "runtime" API and "driver" API */ #define ACC_API_CALL(func, args) HIP_API_CALL(func, args) #define ACC_DRV_CALL(func, args) HIP_API_CALL(func, args) /* Wrap calls to HIPRTC API */ #define ACC_RTC_CALL(func, args) \ do { \ hiprtcResult result = ACC_RTC(func) args; \ if (result != HIPRTC_SUCCESS) { \ printf("\nHIPRTC ERROR: %s failed with error %s (%s::%d)\n", #func, hiprtcGetErrorString(result), __FILE__, __LINE__); \ exit(1); \ } \ } while (0) /* Wrap calls to HIPBLAS API */ #define ACC_BLAS_CALL(func, args) \ do { \ hipblasStatus_t result = ACC_BLAS(func) args; \ if (result != HIPBLAS_STATUS_SUCCESS) { \ const char* error_name = "HIPBLAS_ERRROR"; \ if (result == HIPBLAS_STATUS_NOT_INITIALIZED) { \ error_name = "HIPBLAS_STATUS_NOT_INITIALIZED "; \ } \ else if (result == HIPBLAS_STATUS_ALLOC_FAILED) { \ error_name = "HIPBLAS_STATUS_ALLOC_FAILED "; \ } \ else if (result == HIPBLAS_STATUS_INVALID_VALUE) { \ error_name = "HIPBLAS_STATUS_INVALID_VALUE "; \ } \ else if (result == HIPBLAS_STATUS_MAPPING_ERROR) { \ error_name = "HIPBLAS_STATUS_MAPPING_ERROR "; \ } \ else if (result == HIPBLAS_STATUS_EXECUTION_FAILED) { \ error_name = "HIPBLAS_STATUS_EXECUTION_FAILED "; \ } \ else if (result == HIPBLAS_STATUS_INTERNAL_ERROR) { \ error_name = "HIPBLAS_STATUS_INTERNAL_ERROR "; \ } \ else if (result == HIPBLAS_STATUS_NOT_SUPPORTED) { \ error_name = "HIPBLAS_STATUS_NOT_SUPPORTED "; \ } \ else if (result == HIPBLAS_STATUS_ARCH_MISMATCH) { \ error_name = "HIPBLAS_STATUS_ARCH_MISMATCH "; \ } \ else if (result == HIPBLAS_STATUS_HANDLE_IS_NULLPTR) { \ error_name = "HIPBLAS_STATUS_HANDLE_IS_NULLPTR "; \ } \ printf("\nHIPBLAS ERROR: %s failed with error %s\n", #func, error_name); \ exit(1); \ } \ } while (0) extern hipError_t hipHostAlloc(void** ptr, size_t size, unsigned int flags); extern hipError_t hipFreeHost(void* ptr); extern hiprtcResult hiprtcGetLowLevelCode(hiprtcProgram prog, char* code); extern hiprtcResult hiprtcGetLowLevelCodeSize(hiprtcProgram prog, size_t* codeSizeRet); extern hipError_t hipEventCreate(hipEvent_t* event, unsigned flags); extern hipError_t hipStreamCreate(hipStream_t* stream, unsigned int flags); extern hipError_t hipLaunchJITKernel(hipFunction_t f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ, unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, hipStream_t stream, void** kernelParams, void** extra); /* HIP API: types * In the HIP API, there is no difference between runtime API and driver API * we therefore remap what the Driver API types would look like back to runtime API */ using hipfunction = hipFunction_t; using hipstream = hipStream_t; using hipevent = hipEvent_t; using hipmodule = hipModule_t; using hipdevice = hipDevice_t; using hipDeviceProp = hipDeviceProp_t; using hipcontext = hipCtx_t; /* HIPBLAS status and operations */ extern hipblasStatus_t ACC_BLAS_STATUS_SUCCESS; extern hipblasOperation_t ACC_BLAS_OP_N; extern hipblasOperation_t ACC_BLAS_OP_T; /* HIPRTC error status */ extern hiprtcResult ACC_RTC_SUCCESS; #endif /*ACC_HIP_H*/ ================================================ FILE: src/acc/hip/dbcsr_hip_profiling.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! Copyright(C) 2021 Advanced Micro Devices, Inc. All rights reserved. ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_hip_profiling INTERFACE SUBROUTINE roctxMarkA(message) BIND(c, name="roctxMarkA") USE ISO_C_BINDING, ONLY: C_CHAR IMPLICIT NONE CHARACTER(C_CHAR) :: message(*) END SUBROUTINE roctxMarkA FUNCTION roctxRangePushA(message) BIND(c, name="roctxRangePushA") USE ISO_C_BINDING, ONLY: C_INT, & C_CHAR IMPLICIT NONE INTEGER(C_INT) :: roctxRangePushA CHARACTER(C_CHAR) :: message(*) END FUNCTION roctxRangePushA SUBROUTINE roctxRangePop() BIND(c, name="roctxRangePop") IMPLICIT NONE END SUBROUTINE roctxRangePop END INTERFACE END MODULE dbcsr_hip_profiling ================================================ FILE: src/acc/libsmm_acc/.gitignore ================================================ # Files generated at build stage parameters.h smm_acc_kernels.h *.so .with_gpu ================================================ FILE: src/acc/libsmm_acc/CMakeLists.txt ================================================ set(SMM_ACC_KERNELS kernels/smm_acc_common.h kernels/smm_acc_dnt_largeDB1.h kernels/smm_acc_dnt_largeDB2.h kernels/smm_acc_dnt_medium.h kernels/smm_acc_dnt_small.h kernels/smm_acc_dnt_tiny.h kernels/smm_acc_transpose.h) add_custom_target( parameters ALL COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/generate_parameters.py --gpu_version=${WITH_GPU} --base_dir=${CMAKE_CURRENT_SOURCE_DIR}/parameters DEPENDS generate_parameters.py parameters/parameters_${WITH_GPU_PARAMS}.json BYPRODUCTS parameters.h COMMENT "libsmm_acc: generating parameters for GPU ${WITH_GPU_PARAMS}") add_custom_target( smm_acc_kernels ALL COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/generate_kernels.py ${CMAKE_CURRENT_SOURCE_DIR}/kernels DEPENDS generate_kernels.py ${SMM_ACC_KERNELS} BYPRODUCTS smm_acc_kernels.h COMMENT "libsmm_acc: generating kernels") add_dependencies(dbcsr smm_acc_kernels parameters) target_include_directories(dbcsr PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) # Note: this library is only used in some of the tests, it's just to get include # paths to generated header files. add_library(libsmm_acc INTERFACE) target_include_directories(libsmm_acc INTERFACE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) ================================================ FILE: src/acc/libsmm_acc/PACKAGE ================================================ { "description": "CUDA/HIP-accelerated library for small matrix multiplications", "archive": "libdbcsr", "requires": ["..", "../cuda", "../hip", "../cuda_hip"] } ================================================ FILE: src/acc/libsmm_acc/README.md ================================================ # GPU Accelerated Small Matrix Multiplications `libsmm_acc` is a **lib**rary for **s**mall **m**atrix-**m**atrix multiplication on a GPU-**acc**elerator. Stacks of matrix-matrix multiplication indices are passed from DBCSR to `libsmm_acc` which performs the multiplications on the GPU. For a description of the library (some details are outdated, but this nevertheless provides a very good introduction), see Chapter 8.4 of: > WALKER, R. C., & GOETZ, A. W. (2016). [Electronic structure calculations on graphics processing units: from quantum chemistry to condensed matter physics](https://onlinelibrary.wiley.com/doi/pdf/10.1002/9781118670712). ### Compilation `libsmm_acc` is compiled from within DBCSR, there is no separate compilation. ## Directory Organization - [`kernels/`](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/): GPU kernels (CUDA- and HIP-compatible) for matrix-matrix multiplication and Python interface to autotuning code. - `generate_*.py`: utility scripts for `libsmm_acc` compilation - `libsmm_acc*`: libsmm_acc C++ and CUDA / HIP code - [`parameters/`](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/parameters/): contains `parameters_GPU.json` files. These are sets of matrix-matrix multiplication parameters for different (m, n, k)-triplets optimized for a given GPU card. - [`tune/`](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/tune/): scripts for autotuning of optimal parameter sets, see [autotuning of kernel parameters](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/tune/README.md) ## Matrix-matrix Multiplication Kernels and Parameters For a given matrix-matrix multiplication **triplet** characterized by dimensions - **m** - **n** - **k**, `libsmm_acc` can run 5 different matrix-matrix multiplication **kernels**: - [tiny](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/smm_acc_dnt_tiny.h) - [small](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/smm_acc_dnt_small.h) - [medium](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/smm_acc_dnt_medium.h) - [largeDB1](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/smm_acc_dnt_largeDB1.h) ("large double-buffering 1") - [largeDB2](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/smm_acc_dnt_largeDB2.h) ("large double-buffering 2") which take between 3 - 7 **parameters** (see figure at the top): - **threads**: number of threads per block in the execution configuration of the CUDA/HIP kernels - **grouping**: how many stack entries are grouped together into a CUDA/HIP thread block (if `grouping` is bigger, less blocks are launched) - **minblocks**: specifies the desired minimum number of resident blocks per multiprocessor - **tile_m**: (on the figure: **M**), `tile_m` * `tile_n` = dimensions of the result block `T` - **tile_n** : (on the figure: **N**) - **w**: input slab width (width of slab `P_A` and `P_B`) - **v**: output slab width (width of slab `P_C`) The performance of the matrix-matrix multiplication kernels is highly dependent on the choice of algorithm and parameters. For this reason, `libsmm_acc` provides lists of optimal parameters for different GPU cards and different (m, n, k)-triplets. ## Contributing to libsmm_acc We expect users to contribute to the library by providing new optimized kernels and support for new GPUs. #### Autotuning procedure Follow the [autotuning procedure](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/tune/README.md) #### Adding a new kernel 1. Choose a kernel `name` 2. Add the kernel's code (must be able to compile by both `nvcc` and `hip`) in file `kernels/smm_acc_dnt_name.h` 3. Add Python kernel class inheriting from base class `kernels/smm_acc_dnt_name.py` #### Adding support for a new GPU card 1. Add the GPU's compute architecture properties to [`kernels/gpu_properties.json`](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/gpu_properties.json). For more information on where to find these properties, please refer to the "info" field of [`kernels/gpu_properties.json`](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/gpu_properties.json). 2. Add the GPU to the `gpu_architectures` data structure in [`kernels/smm_acc.py`](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/smm_acc.py). 3. Add the necessary code for setting `ARCH_NUMBER` correctly in the [`CMakeLists`](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/CMakeLists.txt). Also add this GPU to the list of `SUPPORTED_CUDA_ARCHITECTURES` or `SUPPORTED_HIP_ARCHITECTURES` in the [`CMakeLists`](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/CMakeLists.txt). 4. Add a minimal JSON file `parameters_GPU.json`, containing: ```json { } ``` then add matrix-matrix multiplication parameters for this GPU using *autotuning*. ================================================ FILE: src/acc/libsmm_acc/generate_kernels.py ================================================ #!/usr/bin/env python3 # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### import re import argparse from pathlib import Path # =============================================================================== # Helper variables separator = ( "//===========================================================================\n" ) line_in_string = "{:<70}\\n\\" variable_declaration = ( 'std::string {var_name} = " \\n\\' ) end_string = '";' commented_line = r"\s*(//|/\*.*/*/)" open_comment = r"\s*/\*" close_comment = r".*\*/" smm_acc_header = """\ /*------------------------------------------------------------------------------------------------* * Copyright (C) by the DBCSR developers group - All rights reserved * * This file is part of the DBCSR library. * * * * For information on the license, see the LICENSE file. * * For further information please visit https://dbcsr.cp2k.org * * SPDX-License-Identifier: GPL-2.0+ * *------------------------------------------------------------------------------------------------*/ /***************************************************************************** * FILE GENERATED BY SCRIPT 'generate_kernels.py' DO NOT EDIT * *****************************************************************************/ #ifndef SMM_ACC_H #define SMM_ACC_H #include """ # =============================================================================== def main(kernels_folder: Path): """ Find files corresponding to CUDA/HIP kernels and write them as strings into a C++ header file to be read for JIT-ing """ # Find all files containing "smm_acc" kernels in the "kernel" subfolder kernels_folder_files = kernels_folder.iterdir() kernel_files = list() for kfile in kernels_folder_files: if kfile.name.startswith("smm_acc_") and kfile.suffix == ".h": kernel_files.append(kfile) print(f"Found {len(kernel_files)} kernel files:") print(*(f"<- {kf}" for kf in kernel_files), sep="\n") # Read kernels_h = ( dict() ) # key: path to kernel file (string), value: file content (list of string) for kernel_file in kernel_files: kernels_h[kernel_file] = kernel_file.read_text().splitlines() # Construct file containing the kernels as strings print("Re-write kernels as strings...") file_h = smm_acc_header for kernel_file, kernel in kernels_h.items(): kernel_name = kernel_file.stem # use the filename as name for the kernel file_h += f"\n{separator}{cpp_function_to_string(kernel, kernel_name)}\n" file_h += "#endif // SMM_ACC_H\n" file_h += "//EOF" file_h += "\n\n" # Write file_h_path = "smm_acc_kernels.h" with open(file_h_path, "w") as fhandle: fhandle.write(file_h) print(f"Wrote kernel string to file\n-> {file_h_path}") # =============================================================================== def cpp_function_to_string(cpp_file, kernel_name): """ Transform a C++ function into a char array :param cpp_file: file content (list of strings, each element is a line in the original file) :param kernel_name: name of the kernel (string, must be usable as a C++ variable name) :return: string containing the kernel written as a C++ char array """ assert re.match( r"^[a-zA-Z]\w*", kernel_name ), "kernel_name must be a valid C/C++ variable name" out = f"{variable_declaration.format(var_name=kernel_name)}\n" in_comment = False for line in cpp_file: if not in_comment: # ignore comments and empty lines if ( re.match(commented_line, line) is not None or len(line) == 0 or '#include "smm_acc_common.h"' in line ): pass elif re.match(open_comment, line) is not None: in_comment = True else: out += ( line_in_string.format( line.replace('"', '\\"').replace("\\", "\\\\") ) + "\n" ) elif re.match(close_comment, line): # in_comment == True in_comment = False return out + end_string if __name__ == "__main__": parser = argparse.ArgumentParser(description="Pack CUDA/HIP kernels for JIT'ing") parser.add_argument( "kernels_folder", metavar="KERNELS_FOLDER", type=Path, nargs="?", default="./kernels", help="directory with the kernel header files. Default: %(default)s", ) args = parser.parse_args() main(args.kernels_folder) ================================================ FILE: src/acc/libsmm_acc/generate_parameters.py ================================================ #!/usr/bin/env python3 # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### import json import argparse from pathlib import Path from kernels.smm_acc import params_dict_to_kernel, gpu_architectures # =============================================================================== def main(gpu_version: str, base_dir: Path): param_fn = base_dir / f"parameters_{gpu_version}.json" try: # Read existing parameters with param_fn.open("r") as fhandle: print(f"GPU version: {gpu_version}") all_kernels = [ params_dict_to_kernel(**params) for params in json.load(fhandle) ] print(f"About to process {len(all_kernels):,} kernels from file {param_fn}") except: # noqa: E722 all_kernels = [] pass try: # Read GPU properties (warp size) gpu_props_fn = base_dir / "../kernels/gpu_properties.json" arch_code = gpu_architectures[param_fn.name] with gpu_props_fn.open("r") as fhandle: gpu_warp_size = json.load(fhandle)[arch_code]["Threads_/_Warp"] except: # noqa: E722 gpu_warp_size = 32 pass print(f"GPU warp size: {gpu_warp_size}") # Construct output out = write_parameters_file(all_kernels, gpu_warp_size) # Write to c++ header-file file_h = "parameters.h" if all_kernels: print(f"Found {len(all_kernels):,} kernels in file {param_fn}") print(f"Printing them to file {file_h}") with open(file_h, "w") as f: f.write(out) # =============================================================================== def write_parameters_file(all_pars, gpu_warp_size): # Header out = """\ /*------------------------------------------------------------------------------------------------* * Copyright (C) by the DBCSR developers group - All rights reserved * * This file is part of the DBCSR library. * * * * For information on the license, see the LICENSE file. * * For further information please visit https://dbcsr.cp2k.org * * SPDX-License-Identifier: GPL-2.0+ * *------------------------------------------------------------------------------------------------*/ /***************************************************************************** * FILE GENERATED BY SCRIPT 'generate_parameters.py' DO NOT EDIT * *****************************************************************************/ #ifndef PARAMETERS_H #define PARAMETERS_H #include "parameters_utils.h" /* * Lookup table: given a triplet (m, n, k) describing a matrix-matrix multiplication, * look up its optimal kernel parameters * * Keys: * (m, n, k) * * Values: array of 8 integers with elements: * 0: mm algorithm (enum defined in libsmm_acc.h, possible values: 1, 2, 3, 4, 5) * 1: tile_m * 2: tile_n * 3: w * 4: v * 5: threads * 6: grouping * 7: minblocks * * Note: for the matrix matrix multiplication algorithms which take less than 8 parameters (i.e. tiny, small, medium), * the superfluous parameters are set to 0 */ """ # Warp size out += f"extern const int warp_size = {gpu_warp_size};\n\n" # Map of kernel parameters out += """\ extern const std::unordered_map ht = { """ # Initializer list body print("Get parameters and write to file") init_list_line = ( " {{ {{{{{m:3}, {n:3}, {k:3}}}}}," + " {{{{ {algorithm:1}, {tile_m:2}, {tile_n:2}, {w:2}, {v:2}, {threads:3}, {grouping:2}, {minblocks:2} }}}} }}," + " // perf: {perf} {source}\n" ) for pars in all_pars: out += init_list_line.format(**pars.as_dict_for_parameters_h) # Footer out += """\ }; #endif //EOF """ return out # =============================================================================== if __name__ == "__main__": parser = argparse.ArgumentParser( description="Generator of libsmm_acc. The Library for Small Matrix Multiplications on GPU.", formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) parser.add_argument( "-g", "--gpu_version", metavar="GPU_VERSION", default="P100", help="GPU card version, used to select the appropriate libsmm_acc parameters file. Default: %(default)s", ) parser.add_argument( "-d", "--base_dir", metavar="BASE_DIR", default="parameters/", type=Path, help="Set the base directory to look for the parameter files. Default: %(default)s", ) args = parser.parse_args() main(args.gpu_version, args.base_dir) ================================================ FILE: src/acc/libsmm_acc/kernels/PACKAGE ================================================ { "description": "Kernel templates for libsmm_acc", "archive": "libdbcsr", "requires": [] } ================================================ FILE: src/acc/libsmm_acc/kernels/README.md ================================================ # LIBSMM_ACC Kernels ## Directory Organization * [`autotuning_properties.json`](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/autotuning_properties.json) Properties of the autotuning procedure, read from [DBCSR source code](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/libsmm_acc_benchmark.cpp) * [`gpu_properties.json`](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/gpu_properties.json) GPU card properties * [`smm_acc_common.h`](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/smm_acc_common.h) Functionalities common to kernel CUDA/HIP codes * [`smm_acc_dnt_base.py`](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/smm_acc_dnt_base.py) Kernel base class * `smm_acc_dnt_ALGORITHM.py` Kernel class in python * `smm_acc_dnt_ALGORITHM.h` Batched Multiply Kernel CUDA/HIP code * [`smm_acc_transpose.h`](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/smm_acc_transpose.h) Transpose CUDA/HIP code ## Batched Multiplication Kernels All kernels have following signature: ``` template __global__ void __launch_bounds__(threads, minblocks) smm_acc_dnt_ALGORITHM (const int *__restrict__ param_stack, const int stack_size, const double* __restrict__ a_data, const double* __restrict__ b_data, double* c_data); ``` At kernel launch time, the A, B, and C matrices, as well as the product descriptors (the so-called stacks) are all located in global memory on the GPU. Each entry in the stack describes one matrix-matrix product: it contains three pointers to the blocks in the A, B, and C matrices. After the kernel has read a stack entry, it fetches the blocks in matrices A and B from global to shared memory, and updates the C matrix with the product of A and B. `libsmm_acc` provides 5 different kernels for this operation (tiny, small, medium, largeDB1, largeDB2), which are optimized for different block sizes. Please refer to the documentation inside the respective `.h` files for more details. ================================================ FILE: src/acc/libsmm_acc/kernels/__init__.py ================================================ # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### """Manage libsmm_acc kernels: their kernel code (CUDA and HIP), their parameters, and predictive features""" ================================================ FILE: src/acc/libsmm_acc/kernels/autotuning_properties.json ================================================ { "info": { "header": "Autotuning characteristics", "stack_size": "Number of block multiplications computed in one DBCSR stack", "npar": "Number of parameters in one DBCSR stack entry", "sizeof_int": "size of an int (bytes)", "sizeof_double": "size of a double (bytes)" }, "stack_size": 16005, "npars": 3, "sizeof_int": 4, "sizeof_double": 8 } ================================================ FILE: src/acc/libsmm_acc/kernels/gpu_properties.json ================================================ { "info": { "header": "Hardware-dependent constraints (GPU P100, compute capability 6.0)", "nvidia_source_url": [ "https://docs.nvidia.com/cuda/cuda-occupancy-calculator/index.html", "https://devblogs.nvidia.com/inside-pascal/", "https://www.nvidia.com/content/dam/en-zz/Solutions/Data-Center/tesla-product-literature/volta-architecture-whitepaper.pdf", "https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#features-and-technical-specifications" ], "amd_source_url": [ "https://www.amd.com/en/products/professional-graphics/radeon-pro-wx-9100", "https://www.amd.com/en/products/professional-graphics/instinct-mi50", "https://www.amd.com/en/products/server-accelerators/instinct-mi100", "https://www.amd.com/en/products/server-accelerators/instinct-mi250" ] }, "sm_35": { "Compute_Capability": 3.5, "SM_Version": "sm_35", "Threads_/_Warp" : 32, "Warps_/_Multiprocessor": 64, "Threads_/_Multiprocessor": 2048, "Thread_Blocks_/_Multiprocessor": 16, "Max_Thread_Block_Size": 1024, "Shared_Memory_/_Multiprocessor_(bytes)": 49152, "Max_Shared_Memory_/_Block_(bytes)": 49152, "Register_File_Size_/_Multiprocessor_(32-bit_registers)": 65536, "Max_Registers_/_Block": 65536, "Register_Allocation_Unit_Size": 256, "Register_Allocation_Granularity": "warp", "Max_Registers_/_Thread": 255, "Shared_Memory_Allocation_Unit_Size": 256, "Warp_Allocation_Granularity": 4, "Shared_Memory_Size_Configurations_(bytes)": 49152, "Warp_register_allocation_granularities": 256 }, "sm_37": { "Compute_Capability": 3.7, "SM_Version": "sm_37", "Threads_/_Warp" : 32, "Warps_/_Multiprocessor": 64, "Threads_/_Multiprocessor": 2048, "Thread_Blocks_/_Multiprocessor": 16, "Max_Thread_Block_Size": 1024, "Shared_Memory_/_Multiprocessor_(bytes)": 114688, "Max_Shared_Memory_/_Block_(bytes)": 49152, "Register_File_Size_/_Multiprocessor_(32-bit_registers)": 131072, "Max_Registers_/_Block": 65536, "Register_Allocation_Unit_Size": 256, "Register_Allocation_Granularity": "warp", "Max_Registers_/_Thread": 255, "Shared_Memory_Allocation_Unit_Size": 256, "Warp_Allocation_Granularity": 4, "Shared_Memory_Size_Configurations_(bytes)": 114688, "Warp_register_allocation_granularities": 256 }, "sm_60": { "Compute_Capability": 6.0, "SM_Version": "sm_60", "Threads_/_Warp" : 32, "Warps_/_Multiprocessor": 64, "Threads_/_Multiprocessor": 2048, "Thread_Blocks_/_Multiprocessor": 32, "Max_Thread_Block_Size": 1024, "Shared_Memory_/_Multiprocessor_(bytes)": 65536, "Max_Shared_Memory_/_Block_(bytes)": 49152, "Register_File_Size_/_Multiprocessor_(32-bit_registers)": 65536, "Max_Registers_/_Block": 65536, "Register_Allocation_Unit_Size": 256, "Register_Allocation_Granularity": "warp", "Max_Registers_/_Thread": 255, "Shared_Memory_Allocation_Unit_Size": 256, "Warp_Allocation_Granularity": 2, "Shared_Memory_Size_Configurations_(bytes)": 65536, "Warp_register_allocation_granularities": 256, "Shared_memory_access_latency": 4, "Global_memory_access_latency": 500 }, "sm_70": { "Compute_Capability": 7.0, "SM_Version": "sm_70", "Threads_/_Warp" : 32, "Warps_/_Multiprocessor": 64, "Threads_/_Multiprocessor": 2048, "Thread_Blocks_/_Multiprocessor": 32, "Max_Thread_Block_Size": 1024, "Shared_Memory_/_Multiprocessor_(bytes)": 114688, "Max_Shared_Memory_/_Block_(bytes)": 49152, "Register_File_Size_/_Multiprocessor_(32-bit_registers)": 65536, "Max_Registers_/_Block": 65536, "Register_Allocation_Unit_Size": 256, "Register_Allocation_Granularity": "warp", "Max_Registers_/_Thread": 255, "Shared_Memory_Allocation_Unit_Size": 256, "Warp_Allocation_Granularity": 4, "Shared_Memory_Size_Configurations_(bytes)": 114688, "Warp_register_allocation_granularities": 256, "Shared_memory_access_latency": 4, "Global_memory_access_latency": 500 }, "sm_80": { "Compute_Capability": 8.0, "SM_Version": "sm_80", "Threads_/_Warp" : 32, "Warps_/_Multiprocessor": 64, "Threads_/_Multiprocessor": 2048, "Thread_Blocks_/_Multiprocessor": 32, "Max_Thread_Block_Size": 1024, "Shared_Memory_/_Multiprocessor_(bytes)": 65536, "Max_Shared_Memory_/_Block_(bytes)": 65536, "Register_File_Size_/_Multiprocessor_(32-bit_registers)": 65536, "Max_Registers_/_Block": 65536, "Register_Allocation_Unit_Size": 256, "Register_Allocation_Granularity": "warp", "Max_Registers_/_Thread": 255, "Shared_Memory_Allocation_Unit_Size": 128, "Warp_Allocation_Granularity": 4, "Shared_Memory_Size_Configurations_(bytes)": 114688, "Warp_register_allocation_granularities": 256, "Shared_memory_access_latency": 4, "Global_memory_access_latency": 500 }, "sm_90": { "Compute_Capability": 9.0, "SM_Version": "sm_90", "Threads_/_Warp" : 32, "Warps_/_Multiprocessor": 64, "Threads_/_Multiprocessor": 2048, "Thread_Blocks_/_Multiprocessor": 32, "Max_Thread_Block_Size": 1024, "Shared_Memory_/_Multiprocessor_(bytes)": 65536, "Max_Shared_Memory_/_Block_(bytes)": 65536, "Register_File_Size_/_Multiprocessor_(32-bit_registers)": 65536, "Max_Registers_/_Block": 65536, "Register_Allocation_Unit_Size": 256, "Register_Allocation_Granularity": "warp", "Max_Registers_/_Thread": 255, "Shared_Memory_Allocation_Unit_Size": 128, "Warp_Allocation_Granularity": 4, "Shared_Memory_Size_Configurations_(bytes)": 114688, "Warp_register_allocation_granularities": 256, "Shared_memory_access_latency": 4, "Global_memory_access_latency": 500 }, "nvidia_lingo_to_amd" : { "Reference": "https://rocm-documentation.readthedocs.io/en/latest/Programming_Guides/HIP-terminology.html?highlight=wavefront%20size#hip-terminology-comparison-with-opencl-cuda-c-amp-and-hcc", "Thread": "Work_Item, (a single element of work: one element from the dispatch grid)", "Warp": " Wavefront (a collection of 64 work-items that execute in parallel on a single GCN processor)", "Thread_Block": "Workgroup (a collection of wavefronts running on the same compute unit which can synchronize and share data)", "Multiprocessor": "Compute_Unit", "Shared_Memory": "Local_Data_Share (Each compute unit has a 64 kB memory space that enables low-latency communication between work-items within a work-group, or the work-items within a wavefront; this is the local data share (LDS). This memory is configured with 32 banks, each with 512 entries of 4 bytes. The AMD GCN processors use a 64 kB local data share (LDS) memory for each compute unit; this enables 64 kB of low-latency bandwidth to the processing elements.)" }, "gfx900" : { "GPU_Architecture": "Vega", "Product_Names": ["Radeon PRO WX 9100"], "Threads_/_Warp" : 64, "Warps_/_Multiprocessor": 16, "Threads_/_Multiprocessor": 1024, "Thread_Blocks_/_Multiprocessor": 16, "Max_Thread_Block_Size": 1024, "Shared_Memory_/_Multiprocessor_(bytes)": 64000, "Max_Shared_Memory_/_Block_(bytes)": 64000, "Compute_Units": 64, "Stream_Multiprocessors": 4096, "Memory_Size_(GB)": 16, "Memory_Interface_(bits)": 2048 }, "gfx906" : { "GPU_Architecture": "Vega20", "Product_Names": ["Instinct MI50"], "Threads_/_Warp" : 64, "Warps_/_Multiprocessor": 16, "Threads_/_Multiprocessor": 1024, "Thread_Blocks_/_Multiprocessor": 16, "Max_Thread_Block_Size": 1024, "Max_Shared_Memory_/_Block_(bytes)": 64000, "Shared_Memory_/_Multiprocessor_(bytes)": 64000, "Compute_Units": 60, "Stream_Multiprocessors": 3840, "Memory_Size_(GB)": 16, "Memory_Interface_(bits)": 4096 }, "gfx908" : { "GPU_Architecture": "CDNA", "Product_Names": ["Instinct MI100"], "Threads_/_Warp" : 64, "Warps_/_Multiprocessor": 32, "Threads_/_Multiprocessor": 2048, "Thread_Blocks_/_Multiprocessor": 16, "Max_Thread_Block_Size": 1024, "Max_Shared_Memory_/_Block_(bytes)": 64000, "Shared_Memory_/_Multiprocessor_(bytes)": 64000, "Compute_Units": 120, "Stream_Multiprocessors": 7860, "Memory_Size_(GB)": 32, "Memory_Interface_(bits)": 4096 }, "gfx90a" : { "GPU_Architecture": "CDNA2", "Product_Names": ["Instinct MI250"], "Threads_/_Warp" : 64, "Warps_/_Multiprocessor": 32, "Threads_/_Multiprocessor": 2048, "Thread_Blocks_/_Multiprocessor": 16, "Max_Thread_Block_Size": 1024, "Max_Shared_Memory_/_Block_(bytes)": 64000, "Shared_Memory_/_Multiprocessor_(bytes)": 64000, "Compute_Units": 208, "Stream_Multiprocessors": 13312, "Memory_Size_(GB)": 128, "Memory_Interface_(bits)": 8192 }, "gfx942" : { "GPU_Architecture": "CDNA3", "Product_Names": ["Instinct MI300A"], "Threads_/_Warp" : 64, "Warps_/_Multiprocessor": 32, "Threads_/_Multiprocessor": 2048, "Thread_Blocks_/_Multiprocessor": 32, "Max_Thread_Block_Size": 1024, "Max_Shared_Memory_/_Block_(bytes)": 64000, "Shared_Memory_/_Multiprocessor_(bytes)": 64000, "Compute_Units": 228, "Stream_Multiprocessors": 14592, "Memory_Size_(GB)": 128, "Memory_Interface_(bits)": 8192 }, "gfx950" : { "GPU_Architecture": "CDNA4", "Product_Names": ["Instinct MI350X"], "Threads_/_Warp" : 64, "Warps_/_Multiprocessor": 32, "Threads_/_Multiprocessor": 2048, "Thread_Blocks_/_Multiprocessor": 32, "Max_Thread_Block_Size": 1024, "Max_Shared_Memory_/_Block_(bytes)": 64000, "Shared_Memory_/_Multiprocessor_(bytes)": 64000, "Compute_Units": 256, "Stream_Multiprocessors": 16384, "Memory_Size_(GB)": 288, "Memory_Interface_(bits)": 8192 } } ================================================ FILE: src/acc/libsmm_acc/kernels/smm_acc.py ================================================ #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### import re # =============================================================================== # Dictionary of available kernel algorithms # keys: kernel name # values: kernel implementation class from kernels.smm_acc_dnt_largeDB1 import Kernel_dnt_largeDB1 from kernels.smm_acc_dnt_largeDB2 import Kernel_dnt_largeDB2 from kernels.smm_acc_dnt_medium import Kernel_dnt_medium from kernels.smm_acc_dnt_small import Kernel_dnt_small from kernels.smm_acc_dnt_tiny import Kernel_dnt_tiny kernel_algorithm = { "tiny": Kernel_dnt_tiny, "small": Kernel_dnt_small, "medium": Kernel_dnt_medium, "largeDB1": Kernel_dnt_largeDB1, "largeDB2": Kernel_dnt_largeDB2, } # =============================================================================== # Dictionary of parameter types # keys: parameter name # values: type of the parameter parameter_types = { "m": int, "n": int, "k": int, "algorithm": str, "threads": int, "grouping": int, "minblocks": int, "tile_m": int, "tile_n": int, "w": int, "v": int, "perf (Gflop/s)": float, } # =============================================================================== # Dictionary of available GPU architectures. # keys: parameter_file # values: CUDA compute versions / AMD processor versions gpu_architectures = { "parameters_K20X.json": "sm_35", "parameters_K40.json": "sm_35", "parameters_K80.json": "sm_37", "parameters_P100.json": "sm_60", "parameters_V100.json": "sm_70", "parameters_A100.json": "sm_80", "parameters_H100.json": "sm_90", "parameters_Vega10.json": "gfx900", "parameters_Mi50.json": "gfx906", "parameters_Mi100.json": "gfx908", "parameters_Mi250.json": "gfx90a", "parameters_Mi300.json": "gfx942", "parameters_Mi350.json": "gfx950", } # =============================================================================== def compatible_mnk(algo, m, n, k): """Determine whether a given algorithm is compatible with given m, n, k values""" max_sizes = max(m * k, n * k, m * n) compatible = True if algo == "tiny": if max_sizes > 64: compatible = False elif algo == "small": if max_sizes > 128: compatible = False elif algo in ["largeDB1", "largeDB2"]: if max_sizes < 250: compatible = False else: if algo != "medium": raise AssertionError(f"Cannot identify algorithm:{str(algo)}") return compatible # =============================================================================== def params_dict_to_kernel(**params): """Given a dictionary of parameters, return the corresponding Kernel class instance""" # Get the 'algorithm' field algo = params.pop("algorithm") # Get the list of fields needed to initialize a Kernel instance of this given algorithm kernel_init_params = kernel_algorithm[algo].launch_parameters + ["perf", "source"] # Fill in dictionary fields kernel_init_params_dict = dict() for k in kernel_init_params: if ( k == "perf" and "perf" not in params.keys() and params["source"] == "predicted" ): # the performance of predicted parameter sets is not given kernel_init_params_dict["perf"] = None else: kernel_init_params_dict[k] = params[k] return kernel_algorithm[algo](**kernel_init_params_dict) def descr_to_kernel(kernel_descr, source="autotuned"): """Given a kernel description from the autotuning output, return the corresponding Kernel class instance""" from ast import literal_eval re_kernel_descr = re.compile( r"Kernel_dnt_(\w+)(\(.*\)) , # (\d+(?:\.\d+)?) GFlop/s" ) kernel_descr_matched = re_kernel_descr.search(kernel_descr) assert ( kernel_descr_matched is not None ), f'Could not match kernel description in "{kernel_descr}"' match = kernel_descr_matched.groups() algo = match[0] m = ( match[1] .replace("=", "':") .replace(", ", ", '") .replace("(", "{'") .replace(")", "}") ) params = dict(literal_eval(m)) params["perf"] = float(match[2]) params["source"] = source return kernel_algorithm[algo](**params) def to_string(*iterable): """ Given a (list of) m,n,k-triplet(s), return the corresponding (list of) string(s) "mxnxk" """ mnk_string = "{}x{}x{}" if len(iterable) == 3 and isinstance(iterable[0], int): m, n, k = iterable iterable_to_string = mnk_string.format(m, n, k) else: iterable_to_string = [mnk_string.format(m, n, k) for m, n, k in iterable] if len(iterable_to_string) == 1: iterable_to_string = iterable_to_string[0] return iterable_to_string mnk_pattern = re.compile(r"(\d+)x(\d+)x(\d+)") def to_tuple(*iterable): """ Given a (list of) string(s) "mxnxk", return the corresponding (list of) m,n,k-triplet(s) """ tuple_mnks = list() for mnk in iterable: m, n, k = mnk_pattern.match(mnk).groups() tuple_mnks.append((int(m), int(n), int(k))) if len(tuple_mnks) == 1: tuple_mnks = tuple_mnks[0] return tuple_mnks ================================================ FILE: src/acc/libsmm_acc/kernels/smm_acc_common.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ // work around an issue where -D flags are not propagated in hiprtcCompileProgram (tested on 3.9.0) #if defined(__HIP_ROCclr__) # if !defined(__HIP) # define __HIP # endif #endif #if defined(__HIP) && !defined(__HIP_PLATFORM_NVCC__) && !defined(__HIPCC_RTC__) # include #endif #define MAX(x, y) (((x) > (y)) ? (x) : (y)) #define MIN(x, y) (((x) < (y)) ? (x) : (y)) /****************************************************************************** * There is no native support for atomicAdd on doubles in Cuda 5.0. However * * the following implementation is provided in the CUDA C Programing guide. * ******************************************************************************/ #if defined(__CUDA) # if (__CUDACC_VER_MAJOR__ < 8) || (defined(__CUDA_ARCH__) && (__CUDA_ARCH__ < 600)) static __device__ double atomicAdd(double* address, double val) { unsigned long long int* address_as_ull = (unsigned long long int*)address; unsigned long long int old = *address_as_ull, assumed; do { assumed = old; old = atomicCAS(address_as_ull, assumed, __double_as_longlong(val + __longlong_as_double(assumed))); } while (assumed != old); return __longlong_as_double(old); } # endif #endif /****************************************************************************** * A simple __ldg replacement for older cuda devices. * ******************************************************************************/ #if defined(__CUDA) # if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ < 350) # define __ldg(x) (*(x)) # endif #endif /****************************************************************************** * syncthreads macro * ******************************************************************************/ // clang-format off #if (defined(__HIP) && not defined(__HIP_PLATFORM_NVCC__)) || (defined(__CUDA) && ((__CUDACC_VER_MAJOR__ >= 8) || (defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 600)))) # define syncthreads(x) __syncthreads(x) #endif // clang-format on ================================================ FILE: src/acc/libsmm_acc/kernels/smm_acc_dnt_base.py ================================================ # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### # =============================================================================== # Computing helpers def round_up_to_nearest_multiple(x, step): """This should work for integers or numpy arrays of integers""" return ((x + step - 1) // step) * step def round_down_to_nearest_multiple(x, step): import numpy as np result = np.where(x % step == 0, x, x - x % step).astype(float) if result.size == 1: result = result.item() # extract single element of numpy array return result # =============================================================================== class Kernel: """ Base class for libsmm_acc's kernels """ def __repr__(self): return f"<{self.name}>" def can_handle(self, m, n, k): return self.m == m and self.n == n and self.k == k @property def include(self): return f"smm_acc_dnt_{self.algorithm}.h" @property def name(self): return f"smm_acc_dnt_{self.algorithm}_{'_'.join([str(self.__dict__[k]) for k in self.launch_parameters])}" @property def autotuned(self): return True if self.source == "autotuned" else False @property def as_dict(self): return dict(algorithm=self.algorithm, **self.__dict__) @property def as_dict_for_parameters_json(self): """ Return the kernel as a dictionary in such a way that it is convenient to write in a JSON file and parameters always appear in the same order """ # Add common fields fields = [ "m", "n", "k", "tile_m", "tile_n", "w", "v", "threads", "grouping", "minblocks", "algorithm", ] d = dict() for f in fields: if f in self.as_dict.keys(): d[f] = self.as_dict[f] # Only add the performance if it was autotuned. If it was predicted, we only have a value scaled in (0,1) if self.as_dict["source"] == "autotuned": d["perf"] = self.as_dict["perf"] # Add the source of this parameter set (autotuned or predicted) d["source"] = self.as_dict["source"] return d @property def as_dict_for_parameters_h(self): """ Return the kernel as a dictionary in such a way that it is convenient to write into the parameters.h file and parameters always appear in the same order """ # Add common fields fields = [ "m", "n", "k", "tile_m", "tile_n", "w", "v", "threads", "grouping", "minblocks", "perf", "source", ] d = dict() for f in fields: d[f] = self.as_dict[f] if f in self.as_dict.keys() else 0 # Add algorithm and source d["algorithm"] = self.algorithm_num d["source"] = "(predicted)" if not self.autotuned else "" return d def launcher_code(self, compiler): """ Compiler: either "nvcc" or "hipcc": determines the C++ dialect to use for kernel launching: either CUDA or HIP """ if compiler == "nvcc": stream_type = "cudaStream_t" # The syntax for kernel launching is different in CUDA and HIP kern_func = ( "kern_func<<<" " ((stack_size + %(grouping)d - 1) / %(grouping)d), %(threads)d, shared_size, stream" " >>>(" ) % self.__dict__ else: stream_type = "hipStream_t" kern_func = ( "hipLaunchKernelGGL(" "kern_func, (stack_size + %(grouping)d - 1) / %(grouping)d, %(threads)d, shared_size, stream, " ) % self.__dict__ return f"""\ int launch_{self.name}(const int *param_stack, int stack_size, {stream_type} stream, int m_max, int n_max, int k_max, const double *a_data, const double *b_data, double *c_data) {{ int shared_size = 0; // {str(self.__dict__)} typedef void (*kernel)(const int*, int, const double*, const double*, double*); static kernel kern_func = {self.func_signature} {kern_func}param_stack, stack_size, a_data, b_data, c_data); return 0; }} """ # noqa: E501 @property def func_signature(self): raise NotImplementedError("func_signature must be implemented in subclass") @staticmethod def promising_parameters(m, n, k, gpu, autotuning): raise NotImplementedError( "promising_parameters must be implemented in subclass" ) @staticmethod def baseline(m, n, k, gpu, autotuning): """Compute a baseline parameter set, whose performance can be compared against""" raise NotImplementedError("baseline must be implemented in subclass") @classmethod def parameter_set_distance(cls, par_set1, par_set2): """ Compute a distance-score between two parameter sets. The lower the score, the closer the two parameter sets are par_set1, par_set2 are parameter set dictionaries of the form {m, n, k, algorithm, minblocks, grouping, threads, tile_m, tile_n, w, v} """ # Check that ('m', 'n', 'k') are the same assert ( par_set1["m"] == par_set2["m"] ), "The two parameter sets have different 'm'-parameters: {} and {}".format( par_set1["m"], par_set2["m"] ) assert ( par_set1["n"] == par_set2["n"] ), "The two parameter sets have different 'n'-parameters: {} and {}".format( par_set1["n"], par_set2["n"] ) assert ( par_set1["k"] == par_set2["k"] ), "The two parameter sets have different 'k'-parameters: {} and {}".format( par_set1["k"], par_set2["k"] ) # Compute distance in number of threads score = abs(par_set1["threads"] - par_set2["threads"]) / 32 par_entries = [ p for p in cls.launch_parameters if p not in ("m", "n", "k", "threads") ] # Compute distance in other parameters for par in par_entries: score += abs(par_set1[par] - par_set2[par]) return score ================================================ FILE: src/acc/libsmm_acc/kernels/smm_acc_dnt_largeDB1.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ /*****************************************************************************/ /* Authors: Peter Messmer , */ /* Nikolay Markovskiy */ /* Ole Schuett */ /*****************************************************************************/ #include "smm_acc_common.h" namespace ns_smm_acc_dnt_largeDB1 { /****************************************************************************/ __device__ static inline void load_gmem_into_smem( const double* __restrict__ from, double* dest, const int length, const int threads) { if (length < threads) { /* are there enough threads to load in one step? */ if (threadIdx.x < length) dest[threadIdx.x] = __ldg(&from[threadIdx.x]); } else { for (int i = threadIdx.x; i < length; i += threads) dest[i] = __ldg(&from[i]); } } /****************************************************************************/ __device__ static inline void load_gmem_into_regs( const double* __restrict__ from, double* dest, const int length, const int threads) { const int NR = (length + threads - 1) / threads; if (length < threads) { /* are there enough threads to load in one step? */ if (threadIdx.x < length) dest[0] = __ldg(&from[threadIdx.x]); } else { int i = threadIdx.x; for (int ri = 0; ri < NR; ri++) { /* loop with fixed bounds */ if (i < length) dest[ri] = __ldg(&from[i]); i += threads; } } } /****************************************************************************/ __device__ static inline void load_regs_into_smem(double* from, double* dest, const int length, const int threads) { const int NR = (length + threads - 1) / threads; if (length < threads) { /* are there enough threads to load in one step? */ if (threadIdx.x < length) dest[threadIdx.x] = from[0]; } else { int i = threadIdx.x; for (int ri = 0; ri < NR; ri++) { /* loop with fixed bounds */ if (i < length) dest[i] = from[ri]; i += threads; } } } /****************************************************************************/ __device__ static inline void multiply( double* buff_a, double* buff_b, double* buff_c, const int w, const int m, const int n, const int M, const int N) { /* There might be more threads than needed for the calculation. * Only the first cmax*rmax threads participate in the calculation. */ const int cmax = (n + N - 1) / N; /* max tile-column */ const int rmax = (m + M - 1) / M; /* max tile-row */ const int c = threadIdx.x / rmax; /* this thread's tile-column */ const int r = threadIdx.x - c * rmax; /* this thread's tile-row */ if (c < cmax && r < rmax) /* is this thread participating? */ for (int l = 0; l < w; l++) for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) buff_c[M * i + j] += buff_a[l * m + M * r + j] * buff_b[l * n + N * c + i]; } /****************************************************************************/ __device__ static inline void store_results_into_smem( double* from, double* dest, const int t, const int v, const int m, const int n, const int M, const int N) { const int rmax = (m + M - 1) / M; /* max tile-row */ const int c = threadIdx.x / rmax; /* this thread's tile-column */ const int r = threadIdx.x - c * rmax; /* this thread's tile-row */ int ctmp = c * N - t; if (ctmp >= -(N - 1) && ctmp < v) for (int i = 0; i < N; i++) if (ctmp + i >= 0 && ctmp + i < v) for (int j = 0; j < M; j++) if (M * r + j < m) { dest[(ctmp + i) * m + M * r + j] = from[M * i + j]; from[M * i + j] = 0.0; /* reset result tile */ } } } // namespace ns_smm_acc_dnt_largeDB1 /****************************************************************************/ /* * Execution configuration: * gridDim.x = (stack_size + (grouping-1))/grouping * blockIdx.x = {0, ..., gridDim.x-1} * blockDim.x = threads * threadIdx.x = {0, ..., threads-1} * Execute sparse matrix-matrix multiplication C += A*B * according to a stack parameter list, decomposed into mutliple block * multiplications c_block += a_block * b_block * c_block, dimension (m x n) * a_block, dimension (m x k) * b_block, dimension (k x n) * Template parameters * --- m, n, k: triplet of integers characterising the block multiplication dimensions * --- M, N: dimensions of the tile T (submatrix of c_block) to compute by one thread * --- w: matrices a_block and b_block are processed (i.e. copied from global memory to shared memory) in slabs of width 'w' * --- v: matrix c_block is written back from registers to smem in slabs of width 'v' * --- threads: number of CUDA threads (in HIP linguo, "work items") this kernel is run with * --- grouping: number of stack parameter entries to process per thread block * --- minblocks: the desired minimum number of resident blocks (in HIP linguo, "workgroup") per multiprocessor (in HIP linguo, "compute units") (used in __launch_bounds__) * Function arguments * --- param_stack: parameter stack array (pointers to global memory): * array of stack entries (index triplets), indicating which elements of * a_data, b_data to multiply and to which element of c_data to add them to * --- stack_size: number of entries (3 integer triplets) in param_stack, * corresponds to the number of block-matrix multiplications to run in total * --- a_data, b_data, c_data (pointers to global memory): * arrays containing the values of matrices A, B, C * Algorithm specificities: * 'DB' stands for double-buffering * In order to limit shared memory utilization (indeed, large shared memory * utilization can limit the number of concurrent thread blocks launched on one * streaming multiprocessor), a_block and b_block are copied to shared memory in * slabs P_a, P_b instead of all at once. * For coalesced writes: slabs of C (P_c with width 'v') are put in shared memory * and only then added to the C in global memory using atomic compare-and-swap */ template __global__ __launch_bounds__(threads, minblocks) void smm_acc_dnt_largeDB1( const int* param_stack, const int stack_size, const double* a_data, const double* b_data, double* c_data) { using namespace ns_smm_acc_dnt_largeDB1; /* Number of parameters per stack entry in parameter stack */ const int npar = 3; /* nrun: number of runs: number of stack entries to process in this thread */ const int nrun = (((blockIdx.x + 1) * grouping) > stack_size) ? stack_size % grouping : grouping; /* Registers to store input slabs during double buffering * If there are too few thread, each thread has to store * multiple elements of the input slabs in its registers. * slab P_a has dimensions (m x w) * slab P_b has dimensions (w x n) * registers are thread-local, so we divide the amount of memory needed to store * the slabs by the number of threads to get the amount of memory that THIS thread needs */ const int mya_size = (w * m + threads - 1) / threads; const int myb_size = (w * n + threads - 1) / threads; const int buff_tmp = MAX((w - 1) * m + ((m + M - 1) / M) * M, m * w + (w - 1) * n + ((n + N - 1) / N) * N); /* v x m = number of elements in P_c */ const int buff_size = MAX(buff_tmp, v * m); /* Registers to buffer/store input slabs P_a, P_b during double-buffering */ double mya[mya_size]; double myb[myb_size]; /* Registers to store the partial result of the tile T of c_block that this thread will compute */ double myc[M * N]; /* Arrays in shared memory * buff: shared memory buffer containing the elements of P_c to be written from regs to smem in slabs */ __shared__ double buff[buff_size]; /* param_stack_s: shared memory buffer containing the stack entries this thread should process * number of stack entries in param_stack_s = grouping, * number of integers per stack entry: 3 */ __shared__ int param_stack_s[npar * grouping]; double* buff_l = buff; /* pointer to the beginning of a_block in buffer */ double* buff_r = &(buff[m * w]); /* pointer to the beginning of b_block in buffer */ /* Set the partial sum (tile T) to zero */ for (int i = 0; i < M * N; i++) myc[i] = 0.0; /* Load and pack stack data for current block from global memory into smem * Get parameter stack entries from index "psp" to "psp + (nrun-1)*npar + 2" * Each triplet indicates the beginning of a submatrix to multiply */ int psp = blockIdx.x * npar * grouping; #pragma unroll 3 for (int i = threadIdx.x; i < nrun; i += threads) { // param_stack is 1-based, convert to 0-based here param_stack_s[i * npar] = __ldg(¶m_stack[psp + i * npar]) - 1; /* value = index in a_data */ param_stack_s[i * npar + 1] = __ldg(¶m_stack[psp + i * npar + 1]) - 1; /* value = index in b_data */ param_stack_s[i * npar + 2] = __ldg(¶m_stack[psp + i * npar + 2]) - 1; /* value = index in c_data */ } /* In each run, we process one stack entry from param_stack_s */ for (int run = 0; run < nrun; run++) { psp = run * npar; syncthreads(); /* Index in a_data, b_data and c_data arrays * indicating where to fetch resp. write back matrix elements for this run * srcA, B, C corresponding to the starting indices (i.e. offsets) of block submatrices to multiply */ int srcA = param_stack_s[psp]; int srcB = param_stack_s[psp + 1]; /* Start off double buffering by loading the first * input slab directly from global into shared memory */ load_gmem_into_smem(&a_data[srcA], buff_l, m * w, threads); load_gmem_into_smem(&b_data[srcB], buff_r, n * w, threads); /* Actual double buffering loop: */ for (int t = 0; t < (k / w - 1) * w; t += w) { syncthreads(); /* load next input slab from global memory into registers * increment block submatrices offset to next input slab */ srcA += m * w; srcB += n * w; load_gmem_into_regs(&a_data[srcA], mya, m * w, threads); load_gmem_into_regs(&b_data[srcB], myb, n * w, threads); /* multiply previous slab, which is stored in shared memory, * and accumulate the results in the registers myc */ multiply(buff_l, buff_r, myc, w, m, n, M, N); /* wait for multiplication to be done before overwriting smem buffers in next step */ syncthreads(); /* copy next slab from registers to shared memory */ load_regs_into_smem(mya, buff_l, m * w, threads); load_regs_into_smem(myb, buff_r, n * w, threads); } syncthreads(); /* If the input slab witdh w is not a divisor of k, * a smaller tail-slab of width wa has to be process */ const int wa = k - (k / w) * w; if (wa != 0) { /* is there a tail-slab? */ /* load tail-slab into registers */ srcA += m * w; srcB += n * w; load_gmem_into_regs(&a_data[srcA], mya, m * wa, threads); load_gmem_into_regs(&b_data[srcB], myb, n * wa, threads); } /* multiply last regular slab, which the loop left in shared memory */ multiply(buff_l, buff_r, myc, w, m, n, M, N); syncthreads(); if (wa != 0) { /* is there a tail-slab? */ /* copy tail-slab from register into shared mem */ load_regs_into_smem(mya, buff_l, m * wa, threads); load_regs_into_smem(myb, buff_r, n * wa, threads); syncthreads(); /* multiply the tail-slab */ multiply(buff_l, buff_r, myc, wa, m, n, M, N); syncthreads(); } /* multiplication for this run done * do we have to flush the result tile? */ if (run == nrun - 1 || param_stack_s[psp + 2] != param_stack_s[psp + 2 + npar]) { int srcC = param_stack_s[psp + 2]; syncthreads(); /* results are written in output-slabs of width v */ for (int t = 0; t < (n / v) * v; t += v) { /* copy output slab from registers to shared memory */ store_results_into_smem(myc, buff, t, v, m, n, M, N); syncthreads(); /* Add our results to the accumulator in global memory */ for (int i = threadIdx.x; i < m * v; i += threads) atomicAdd(&c_data[srcC + i], buff[i]); srcC += m * v; syncthreads(); } /* If the output slab witdh v is not a divisor of n, * a smaller tail-slab of width va has to be process */ const int va = n - (n / v) * v; if (va != 0) { /* is there a tail-slab? */ int t = (n / v) * v; store_results_into_smem(myc, buff, t, va, m, n, M, N); syncthreads(); for (int i = threadIdx.x; i < m * va; i += threads) atomicAdd(&c_data[srcC + i], buff[i]); syncthreads(); } } } } ================================================ FILE: src/acc/libsmm_acc/kernels/smm_acc_dnt_largeDB1.py ================================================ # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### from kernels.smm_acc_dnt_base import Kernel class Kernel_dnt_largeDB1(Kernel): """Kernel 'large double-buffering' 1""" algorithm = "largeDB1" algorithm_num = 1 launch_parameters = [ "m", "n", "k", "tile_m", "tile_n", "w", "v", "threads", "grouping", "minblocks", ] def __init__( self, m, n, k, threads, tile_m, tile_n, w, v, grouping, minblocks, perf, source ): self.m = m self.n = n self.k = k self.tile_m = tile_m self.tile_n = tile_n self.w = w self.v = v self.threads = threads self.grouping = grouping self.minblocks = minblocks self.perf = perf self.source = source assert self.threads * self.minblocks <= 2048 min_threads = ((self.m + self.tile_m - 1) // self.tile_m) * ( (self.n + self.tile_n - 1) // self.tile_n ) assert min_threads <= self.threads assert self.tile_m <= self.v assert self.tile_n <= self.w @property def func_signature(self): return ( "smm_acc_dnt_largeDB1" + "< {m}, {n}, {k}, {tile_m}, {tile_n}, {w}, {v}, {threads}, {grouping}, {minblocks} >;\n".format( **self.__dict__ ) ) @staticmethod def promising_parameters( m, n, k, gpu, autotuning, threads=None, grouping=None, minblocks=None, tile_m=None, tile_n=None, w=None, v=None, ): """ Given a certain (m,n,k)-triplet, GPU properties and autotuning properties, return a list of all possible kernel parameters """ from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple params = [] grouping = 16 for minblocks_ in (1, 2, 4, 8, 12) if minblocks is None else [minblocks]: # for exhaustive search, it should be: range(1, gpu["Thread_Blocks_/_Multiprocessor"] + 1): # but heuristically reduce the search space for threads_ in ( range( gpu["Threads_/_Warp"], gpu["Max_Thread_Block_Size"] + 1, gpu["Threads_/_Warp"], ) if threads is None else [threads] ): if threads_ * minblocks_ > gpu["Threads_/_Multiprocessor"]: continue for tm in range(1, min(12, m + 1)) if tile_m is None else [tile_m]: for tn in range(1, min(12, n + 1)) if tile_n is None else [tile_n]: if tm * tn > 49: continue # heuristic: performance decreases for very large tiles # Number of tiled columns, rows cmax = (n + tn - 1) // tn rmax = (m + tm - 1) // tm # Minimum number of threads required to have one thread per tile, # i.e., cover the result matrix min_threads = cmax * rmax if threads_ < min_threads: continue if min_threads < (threads_ - 32): continue # heuristic: too many threads unused during calculation for w_ in range(4, (k + 1) // 2, 2) if w is None else [w]: # heuristic: even numbers yield better performance if w_ < tn: continue # invalid: input slap too small if 2 * w_ > k: continue # heuristic: do at least one double-buffering step for v_ in range(2, n + 1, 2) if v is None else [v]: # heuristic: even numbers yield better performance if v_ < tm: continue # invalid: output slab too small # Number of registers n_regs = ( tm * tn + (w_ * m + threads_ - 1) // threads_ + (w_ * n + threads_ - 1) // threads_ ) if n_regs * threads_ * minblocks_ > 15000: continue # heuristic: too many registers used # Max work ("operations") which can be run concurrently max_concurrent_work = max( grouping, m * w_, w_ * n, m * v_, cmax * rmax ) if threads_ > round_up_to_nearest_multiple( max_concurrent_work, gpu["Threads_/_Warp"] ): continue # heuristics: too much concurrency harms performance # Shared memory buffer size buf_sz = max( (w_ - 1) * m + rmax * tm, m * w_ + (w_ - 1) * n + cmax * tn, v_ * m, ) smem_tot = ( buf_sz * autotuning["sizeof_double"] + autotuning["npars"] * grouping * autotuning["sizeof_int"] ) if smem_tot > gpu["Max_Shared_Memory_/_Block_(bytes)"]: continue # invalid: uses too much shared memory if ( smem_tot * minblocks_ > gpu["Shared_Memory_/_Multiprocessor_(bytes)"] ): continue # invalid: uses too much shared memory params.append( { "m": m, "n": n, "k": k, "tile_m": tm, "tile_n": tn, "w": w_, "v": v_, "threads": threads_, "grouping": grouping, "minblocks": minblocks_, } ) return params @staticmethod def baseline(m, n, k, gpu, autotuning): """ Given an (m, n, k)-triplet and GPu and autotuning properties, return a set of parameters corresponding to a baseline ("educated guess") of the kernel's optimal parameters """ from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple grouping = 16 minblk = 2 tm = 2 tn = 2 cmax = (n + tn - 1) // tn rmax = (m + tm - 1) // tm min_threads = cmax * rmax w = 8 v = 8 while True: base = { "threads": round_up_to_nearest_multiple(min_threads, 32), "grouping": grouping, "minblocks": minblk, "tile_m": tn, "tile_n": tn, "w": w, "v": v, } if ( len( Kernel_dnt_largeDB1.promising_parameters( m, n, k, gpu, autotuning, **base ) ) > 0 ): break else: if w > 1: w /= 2 else: base = Kernel_dnt_largeDB1.promising_parameters( m, n, k, gpu, autotuning )[0] break base.update( dict( [ ("m", m), ("n", n), ("k", k), ("algorithm", "largeDB1"), ("perf", 0), ("source", "predicted"), ] ) ) return base ================================================ FILE: src/acc/libsmm_acc/kernels/smm_acc_dnt_largeDB2.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ /*****************************************************************************/ /* Authors: Peter Messmer , */ /* Nikolay Markovskiy */ /* Ole Schuett */ /*****************************************************************************/ #include "smm_acc_common.h" namespace ns_smm_acc_dnt_largeDB2 { /****************************************************************************/ __device__ static inline void load_gmem_into_regs( const double* __restrict__ from, double* dest, const int length, const int threads) { const int NR = (length + threads - 1) / threads; int i = threadIdx.x; /* length >= threads, which is usually given for large blocks with medium tile-sizes */ for (int ri = 0; ri < NR - 1; ri++) { /* loop with fixed bounds */ dest[ri] = __ldg(&from[i]); i += threads; } if (i < length) dest[NR - 1] = __ldg(&from[i]); } /****************************************************************************/ __device__ static inline void load_regs_into_smem(double* from, double* dest, const int length, const int threads) { const int NR = (length + threads - 1) / threads; int i = threadIdx.x; /* length >= threads, which is usually given for large blocks with medium tile-sizes */ for (int ri = 0; ri < NR - 1; ri++) { /* loop with fixed bounds */ dest[i] = from[ri]; i += threads; } if (i < length) dest[i] = from[NR - 1]; } /****************************************************************************/ __device__ static inline void multiply( const double* buff_a, const double* buff_b, double* buff_c, const int w, const int m, const int n, const int M, const int N) { /* There might be more threads than needed for the calculation. * Only the first cmax*rmax threads participate in the calculation. */ const int cmax = (n + N - 1) / N; /* max tile-column */ const int rmax = (m + M - 1) / M; /* max tile-row */ const int c = threadIdx.x / rmax; /* this thread's tile-column */ const int r = threadIdx.x - c * rmax; /* this thread's tile-row */ if (c < cmax && r < rmax) /* is this thread participating? */ for (int l = 0; l < w; l++) for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) buff_c[M * i + j] += buff_a[l * m + M * r + j] * buff_b[l * n + N * c + i]; } /****************************************************************************/ __device__ static inline void store_results_into_smem( double* from, double* dest, const int t, const int v, const int m, const int n, const int M, const int N) { const int rmax = (m + M - 1) / M; /* max tile-row */ const int c = threadIdx.x / rmax; /* this thread's tile-column */ const int r = threadIdx.x - c * rmax; /* this thread's tile-row */ const int ctmp = c * N - t; if (t > c * N - v && t <= (c + 1) * N - 1) for (int i = 0; i < N; i++) if (ctmp + i >= 0 && ctmp + i < v) for (int j = 0; j < M; j++) if (M * r + j < m) { dest[(ctmp + i) * m + M * r + j] = from[M * i + j]; from[M * i + j] = 0.0; /* reset result tile */ } } /****************************************************************************/ __device__ static inline void writeback_results( double* from, double* dest, double* buff, const int m, const int n, const int M, const int N, const int v, const int threads) { /* results are written in output-slabs of width v */ for (int t = 0; t < (n / v) * v; t += v) { /* copy output slab from registers to shared memory */ store_results_into_smem(from, buff, t, v, m, n, M, N); syncthreads(); /* Add our results to the accumulator in global memory */ for (int i = threadIdx.x; i < m * v; i += threads) atomicAdd(&dest[i], buff[i]); dest += m * v; syncthreads(); } /* If the output slab width v is not a divisor of n, * a smaller tail-slab of width va has to be process */ const int va = n - (n / v) * v; if (va != 0) { /* is there a tail-slab? */ int t = (n / v) * v; store_results_into_smem(from, buff, t, va, m, n, M, N); syncthreads(); for (int i = threadIdx.x; i < m * va; i += threads) atomicAdd(&dest[i], buff[i]); syncthreads(); } } } // namespace ns_smm_acc_dnt_largeDB2 /****************************************************************************/ /* * Execution configuration: * gridDim.x = (stack_size + (grouping-1))/grouping * blockIdx.x = {0, ..., gridDim.x-1} * blockDim.x = threads * threadIdx.x = {0, ..., threads-1} * Execute sparse matrix-matrix multiplication C += A*B * according to a stack parameter list, decomposed into mutliple block * multiplications c_block += a_block * b_block * c_block, dimension (m x n) * a_block, dimension (m x k) * b_block, dimension (k x n) * Template parameters * --- m, n, k: triplet of integers characterising the block multiplication dimensions * --- M, N: dimensions of the tile T (submatrix of c_block) to compute by one thread * --- w: matrices a_block and b_block are processed (i.e. copied from global memory to shared memory) in slabs of width 'w' * --- v: matrix c_block is written back from registers to smem in slabs of width 'v' * --- threads: number of CUDA threads (in HIP linguo, "work items") this kernel is run with * --- grouping: number of stack parameter entries to process per thread block * --- minblocks: the desired minimum number of resident blocks (in HIP linguo, "workgroup") per multiprocessor (in HIP linguo, "compute units") (used in __launch_bounds__) * Function arguments * --- param_stack: parameter stack array (pointers to global memory): * array of stack entries (index triplets), indicating which elements of * a_data, b_data to multiply and to which element of c_data to add them to * --- stack_size: number of entries (3 integer triplets) in param_stack, * corresponds to the number of block-matrix multiplications to run in total * --- a_data, b_data, c_data (pointers to global memory): * arrays containing the values of matrices A, B, C * Algorithm specificities: * 'DB' stands for double-buffering * In order to limit shared memory utilization (indeed, large shared memory * utilization can limit the number of concurrent thread blocks launched on one * streaming multiprocessor), a_block and b_block are copied to shared memory in * slabs P_a, P_b instead of all at once. * For coalesced writes: slabs of C (P_c with width 'v') are put in shared memory * and only then added to the C in global memory using atomic compare-and-swap */ template __global__ void __launch_bounds__(threads, minblocks) smm_acc_dnt_largeDB2(const int* __restrict__ param_stack, const int stack_size, const double* __restrict__ a_data, const double* __restrict__ b_data, double* c_data) { using namespace ns_smm_acc_dnt_largeDB2; const int mw = m * w; const int wn = w * n; const int wa = k - (k / w) * w; const int npar = 3; const int bidx = blockIdx.x; const int tidx = threadIdx.x; /* Registers to store input slabs during double buffering * If there are too few thread, each thread has to store * multiple elements of the input slabs in its registers. * slab P_a has dimensions (m x w) * slab P_b has dimensions (w x n) * registers are thread-local, so we divide the amount of memory needed to store * the slabs by the number of threads to get the amount of memory that THIS thread needs */ const int mya_size = (mw + threads - 1) / threads; const int myb_size = (wn + threads - 1) / threads; const int buff_tmp = MAX((w - 1) * m + ((m + M - 1) / M) * M, mw + (w - 1) * n + ((n + N - 1) / N) * N); /* v x m = number of elements in P_c */ const int buff_size = MAX(buff_tmp, v * m); /* Registers to buffer/store input slabs P_a, P_b during double-buffering */ double mya[mya_size]; double myb[myb_size]; /* Registers to store the partial result of the tile T of c_block that this thread will compute */ double myc[M * N]; int psp, nrun; int srcA, srcB, srcC; /* Arrays in shared memory * param_stack_s: shared memory buffer containing the stack entries this thread should process * number of stack entries in param_stack_s = grouping, * number of integers per stack entry: 3 */ __shared__ int param_stack_s[npar * grouping]; /* buff: shared memory buffer containing the elements of P_c to be written from regs to smem in slabs */ __shared__ double buff[buff_size]; double* buff_l = buff; /* pointer to the beginning of a_block in buffer */ double* buff_r = &(buff[mw]); /* pointer to the beginning of b_block in buffer */ /* nrun: number of runs: number of stack entries to process in this thread */ nrun = grouping; if (((bidx + 1) * grouping) > stack_size) nrun = stack_size % grouping; /* Set the partial sum (tile T) to zero */ for (int i = 0; i < M * N; i++) myc[i] = 0.0; /* Load and pack stack data for current block from global memory into smem * Get parameter stack entries from index "psp" to "psp + (nrun-1)*npar + 2" * Each triplet indicates the beginning of a submatrix to multiply */ psp = bidx * npar * grouping; #pragma unroll 3 for (int i = tidx; i < nrun; i += threads) { // param_stack is 1-based, convert to 0-based here param_stack_s[i * npar] = __ldg(¶m_stack[psp + i * npar]) - 1; param_stack_s[i * npar + 1] = __ldg(¶m_stack[psp + i * npar + 1]) - 1; param_stack_s[i * npar + 2] = __ldg(¶m_stack[psp + i * npar + 2]) - 1; } syncthreads(); psp = 0; /* Index in a_data, b_data and c_data arrays * indicating where to fetch resp. write back matrix elements for this run * srcA, B, C corresponding to the starting indices (i.e. offsets) of block submatrices to multiply */ srcA = param_stack_s[psp]; srcB = param_stack_s[psp + 1]; /* Start off double buffering by loading the first data from gmem into registers */ load_gmem_into_regs(&a_data[srcA], mya, mw, threads); load_gmem_into_regs(&b_data[srcB], myb, wn, threads); syncthreads(); /* In each run, we process one stack entry from param_stack_s */ for (int run = 0; run < nrun; run++) { /* load first data for run from regs to smem */ load_regs_into_smem(mya, buff_l, mw, threads); load_regs_into_smem(myb, buff_r, wn, threads); syncthreads(); /* Actual double buffering loop: */ for (int t = 0; t < (k / w - 1) * w; t += w) { /* load next input slab from global memory into registers */ srcA += mw; srcB += wn; load_gmem_into_regs(&a_data[srcA], mya, mw, threads); load_gmem_into_regs(&b_data[srcB], myb, wn, threads); /* multiply previous slab, which is stored in shared memory, * and accumulate the results in the registers myc */ multiply(buff_l, buff_r, myc, w, m, n, M, N); syncthreads(); /* copy next slab from registers to shared memory */ load_regs_into_smem(mya, buff_l, mw, threads); load_regs_into_smem(myb, buff_r, wn, threads); syncthreads(); } if (wa != 0) { /* is there a tail-slab? */ /* If the input slab witdh w is not a divisor of k, * a smaller tail-slab of width wa has to be process * load tail-slab into registers */ srcA += mw; srcB += wn; load_gmem_into_regs(&a_data[srcA], mya, m * wa, threads); load_gmem_into_regs(&b_data[srcB], myb, n * wa, threads); /* multiply last regular slab, which the loop left in shared memory */ multiply(buff_l, buff_r, myc, w, m, n, M, N); syncthreads(); /* copy tail-slab from register into shared mem */ load_regs_into_smem(mya, buff_l, m * wa, threads); load_regs_into_smem(myb, buff_r, n * wa, threads); syncthreads(); } psp += npar; if (run < nrun - 1) { /* If this is not the last run */ /* get the offsets for the a-block and the b-block from the stack */ srcA = param_stack_s[psp]; srcB = param_stack_s[psp + 1]; /* load the data for the next iteration of the loop */ load_gmem_into_regs(&a_data[srcA], mya, mw, threads); load_gmem_into_regs(&b_data[srcB], myb, wn, threads); } if (wa != 0) { /* is there a tail-slab? */ /* multiply the tail-slab */ multiply(buff_l, buff_r, myc, wa, m, n, M, N); } else { /* multiply last regular slab, which the loop left in shared memory */ multiply(buff_l, buff_r, myc, w, m, n, M, N); } syncthreads(); /* multiplication for this run done * do we have to flush the result tile? */ if (run == nrun - 1 || param_stack_s[psp - 1] != param_stack_s[psp + 2]) { srcC = param_stack_s[psp - 1]; writeback_results(myc, &c_data[srcC], buff, m, n, M, N, v, threads); } } } ================================================ FILE: src/acc/libsmm_acc/kernels/smm_acc_dnt_largeDB2.py ================================================ # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### from kernels.smm_acc_dnt_base import Kernel class Kernel_dnt_largeDB2(Kernel): """Kernel 'large double-buffering' 2""" algorithm = "largeDB2" algorithm_num = 2 launch_parameters = [ "m", "n", "k", "tile_m", "tile_n", "w", "v", "threads", "grouping", "minblocks", ] def __init__( self, m, n, k, threads, tile_m, tile_n, w, v, grouping, minblocks, perf, source ): self.m = m self.n = n self.k = k self.tile_m = tile_m self.tile_n = tile_n self.w = w self.v = v self.threads = threads self.grouping = grouping self.minblocks = minblocks self.perf = perf self.source = source assert self.threads * self.minblocks <= 2048 min_threads = ((self.m + self.tile_m - 1) // self.tile_m) * ( (self.n + self.tile_n - 1) // self.tile_n ) assert min_threads <= self.threads assert self.tile_m <= self.v assert self.tile_n <= self.w @property def func_signature(self): return ( "smm_acc_dnt_largeDB2" + "< {m}, {n}, {k}, {tile_m}, {tile_n}, {w}, {v}, {threads}, {grouping}, {minblocks} >;\n".format( **self.__dict__ ) ) @staticmethod def promising_parameters( m, n, k, gpu, autotuning, threads=None, grouping=None, minblocks=None, tile_m=None, tile_n=None, w=None, v=None, ): """ Given a certain (m,n,k)-triplet, GPU properties and autotuning properties, return a list of all possible kernel parameters """ from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple params = [] grouping = 16 for minblocks_ in (1, 2, 4, 8, 12) if minblocks is None else [minblocks]: # for exhaustive search, it should be: range(1, gpu.maxBLOCKSperSM + 1): # but heuristically reduce the search space for threads_ in ( range( gpu["Threads_/_Warp"], gpu["Max_Thread_Block_Size"] + 1, gpu["Threads_/_Warp"], ) if threads is None else [threads] ): if threads_ * minblocks_ > gpu["Threads_/_Multiprocessor"]: continue for tm in range(1, min(12, m + 1)) if tile_m is None else [tile_m]: for tn in range(1, min(12, n + 1)) if tile_n is None else [tile_n]: if tm * tn > 49: continue # heuristic: performance decreases for very large tiles # Number of tiled columns, rows cmax = (n + tn - 1) // tn rmax = (m + tm - 1) // tm # Minimum number of threads required to have one thread per tile # i.e., cover the result matrix min_threads = cmax * rmax if threads_ < min_threads: continue if min_threads < (threads_ - 32): continue # heuristic: too many threads unused during calculation for w_ in range(4, (k + 1) // 2, 2) if w is None else [w]: # heuristic: even numbers yield better performance if w_ < tn: continue # invalid: input slap too small if 2 * w_ > k: continue # heuristic: do at least one double-buffering step for v_ in range(4, n + 1, 2) if v is None else [v]: # heuristic: even numbers yield better performance if v_ < tm: continue # invalid: output slab too small # Number of registers n_regs = ( tm * tn + (w_ * m + threads_ - 1) // threads_ + (w_ * n + threads_ - 1) // threads_ ) if n_regs * threads_ * minblocks_ > 15000: continue # heuristic: too many registers used # Max work ("operations") which can be run concurrently max_concurrent_work = max( grouping, m * w_, w_ * n, m * v_, cmax * rmax ) if threads_ > round_up_to_nearest_multiple( max_concurrent_work, gpu["Threads_/_Warp"] ): continue # heuristics: too much concurrency harms performance # Shared memory buffer size buf_sz = max( (w_ - 1) * m + rmax * tm, m * w_ + (w_ - 1) * n + cmax * tn, v_ * m, ) smem_tot = ( buf_sz * autotuning["sizeof_double"] + autotuning["npars"] * grouping * autotuning["sizeof_int"] ) if smem_tot > gpu["Max_Shared_Memory_/_Block_(bytes)"]: continue # invalid: uses too much shared memory if ( smem_tot * minblocks_ > gpu["Shared_Memory_/_Multiprocessor_(bytes)"] ): continue # invalid: uses too much shared memory params.append( { "m": m, "n": n, "k": k, "tile_m": tm, "tile_n": tn, "w": w_, "v": v_, "threads": threads_, "grouping": grouping, "minblocks": minblocks_, } ) return params @staticmethod def baseline(m, n, k, gpu, autotuning): """ Given an (m, n, k)-triplet and GPu and autotuning properties, return a set of parameters corresponding to a baseline ("educated guess") of the kernel's optimal parameters """ from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple grouping = 16 minblk = 2 tm = 2 tn = 2 cmax = (n + tn - 1) // tn rmax = (m + tm - 1) // tm min_threads = cmax * rmax w = 8 v = 8 while True: base = { "threads": round_up_to_nearest_multiple(min_threads, 32), "grouping": grouping, "minblocks": minblk, "tile_m": tn, "tile_n": tn, "w": w, "v": v, } if ( len( Kernel_dnt_largeDB2.promising_parameters( m, n, k, gpu, autotuning, **base ) ) > 0 ): break else: if w > 1: w /= 2 else: base = Kernel_dnt_largeDB2.promising_parameters( m, n, k, gpu, autotuning )[0] break base.update( dict( [ ("m", m), ("n", n), ("k", k), ("algorithm", "largeDB2"), ("perf", 0), ("source", "predicted"), ] ) ) return base ================================================ FILE: src/acc/libsmm_acc/kernels/smm_acc_dnt_medium.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ /*****************************************************************************/ /* Authors: Peter Messmer , */ /* Nikolay Markovskiy */ /* Simplified, cleanup & refacture: Based on 'cusmm_dnt_small.h' */ /* Andreas Gloess */ /* */ /*****************************************************************************/ #include "smm_acc_common.h" /* * Execution configuration: * gridDim.x = (stack_size + (grouping-1))/grouping * blockIdx.x = {0, ..., gridDim.x-1} * blockDim.x = threads * threadIdx.x = {0, ..., threads-1} * Execute sparse matrix-matrix multiplication C += A*B * according to a stack parameter list, decomposed into mutliple block * multiplications c_block += a_block * b_block * c_block, dimension (m x n) * a_block, dimension (m x k) * b_block, dimension (k x n) * Template parameters * --- m, n, k: triplet of integers characterising the block multiplication dimensions * --- M, N: dimensions of the tile T (submatrix of c_block) to compute with one thread * --- threads: number of CUDA threads (in HIP linguo, "work items") this kernel is run with * --- grouping: number of stack parameter entries to process per thread block * --- minblocks: the desired minimum number of resident blocks (in HIP linguo, "workgroup") per multiprocessor (in HIP linguo, "compute units") (used in __launch_bounds__) * Function arguments * --- param_stack: parameter stack array (pointers to global memory): * array of stack entries (index triplets), indicating which elements of * a_data, b_data to multiply and to which element of c_data to add them to * --- stack_size: number of entries (3 integer triplets) in param_stack, * corresponds to the number of block-matrix multiplications to run in total * --- a_data, b_data, c_data (pointers to global memory): * arrays containing the values of matrices A, B, C * Algorithm specificities: * - a_block and b_block are not copied directly from global memory to shared memory, * but rather via registers */ template __global__ void __launch_bounds__(threads, minblocks) smm_acc_dnt_medium(const int* __restrict__ param_stack, int stack_size, const double* __restrict__ a_data, const double* __restrict__ b_data, double* c_data) { /* Total number of elements in block matrices */ const int mn = m * n; /* c_block */ const int mk = m * k; /* a_block */ const int kn = n * k; /* b_block */ /* Block and thread index */ const int bidx = blockIdx.x; const int tidx = threadIdx.x; /* Number of columns and rows used to divide c_block into tiles */ const int cmax = (n % N == 0) ? n / N : n / N + 1; const int rmax = (m % M == 0) ? m / M : m / M + 1; /* buff_l and buff_r can overlap in the multiplication step * (still better than 'if' in inner loop, see ^ref1) */ const int buf_tmp = (mk + k * N * cmax < M * rmax * k + 1) ? M * rmax * k + 1 : mk + k * N * cmax; const int buf_sz = (buf_tmp < mn) ? mn : buf_tmp; /* Column and row starting index of the tile T this thread will compute * Each thread computes all elements of one tile T */ const int c = tidx / rmax; const int r = tidx - rmax * c; /* Number of loads to perform by each thread in order to load matrices a_block, b_block into shared memory */ const int load_unroll_factor_1 = mk / threads + 1; const int load_unroll_factor_2 = kn / threads + 1; const int n_mkloads = mk / (load_unroll_factor_1 * threads); const int n_knloads = kn / (load_unroll_factor_2 * threads); /* Remainder */ const int mkloads_remained = (mk - n_mkloads * load_unroll_factor_1 * threads) / threads; const int knloads_remained = (kn - n_knloads * load_unroll_factor_2 * threads) / threads; /* ... */ const int mkloads_tail = ((mkloads_remained + n_mkloads * load_unroll_factor_1) * threads == mk) ? 0 : 1; const int knloads_tail = ((knloads_remained + n_knloads * load_unroll_factor_2) * threads == kn) ? 0 : 1; /* ... */ const int m_loads_to_finish = n_mkloads * (load_unroll_factor_1 * threads) + mkloads_remained * threads; const int n_loads_to_finish = n_knloads * (load_unroll_factor_2 * threads) + knloads_remained * threads; const int left_to_finish_1 = m_loads_to_finish + tidx; const int left_to_finish_2 = n_loads_to_finish + tidx; /* Number of parameters per stack entry in parameter stack */ const int npar = 3; /* If multiple warps (in HIP linguo, "wavefronts") are running a single block multiplication, * synchronization is needed */ const bool need_sync = (mn > warpSize || mk > warpSize || kn > warpSize || threads > warpSize); /* Partial result of the tile T of c_block that this thread will compute */ /* Registers */ double myc[N * M]; /* ... */ double lba_r[load_unroll_factor_1 + mkloads_remained + mkloads_tail]; double lbb_r[load_unroll_factor_2 + knloads_remained + knloads_tail]; /* ... */ const double* __restrict__ buff_l; const double* __restrict__ buff_r; /* psp: parameter stack position: * index in the parameter stack of the first parameter stack entry to be processed by this thread * nrun: number of runs: number of stack entries to process in this thread */ int psp, nrun; bool is_loaded = false; /* Arrays in shared memory *(common to all threads in a thread block, but different from thread-block to thread-block): * param_stack_s: shared memory buffer containing the stack entries this thread should process * number of stack entries in param_stack_s = grouping, * number of integers per stack entry: 3 */ __shared__ int param_stack_s[npar * grouping]; /* buff: shared memory buffer containing a_block (block submatrix of A) and b_block to multiply */ __shared__ double buff[buf_sz]; buff_l = buff; /* pointer to the beginning of a_block in buffer */ buff_r = &(buff[mk]); /* pointer to the beginning of b_block in buffer */ /* Set the number of runs (i.e. how many stack entries to process in this thread) * If the current block is the last block set the number of stack entries to process in * this thread to the remainder of stack_size / grouping */ nrun = grouping; if (((bidx + 1) * grouping) > stack_size) nrun = stack_size % grouping; /* Set the partial sum (tile T) to zero */ /* WHY NO PRAGMA UNROLL ???? */ for (int i = 0; i < M * N; i++) myc[i] = 0.0; /* Load and pack stack data for current block from global memory into smem * Get parameter stack entries from index "psp" to "psp + (nrun-1)*npar + 2" * Each triplet indicates the beginning of a submatrix to multiply */ psp = bidx * npar * grouping; #pragma unroll 3 for (int i = tidx; i < nrun; i += threads) { // param_stack is 1-based, convert to 0-based here param_stack_s[i * npar] = __ldg(¶m_stack[psp + i * npar]) - 1; /* value = index in a_data */ param_stack_s[i * npar + 1] = __ldg(¶m_stack[psp + i * npar + 1]) - 1; /* value = index in b_data */ param_stack_s[i * npar + 2] = __ldg(¶m_stack[psp + i * npar + 2]) - 1; /* value = index in c_data */ } /* Wait until all the data has been loaded */ if (need_sync) syncthreads(); /* In each run, we process one stack entry from param_stack_s */ for (int run = 0; run < nrun; run++) { /* Index in shared memory buffers to read from */ psp = run * npar; int srcA, srcB; if (!is_loaded) { /* If a_block, b_block are not loaded into registers yet */ /* Index in a_data, b_data and c_data arrays * indicating where to fetch resp. write back matrix elements for this run * srcA, B, C corresponding to the starting indices (i.e. offsets) of block submatrices to multiply */ srcA = param_stack_s[psp]; srcB = param_stack_s[psp + 1]; /* Copy a_block, b_block from global memory to registers */ if (m == n) { #pragma unroll 3 for (int i = tidx; i < n_mkloads * (load_unroll_factor_1 * threads); i += load_unroll_factor_1 * threads) { #pragma unroll for (int l = 0; l < load_unroll_factor_1; l++) { lba_r[l] = __ldg(&a_data[srcA + i + l * threads]); lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]); } } #pragma unroll 3 for (int i = n_mkloads * (load_unroll_factor_1 * threads) + tidx; i < m_loads_to_finish; i += mkloads_remained * threads) { #pragma unroll for (int l = 0; l < mkloads_remained; l++) { lba_r[l] = __ldg(&a_data[srcA + i + l * threads]); lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]); } } if (left_to_finish_1 < mk) { lba_r[load_unroll_factor_1 + mkloads_remained] = __ldg(&a_data[srcA + left_to_finish_1]); lbb_r[load_unroll_factor_2 + knloads_remained] = __ldg(&b_data[srcB + left_to_finish_2]); } } else { #pragma unroll 3 for (int i = tidx; i < n_mkloads * (load_unroll_factor_1 * threads); i += load_unroll_factor_1 * threads) { #pragma unroll for (int l = 0; l < load_unroll_factor_1; l++) { lba_r[l] = __ldg(&a_data[srcA + i + l * threads]); } } #pragma unroll 3 for (int i = tidx; i < n_knloads * (load_unroll_factor_2 * threads); i += load_unroll_factor_2 * threads) { #pragma unroll for (int l = 0; l < load_unroll_factor_2; l++) { lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]); } } #pragma unroll 3 for (int i = n_mkloads * (load_unroll_factor_1 * threads) + tidx; i < m_loads_to_finish; i += mkloads_remained * threads) { #pragma unroll for (int l = 0; l < mkloads_remained; l++) { lba_r[l] = __ldg(&a_data[srcA + i + l * threads]); } } #pragma unroll 3 for (int i = n_knloads * (load_unroll_factor_2 * threads) + tidx; i < n_loads_to_finish; i += knloads_remained * threads) { #pragma unroll for (int l = 0; l < knloads_remained; l++) { lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]); } } if (left_to_finish_1 < mk) lba_r[load_unroll_factor_1 + mkloads_remained] = __ldg(&a_data[srcA + left_to_finish_1]); if (left_to_finish_2 < kn) lbb_r[load_unroll_factor_2 + knloads_remained] = __ldg(&b_data[srcB + left_to_finish_2]); } /* Wait until all the data has been loaded to registers */ syncthreads(); } else { is_loaded = false; } /* Copy a_block, b_block from registers to shared memory */ if (m == n) { #pragma unroll 3 for (int i = n_mkloads * (load_unroll_factor_1 * threads) + tidx; i < m_loads_to_finish; i += mkloads_remained * threads) { #pragma unroll for (int l = 0; l < mkloads_remained; l++) { buff[i + l * threads] = lba_r[l]; buff[i + mk + l * threads] = lbb_r[l]; } } #pragma unroll 3 for (int i = tidx; i < n_mkloads * (load_unroll_factor_1 * threads); i += load_unroll_factor_1 * threads) { #pragma unroll for (int l = 0; l < load_unroll_factor_1; l++) { buff[i + l * threads] = lba_r[l]; buff[i + mk + l * threads] = lbb_r[l]; } } if (left_to_finish_1 < mk) { buff[left_to_finish_1] = lba_r[load_unroll_factor_1 + mkloads_remained]; buff[mk + left_to_finish_2] = lbb_r[load_unroll_factor_2 + knloads_remained]; } } else { #pragma unroll 3 for (int i = n_mkloads * (load_unroll_factor_1 * threads) + tidx; i < m_loads_to_finish; i += mkloads_remained * threads) { #pragma unroll for (int l = 0; l < mkloads_remained; l++) { buff[i + l * threads] = lba_r[l]; } } #pragma unroll 3 for (int i = n_knloads * (load_unroll_factor_2 * threads) + tidx; i < n_loads_to_finish; i += knloads_remained * threads) { #pragma unroll for (int l = 0; l < knloads_remained; l++) { buff[i + mk + l * threads] = lbb_r[l]; } } #pragma unroll 3 for (int i = tidx; i < n_mkloads * (load_unroll_factor_1 * threads); i += load_unroll_factor_1 * threads) { #pragma unroll for (int l = 0; l < load_unroll_factor_1; l++) { buff[i + l * threads] = lba_r[l]; } } #pragma unroll 3 for (int i = tidx; i < n_knloads * (load_unroll_factor_2 * threads); i += load_unroll_factor_2 * threads) { #pragma unroll for (int l = 0; l < load_unroll_factor_2; l++) { buff[i + mk + l * threads] = lbb_r[l]; } } if (left_to_finish_1 < mk) buff[left_to_finish_1] = lba_r[load_unroll_factor_1 + mkloads_remained]; if (left_to_finish_2 < kn) buff[mk + left_to_finish_2] = lbb_r[load_unroll_factor_2 + knloads_remained]; } /* Wait until all the data has been loaded to shared memory */ if (need_sync) syncthreads(); int next_run = run + 1; if (next_run >= nrun) is_loaded = true; if (!is_loaded || (run == 0 && nrun > 1)) { /* Next parameter stack position */ int next_psp = next_run * npar; /* Index in a_data, b_data and c_data arrays * indicating where to fetch resp. write back matrix elements for this run * srcA, B, C corresponding to the strting indices of block submatrices to multiply */ srcA = param_stack_s[next_psp]; srcB = param_stack_s[next_psp + 1]; /* Buffering: copy the input data for the next run from global memory to registers */ if (m == n) { #pragma unroll 3 for (int i = tidx; i < n_mkloads * (load_unroll_factor_1 * threads); i += load_unroll_factor_1 * threads) { #pragma unroll for (int l = 0; l < load_unroll_factor_1; l++) { lba_r[l] = __ldg(&a_data[srcA + i + l * threads]); lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]); } } #pragma unroll 3 for (int i = n_mkloads * (load_unroll_factor_1 * threads) + tidx; i < m_loads_to_finish; i += mkloads_remained * threads) { #pragma unroll for (int l = 0; l < mkloads_remained; l++) { lba_r[l] = __ldg(&a_data[srcA + i + l * threads]); lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]); } } if (left_to_finish_1 < mk) { lba_r[load_unroll_factor_1 + mkloads_remained] = __ldg(&a_data[srcA + left_to_finish_1]); lbb_r[load_unroll_factor_2 + knloads_remained] = __ldg(&b_data[srcB + left_to_finish_2]); } } else { #pragma unroll 3 for (int i = tidx; i < n_mkloads * (load_unroll_factor_1 * threads); i += load_unroll_factor_1 * threads) { #pragma unroll for (int l = 0; l < load_unroll_factor_1; l++) { lba_r[l] = __ldg(&a_data[srcA + i + l * threads]); } } #pragma unroll 3 for (int i = tidx; i < n_knloads * (load_unroll_factor_2 * threads); i += load_unroll_factor_2 * threads) { #pragma unroll for (int l = 0; l < load_unroll_factor_2; l++) { lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]); } } #pragma unroll 3 for (int i = n_mkloads * (load_unroll_factor_1 * threads) + tidx; i < m_loads_to_finish; i += mkloads_remained * threads) { #pragma unroll for (int l = 0; l < mkloads_remained; l++) { lba_r[l] = __ldg(&a_data[srcA + i + l * threads]); } } #pragma unroll 3 for (int i = n_knloads * (load_unroll_factor_2 * threads) + tidx; i < n_loads_to_finish; i += knloads_remained * threads) { #pragma unroll for (int l = 0; l < knloads_remained; l++) { lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]); } } if (left_to_finish_1 < mk) lba_r[load_unroll_factor_1 + mkloads_remained] = __ldg(&a_data[srcA + left_to_finish_1]); if (left_to_finish_2 < kn) lbb_r[load_unroll_factor_2 + knloads_remained] = __ldg(&b_data[srcB + left_to_finish_2]); } is_loaded = true; } /* Do actual multiplication. */ if (c < cmax && r < rmax) { for (int l = 0; l < k; l++) { /* Loop over all elements c_ij of tile T */ for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { /* Compute c_ij = sum_k (a_ik * b_kj) in shared memory */ myc[N * i + j] += buff_l[l * m + M * r + i] * buff_r[l * n + N * c + j]; } } } } if (run == nrun - 1 || param_stack_s[psp + 2] != param_stack_s[psp + 2 + npar]) { /* Index in c_data indicating where to write back matrix elements for this run */ int srcC = param_stack_s[psp + 2]; if (M > 1 || N > 1) { if (need_sync) syncthreads(); /* Decompress results to buffer and set tile elements back to 0 */ if (c < cmax && r < rmax) { for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { if (M * r + i < m && N * c + j < n) { buff[(N * c + j) * m + M * r + i] = myc[N * i + j]; myc[N * i + j] = 0.0; } } } } if (need_sync) syncthreads(); /* Add results from shared memory buffer to global C block. */ #pragma unroll for (int i = tidx; i < mn; i += threads) { atomicAdd(&c_data[srcC + i], buff[i]); } } else { /* Add results from registers to global C block. */ #pragma unroll for (int i = tidx; i < mn; i += threads) { atomicAdd(&c_data[srcC + i], myc[0]); } myc[0] = 0.0; } } if (need_sync) syncthreads(); } } ================================================ FILE: src/acc/libsmm_acc/kernels/smm_acc_dnt_medium.py ================================================ # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### from kernels.smm_acc_dnt_base import Kernel class Kernel_dnt_medium(Kernel): algorithm = "medium" algorithm_num = 3 launch_parameters = [ "m", "n", "k", "tile_m", "tile_n", "threads", "grouping", "minblocks", ] def __init__( self, m, n, k, threads, tile_m, tile_n, grouping, minblocks, perf, source ): self.m = m self.n = n self.k = k self.tile_m = tile_m self.tile_n = tile_n self.threads = threads self.grouping = grouping self.minblocks = minblocks self.perf = perf self.source = source assert self.threads * self.minblocks <= 2048 min_threads = ((self.m + self.tile_m - 1) // self.tile_m) * ( (self.n + self.tile_n - 1) // self.tile_n ) assert min_threads <= self.threads @property def func_signature(self): return ( "smm_acc_dnt_medium" + "<{m}, {n}, {k}, {tile_m}, {tile_n}, {threads}, {grouping}, {minblocks} >;\n".format( **self.__dict__ ) ) @staticmethod def promising_parameters( m, n, k, gpu, autotuning, threads=None, grouping=None, minblocks=None, tile_m=None, tile_n=None, w=None, v=None, ): """ Given a certain (m,n,k)-triplet, GPU properties and autotuning properties, return a list of all possible kernel parameters """ from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple params = [] for minblocks_ in range(1, 28) if minblocks is None else [minblocks]: # for exhaustive search: range(1, gpu["Thread_Blocks_/_Multiprocessor"] + 1): # heuristic: the optimal minblocks is never > 28 for grouping_ in range(1, 32 + 1, 1) if grouping is None else [grouping]: if m >= 28 and grouping_ not in (3, 4, 5, 24, 26, 29, 32): continue # heuristic: investigate a smaller search space of grouping for large matrices for tm in ( range(1, min(12, m) + 1) if tile_m is None else [tile_m] ): # heuristic: the optimal tile_m is never above 12 for tn in ( range(1, min(12, n) + 1) if tile_n is None else [tile_n] ): # heuristic: the optimal tile_m is never above 12 if tm * tn > 16: continue # heuristic: performance decreases for very large tiles # Number of tiled columns, rows cmax = (n + tn - 1) // tn rmax = (m + tm - 1) // tm # Max work ("operations") which can be run concurrently max_concurrent_work = max( grouping_, m * k, k * n, m * n, cmax * rmax ) # Minimum number of threads required to have one thread per tile # i.e., cover the result matrix min_threads = cmax * rmax # Shared memory buffer size buf_sz = max(m * n, m * k + k * tn * cmax, tm * rmax * k + 1) smem_tot = ( buf_sz * autotuning["sizeof_double"] + autotuning["npars"] * grouping_ * autotuning["sizeof_int"] ) if smem_tot > gpu["Max_Shared_Memory_/_Block_(bytes)"]: continue if ( smem_tot * minblocks_ > gpu["Shared_Memory_/_Multiprocessor_(bytes)"] ): continue # Use all concurrency available: fill warps for threads_ in ( range( gpu["Threads_/_Warp"], gpu["Max_Thread_Block_Size"] + 1, gpu["Threads_/_Warp"], ) if threads is None else [threads] ): if threads_ > round_up_to_nearest_multiple( max_concurrent_work, gpu["Threads_/_Warp"] ): continue # soft: too much concurrency harms performance if threads_ * minblocks_ > gpu["Threads_/_Multiprocessor"]: continue if threads_ < min_threads: continue params.append( { "m": m, "n": n, "k": k, "tile_m": tm, "tile_n": tn, "threads": threads_, "grouping": grouping_, "minblocks": minblocks_, } ) return params @staticmethod def baseline(m, n, k, gpu, autotuning): """ Given an (m, n, k)-triplet and GPu and autotuning properties, return a set of parameters corresponding to a baseline ("educated guess") of the kernel's optimal parameters """ from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple grp = 16 minblk = 2 tm = 2 tn = 2 cmax = (n + tn - 1) // tn rmax = (m + tm - 1) // tm min_threads = cmax * rmax while True: base = { "threads": round_up_to_nearest_multiple(min_threads, 32), "grouping": grp, "minblocks": minblk, "tile_m": tn, "tile_n": tn, "w": float("nan"), "v": float("nan"), } if ( len( Kernel_dnt_medium.promising_parameters( m, n, k, gpu, autotuning, **base ) ) > 0 ): break else: grp -= 1 if grp == 0: base = Kernel_dnt_medium.promising_parameters( m, n, k, gpu, autotuning )[0] base.update(dict([("w", float("nan")), ("v", float("nan"))])) break base.update( dict( [ ("m", m), ("n", n), ("k", k), ("algorithm", "medium"), ("perf", 0), ("source", "predicted"), ] ) ) return base ================================================ FILE: src/acc/libsmm_acc/kernels/smm_acc_dnt_small.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ /*****************************************************************************/ /* Authors: Peter Messmer , */ /* Nikolay Markovskiy */ /* Simplified, cleanup & refacture: Based on 'cusmm_dnt_small.h' */ /* Andreas Gloess */ /* */ /*****************************************************************************/ #include "smm_acc_common.h" /* * Execution configuration: * gridDim.x = (stack_size + (grouping-1))/grouping * blockIdx.x = {0, ..., gridDim.x-1} * blockDim.x = threads * threadIdx.x = {0, ..., threads-1} * Execute sparse matrix-matrix multiplication C += A*B * according to a stack parameter list, decomposed into mutliple block * multiplications c_block += a_block * b_block * c_block, dimension (m x n) * a_block, dimension (m x k) * b_block, dimension (k x n) * Template parameters * --- m, n, k: triplet of integers characterising the block multiplication dimensions * --- M, N: dimensions of the tile T (submatrix of c_block) to compute with one thread * --- threads: number of CUDA threads (in HIP linguo, "work items") this kernel is run with * --- grouping: number of stack parameter entries to process per thread block * --- minblocks: the desired minimum number of resident blocks (in HIP linguo, "workgroup") per multiprocessor (in HIP linguo, "compute units") (used in __launch_bounds__) * Function arguments * --- param_stack: parameter stack array (pointers to global memory): * array of stack entries (index triplets), indicating which elements of * a_data, b_data to multiply and to which element of c_data to add them to * --- stack_size: number of entries (3 integer triplets) in param_stack, * corresponds to the number of block-matrix multiplications to run in total * --- a_data, b_data, c_data (pointers to global memory): * arrays containing the values of matrices A, B, C * Algorithm specificities: * - each thread computes a tile T (of size tile_m * tile_n) of c_block, in order to increase * ILP per thread and given the large number of registers allowed per thread. * - the result tiles do not need to be shared between threads, it is therefore stored in registers * - T get decompressed to shared memory buffer before being written back to global memory via an atomic add */ template __global__ void __launch_bounds__(threads, minblocks) smm_acc_dnt_small(const int* __restrict__ param_stack, int stack_size, const double* __restrict__ a_data, const double* __restrict__ b_data, double* c_data) { /* Total number of elements in block matrices */ const int mn = m * n; /* c_block */ const int mk = m * k; /* a_block */ const int kn = n * k; /* b_block */ /* Block and thread index */ const int bidx = blockIdx.x; const int tidx = threadIdx.x; /* Number of columns and rows used to divide c_block into tiles */ const int cmax = (n % N == 0) ? n / N : n / N + 1; const int rmax = (m % M == 0) ? m / M : m / M + 1; /* buff_l and buff_r can overlap in the multiplication step * (still better than 'if' in inner loop, see ^ref1) */ const int buf_tmp = (mk + k * N * cmax < M * rmax * k + 1) ? M * rmax * k + 1 : mk + k * N * cmax; const int buf_sz = (buf_tmp < mn) ? mn : buf_tmp; /* Column and row starting index of the tile T this thread will compute * Each thread computes all elements of one tile T */ const int c = tidx / rmax; const int r = tidx - c * rmax; /* Number of parameters per stack entry in parameter stack */ const int npar = 3; /* If multiple warps (in HIP linguo, "wavefronts") are running a single block multiplication, * synchronization is needed */ const bool need_sync = (mn > warpSize || mk > warpSize || kn > warpSize || threads > warpSize); /* psp: parameter stack position: * index in the parameter stack of the first parameter stack entry to be processed by this thread * nrun: number of runs: number of stack entries to process in this thread */ int nrun, psp; /* Partial sum of the tile T of block_c that this thread will compute */ double myc[M * N]; /* Arrays in shared memory *(common to all threads in a thread block, but different from thread-block to thread-block): * param_stack_s: shared memory buffer containing the stack entries this thread should process * number of stack entries in param_stack_s = grouping, * number of integers per stack entry: 3 */ __shared__ int param_stack_s[npar * grouping]; /* buff: shared memory buffer containing a_block (block submatrix of A) and b_block to multiply * and to which c-results are decompressed */ __shared__ double buff[buf_sz]; double* buff_l = buff; /* pointer to the beginning of a_block in buffer */ double* buff_r = &buff[mk]; /* pointer to the beginning of b_block in buffer */ /* Set the number of runs (i.e. how many stack entries to process in this thread) * If the current block is the last block set the number of stack entries to process in * this thread to the remainder of stack_size / grouping */ nrun = grouping; if (((bidx + 1) * grouping) > stack_size) nrun = stack_size % grouping; /* Set the partial sum (tile T) to zero */ #pragma unroll for (int i = 0; i < M * N; i++) myc[i] = 0.0; /* Load and pack stack data for current block from global memory into shared memory * Get parameter stack entries from index "psp" to "psp + (nrun-1)*npar + 2" * Each triplet indicates the beginning of a submatrix to multiply */ psp = bidx * npar * grouping; #pragma unroll for (int i = tidx; i < nrun; i += threads) { // param_stack is 1-based, convert to 0-based here param_stack_s[i * npar] = __ldg(¶m_stack[psp + i * npar]) - 1; /* value = index in a_data */ param_stack_s[i * npar + 1] = __ldg(¶m_stack[psp + i * npar + 1]) - 1; /* value = index in b_data */ param_stack_s[i * npar + 2] = __ldg(¶m_stack[psp + i * npar + 2]) - 1; /* value = index in c_data */ } /* Wait until all the data has been loaded */ if (need_sync) syncthreads(); /* In each run, we process one stack entry from param_stack_s */ for (int run = 0; run < nrun; run++) { /* Index in shared memory buffers to read from */ psp = run * npar; /* Index in a_data, b_data and c_data arrays * indicating where to fetch resp. write back matrix elements for this run * srcA, B, C corresponding to the strting indices of block submatrices to multiply */ int srcA = param_stack_s[psp]; int srcB = param_stack_s[psp + 1]; int srcC = param_stack_s[psp + 2]; /* Load block matrices a_block and b_block for current block and stack into smem */ if (m == n) { #pragma unroll for (int i = tidx; i < mk; i += threads) { buff_l[i] = __ldg(&a_data[srcA + i]); buff_r[i] = __ldg(&b_data[srcB + i]); } } else { #pragma unroll for (int i = tidx; i < mk; i += threads) { buff_l[i] = __ldg(&a_data[srcA + i]); } #pragma unroll for (int i = tidx; i < kn; i += threads) { buff_r[i] = __ldg(&b_data[srcB + i]); } } /* Wait until all the data has been loaded */ if (need_sync) syncthreads(); /* Do actual multiplication. */ if (c < cmax && r < rmax) { for (int l = 0; l < k; l++) { /* Loop over all elements c_ij of tile T */ #pragma unroll for (int i = 0; i < N; i++) { #pragma unroll for (int j = 0; j < M; j++) { /* Compute c_ij = sum_k (a_ik * b_kj) in shared memory */ myc[M * i + j] += buff_l[l * m + M * r + j] * buff_r[l * n + N * c + i]; } } } } /* last loop or C_idx for next stack entry is different */ if ((run == (nrun - 1)) || (srcC != param_stack_s[psp + 2 + npar])) { if ((M > 1) || (N > 1)) { if (need_sync) syncthreads(); /* Decompress results to buffer and set tile elements back to 0 */ if (c < cmax && r < rmax) { #pragma unroll for (int i = 0; i < N; i++) { #pragma unroll for (int j = 0; j < M; j++) { if (M * r + j < m && N * c + i < n) { buff[(N * c + i) * m + M * r + j] = myc[M * i + j]; myc[M * i + j] = 0.0; } } } } if (need_sync) syncthreads(); /* Add results from shared memory buffer to global C block. */ #pragma unroll for (int i = tidx; i < mn; i += threads) atomicAdd(&c_data[srcC + i], buff[i]); } else { /* Add results from registers to global C block. */ #pragma unroll for (int i = tidx; i < mn; i += threads) atomicAdd(&c_data[srcC + i], myc[0]); myc[0] = 0.0; } } if (need_sync) syncthreads(); } } ================================================ FILE: src/acc/libsmm_acc/kernels/smm_acc_dnt_small.py ================================================ # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### from kernels.smm_acc_dnt_base import Kernel class Kernel_dnt_small(Kernel): algorithm = "small" algorithm_num = 4 launch_parameters = [ "m", "n", "k", "tile_m", "tile_n", "threads", "grouping", "minblocks", ] def __init__( self, m, n, k, threads, tile_m, tile_n, grouping, minblocks, perf, source ): self.m = m self.n = n self.k = k self.tile_m = tile_m self.tile_n = tile_n self.threads = threads self.grouping = grouping self.minblocks = minblocks self.perf = perf self.source = source @property def func_signature(self): return ( "smm_acc_dnt_small" + "< {m}, {n}, {k}, {tile_m}, {tile_n}, {threads}, {grouping}, {minblocks} >;\n".format( **self.__dict__ ) ) @staticmethod def promising_parameters( m, n, k, gpu, autotuning, threads=None, grouping=None, minblocks=None, tile_m=None, tile_n=None, w=None, v=None, ): """ Given a certain (m,n,k)-triplet, GPU properties and autotuning properties, return a list of all possible kernel parameters """ from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple # Parameter space: params = [] for minblocks_ in ( range(1, gpu["Thread_Blocks_/_Multiprocessor"] + 1) if minblocks is None else [minblocks] ): for grouping_ in ( range(2, 32 + 1, 1) if grouping is None else [grouping] ): # heuristic: never seen optimal=1 hence start from 2 for tm in ( range(1, min(12, m) + 1) if tile_m is None else [tile_m] ): # heuristic: the optimal tile_m is never above 12 for tn in ( range(1, min(12, n) + 1) if tile_n is None else [tile_n] ): # heuristic: the optimal tile_n is never above 12 if tm * tn > 16: continue # heuristic: performance decreases for very large tiles # Number of tiled columns, rows cmax = (n + tn - 1) // tn rmax = (m + tm - 1) // tm # Minimum number of threads required to have one thread per tile min_threads = cmax * rmax # Max work ("operations") which can be run concurrently max_concurrent_work = max( grouping_, m * k, k * n, m * n, min_threads ) # Shared memory buffer size buf_sz = max(m * n, m * k + k * tn * cmax, tm * rmax * k + 1) smem_tot = ( buf_sz * autotuning["sizeof_double"] + autotuning["npars"] * grouping_ * autotuning["sizeof_int"] ) if smem_tot > gpu["Max_Shared_Memory_/_Block_(bytes)"]: continue if ( smem_tot * minblocks_ > gpu["Shared_Memory_/_Multiprocessor_(bytes)"] ): continue # Use all concurrency available: fill warps for threads_ in ( range( gpu["Threads_/_Warp"], gpu["Max_Thread_Block_Size"] + 1, gpu["Threads_/_Warp"], ) if threads is None else [threads] ): if threads_ > round_up_to_nearest_multiple( max_concurrent_work, gpu["Threads_/_Warp"] ): continue # soft: too much concurrency harms performance if threads_ * minblocks_ > gpu["Threads_/_Multiprocessor"]: continue if threads_ < min_threads: continue params.append( { "m": m, "n": n, "k": k, "tile_m": tm, "tile_n": tn, "threads": threads_, "grouping": grouping_, "minblocks": minblocks_, } ) return params @staticmethod def baseline(m, n, k, gpu, autotuning): """ Given an (m, n, k)-triplet and GPu and autotuning properties, return a set of parameters corresponding to a baseline ("educated guess") of the kernel's optimal parameters """ from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple grp = 16 minblk = 2 tm = 2 tn = 2 cmax = (n + tn - 1) // tn rmax = (m + tm - 1) // tm min_threads = cmax * rmax base = { "threads": round_up_to_nearest_multiple(min_threads, 32), "grouping": grp, "minblocks": minblk, "tile_m": tn, "tile_n": tn, "w": float("nan"), "v": float("nan"), } if ( len(Kernel_dnt_small.promising_parameters(m, n, k, gpu, autotuning, **base)) > 0 ): base = Kernel_dnt_small.promising_parameters(m, n, k, gpu, autotuning)[0] base.update( dict( [ ("tile_m", float("nan")), ("tile_n", float("nan")), ("w", float("nan")), ("v", float("nan")), ] ) ) base.update( dict( [ ("m", m), ("n", n), ("k", k), ("algorithm", "small"), ("perf", 0), ("source", "predicted"), ] ) ) return base ================================================ FILE: src/acc/libsmm_acc/kernels/smm_acc_dnt_tiny.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ /*****************************************************************************/ /* Authors: Peter Messmer , */ /* Nikolay Markovskiy */ /* Simplified, cleanup & refacture: Based on 'cusmm_dnt_tiny.h' */ /* Andreas Gloess */ /* */ /*****************************************************************************/ #include "smm_acc_common.h" /* * Execution configuration: * gridDim.x = (stack_size + (grouping-1))/grouping * blockIdx.x = {0, ..., gridDim.x-1} * blockDim.x = threads * threadIdx.x = {0, ..., threads-1} * Execute sparse matrix-matrix multiplication C += A*B * according to a stack parameter list, decomposed into mutliple block * multiplications c_block += a_block * b_block * c_block, dimension (m x n) * a_block, dimension (m x k) * b_block, dimension (k x n) * Template parameters * --- m, n, k: triplet of integers characterising the block multiplication dimensions * --- threads: number of CUDA threads (in HIP linguo, "work items") this kernel is run with * --- grouping: number of stack parameter entries to process per thread block * --- minblocks: the desired minimum number of resident blocks (in HIP linguo, "workgroup") per multiprocessor (in HIP linguo, "compute units") (used in __launch_bounds__) * Function arguments * --- param_stack: parameter stack array (pointers to global memory): * array of stack entries (index triplets), indicating which elements of * a_data, b_data to multiply and to which element of c_data to add them to * --- stack_size: number of entries (3 integer triplets) in param_stack, * corresponds to the number of block-matrix multiplications to run in total * --- a_data, b_data, c_data (pointers to global memory): * arrays containing the values of matrices A, B, C * Algorithm specificities: * - optimized for block matrices that fit entirely into shared memory * - each element of c_block is computed by one thread * - no overlap between computation and memory loads */ template __global__ void __launch_bounds__(threads, minblocks) smm_acc_dnt_tiny(const int* __restrict__ param_stack, int stack_size, const double* __restrict__ a_data, const double* __restrict__ b_data, double* c_data) { /* Total number of elements in block matrices */ const int mn = m * n; /* c_block */ const int mk = m * k; /* a_block */ const int kn = n * k; /* b_block */ /* Block and thread index */ const int bidx = blockIdx.x; const int tidx = threadIdx.x; /* Column and row index of the block matrix c_block that this thread will compute * Each thread computes exactly one element of block_c */ const int c = tidx / m; const int r = tidx - c * m; /* Number of parameters per stack entry in parameter stack */ const int npar = 3; /* If multiple warps (in HIP linguo, "wavefronts") are running a single block multiplication, * synchronization is needed */ const bool need_sync = (mn > warpSize || mk > warpSize || kn > warpSize || threads > warpSize); /* psp: parameter stack position: * index in the parameter stack of the first parameter stack entry to be processed by this thread * nrun: number of runs: number of stack entries to process in this thread */ int psp, nrun; /* Partial sum of the element of block_c that this thread will compute */ double myc; /* Arrays in shared memory * (common to all threads in a thread block, but different from thread-block to thread-block): * param_stack_s: shared memory buffer containing the stack entries this thread should process * number of stack entries in param_stack_s = grouping, * number of integers per stack entry: 3 */ __shared__ int param_stack_s[npar * grouping]; /* buff_a, buff_b: shared memory buffer containing a_block (block submatrix of A), * resp. b_block to multiply */ __shared__ double buff_a[mk]; __shared__ double buff_b[kn]; /* Set the number of runs (i.e. how many stack entries to process in this thread) * If the current block is the last block, set the number of stack entries to process in * this thread to the remainder of stack_size / grouping */ nrun = grouping; if (((bidx + 1) * grouping) > stack_size) nrun = stack_size % grouping; /* Set the partial sum to zero */ myc = 0.0; /* Load and pack stack data for current block from global memory into shared memory * Get parameter stack entries from index "psp" to "psp + (nrun-1)*npar + 2" * Each triplet indicates the beginning of a submatrix to multiply */ psp = bidx * npar * grouping; #pragma unroll for (int i = tidx; i < nrun; i += threads) { // param_stack is 1-based, convert to 0-based here param_stack_s[i * npar] = __ldg(¶m_stack[psp + i * npar]) - 1; /* value = index in a_data */ param_stack_s[i * npar + 1] = __ldg(¶m_stack[psp + i * npar + 1]) - 1; /* value = index in b_data */ param_stack_s[i * npar + 2] = __ldg(¶m_stack[psp + i * npar + 2]) - 1; /* value = index in c_data */ } /* Wait until all the data has been loaded */ if (need_sync) syncthreads(); /* In each run, we process one stack entry from param_stack_s */ for (int run = 0; run < nrun; run++) { /* Parameter stack position: index in shared memory buffers to read from */ psp = npar * run; /* Index in a_data, b_data and c_data arrays * indicating where to fetch resp. write back matrix elements for this run * srcA, B, C corresponding to the starting indices of block submatrices to multiply */ int srcA = param_stack_s[psp]; int srcB = param_stack_s[psp + 1]; int srcC = param_stack_s[psp + 2]; /* Load block matrices a_block and b_block for current block and stack from global memory into shared memory * (no overlap between computation and loading) * once an element s loaded into shared memory, it is available for all threads of the thread block to use */ if (m == n) { #pragma unroll for (int i = tidx; i < mk; i += threads) { buff_a[i] = __ldg(&a_data[srcA + i]); buff_b[i] = __ldg(&b_data[srcB + i]); } } else { #pragma unroll for (int i = tidx; i < mk; i += threads) { buff_a[i] = __ldg(&a_data[srcA + i]); } #pragma unroll for (int i = tidx; i < kn; i += threads) { buff_b[i] = __ldg(&b_data[srcB + i]); } } /* Wait until all the data has been loaded */ if (need_sync) syncthreads(); if (tidx < mn) { /* Compute c_ij = sum_k (a_ik * b_kj) in shared memory */ #pragma unroll for (int l = 0; l < k; l++) { myc += buff_a[l * m + r] * buff_b[l * n + c]; } /* Store result in global memory without conflicting with other concurrent writes */ atomicAdd(&c_data[srcC + tidx], myc); myc = 0.0; } if (need_sync) syncthreads(); } } ================================================ FILE: src/acc/libsmm_acc/kernels/smm_acc_dnt_tiny.py ================================================ # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### from kernels.smm_acc_dnt_base import Kernel class Kernel_dnt_tiny(Kernel): algorithm = "tiny" algorithm_num = 5 launch_parameters = ["m", "n", "k", "threads", "grouping", "minblocks"] def __init__(self, m, n, k, threads, grouping, minblocks, perf, source): self.m = m self.n = n self.k = k self.threads = threads self.grouping = grouping self.minblocks = minblocks self.perf = perf self.source = source assert self.m * self.n <= self.threads @property def func_signature(self): return "smm_acc_dnt_tiny< {m}, {n}, {k}, {threads}, {grouping}, {minblocks} >;\n".format( **self.__dict__ ) @staticmethod def promising_parameters( m, n, k, gpu, autotuning, threads=None, grouping=None, minblocks=None, tile_m=None, tile_n=None, w=None, v=None, ): """ Given a certain (m,n,k)-triplet, GPU properties and autotuning properties, return a list of all possible kernel parameters """ from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple # Shared memory buffer size buf_sz = k * ( m + n ) # number of elements in the a_block buffer = mk, and in the b_block buffer = kn # Minimum number of threads required to cover the result matrix c min_threads = m * n # Parameter space: params = [] for minblocks_ in ( range(1, gpu["Thread_Blocks_/_Multiprocessor"] + 1) if minblocks is None else [minblocks] ): # heuristic: never seen optimal=1 hence start from 2 for grouping_ in range(2, 32 + 1, 1) if grouping is None else [grouping]: # Max work ("operations") which can be run concurrently max_concurrent_work = max(grouping_, m * k, k * n, m * n) # Shared memory utilisation (bytes) smem_tot = ( buf_sz * autotuning["sizeof_double"] + autotuning["npars"] * grouping_ * autotuning["sizeof_int"] ) if smem_tot > gpu["Max_Shared_Memory_/_Block_(bytes)"]: continue if smem_tot * minblocks_ > gpu["Max_Shared_Memory_/_Block_(bytes)"]: continue # Use all concurrency available: fill warps for threads_ in ( range( gpu["Threads_/_Warp"], gpu["Max_Thread_Block_Size"] + 1, gpu["Threads_/_Warp"], ) if threads is None else [threads] ): if threads_ > round_up_to_nearest_multiple( max_concurrent_work, gpu["Threads_/_Warp"] ): continue # soft: too much concurrency harms performance if threads_ * minblocks_ > gpu["Threads_/_Multiprocessor"]: continue if threads_ < min_threads: continue params.append( { "m": m, "n": n, "k": k, "threads": threads_, "grouping": grouping_, "minblocks": minblocks_, } ) return params @staticmethod def baseline(m, n, k, gpu, autotuning): """ Given an (m, n, k)-triplet and GPu and autotuning properties, return a set of parameters corresponding to a baseline ("educated guess") of the kernel's optimal parameters """ from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple grp = 16 minblk = 2 min_threads = m * n base = { "threads": round_up_to_nearest_multiple(min_threads, 32), "grouping": grp, "minblocks": minblk, "tile_m": float("nan"), "tile_n": float("nan"), "w": float("nan"), "v": float("nan"), } if ( len(Kernel_dnt_tiny.promising_parameters(m, n, k, gpu, autotuning, **base)) > 0 ): base = Kernel_dnt_tiny.promising_parameters(m, n, k, gpu, autotuning)[0] base.update( dict( [ ("tile_m", float("nan")), ("tile_n", float("nan")), ("w", float("nan")), ("v", float("nan")), ] ) ) base.update( dict( [ ("m", m), ("n", n), ("k", k), ("algorithm", "tiny"), ("perf", 0), ("source", "predicted"), ] ) ) return base ================================================ FILE: src/acc/libsmm_acc/kernels/smm_acc_predict.py ================================================ #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### import numpy as np from kernels.smm_acc import ( # noqa: F401 kernel_algorithm, gpu_architectures, params_dict_to_kernel, compatible_mnk, ) # =============================================================================== # Lists of derived parameters to use as training data for the predictive modelling # Some of the computable features are commented out because they are constant or (almost) linearly dependent on another # feature, and therefore they do not contribute to the decision tree model. raw_parameters = [ "m", "n", "k", "threads_per_blk", "grouping", "minblocks", "tile_m", "tile_n", "w", "v", "perf (Gflop/s)", ] derived_parameters = { "common": [ "perf_scaled", # 'Gflops', # linearly dependent on mxnxk "mxnxk", "size_a", "size_b", "size_c", # 'nblks', 'nthreads', # constant value for largeDB, since the grouping is always = 16 "sm_desired", # 'warps_per_blk', 'nwarps', # linearly dependent on threads, nthreads # 'ru_param_stack_unroll_factor', # constant values for each algo ], "tiny": [ "nblks", "nthreads", # tiny, small, medium: resource occupation "ru_tinysmallmed_unroll_factor_a", "ru_tinysmallmed_unroll_factor_a_total", "ru_tinysmallmed_unroll_factor_b", "ru_tinysmallmed_unroll_factor_b_total", "ru_tinysmallmed_unroll_factor_c_total", # tiny: resource occupation "ru_tiny_max_parallel_work", "ru_tiny_smem_per_block", # 'ru_tiny_min_threads', # equal to size_c # 'ru_tiny_nblks_per_sm', # always = 32, so also removing: 'ru_tiny_nwarps_per_sm', 'ru_tiny_occupancy' "ru_tiny_nsm", # 'ru_tiny_ngpu', # highly correlated with ru_tiny_n_sm # tiny: performance counter estimations based on: # Kothapalli, Kishore & Mukherjee, Rishabh & Rehman, M & Patidar, Suryakant & J. Narayanan, P & Srinathan, Kannan. 2009 # A performance prediction model for the CUDA GPGPU platform. 16th International Conference onHigh Performance Computing # HiPC 2009 - Proceedings. 463-472. 10.1109/HIPC.2009.5433179. "tiny_estimate_Nmem", "tiny_estimate_perf", ], "small": [ "nblks", "nthreads", # tiny, small, medium: resource occupation "ru_tinysmallmed_unroll_factor_a", "ru_tinysmallmed_unroll_factor_a_total", "ru_tinysmallmed_unroll_factor_b", "ru_tinysmallmed_unroll_factor_b_total", "ru_tinysmallmed_unroll_factor_c_total", # small, medium: resource occupation "ru_smallmed_unroll_factor_c", "ru_smallmed_loop_matmul", "ru_smallmed_max_parallel_work", # 'ru_smallmed_buf_size', # highly correlated with ru_smallmed_smem_per_block "ru_smallmed_smem_per_block", "ru_smallmed_regs_per_thread", # small, medium, large: resource occupation "ru_smallmedlarge_cmax", "ru_smallmedlarge_rmax", "ru_smallmedlarge_T", "ru_smallmedlarge_min_threads", ], "medium": [ "nblks", "nthreads", # tiny, small, medium: resource occupation "ru_tinysmallmed_unroll_factor_a", "ru_tinysmallmed_unroll_factor_a_total", "ru_tinysmallmed_unroll_factor_b", "ru_tinysmallmed_unroll_factor_b_total", "ru_tinysmallmed_unroll_factor_c_total", # medium: resource occupation # 'load_unroll_factor_1', 'load_unroll_factor_2', # highly correlated with ru_tinysmallmed_unroll_factor_a,b # 'n_mkloads', 'n_knloads', # constant value # small, medium: resource occupation "ru_smallmed_unroll_factor_c", "ru_smallmed_loop_matmul", "ru_smallmed_max_parallel_work", # 'ru_smallmed_buf_size', # highly correlated with ru_smallmed_smem_per_block "ru_smallmed_smem_per_block", "ru_smallmed_regs_per_thread", # small, medium, large: resource occupation "ru_smallmedlarge_cmax", "ru_smallmedlarge_rmax", "ru_smallmedlarge_T", "ru_smallmedlarge_min_threads", ], "largeDB1": [ # largeDB: resource occupation "ru_large_Pa", "ru_large_Pb", "ru_large_unroll_factor_a", "ru_large_unroll_factor_b", "ru_large_unroll_factor_c", "ru_large_loop_matmul", "ru_large_max_concurrent_work", "ru_large_n_DB_iter", "ru_large_regs_per_thread", # 'ru_large_buf_size', # highly correlated with ru_large_smem_per_block "ru_large_smem_per_block", # small, medium, large: resource occupation "ru_smallmedlarge_cmax", "ru_smallmedlarge_rmax", "ru_smallmedlarge_T", "ru_smallmedlarge_min_threads", ], "largeDB2": [ # largeDB: resource occupation "ru_large_Pa", "ru_large_Pb", "ru_large_unroll_factor_a", "ru_large_unroll_factor_b", "ru_large_unroll_factor_c", "ru_large_loop_matmul", "ru_large_max_concurrent_work", "ru_large_n_DB_iter", "ru_large_regs_per_thread", # 'ru_large_buf_size', # highly correlated with ru_large_smem_per_block "ru_large_smem_per_block", # small, medium, large: resource occupation "ru_smallmedlarge_cmax", "ru_smallmedlarge_rmax", "ru_smallmedlarge_T", "ru_smallmedlarge_min_threads", ], } # =============================================================================== def get_max_performances_per_mnk(data): """ data: pandas DataFrame containing columns "m", "n", "k", "perf (Gflop/s)" Construct dictionary: keys: (m, n, k)-tuple, values: maximum performance found in this data chunk for this given (m, n, k) """ # Get list of different (m, n, k)s occurring in this chunk of data data["mnk_"] = list(zip(data["m"], data["n"], data["k"])) mnks = np.unique(data["mnk_"]) # Get max. performance per (m, n, k) max_perf = dict() for mnk in mnks: # Get indices corresponding to this mnk idx_mnk = np.where(data["mnk_"] == mnk)[0].tolist() # Get performances per mnk perf_mnk_algo = data["perf (Gflop/s)"].values[idx_mnk] # Store maxperf maxperf = float( perf_mnk_algo.max(axis=0) ) # max. performance found through autotuning max_perf[mnk] = maxperf return max_perf # =============================================================================== def get_baseline_performances_per_mnk(data, algorithm, gpu, autotuning): """ data: pandas DataFrame containing columns "m", "n", "k", "perf (Gflop/s)" algorithm: algorithm for which to get the baseline performance gpu: gpu properties autotuning: autotuning properties Construct dictionary: keys: (m, n, k)-tuple, values: baseline performance for this given (m, n, k) and the given algorithm """ # Get list of different (m, n, k)s occurring in this instance data["mnk_"] = list(zip(data["m"], data["n"], data["k"])) mnks = np.unique(data["mnk_"]) # Get baseline performance per (m, n, k) baseline_perf = dict() for mnk in mnks: m, n, k = mnk baseline_pars = kernel_algorithm[algorithm].baseline(m, n, k, gpu, autotuning) # Look for this configuration in the data. # If found, save it. Otherwise, skip: it must be in a different data chunk if algorithm == "tiny": idx_baseline = data[ (data.m == baseline_pars["m"]) & (data.n == baseline_pars["n"]) & (data.k == baseline_pars["k"]) & (data.threads == baseline_pars["threads"]) & (data.grouping == baseline_pars["grouping"]) & (data.minblocks == baseline_pars["minblocks"]) ].index.tolist() elif algorithm in ["small", "medium"]: idx_baseline = data[ (data.m == baseline_pars["m"]) & (data.n == baseline_pars["n"]) & (data.k == baseline_pars["k"]) & (data.threads == baseline_pars["threads"]) & (data.grouping == baseline_pars["grouping"]) & (data.minblocks == baseline_pars["minblocks"]) & (data.tile_m == baseline_pars["tile_m"]) & (data.tile_n == baseline_pars["tile_n"]) ].index.tolist() elif algorithm in ["largeDB1", "largeDB2"]: idx_baseline = data[ (data.m == baseline_pars["m"]) & (data.n == baseline_pars["n"]) & (data.k == baseline_pars["k"]) & (data.threads == baseline_pars["threads"]) & (data.grouping == baseline_pars["grouping"]) & (data.minblocks == baseline_pars["minblocks"]) & (data.tile_m == baseline_pars["tile_m"]) & (data.tile_n == baseline_pars["tile_n"]) & (data.w == baseline_pars["w"]) & (data.v == baseline_pars["v"]) ].index.tolist() else: raise AssertionError(f"Cannot recognize algorithm: {algorithm}") if len(idx_baseline) == 1: idx_baseline = idx_baseline[0] baseline_perf[mnk] = data["perf (Gflop/s)"][idx_baseline] elif len(idx_baseline) > 1: raise AssertionError( "Found more than one corresponding index: " + str(idx_baseline) ) else: pass # if none were found, they're in another data chunk. Do nothing. return baseline_perf # =============================================================================== class PredictiveParameters: """ Class handling predictive features for the predictive modelling of libsmm_acc's performance """ def __init__( self, params_df, gpu, autotuning, max_performances, partial_initialization=False ): """ params_df: pandas Dataframe where each row corresponds to a kernel parameter set """ assert "m" in params_df.columns.values assert "n" in params_df.columns.values assert "k" in params_df.columns.values self.gpu = gpu # GPU card properties self.autotuning = autotuning # autotuning properties self.max_performances = max_performances # dictionary of max. performances # keys: (m, n, k)-tuple, values: maximum performance # found over all algorithms for this given (m, n, k) if not partial_initialization: assert ( "threads" in params_df.columns.values ), "Missing column: threads. Available columns:\n" + str( params_df.columns.values ) assert ( "grouping" in params_df.columns.values ), "Missing column: grouping. Available columns:\n" + str( params_df.columns.values ) assert ( "minblocks" in params_df.columns.values ), "Missing column: minblocks. Available columns:\n" + str( params_df.columns.values ) algos = np.unique(params_df["algorithm"].values) assert len(algos) == 1 algo = algos[0] if algo in ["small", "medium", "largeDB1", "largeDB2"]: assert ( "tile_m" in params_df.columns.values ), "Missing column: tile_m. Available columns:\n" + str( params_df.columns.values ) assert ( "tile_n" in params_df.columns.values ), "Missing column: tile_n. Available columns:\n" + str( params_df.columns.values ) if algo in ["largeDB1", "largeDB2"]: assert ( "w" in params_df.columns.values ), "Missing column: w. Available columns:\n" + str( params_df.columns.values ) assert ( "v" in params_df.columns.values ), "Missing column: v. Available columns:\n" + str( params_df.columns.values ) self.params = params_df def get(self, feature_name): """Generic function to compute any feature given by name""" if feature_name not in self.params.columns.values: if feature_name != "perf_scaled": # not vectorizable vget = getattr(self, f"get_{feature_name}") else: vget = np.vectorize(getattr(self, f"get_{feature_name}")) feature_val = vget() else: feature_val = self.params[feature_name].values return feature_val def get_features(self, feature_names): """ Compute a list of features given by name and return them as a pandas Dataframe. :param feature_names: list of names of features to compute """ for feat in feature_names: self.params.loc[:, feat] = self.get(feat) return self.params[feature_names] # =============================================================================== # Performances def get_perf_scaled(self): """ Scale raw performances in [Gflop/s] between 0 and 1, where 0 = 0 Gflop/s 1 = performance equal to autotuned maximum FOR ALL ALGORITHMS :return: numpy array of scaled performances """ def scale_perf(perf, mnk): """For a given mnk and a given performance on this mnk, return the scaled performance""" return round(perf / self.max_performances[mnk], 6) vec_scale_perf = np.vectorize(scale_perf) ret = vec_scale_perf(self.get("perf (Gflop/s)"), self.get("mnk_string")) return ret # =============================================================================== # Matrix sizes def get_size_a(self): """Size of matrix A (first operand of A * B = C)""" return self.get("m") * self.get("k") # int def get_size_b(self): """Size of matrix B (second operand of A * B = C)""" return self.get("k") * self.get("n") # int def get_size_c(self): """Size of matrix B (result of of A * B = C)""" return self.get("m") * self.get("n") # int def get_mnk_string(self): """Return (m, n, k) as a descriptive string""" return [ f"{m}x{n}x{k}" for m, n, k in zip(self.get("m"), self.get("n"), self.get("k")) ] # str def get_mnk(self): """Return (m, n, k) as a tuple""" return self.get("m"), self.get("n"), self.get("k") # (int, int, int) def get_mxnxk(self): """Return the product m*n*k""" return self.get("m") * self.get("n") * self.get("k") # int # =============================================================================== # Launch parameters def get_need_sync(self): """(mn > warp_size || mk > warp_size || kn > warp_size || threads > warp_size)""" return ( np.where(self.get("size_c") > self.gpu["Threads_/_Warp"], True, False) | np.where(self.get("size_a") > self.gpu["Threads_/_Warp"], True, False) | np.where(self.get("size_b") > self.gpu["Threads_/_Warp"], True, False) | np.where(self.get("threads") > self.gpu["Threads_/_Warp"], True, False) ) # bool def get_nblks(self): """Number of thread blocks needed to multiply all matrices on the stack""" return np.ceil(self.autotuning["stack_size"] / self.get("grouping")).astype( "int" ) # int def get_warps_per_blk(self): """Number of warps per block""" return np.ceil(self.get("threads") / self.gpu["Threads_/_Warp"]).astype( "int" ) # int def get_nwarps(self): """Total number of warps needed to multiply all matrices on the stack""" return self.get("warps_per_blk") * self.get("nblks") # int def get_sm_desired(self): """ Number of multiprocessors desired to multiply all matrices on the stack. For more details, see https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#launch-bounds """ return np.ceil(self.get("nblks") / self.get("minblocks")).astype("int") # int def get_threads_per_blk(self): """Number of threads per block. Sometimes named 'threads', sometimes 'threads_per_blk'""" return self.get("threads") # int def get_nthreads(self): """Total number of threads needed to multiply all matrices on the stack""" return self.get("threads") * self.get("nblks") # int # =============================================================================== # Resource usage (common) def get_ru_param_stack_unroll_factor(self): """Number of executions of the body of the loop that loads data from the parameter stack""" return np.ceil(self.get("grouping") / self.get("threads")).astype("int") # int def get_n_iter(self): """ Number of benchmark repetitions in autotuning procedure. Corresponds to the variable `n_iter` in function `libcusmm_benchmark` in file `libcusmm_benchmark.cu` """ return np.maximum( 3, (12500 // (self.get("m") * self.get("n") * self.get("k"))) ) # int def get_Gflops(self): """Number of floating point operations in [Gflops] carried out during autotuning""" return ( self.get("n_iter") * self.autotuning["stack_size"] * self.get("m") * self.get("n") * self.get("k") * 2 * 10 ** (-9) ) # float # =============================================================================== # Resource occupancy estimations def get_nblocks_per_sm_lim_blks_warps(self): """Resource occupations in terms of warps and blocks (Follows CUDA calculator sheet)""" return np.minimum( self.gpu["Thread_Blocks_/_Multiprocessor"], np.floor(self.gpu["Warps_/_Multiprocessor"] / self.get("warps_per_blk")), ) # int # =============================================================================== # Resource usage (tiny, small, medium) def get_ru_tinysmallmed_unroll_factor_a(self): """loop unroll factor of the loop on m*k""" return np.ceil(self.get("size_a") / self.get("threads")).astype("int") # int def get_ru_tinysmallmed_unroll_factor_b(self): """loop unroll factor of the loop on k*m""" return np.ceil(self.get("size_b") / self.get("threads")).astype("int") # int def get_ru_tinysmallmed_unroll_factor_a_total(self): """loop unroll factor multiplied by number of times the loop is run""" return self.get("ru_tinysmallmed_unroll_factor_a") * self.get("grouping") # int def get_ru_tinysmallmed_unroll_factor_b_total(self): """loop unroll factor multiplied by number of times the loop is run""" return self.get("ru_tinysmallmed_unroll_factor_b") * self.get("grouping") # int def get_ru_tinysmallmed_unroll_factor_c_total(self): """loop unroll factor of the loop writing back to C multiplied by number of times the loop is run""" return self.get("k") * self.get("grouping") # int # =============================================================================== # Resource usage (tiny) def get_ru_tiny_max_parallel_work(self): """Total number of iterations in each loop""" return np.maximum.reduce( [ self.get("grouping"), self.get("size_a"), self.get("size_b"), self.get("size_c"), ] ) # int def get_ru_tiny_min_threads(self): """Minimum number of threads required to run the kernel and produce correct results""" return self.get("size_c") # int def get_ru_tiny_buf_size(self): """Buffer size""" return self.get("k") * (self.get("m") + self.get("n")) # int def get_ru_tiny_smem_per_block(self): """Shared memory usage per block (estimate)""" return (self.get("ru_tiny_buf_size") * self.autotuning["sizeof_double"]) + ( self.autotuning["npars"] * self.get("grouping") * self.autotuning["sizeof_int"] ) # int def get_ru_tiny_nblks_per_sm(self): """ Occupancy estimation: assumption (verified on a sample of mnks): nblks is always limited by number of threads for algorithm tiny """ return self.get("nblocks_per_sm_lim_blks_warps") # int def get_ru_tiny_nwarps_per_sm(self): """Number of wars per multiprocessor""" return self.get("ru_tiny_nblks_per_sm") * self.get("warps_per_blk") # int def get_ru_tiny_nsm(self): """Number of multiprocessors""" return np.ceil(self.get("nblks") / self.get("ru_tiny_nblks_per_sm")).astype( "int" ) # int def get_ru_tiny_ngpu(self): """Number of GPUs""" return np.ceil(self.get("ru_tiny_nsm") / self.gpu["Multiprocessors"]).astype( "int" ) # int def get_ru_tiny_occupancy(self): return ( self.get("ru_tiny_nwarps_per_sm") / self.gpu["Warps_/_Multiprocessor"] ) # float def get_tiny_estimate_Nmem_shared(self): """ Estimation of the number of cycles required for all the shared memory accesses by a thread, based on Kothapalli et al., "A performance prediction model for the CUDA GPGPU platform" """ return 3 * self.get("grouping") + self.get("grouping") * ( 3 + self.get("ru_tinysmallmed_unroll_factor_a") + self.get("ru_tinysmallmed_unroll_factor_b") + 2 * self.get("k") ) # int def get_tiny_estimate_Nmem_global(self): """ Estimation of the number of cycles required for all the global memory accesses by a thread, based on Kothapalli et al., "A performance prediction model for the CUDA GPGPU platform" """ return 3 * self.get("grouping") + self.get("grouping") * ( self.get("ru_tinysmallmed_unroll_factor_a") + self.get("ru_tinysmallmed_unroll_factor_b") ) # int def get_tiny_estimate_Nmem(self): """ Estimation of the number of cycles required for all the memory accesses (shared and global) by a thread, based on Kothapalli et al., "A performance prediction model for the CUDA GPGPU platform" """ return self.gpu["Global_memory_access_latency"] * self.get( "tiny_estimate_Nmem_global" ) + self.gpu["Shared_memory_access_latency"] * self.get( "tiny_estimate_Nmem_shared" ) # int def get_tiny_estimate_perf(self): """ Estimation of the kernel's performance, based on Kothapalli et al., "A performance prediction model for the CUDA GPGPU platform" """ c_K = self.get("nblks") * self.get("threads") * self.get("tiny_estimate_Nmem") return ( self.get("Gflops") / c_K ) # ignore clock rate since it is a constant factor # float # =============================================================================== # Resource usage (small, medium, large) def get_ru_smallmedlarge_cmax(self): return np.ceil(self.get("n") / self.get("tile_n")).astype("int") # int def get_ru_smallmedlarge_rmax(self): return np.ceil(self.get("m") / self.get("tile_m")).astype("int") # int def get_ru_smallmedlarge_T(self): return self.get("tile_m") * self.get("tile_n") # int def get_ru_smallmedlarge_min_threads(self): return self.get("ru_smallmedlarge_cmax") * self.get( "ru_smallmedlarge_rmax" ) # int # =============================================================================== # Resource usage estimation and loop counts (small, medium) def get_ru_smallmed_tm_max(self): return self.get("m") # int def get_ru_smallmed_tn_max(self): return self.get("n") # int def get_ru_smallmed_unroll_factor_c(self): """loop unroll factor of the loop on m*n""" return np.ceil(self.get("size_c") / self.get("threads")).astype("int") # int def get_ru_smallmed_loop_matmul(self): """Actual multiplication loop""" return self.get("k") * self.get("tile_m") * self.get("tile_n") # int def get_ru_smallmed_max_parallel_work(self): """Maximum parallel work""" return np.maximum.reduce( [ self.get("grouping"), self.get("size_a"), self.get("size_b"), self.get("size_c"), self.get("ru_smallmedlarge_min_threads"), ] # int ) def get_ru_smallmed_buf_size(self): """Buffer size""" intermediate1 = self.get("size_a") + self.get("k") * self.get( "tile_n" ) * self.get("ru_smallmedlarge_cmax") intermediate2 = ( self.get("tile_m") * self.get("ru_smallmedlarge_rmax") * self.get("k") + 1 ) return np.maximum.reduce( [self.get("size_c"), intermediate1, intermediate2] ) # int def get_ru_smallmed_smem_per_block(self): """Shared memory usage per block""" return (self.get("ru_smallmed_buf_size") * self.autotuning["sizeof_double"]) + ( self.autotuning["npars"] * self.get("grouping") * self.autotuning["sizeof_int"] ) # int def get_ru_smallmed_regs_per_thread(self): """Register usage per thread (estimated)""" return ( self.get("tile_m") * self.get("tile_n") + (self.get("m") * self.get("k") + self.get("threads") - 1) // self.get("threads") + (self.get("k") * self.get("n") + self.get("threads") - 1) // self.get("threads") ) # int # =============================================================================== # Resource usage (medium) # Loop bounds def get_load_unroll_factor_1(self): return self.get("size_a") // self.get("threads") + 1 # int def get_load_unroll_factor_2(self): return self.get("size_b") // self.get("threads") + 1 # int def get_n_mkloads(self): return self.get("size_a") // ( self.get("load_unroll_factor_1") * self.get("threads") ) # int def get_n_knloads(self): return self.get("size_b") // ( self.get("load_unroll_factor_2") * self.get("threads") ) # int # =============================================================================== # Resource usage (large) def get_ru_large_Pa(self): """Input slab size""" return self.get("m") * self.get("w") # int def get_ru_large_Pb(self): """Input slab size""" return self.get("w") * self.get("n") # int def get_ru_large_Pc(self): """Output slab size""" return self.get("m") * self.get("v") # int def get_ru_large_unroll_factor_a(self): return np.ceil(self.get("ru_large_Pa") / self.get("threads")).astype( "int" ) # int def get_ru_large_unroll_factor_b(self): return np.ceil(self.get("ru_large_Pb") / self.get("threads")).astype( "int" ) # int def get_ru_large_unroll_factor_c(self): return np.ceil(self.get("ru_large_Pc") / self.get("threads")).astype( "int" ) # int def get_ru_large_loop_matmul(self): return self.get("w") * self.get("tile_m") * self.get("tile_n") # int def get_ru_large_max_concurrent_work(self): """Maximum concurrent work""" return np.maximum.reduce( [ self.get("grouping"), self.get("ru_large_Pa"), self.get("ru_large_Pb"), self.get("ru_large_Pc"), self.get("ru_smallmedlarge_T"), ] ) # int def get_ru_large_regs_per_thread(self): """Register usage per thread (estimated)""" return ( self.get("tile_m") * self.get("tile_n") + (self.get("w") * self.get("m") + self.get("threads") - 1) // self.get("threads") + (self.get("w") * self.get("n") + self.get("threads") - 1) // self.get("threads") ) # int def get_ru_large_n_DB_iter(self): """Number of double-buffering iterations""" return self.get("k") // (2 * self.get("w")) # int def get_ru_large_buf_size(self): """Buffer size""" intermediate1 = (self.get("w") - 1) * self.get("m") + self.get( "ru_smallmedlarge_rmax" ) * self.get("tile_m") intermediate2 = ( self.get("m") * self.get("w") + (self.get("w") - 1) * self.get("n") + self.get("ru_smallmedlarge_cmax") * self.get("tile_n") ) return np.maximum.reduce( [self.get("ru_large_Pc"), intermediate1, intermediate2] ) # int def get_ru_large_smem_per_block(self): """Shared memory usage per block""" return ( self.get("ru_large_buf_size") * self.autotuning["sizeof_double"] + self.autotuning["npars"] * self.get("grouping") * self.autotuning["sizeof_int"] ) # int ================================================ FILE: src/acc/libsmm_acc/kernels/smm_acc_transpose.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ /***************************************************************************** * Authors: Peter Messmer , * * Nikolay Markovskiy * *****************************************************************************/ #include "smm_acc_common.h" /* * Execution configuration: * gridDim.x = number of matrix blocks in this batched matrix transpose * = length of the batched transpose stack * blockIdx.x = {0, ..., gridDim.x-1} * blockDim.x = 128 or the smallest multiple of warp_size larger or equal to m*n * threadIdx.x = {0, ..., blockDim.x-1} * Execute batched matrix transpose in place * Template parameters * --- m, n: pair of integers characterising the dimensions of the matrix to transpose * Function arguments * --- trs_stack: transpose stack (pointer to global memory): * array of stack entries (indices), indicating where each matrix to transpose starts in the "mat" array * --- mat (pointer to global memory): * arrays containing the values of the matrix to be transposed * mat is column major: m = number of rows, n = number of columns * Algorithm specificities: * - the temporary buffer (of size m * n * 8 bytes) in which matrix elements are stored has to fit entirely into shared memory. Therefore, this kernel cannot be run for matrix sizes such that m * n * 8 bytes > available shared memory per block. */ template __global__ void transpose_d(int* trs_stack, double* mat) { __shared__ double buf[m * n]; /* Get the offset in the transpose-stack that this block ID should handle */ int offset = trs_stack[blockIdx.x]; /* Loop over m*n matrix elements */ for (int i = threadIdx.x; i < m * n; i += blockDim.x) { /* Load matrix elements into a temporary buffer */ buf[i] = mat[offset + i]; } syncthreads(); /* Loop over elements of the matrix to be overwritten */ for (int i = threadIdx.x; i < m * n; i += blockDim.x) { /* Compute old row and column index of matrix element */ int r_out = i % n; int c_out = i / n; /* Compute the corresponding old 1D index of matrix element */ int idx = r_out * m + c_out; /* Overwrite the matrix element */ mat[offset + i] = buf[idx]; } } ================================================ FILE: src/acc/libsmm_acc/libcusmm/.gitignore ================================================ cusmm_kernels.h ================================================ FILE: src/acc/libsmm_acc/libcusmm/PACKAGE ================================================ { "description": "Cuda accelerated Small Matrix Multiplications", "archive": "libdbcsr", "requires": ["kernels", "..", "../../include"] } ================================================ FILE: src/acc/libsmm_acc/libsmm_acc.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #include "parameters.h" #include "libsmm_acc.h" #include "libsmm_acc_benchmark.h" #include "smm_acc_kernels.h" #include "../cuda_hip/acc_blas.h" #include "../acc_libsmm.h" #include #include #include #include #include #include #if defined(_OPENMP) # include #endif // MACRO HELPERS #define STRINGIFY_NX(x) #x #define STRINGIFY(x) STRINGIFY_NX(x) // The macro ARCH_OPTION, when expanded, is a string literal containing the // jit compiler option specifying the target architecture #if defined(__CUDA) || defined(__HIP_PLATFORM_NVCC__) # define ARCH_OPTION_NAME "--gpu-architecture=compute_" #else # define ARCH_OPTION_NAME "--gpu-architecture=" #endif #define ARCH_OPTION ARCH_OPTION_NAME STRINGIFY(ARCH_NUMBER) //=========================================================================== inline int launch_kernel_from_handle( ACC_DRV(function) const& kern_func, int nblks, int threads, ACC_DRV(stream) stream, void** args) { ACC_DRV_CALL(LaunchJITKernel, (kern_func, // kernel function, nblks, 1, 1, // grid dimension x, y, z threads, 1, 1, // block dimension x, y, z 0, stream, // shared memory size and stream args, NULL)); // arguments return 0; } //=========================================================================== inline int validate_kernel(ACC_DRV(function) & kern_func, ACC_DRV(stream) stream, int threads, int grouping, int m, int n, int k) { libsmm_acc_benchmark_t* h; libsmm_acc_benchmark_init(&h, test, m, n, k); // Run the matrix-matrix multiplication on the CPU memset(h->mat_c, 0, h->n_c * m * n * sizeof(double)); matInit(h->mat_a, h->n_a, m, k, 42); matInit(h->mat_b, h->n_b, k, n, 24); stackInit(h->stack, h->n_stack, h->n_c, h->n_a, h->n_b, m, n, k); stackCalc(h->stack, h->n_stack, h->mat_c, h->mat_a, h->mat_b, m, n, k); double sumCPU = checkSum(h->mat_c, h->n_c, m, n); // Run the matrix-matrix multiplication kernel on the GPU ACC_API_CALL(Memcpy, (h->d_mat_a, h->mat_a, h->n_a * m * k * sizeof(double), ACC(MemcpyHostToDevice))); ACC_API_CALL(Memcpy, (h->d_mat_b, h->mat_b, h->n_b * k * n * sizeof(double), ACC(MemcpyHostToDevice))); ACC_API_CALL(Memcpy, (h->d_stack, h->stack, h->n_stack * 3 * sizeof(int), ACC(MemcpyHostToDevice))); ACC_API_CALL(Memset, (h->d_mat_c, 0, h->n_c * m * n * sizeof(double))); void* args[] = {&h->d_stack, &h->n_stack, &h->d_mat_a, &h->d_mat_b, &h->d_mat_c}; launch_kernel_from_handle(kern_func, ((h->n_stack + grouping - 1) / grouping), threads, stream, args); ACC_API_CALL(Memcpy, (h->mat_c, h->d_mat_c, h->n_c * m * n * sizeof(double), ACC(MemcpyDeviceToHost))); // Validate the kernel based on results double sumGPU = checkSum(h->mat_c, h->n_c, m, n); libsmm_acc_benchmark_finalize(h); if (sumGPU != sumCPU) { // printf("Kernel validation failed for multiplication kernel %ix%ix%i\nchecksum CPU: %g, checksum GPU: %g\nchecksum_diff: %g\n", // m, n, k, sumCPU, sumGPU, sumGPU - sumCPU); return 1; } return 0; } //=========================================================================== inline void jit_kernel(ACC_DRV(function) & kern_func, libsmm_acc_algo algo, int tile_m, int tile_n, int w, int v, int threads, int grouping, int minblocks, int m, int n, int k) { std::string routineN = LIBSMM_ACC_PROCESS_ROUTINE_NAME_STR; int handle; timeset(routineN, handle); // Get the code and the lowered name corresponding the kernel to launch std::string kernel_code = smm_acc_common; // prepend include file content to code std::string kernel_name; switch (algo) { case 1: kernel_code += smm_acc_dnt_largeDB1; kernel_name = "smm_acc_dnt_largeDB1<" + std::to_string(m) + ", " + std::to_string(n) + ", " + std::to_string(k) + ", " + std::to_string(tile_m) + ", " + std::to_string(tile_n) + ", " + std::to_string(w) + ", " + std::to_string(v) + ", " + std::to_string(threads) + ", " + std::to_string(grouping) + ", " + std::to_string(minblocks) + ">"; break; case 2: kernel_code += smm_acc_dnt_largeDB2; kernel_name = "smm_acc_dnt_largeDB2<" + std::to_string(m) + ", " + std::to_string(n) + ", " + std::to_string(k) + ", " + std::to_string(tile_m) + ", " + std::to_string(tile_n) + ", " + std::to_string(w) + ", " + std::to_string(v) + ", " + std::to_string(threads) + ", " + std::to_string(grouping) + ", " + std::to_string(minblocks) + ">"; break; case 3: kernel_code += smm_acc_dnt_medium; kernel_name = "smm_acc_dnt_medium<" + std::to_string(m) + ", " + std::to_string(n) + ", " + std::to_string(k) + ", " + std::to_string(tile_m) + ", " + std::to_string(tile_n) + ", " + std::to_string(threads) + ", " + std::to_string(grouping) + ", " + std::to_string(minblocks) + ">"; break; case 4: kernel_code += smm_acc_dnt_small; kernel_name = "smm_acc_dnt_small<" + std::to_string(m) + ", " + std::to_string(n) + ", " + std::to_string(k) + ", " + std::to_string(tile_m) + ", " + std::to_string(tile_n) + ", " + std::to_string(threads) + ", " + std::to_string(grouping) + ", " + std::to_string(minblocks) + ">"; break; case 5: kernel_code += smm_acc_dnt_tiny; kernel_name = "smm_acc_dnt_tiny<" + std::to_string(m) + ", " + std::to_string(n) + ", " + std::to_string(k) + ", " + std::to_string(threads) + ", " + std::to_string(grouping) + ", " + std::to_string(minblocks) + ">"; break; default: printf("\nERROR: algorithm number %i is not encoded.\n", algo); exit(1); } // Create JIT program ACC_RTC(Program) kernel_program; ACC_RTC_CALL(CreateProgram, (&kernel_program, kernel_code.c_str(), "smm_acc_kernel.cu", 0, NULL, NULL)); // Add lowered name ACC_RTC_CALL(AddNameExpression, (kernel_program, kernel_name.c_str())); // (JIT-)compile kernel program #if defined(__CUDA) || defined(__HIP_PLATFORM_NVCC__) const char* compileOptions[] = {"-D__CUDA", "-w", ARCH_OPTION}; size_t nOptions = 3; #else const char* compileOptions[] = {"-D__HIP", "-O3", "-w", "-munsafe-fp-atomics"}; size_t nOptions = 4; #endif ACC_RTC(Result) compileResult = ACC_RTC(CompileProgram)(kernel_program, nOptions, compileOptions); if (compileResult != ACC_RTC_SUCCESS) { // if compilation fails: // print source, compilation options and compilation log size_t logSize; ACC_RTC_CALL(GetProgramLogSize, (kernel_program, &logSize)); char* log = new char[logSize]; ACC_RTC_CALL(GetProgramLog, (kernel_program, log)); std::cout << "---------------------------------------------------------------------------------" << std::endl << "Compile source : " << std::endl << kernel_code.c_str() << std::endl << "---------------------------------------------------------------------------------" << std::endl << "Compile lowered name : " << kernel_name.c_str() << std::endl << "---------------------------------------------------------------------------------" << std::endl << "Compile options : " << *compileOptions << std::endl << "---------------------------------------------------------------------------------" << std::endl << "Compile log : " << std::endl << log << '\n'; delete[] log; exit(1); } // Obtain PTX from the program. size_t codeSize; ACC_RTC_CALL(GetLowLevelCodeSize, (kernel_program, &codeSize)); char* code = new char[codeSize]; ACC_RTC_CALL(GetLowLevelCode, (kernel_program, code)); // Get lowered name const char* lowered_kernel_name; ACC_RTC_CALL(GetLoweredName, (kernel_program, kernel_name.c_str(), &lowered_kernel_name)); // Get pointer to kernel from PTX ACC_DRV(module) module; ACC_DRV_CALL(ModuleLoadDataEx, (&module, code, 0, 0, 0)); delete[] code; ACC_DRV_CALL(ModuleGetFunction, (&kern_func, module, lowered_kernel_name)); // Set shared memory configuration #if defined(__CUDA) ACC_DRV_CALL(FuncSetSharedMemConfig, (kern_func, ACC_DRV(SharedMemBankSizeEightByte))); #endif // Destroy program ACC_RTC_CALL(DestroyProgram, (&kernel_program)); timestop(handle); } kernel_map_iterator add_kernel_handle_to_jitted_kernels( ACC_DRV(function) kern_func, ACC_DRV(stream) stream, Triplet h_mnk, int& threads, int& grouping, bool& generated_acc_untuned) { kernel_map_iterator kernel_it = kernel_handles.end(); // Check if the kernel was already generated and failed or if it is too big if (failed_acc_kernels.find(h_mnk) != failed_acc_kernels.end()) return kernel_it; libsmm_acc_algo algo; int tile_m, tile_n, w, v, minblocks; // Check whether autotuned parameters are given for this kernel, and if so, retrieve them if (ht.find(h_mnk) != ht.end()) { // Retrieve launching parameters const KernelParameters params = ht.at(h_mnk); algo = libsmm_acc_algo(params[0]); // enum {largeDB1, largeDB2, medium, small, tiny} tile_m = params[1]; tile_n = params[2]; w = params[3]; v = params[4]; threads = params[5]; grouping = params[6]; minblocks = params[7]; generated_acc_untuned = false; } else if (h_mnk[0] < 50 && h_mnk[1] < 50 && h_mnk[2] < 50) { // Use a default untuned kernel algo = medium; tile_m = 2; tile_n = 2; w = 0; v = 0; threads = 256; grouping = 30; minblocks = 1; generated_acc_untuned = true; } else { failed_acc_kernels.insert(h_mnk); return kernel_it; } // JIT and validate the kernel jit_kernel(kern_func, algo, tile_m, tile_n, w, v, threads, grouping, minblocks, h_mnk[0], h_mnk[1], h_mnk[2]); if (validate_kernel(kern_func, stream, threads, grouping, h_mnk[0], h_mnk[1], h_mnk[2]) == 0) { // Store the handle to the JIT-ed kernel auto kernel_it_emplaced = kernel_handles.emplace(h_mnk, kernel_launcher(kern_func, threads, grouping)); kernel_it = kernel_it_emplaced.first; } else { // The generated kernel gave wrong values, discard it free(kern_func); generated_acc_untuned = false; failed_acc_kernels.insert(h_mnk); } return kernel_it; } //=========================================================================== int libsmm_acc_process_blas(const int* param_stack, int stack_size, ACC_DRV(stream) stream, int m, int n, int k, int max_kernel_dim, const double* a_data, const double* b_data, double* c_data) { #if defined _OPENMP int ithread = omp_get_thread_num(); #else int ithread = 0; #endif int istat = 0; char transb = 'N'; if (n <= max_kernel_dim && k <= max_kernel_dim) { transb = 'T'; } for (int stack_entry = 0; stack_entry < stack_size && istat == 0; stack_entry++) { istat = acc_blas_dgemm(acc_blashandles[ithread], 'N', transb, m, n, k, param_stack[7 * stack_entry + 3] - 1, param_stack[7 * stack_entry + 4] - 1, param_stack[7 * stack_entry + 5] - 1, a_data, b_data, c_data, 1.f, 1.f, &stream); } ACC_API_CALL(StreamSynchronize, (stream)); return istat; } //=========================================================================== int libsmm_acc_process_d(const int* param_stack, int stack_size, ACC_DRV(stream) stream, int m, int n, int k, const double* a_data, const double* b_data, double* c_data) { ACC_DRV(function) kern_func = NULL; int threads, grouping; Triplet h_mnk = {m, n, k}; kernel_map_iterator kernel_it; bool generated_acc_untuned = false; #if defined _OPENMP # pragma omp critical(jit_multiplication) #endif { // Look up the kernel in the table of already JITed kernels kernel_it = kernel_handles.find(h_mnk); if (kernel_it == kernel_handles.end()) { // the kernel has not been JIT-ed yet kernel_it = add_kernel_handle_to_jitted_kernels(kern_func, stream, h_mnk, threads, grouping, generated_acc_untuned); } // if the kernel could be jited successfully, the kernel_it iterator now points to the kernel_launcher. // if this wasn't possible, is set to kernel_handles.end() } if (kernel_it == kernel_handles.end()) { // the kernel could not be JIT-ed, so we should fall back to CPU return -20; // fall back to CPU } else { // Retrieve kernel launching parameters kern_func = kernel_it->second.kernel_function; threads = kernel_it->second.threads; grouping = kernel_it->second.grouping; // Construct argument pointer list and launch kernel void* args[] = {¶m_stack, &stack_size, &a_data, &b_data, &c_data}; int return_value = launch_kernel_from_handle(kern_func, ((stack_size + grouping - 1) / grouping), threads, stream, args); return ((return_value != 0) or (!generated_acc_untuned)) ? return_value : 10; // return 10 for generated default untuned kernel } } //=========================================================================== int libsmm_acc_process(const int* param_stack_host, const int* param_stack_dev, int stack_size, libsmm_acc_data_t datatype, const void* a_data, const void* b_data, void* c_data, int m, int n, int k, int max_kernel_dim, int def_mnk, void* stack_stream, void* c_stream) { if (def_mnk != 1) return -1; // inhomogeneous stacks not supported if (datatype == dbcsr_type_real_8) { if (m > max_kernel_dim || n > max_kernel_dim || k > max_kernel_dim) // maximum size over any dimension return (libsmm_acc_process_blas((const int*)param_stack_host, stack_size, *((ACC_DRV(stream)*)c_stream), m, n, k, max_kernel_dim, (const double*)a_data, (const double*)b_data, (double*)c_data)); else { return (libsmm_acc_process_d((const int*)param_stack_dev, stack_size, *((ACC_DRV(stream)*)stack_stream), m, n, k, (const double*)a_data, (const double*)b_data, (double*)c_data)); } } return -10; // datatype not supported } //=========================================================================== inline void validate_transpose_kernel(ACC_DRV(function) & kern_func, int threads, ACC_DRV(stream) stream, int m, int n) { libsmm_acc_benchmark_t* h; libsmm_acc_benchmark_init(&h, test, m, 0, n); // Initialize arrays matInit(h->mat_a, h->n_a, m, n, 42); memset(h->mat_trs_a, 0, h->n_a * m * n * sizeof(double)); stackInitTransp(h->stack_trs_a, h->n_stack_trs_a, m, n); // Run the matrix-matrix multiplication on the CPU stackTransp(h->stack_trs_a, h->n_stack_trs_a, h->mat_a, h->mat_trs_a, m, n); double sumCPU = checkSumTransp(h->mat_trs_a, h->n_stack_trs_a, m, n); // Run the matrix-matrix multiplication kernel on the GPU ACC_API_CALL(Memcpy, (h->d_mat_a, h->mat_a, h->n_a * m * n * sizeof(double), ACC(MemcpyHostToDevice))); ACC_API_CALL(Memcpy, (h->d_stack_trs_a, h->stack_trs_a, h->n_stack_trs_a * sizeof(int), ACC(MemcpyHostToDevice))); void* args[] = {&h->d_stack_trs_a, &h->d_mat_a}; launch_kernel_from_handle(kern_func, h->n_stack_trs_a, threads, stream, args); ACC_API_CALL(Memcpy, (h->mat_trs_a, h->d_mat_a, h->n_a * m * n * sizeof(double), ACC(MemcpyDeviceToHost))); // Validate the kernel based on results double sumGPU = checkSumTransp(h->mat_trs_a, h->n_stack_trs_a, m, n); libsmm_acc_benchmark_finalize(h); if (sumGPU != sumCPU) { printf("Kernel validation failed for transpose kernel %ix%i\nchecksum CPU: %g, checksum GPU: %g\nchecksum_diff: %g\n", m, n, sumCPU, sumGPU, sumGPU - sumCPU); exit(1); } } //=========================================================================== void jit_transpose_handle(ACC_DRV(function) & kern_func, int m, int n) { std::string routineN = LIBSMM_ACC_TRANSPOSE_ROUTINE_NAME_STR; int handle; timeset(routineN, handle); // Create nvrtcProgram ACC_RTC(Program) kernel_program; std::string transpose_code = smm_acc_common + smm_acc_transpose; ACC_RTC_CALL(CreateProgram, (&kernel_program, transpose_code.c_str(), "transpose_kernel.cu", 0, NULL, NULL)); // Add lowered name std::string kernel_name = "transpose_d<" + std::to_string(m) + ", " + std::to_string(n) + ">"; ACC_RTC_CALL(AddNameExpression, (kernel_program, kernel_name.c_str())); // (JIT-)compile #if defined(__CUDA) || defined(__HIP_PLATFORM_NVCC__) const char* compileOptions[] = {"-D__CUDA", "-w", ARCH_OPTION}; size_t nOptions = 3; #else const char* compileOptions[] = {"-D__HIP"}; size_t nOptions = 1; #endif ACC_RTC(Result) compileResult = ACC_RTC(CompileProgram)(kernel_program, nOptions, compileOptions); if (compileResult != ACC_RTC_SUCCESS) { // if compilation fails: // print source, compilation options and compilation log size_t logSize; ACC_RTC_CALL(GetProgramLogSize, (kernel_program, &logSize)); char* log = new char[logSize]; ACC_RTC_CALL(GetProgramLog, (kernel_program, log)); std::cout << "---------------------------------------------------------------------------------" << std::endl << "Compile source : " << std::endl << transpose_code.c_str() << std::endl << "---------------------------------------------------------------------------------" << std::endl << "Compile lowered name : " << kernel_name.c_str() << std::endl << "---------------------------------------------------------------------------------" << std::endl << "Compile options : " << *compileOptions << std::endl << "---------------------------------------------------------------------------------" << std::endl << "Compile log : " << std::endl << log << '\n'; delete[] log; exit(1); } // Obtain PTX from the program. size_t codeSize; ACC_RTC_CALL(GetLowLevelCodeSize, (kernel_program, &codeSize)); char* code = new char[codeSize]; ACC_RTC_CALL(GetLowLevelCode, (kernel_program, code)); // Get lowered name const char* lowered_kernel_name; ACC_RTC_CALL(GetLoweredName, (kernel_program, kernel_name.c_str(), &lowered_kernel_name)); // Get pointer to kernel from PTX ACC_DRV(module) module; ACC_DRV_CALL(ModuleLoadDataEx, (&module, code, 0, 0, 0)); delete[] code; ACC_DRV_CALL(ModuleGetFunction, (&kern_func, module, lowered_kernel_name)); // Set shared memory configuration #if defined(__CUDA) ACC_DRV_CALL(FuncSetSharedMemConfig, (kern_func, ACC_DRV(SharedMemBankSizeEightByte))); #endif // Destroy program ACC_RTC_CALL(DestroyProgram, (&kernel_program)); timestop(handle); } //=========================================================================== int libsmm_acc_transpose_d(const int* trs_stack, int offset, int stack_size, double* buffer, int m, int n, ACC_DRV(stream) stream) { ACC_DRV(function) kern_func; int threads = 128; if (m * n + warp_size <= 128) { threads = m * n - (m * n % warp_size) + warp_size; } // Look up the kernel in the table of already JITed kernels Triplet h_mnk = {m, n, 0}; std::unordered_map, ACC_DRV(function)>::iterator kernel_it; #if defined _OPENMP # pragma omp critical(jit_transpose) #endif { kernel_it = transpose_handles.find(h_mnk); if (kernel_it == transpose_handles.end()) { // the kernel has not been JIT-ed yet // JIT and store a kernel for this transposition jit_transpose_handle(kern_func, m, n); validate_transpose_kernel(kern_func, threads, stream, m, n); transpose_handles.emplace(h_mnk, kern_func); kernel_it = transpose_handles.find(h_mnk); } } // Construct argument pointer list and launch function kern_func = kernel_it->second; // retrieve handle const int* trs_stack_ = trs_stack + offset; void* args[] = {&trs_stack_, &buffer}; return launch_kernel_from_handle(kern_func, stack_size, threads, stream, args); } //=========================================================================== extern "C" int libsmm_acc_transpose(const int* trs_stack, int offset, int stack_size, void* buffer, libsmm_acc_data_t datatype, int m, int n, int max_kernel_dim, void* stream) { if (datatype != dbcsr_type_real_8) return 0; // transpose not needed if (m > max_kernel_dim || n > max_kernel_dim) return 0; // maximum size over any dimension return libsmm_acc_transpose_d(trs_stack, offset, stack_size, (double*)buffer, m, n, *((ACC_DRV(stream)*)stream)); } ================================================ FILE: src/acc/libsmm_acc/libsmm_acc.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #ifndef LIBSMM_ACC_H #define LIBSMM_ACC_H #if defined(__CUDA) # include "../cuda/acc_cuda.h" #elif defined(__HIP) # include "../hip/acc_hip.h" #endif #include "../acc_libsmm.h" #include "parameters_utils.h" #include "libsmm_acc_init.h" #include #include #include #include enum libsmm_acc_algo { largeDB1 = 1, largeDB2 = 2, medium = 3, small = 4, tiny = 5 }; struct kernel_launcher { ACC_DRV(function) kernel_function; int threads; int grouping; kernel_launcher(ACC_DRV(function) const& kf, int th, int gp) : kernel_function(kf), threads(th), grouping(gp) {} }; typedef std::unordered_map::iterator kernel_map_iterator; static std::unordered_map kernel_handles; static std::unordered_set failed_acc_kernels; int libsmm_acc_process_blas(const int* param_stack_host, int stack_size, ACC_DRV(stream) stream, int m, int n, int k, const double* a_data, const double* b_data, double* c_data); int libsmm_acc_process_d(const int* param_stack_dev, int stack_size, ACC_DRV(stream) stream, int m, int n, int k, const double* a_data, const double* b_data, double* c_data); static std::unordered_map transpose_handles; int libsmm_acc_transpose_d(const int* trs_stack, int offset, int nblks, double* buffer, int m, int n, ACC_DRV(stream) stream); #endif /*LIBSMM_ACC_H*/ ================================================ FILE: src/acc/libsmm_acc/libsmm_acc_benchmark.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #include #include #include #include #include "libsmm_acc_benchmark.h" #ifdef __TUNING # include "parameters.h" #endif #include "parameters_utils.h" #include "../acc_bench.h" //=========================================================================== // Allocate memory and accelerator events void libsmm_acc_benchmark_init(libsmm_acc_benchmark_t** handle, benchmark_mode mode, int max_m, int max_n, int max_k) { libsmm_acc_benchmark_t* h = (libsmm_acc_benchmark_t*)malloc(sizeof(libsmm_acc_benchmark_t)); *handle = h; h->mode = mode; h->n_a = 0; h->n_b = 0; h->n_c = 0; h->n_stack = 0; h->n_stack_trs_a = 0; h->n_stack_trs_b = 0; switch (h->mode) { case tune: case timing: h->n_a = 10000; h->n_b = 10000; h->n_c = 1000; h->n_stack = 16005; h->n_stack_trs_a = 0; h->n_stack_trs_b = 0; break; case test: h->n_a = 100; h->n_b = 100; h->n_c = 10; h->n_stack = 100; h->n_stack_trs_a = h->n_a; h->n_stack_trs_b = h->n_b; break; } h->max_m = max_m; h->max_n = max_n; h->max_k = max_k; h->mat_a = (double*)malloc(h->n_a * max_m * max_k * sizeof(double)); h->mat_trs_a = (double*)malloc(h->n_a * max_m * max_k * sizeof(double)); h->mat_b = (double*)malloc(h->n_b * max_k * max_n * sizeof(double)); h->mat_trs_b = (double*)malloc(h->n_b * max_k * max_n * sizeof(double)); h->mat_c = (double*)malloc(h->n_c * max_m * max_n * sizeof(double)); h->stack = (int*)malloc(h->n_stack * 3 * sizeof(int)); h->stack_trs_a = (int*)malloc(h->n_stack_trs_a * sizeof(int)); h->stack_trs_b = (int*)malloc(h->n_stack_trs_b * sizeof(int)); ACC_API_CALL(Malloc, (&h->d_mat_a, h->n_a * max_m * max_k * sizeof(double))); ACC_API_CALL(Malloc, (&h->d_mat_b, h->n_b * max_k * max_n * sizeof(double))); ACC_API_CALL(Malloc, (&h->d_mat_c, h->n_c * max_m * max_n * sizeof(double))); ACC_API_CALL(Malloc, (&h->d_stack, h->n_stack * 3 * sizeof(int))); ACC_API_CALL(Malloc, (&h->d_stack_trs_a, h->n_stack_trs_a * sizeof(int))); ACC_API_CALL(Malloc, (&h->d_stack_trs_b, h->n_stack_trs_b * sizeof(int))); ACC_DRV_CALL(EventCreate, (&h->t_start, ACC_DRV(EventDefault))); ACC_DRV_CALL(EventCreate, (&h->t_stop, ACC_DRV(EventDefault))); } //=========================================================================== // Free memory and accelerator events void libsmm_acc_benchmark_finalize(libsmm_acc_benchmark_t* handle) { ACC_DRV_CALL(EventDestroy, (handle->t_start)); ACC_DRV_CALL(EventDestroy, (handle->t_stop)); ACC_API_CALL(Free, (handle->d_stack_trs_b)); ACC_API_CALL(Free, (handle->d_stack_trs_a)); ACC_API_CALL(Free, (handle->d_stack)); ACC_API_CALL(Free, (handle->d_mat_c)); ACC_API_CALL(Free, (handle->d_mat_b)); ACC_API_CALL(Free, (handle->d_mat_a)); free(handle->stack_trs_b); free(handle->stack_trs_a); free(handle->stack); free(handle->mat_c); free(handle->mat_trs_b); free(handle->mat_b); free(handle->mat_trs_a); free(handle->mat_a); free(handle); } //=========================================================================== // initialize matrix void matInit(double* mat, int mat_n, int x, int y, int seed) { double* m = mat; for (int n = 0; n < mat_n; n++) for (int j = 0; j < y; j++) for (int i = 0; i < x; i++, m++) *m = (double)j * x + i + n + seed; } //=========================================================================== // initialize the task list ("stack" in DBCSR lingo) // for each of the result matrices we have a random number void stackInit(int* stack, int n_stack, int n_c, int n_a, int n_b, int mat_m, int mat_n, int mat_k) { init_stack(stack, n_stack, 0, NULL, mat_m * mat_n, mat_m * mat_k, mat_k * mat_n, n_c, n_a, n_b); } //=========================================================================== // initialize the task list ("stack" in DBCSR lingo) void stackInitTransp(int* stack, int n_stack, int mat_m, int mat_n) { int* s = stack; for (int p = 0; p < n_stack; p++) *s++ = p * mat_m * mat_n; } //=========================================================================== void stackCalc(int* stack, int n_stack, double* mat_c, double* mat_a, double* mat_b, int mat_m, int mat_n, int mat_k) { for (int s = 0; s < n_stack; s++) { int a_base = stack[3 * s] - 1; int b_base = stack[3 * s + 1] - 1; int c_base = stack[3 * s + 2] - 1; for (int n = 0; n < mat_n; n++) { for (int m = 0; m < mat_m; m++) { double res = 0.; for (int k = 0; k < mat_k; k++) { int a_ind = k * mat_m + m; int b_ind = k * mat_n + n; res += mat_a[a_base + a_ind] * mat_b[b_base + b_ind]; } int c_ind = n * mat_m + m; mat_c[c_base + c_ind] += res; } } } } //=========================================================================== void stackTransp(int* stack, int n_stack, double* mat, double* mat_trs, int mat_m, int mat_n) { for (int s = 0; s < n_stack; s++) { int offset = stack[s]; for (int m = 0; m < mat_m; m++) { for (int n = 0; n < mat_n; n++) { int i = n * mat_m + m; int r_out = i % mat_n; int c_out = i / mat_n; int it = r_out * mat_m + c_out; mat_trs[offset + i] = mat[offset + it]; } } } } //=========================================================================== double checkSum(double* mat_c, int n_c, int mat_m, int mat_n) { double res = 0; for (int i = 0; i < n_c * mat_m * mat_n; i++) { res += mat_c[i]; } return res; } //=========================================================================== double checkSumTransp(double* mat, int n_stack, int mat_m, int mat_n) { // for transposition, a regular checkSum does not inform about the // transpose's correctness. Instead, we perform a checkSum on a // sample of elements. double res = 0; int size = mat_m * mat_n; int n_samples = size / 3; int step = size; if (n_samples > 0) { step = size / n_samples; } for (int s = 0; s < n_stack; s++) { int offset = s * size; for (int idx = s % step; idx < size; idx += step) res += mat[offset + idx]; } return res; } //=========================================================================== //Removes special symbols so that the output is useful for awk and gnuplot. static void clean_string(char* str_in, char* str_out) { for (int i = 0; i < 1000; i++) { if (str_in[i] == '=' || str_in[i] == ',' || str_in[i] == '(' || str_in[i] == ')') { str_out[i] = ' '; } else { str_out[i] = str_in[i]; } if (str_in[i] == 0) break; } } //=========================================================================== int libsmm_acc_benchmark( libsmm_acc_benchmark_t* h, int mat_m, int mat_n, int mat_k, int nkernels, KernelLauncher* launchers, char** kernel_descr) { if (mat_m > h->max_m || mat_n > h->max_n || mat_k > h->max_k) { printf("libsmm_acc_benchmark: got handle with too few resources\n"); exit(1); } extern const std::unordered_map ht; std::vector blocksizes; get_libsmm_acc_triplets(blocksizes, ht); auto it = std::find(std::begin(blocksizes), std::end(blocksizes), Triplet({mat_m, mat_n, mat_k})); if (it == std::end(blocksizes) && h->mode != tune) { printf("Triplet %i x %i x %i is not defined in libsmm_acc\n", mat_m, mat_n, mat_k); exit(1); } int n_iter{0}, n_warm{0}; switch (h->mode) { case tune: case timing: // for larger matrices few iteration give enough statistics n_iter = std::max(3, 12500 / (mat_m * mat_n * mat_k)); n_warm = std::min(3, n_iter); break; case test: n_iter = 1; n_warm = 1; break; } ACC_DRV(stream) stream; ACC_DRV_CALL(StreamCreate, (&stream, ACC_DRV(StreamDefault))); int error_counter = 0; int best_kernel = -1; double best_gflops = 0.0; double sumCPU, sumGPU; float t_duration; char descr[1000], msg_prefix[100] = ""; memset(h->mat_c, 0, h->n_c * mat_m * mat_n * sizeof(double)); matInit(h->mat_a, h->n_a, mat_m, mat_k, 42); matInit(h->mat_b, h->n_b, mat_k, mat_n, 24); if (h->mode == tune) printf("Initializing ...\n"); stackInit(h->stack, h->n_stack, h->n_c, h->n_a, h->n_b, mat_m, mat_n, mat_k); // Actually, we would have to calculate the stack n_iter times. // We cheat by simply scaling the results of a single stack calculation. stackCalc(h->stack, h->n_stack, h->mat_c, h->mat_a, h->mat_b, mat_m, mat_n, mat_k); for (int i = 0; i < h->n_c * mat_m * mat_n; i++) h->mat_c[i] *= n_iter; sumCPU = checkSum(h->mat_c, h->n_c, mat_m, mat_n); ACC_API_CALL(Memcpy, (h->d_mat_a, h->mat_a, h->n_a * mat_m * mat_k * sizeof(double), ACC(MemcpyHostToDevice))); ACC_API_CALL(Memcpy, (h->d_mat_b, h->mat_b, h->n_b * mat_k * mat_n * sizeof(double), ACC(MemcpyHostToDevice))); ACC_API_CALL(Memcpy, (h->d_stack, h->stack, h->n_stack * 3 * sizeof(int), ACC(MemcpyHostToDevice))); // d_mat_c gets zeroed after warmup run for (int ikern = 0; ikern < nkernels; ikern++) { // Warmup run (more often if n_iter is small) for (int i = 0; i < n_warm; i++) launchers[ikern](h->d_stack, h->n_stack, stream, mat_m, mat_n, mat_k, h->d_mat_a, h->d_mat_b, h->d_mat_c); ACC_API_CALL(Memset, (h->d_mat_c, 0, h->n_c * mat_m * mat_n * sizeof(double))); ACC_DRV_CALL(EventRecord, (h->t_start, stream)); for (int i = 0; i < n_iter; i++) launchers[ikern](h->d_stack, h->n_stack, stream, mat_m, mat_n, mat_k, h->d_mat_a, h->d_mat_b, h->d_mat_c); ACC_DRV_CALL(EventRecord, (h->t_stop, stream)); ACC_DRV_CALL(EventSynchronize, (h->t_stop)); ACC_DRV_CALL(EventElapsedTime, (&t_duration, h->t_start, h->t_stop)); ACC_API_CALL(Memcpy, (h->mat_c, h->d_mat_c, h->n_c * mat_m * mat_n * sizeof(double), ACC(MemcpyDeviceToHost))); clean_string(kernel_descr[ikern], descr); if (h->mode == tune) sprintf(msg_prefix, "params %d / %d\n", ikern + 1, nkernels); sumGPU = checkSum(h->mat_c, h->n_c, mat_m, mat_n); if (sumGPU != sumCPU) { printf("%sERROR %s checksum_diff: %g\n", msg_prefix, descr, sumGPU - sumCPU); error_counter++; continue; } if (h->mode == tune || h->mode == timing) { double gflops = ((double)n_iter * h->n_stack * mat_m * mat_n * mat_k * 2 / (1e9)) / (t_duration * 1e-3); printf("%sOK %s GFlop/s %g\n", msg_prefix, descr, gflops); if (best_gflops < gflops) { best_gflops = gflops; best_kernel = ikern; } } #if !defined(NDEBUG) else { printf("%sOK %s\n", msg_prefix, descr); } #endif } if (h->mode == tune) { printf("\n\n"); if (best_kernel > -1) { printf("WINNER: %d %s , # %g GFlop/s \n", best_kernel + 1, kernel_descr[best_kernel], best_gflops); } else { printf("WINNER: None\n"); } printf("Number of errors: %d\n", error_counter); } return (error_counter); } //=========================================================================== int libsmm_acc_benchmark_transpose_(int n_stack, int* stack, int* d_stack, double* mat, double* mat_trs, double* d_mat, int n, int mat_m, int mat_n, ACC_DRV(event) start, ACC_DRV(event) stop, char** kernel_descr, TransposeLauncher* launcher) { if (mat_m > MAX_KERNEL_DIM || mat_n > MAX_KERNEL_DIM) { printf("Cannot transpose matrices with dimensions above %i, got (%i x %i)\n", MAX_KERNEL_DIM, mat_m, mat_n); exit(1); } ACC_DRV(stream) stream; ACC_DRV_CALL(StreamCreate, (&stream, ACC_DRV(StreamDefault))); int offset = 0; int n_warm = 0; int n_iter = 1; int error_counter = 0; double sumCPU, sumGPU; float t_duration; char descr[1000], msg_prefix[100] = ""; // Matrix and stack initialization matInit(mat, n, mat_m, mat_n, 42); memset(mat_trs, 0, n * mat_m * mat_n * sizeof(double)); stackInitTransp(stack, n_stack, mat_m, mat_n); // Reference result on CPU stackTransp(stack, n_stack, mat, mat_trs, mat_m, mat_n); sumCPU = checkSumTransp(mat_trs, n_stack, mat_m, mat_n); // Compute on GPU ACC_API_CALL(Memcpy, (d_mat, mat, n * mat_m * mat_n * sizeof(double), ACC(MemcpyHostToDevice))); ACC_API_CALL(Memcpy, (d_stack, stack, n_stack * sizeof(int), ACC(MemcpyHostToDevice))); // Warmup run for (int i = 0; i < n_warm; i++) launcher[0](d_stack, offset, n_stack, d_mat, mat_m, mat_n, stream); // Real runs ACC_DRV_CALL(EventRecord, (start, stream)); for (int i = 0; i < n_iter; i++) launcher[0](d_stack, offset, n_stack, d_mat, mat_m, mat_n, stream); ACC_DRV_CALL(EventRecord, (stop, stream)); ACC_DRV_CALL(EventSynchronize, (stop)); ACC_DRV_CALL(EventElapsedTime, (&t_duration, start, stop)); // Check for errors and compare libsmm_acc result on GPU to reference ACC_API_CALL(Memcpy, (mat_trs, d_mat, n * mat_m * mat_n * sizeof(double), ACC(MemcpyDeviceToHost))); clean_string(kernel_descr[0], descr); sumGPU = checkSumTransp(mat_trs, n_stack, mat_m, mat_n); if (sumGPU != sumCPU) { printf("%sERROR %s checksum_diff: %g\n", msg_prefix, descr, sumGPU - sumCPU); error_counter++; } #if !defined(NDEBUG) else { printf("%sOK %s\n", msg_prefix, descr); } #endif return error_counter; } //=========================================================================== int libsmm_acc_benchmark_transpose( libsmm_acc_benchmark_t* handle, int mat_m, int mat_n, TransposeLauncher* launcher, char** kernel_descr) { if (mat_m > handle->max_m || mat_n > handle->max_n) { printf("libsmm_acc_benchmark_transpose: got handle with too few resources\n"); exit(1); } if (handle->mode == tune) { printf("Tune mode not supported for benchmarking of transpose"); exit(1); } int errors = 0; errors += libsmm_acc_benchmark_transpose_(handle->n_stack_trs_a, handle->stack_trs_a, handle->d_stack_trs_a, handle->mat_a, handle->mat_trs_a, handle->d_mat_a, handle->n_a, mat_m, mat_n, handle->t_start, handle->t_stop, kernel_descr, launcher); return errors; } ================================================ FILE: src/acc/libsmm_acc/libsmm_acc_benchmark.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #ifndef LIBSMM_ACC_BENCHMARK_H #define LIBSMM_ACC_BENCHMARK_H #if defined(__CUDA) # include "../cuda/acc_cuda.h" #elif defined(__HIP) # include "../hip/acc_hip.h" #endif #include "../acc_libsmm.h" typedef int (*KernelLauncher)(const int* param_stack_dev, int stack_size, ACC_DRV(stream) stream, int m, int n, int k, const double* a_data, const double* b_data, double* c_data); typedef int (*TransposeLauncher)( const int* param_stack, int offset, int nblks, double* buffer, int m, int n, ACC_DRV(stream) stream); enum benchmark_mode { test, tune, timing }; typedef struct { benchmark_mode mode; /* max block-sizes to expect */ int max_m, max_n, max_k; /* number of blocks to allocate in each panel */ int n_a, n_b, n_c; /* length of stack (multiplication, transpose a, transpose b) */ int n_stack, n_stack_trs_a, n_stack_trs_b; /* host-buffers */ double *mat_a, *mat_b, *mat_c; double *mat_trs_a, *mat_trs_b; int *stack, *stack_trs_a, *stack_trs_b; /* device-buffers */ double *d_mat_a, *d_mat_b, *d_mat_c; int *d_stack, *d_stack_trs_a, *d_stack_trs_b; /* events for measuring the runtime */ ACC_DRV(event) t_start, t_stop; } libsmm_acc_benchmark_t; void matInit(double* mat, int mat_n, int x, int y, int seed); void stackInit(int* stack, int n_stack, int n_c, int n_a, int n_b, int mat_m, int mat_n, int mat_k); void stackInitTransp(int* stack, int n_stack, int mat_m, int mat_n); void stackCalc(int* stack, int n_stack, double* mat_c, double* mat_a, double* mat_b, int mat_m, int mat_n, int mat_k); void stackTransp(int* stack, int n_stack, double* mat_a, double* mat_atrs, int mat_m, int mat_n); double checkSum(double* mat_c, int n_c, int mat_m, int mat_n); double checkSumTransp(double* mat, int n_stack, int mat_m, int mat_n); void libsmm_acc_benchmark_init(libsmm_acc_benchmark_t** handle, benchmark_mode mode, int max_m, int max_n, int max_k); void libsmm_acc_benchmark_finalize(libsmm_acc_benchmark_t*); int libsmm_acc_benchmark( libsmm_acc_benchmark_t* handle, int mat_m, int mat_n, int mat_k, int nkernel, KernelLauncher* launchers, char** kernel_descr); int libsmm_acc_benchmark_transpose( libsmm_acc_benchmark_t* handle, int mat_m, int mat_n, TransposeLauncher* launcher, char** kernel_descr); int libsmm_acc_benchmark_transpose_(int n_stack, int* stack, int* d_stack, double* mat, double* mat_trs, double* d_mat, int n, int mat_m, int mat_n, ACC_DRV(event) start, ACC_DRV(event) stop, char** kernel_descr, TransposeLauncher* launcher); #endif /*LIBSMM_ACC_BENCHMARK_H*/ ================================================ FILE: src/acc/libsmm_acc/libsmm_acc_init.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #include "libsmm_acc_init.h" #include "../acc_libsmm.h" #include "../cuda_hip/acc_utils.h" #if defined(_OPENMP) # include #endif std::vector acc_blashandles; //=========================================================================== #if defined(__DBCSR_ACC) void timeset(const std::string& routine_name, int& handle) { const char* routine_name_ = routine_name.c_str(); int routine_name_length = routine_name.length(); c_dbcsr_timeset(&routine_name_, &routine_name_length, &handle); } void timestop(int handle) { c_dbcsr_timestop(&handle); } #else void timeset(const std::string& routine_name, int& handle) { (void)(routine_name); (void)(handle); } void timestop(int handle) { (void)(handle); } #endif //=========================================================================== int libsmm_acc_gpu_blas_init() { // allocate memory for acc_blas handles #if defined _OPENMP const int nthreads = omp_get_num_threads(); #else const int nthreads = 1; #endif const int size = static_cast(acc_blashandles.size()); if (size < nthreads) { acc_blashandles.resize(nthreads); // initialize acc_blas and store acc_blas handles for (int i = size; i < nthreads; i++) { ACC_BLAS(Handle_t) * c_handle; acc_blas_create(&c_handle); acc_blashandles[i] = c_handle; } } return 0; } //=========================================================================== extern "C" int libsmm_acc_init() { std::string routineN = "libsmm_acc_init"; int handle; timeset(routineN, handle); // check warp size consistency libsmm_acc_check_gpu_warp_size_consistency(); libsmm_acc_gpu_blas_init(); timestop(handle); return 0; } //=========================================================================== extern "C" int libsmm_acc_finalize() { std::string routineN = "libsmm_acc_finalize"; int handle; timeset(routineN, handle); // free acc_blas handle resources; one handle per thread for (size_t i = 0; i < acc_blashandles.size(); i++) { acc_blas_destroy(acc_blashandles[i]); } acc_blashandles.clear(); timestop(handle); return 0; } //=========================================================================== int libsmm_acc_check_gpu_warp_size_consistency() { int acc_warp_size = acc_get_gpu_warp_size(); extern const int warp_size; if (warp_size != acc_warp_size) { printf("Inconsistency in warp sizes: Cuda/Hip indicates warp size = %d, while the gpu_properties files indicates warp_size = " "%d.\nPlease check whether src/acc/libsmm_acc/kernels/gpu_properties.json contains the correct data about the GPU you " "are using.", warp_size, acc_warp_size); } return 0; } //=========================================================================== extern "C" int libsmm_acc_is_thread_safe() { #if defined(_OPENMP) return 1; // i.e. true, libsmm_acc is threaded #else return 0; // i.e. false, libsmm_acc is not threaded #endif } ================================================ FILE: src/acc/libsmm_acc/libsmm_acc_init.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #ifndef LIBSMM_ACC_INIT_H #define LIBSMM_ACC_INIT_H #include "../cuda_hip/acc_blas.h" #include #include void timeset(const std::string& routine_name, int& handle); void timestop(int handle); extern "C" int libsmm_acc_init(void); extern "C" int libsmm_acc_finalize(void); int libsmm_acc_gpu_blas_init(); int libsmm_acc_check_gpu_warp_size_consistency(void); extern "C" int libsmm_acc_is_thread_safe(void); extern std::vector acc_blashandles; #endif /*LIBSMM_ACC_INIT_H*/ ================================================ FILE: src/acc/libsmm_acc/parameters/parameters_A100.json ================================================ [File too large to display: 11.3 MB] ================================================ FILE: src/acc/libsmm_acc/parameters/parameters_H100.json ================================================ [ {"m": 4, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 13, "algorithm": "medium", "perf": 374.319, "source": "autotuned"}, {"m": 4, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 450.325, "source": "autotuned"}, {"m": 4, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 551.093, "source": "autotuned"}, {"m": 4, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 1, "algorithm": "medium", "perf": 607.815, "source": "autotuned"}, {"m": 4, "n": 4, "k": 8, "threads": 32, "grouping": 6, "minblocks": 1, "algorithm": "tiny", "perf": 662.818, "source": "autotuned"}, {"m": 4, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 10, "algorithm": "medium", "perf": 669.072, "source": "autotuned"}, {"m": 4, "n": 4, "k": 10, "threads": 64, "grouping": 7, "minblocks": 1, "algorithm": "tiny", "perf": 720.571, "source": "autotuned"}, {"m": 4, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 27, "algorithm": "medium", "perf": 873.794, "source": "autotuned"}, {"m": 4, "n": 4, "k": 15, "threads": 32, "grouping": 4, "minblocks": 1, "algorithm": "tiny", "perf": 978.746, "source": "autotuned"}, {"m": 4, "n": 4, "k": 16, "threads": 32, "grouping": 4, "minblocks": 1, "algorithm": "tiny", "perf": 1018.3, "source": "autotuned"}, {"m": 4, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "small", "perf": 1210.71, "source": "autotuned"}, {"m": 4, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 13, "algorithm": "small", "perf": 1261.58, "source": "autotuned"}, {"m": 4, "n": 4, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 18, "algorithm": "small", "perf": 1143.85, "source": "autotuned"}, {"m": 4, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "small", "perf": 1169.45, "source": "autotuned"}, {"m": 4, "n": 4, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "small", "perf": 1239.73, "source": "autotuned"}, {"m": 4, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 6, "algorithm": "small", "perf": 1452.59, "source": "autotuned"}, {"m": 4, "n": 4, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 12, "algorithm": "medium", "perf": 1414.16, "source": "autotuned"}, {"m": 4, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 460.134, "source": "autotuned"}, {"m": 4, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 564.995, "source": "autotuned"}, {"m": 4, "n": 5, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 665.169, "source": "autotuned"}, {"m": 4, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 11, "algorithm": "medium", "perf": 685.809, "source": "autotuned"}, {"m": 4, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 758.531, "source": "autotuned"}, {"m": 4, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 8, "algorithm": "medium", "perf": 821.685, "source": "autotuned"}, {"m": 4, "n": 5, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 885.359, "source": "autotuned"}, {"m": 4, "n": 5, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1013.14, "source": "autotuned"}, {"m": 4, "n": 5, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1132.32, "source": "autotuned"}, {"m": 4, "n": 5, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1196.81, "source": "autotuned"}, {"m": 4, "n": 5, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1317.35, "source": "autotuned"}, {"m": 4, "n": 5, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1345.3, "source": "autotuned"}, {"m": 4, "n": 5, "k": 25, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1386.4, "source": "autotuned"}, {"m": 4, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 1280.93, "source": "autotuned"}, {"m": 4, "n": 5, "k": 28, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 1349.23, "source": "autotuned"}, {"m": 4, "n": 5, "k": 32, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 12, "algorithm": "medium", "perf": 1432.38, "source": "autotuned"}, {"m": 4, "n": 5, "k": 45, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 1565.29, "source": "autotuned"}, {"m": 4, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 16, "algorithm": "medium", "perf": 549.322, "source": "autotuned"}, {"m": 4, "n": 6, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 673.458, "source": "autotuned"}, {"m": 4, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 7, "algorithm": "medium", "perf": 729.041, "source": "autotuned"}, {"m": 4, "n": 6, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 27, "algorithm": "medium", "perf": 813.281, "source": "autotuned"}, {"m": 4, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 910.635, "source": "autotuned"}, {"m": 4, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 973.739, "source": "autotuned"}, {"m": 4, "n": 6, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 25, "algorithm": "medium", "perf": 1053.32, "source": "autotuned"}, {"m": 4, "n": 6, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1195.43, "source": "autotuned"}, {"m": 4, "n": 6, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1340.32, "source": "autotuned"}, {"m": 4, "n": 6, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 1411.88, "source": "autotuned"}, {"m": 4, "n": 6, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 1534.4, "source": "autotuned"}, {"m": 4, "n": 6, "k": 32, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1654.58, "source": "autotuned"}, {"m": 4, "n": 6, "k": 45, "tile_m": 2, "tile_n": 1, "w": 16, "v": 6, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 1936.72, "source": "autotuned"}, {"m": 4, "n": 7, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 20, "algorithm": "medium", "perf": 645.517, "source": "autotuned"}, {"m": 4, "n": 7, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 752.878, "source": "autotuned"}, {"m": 4, "n": 7, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 851.831, "source": "autotuned"}, {"m": 4, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 966.272, "source": "autotuned"}, {"m": 4, "n": 7, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 1051.7, "source": "autotuned"}, {"m": 4, "n": 7, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 1151.26, "source": "autotuned"}, {"m": 4, "n": 7, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1164.05, "source": "autotuned"}, {"m": 4, "n": 7, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 1369.76, "source": "autotuned"}, {"m": 4, "n": 7, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1397.07, "source": "autotuned"}, {"m": 4, "n": 7, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 1650.44, "source": "autotuned"}, {"m": 4, "n": 7, "k": 25, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 1671.4, "source": "autotuned"}, {"m": 4, "n": 7, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 1726.14, "source": "autotuned"}, {"m": 4, "n": 7, "k": 28, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1744.58, "source": "autotuned"}, {"m": 4, "n": 7, "k": 32, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 1877.78, "source": "autotuned"}, {"m": 4, "n": 7, "k": 45, "tile_m": 2, "tile_n": 1, "w": 16, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 2127.85, "source": "autotuned"}, {"m": 4, "n": 8, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 16, "algorithm": "medium", "perf": 591.198, "source": "autotuned"}, {"m": 4, "n": 8, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 835.546, "source": "autotuned"}, {"m": 4, "n": 8, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 971.585, "source": "autotuned"}, {"m": 4, "n": 8, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 16, "algorithm": "medium", "perf": 1100.84, "source": "autotuned"}, {"m": 4, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 8, "algorithm": "small", "perf": 1029.21, "source": "autotuned"}, {"m": 4, "n": 8, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1234.34, "source": "autotuned"}, {"m": 4, "n": 8, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1330.48, "source": "autotuned"}, {"m": 4, "n": 8, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1461.13, "source": "autotuned"}, {"m": 4, "n": 8, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1593.96, "source": "autotuned"}, {"m": 4, "n": 8, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 18, "algorithm": "medium", "perf": 1830.82, "source": "autotuned"}, {"m": 4, "n": 8, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 1921.19, "source": "autotuned"}, {"m": 4, "n": 8, "k": 32, "tile_m": 2, "tile_n": 1, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2194.19, "source": "autotuned"}, {"m": 4, "n": 8, "k": 45, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2284.62, "source": "autotuned"}, {"m": 4, "n": 9, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 7, "algorithm": "medium", "perf": 744.777, "source": "autotuned"}, {"m": 4, "n": 9, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 7, "algorithm": "medium", "perf": 876.774, "source": "autotuned"}, {"m": 4, "n": 9, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 1032.0, "source": "autotuned"}, {"m": 4, "n": 9, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 12, "algorithm": "medium", "perf": 1158.38, "source": "autotuned"}, {"m": 4, "n": 9, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 12, "minblocks": 7, "algorithm": "medium", "perf": 1189.54, "source": "autotuned"}, {"m": 4, "n": 9, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 1289.21, "source": "autotuned"}, {"m": 4, "n": 9, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1407.5, "source": "autotuned"}, {"m": 4, "n": 9, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1529.7, "source": "autotuned"}, {"m": 4, "n": 9, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 1596.49, "source": "autotuned"}, {"m": 4, "n": 9, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 1645.56, "source": "autotuned"}, {"m": 4, "n": 9, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1853.64, "source": "autotuned"}, {"m": 4, "n": 9, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1910.78, "source": "autotuned"}, {"m": 4, "n": 9, "k": 25, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 1934.81, "source": "autotuned"}, {"m": 4, "n": 9, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 1963.83, "source": "autotuned"}, {"m": 4, "n": 9, "k": 28, "tile_m": 2, "tile_n": 1, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2064.46, "source": "autotuned"}, {"m": 4, "n": 9, "k": 32, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2211.4, "source": "autotuned"}, {"m": 4, "n": 9, "k": 45, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 2282.4, "source": "autotuned"}, {"m": 4, "n": 10, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 829.44, "source": "autotuned"}, {"m": 4, "n": 10, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 4, "algorithm": "medium", "perf": 992.151, "source": "autotuned"}, {"m": 4, "n": 10, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 1159.14, "source": "autotuned"}, {"m": 4, "n": 10, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1208.58, "source": "autotuned"}, {"m": 4, "n": 10, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 1326.38, "source": "autotuned"}, {"m": 4, "n": 10, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1425.19, "source": "autotuned"}, {"m": 4, "n": 10, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1423.61, "source": "autotuned"}, {"m": 4, "n": 10, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 1603.58, "source": "autotuned"}, {"m": 4, "n": 10, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 1756.73, "source": "autotuned"}, {"m": 4, "n": 10, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2062.22, "source": "autotuned"}, {"m": 4, "n": 10, "k": 26, "tile_m": 2, "tile_n": 1, "w": 10, "v": 10, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2206.03, "source": "autotuned"}, {"m": 4, "n": 10, "k": 32, "tile_m": 2, "tile_n": 1, "w": 12, "v": 10, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 2448.7, "source": "autotuned"}, {"m": 4, "n": 10, "k": 45, "tile_m": 2, "tile_n": 1, "w": 22, "v": 10, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 2448.08, "source": "autotuned"}, {"m": 4, "n": 13, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 1070.38, "source": "autotuned"}, {"m": 4, "n": 13, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1175.73, "source": "autotuned"}, {"m": 4, "n": 13, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1378.07, "source": "autotuned"}, {"m": 4, "n": 13, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1536.92, "source": "autotuned"}, {"m": 4, "n": 13, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1546.38, "source": "autotuned"}, {"m": 4, "n": 13, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 1675.4, "source": "autotuned"}, {"m": 4, "n": 13, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 24, "algorithm": "medium", "perf": 1682.24, "source": "autotuned"}, {"m": 4, "n": 13, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 2008.88, "source": "autotuned"}, {"m": 4, "n": 13, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 2094.97, "source": "autotuned"}, {"m": 4, "n": 13, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2184.41, "source": "autotuned"}, {"m": 4, "n": 13, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2589.63, "source": "autotuned"}, {"m": 4, "n": 13, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2538.99, "source": "autotuned"}, {"m": 4, "n": 13, "k": 25, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 2587.59, "source": "autotuned"}, {"m": 4, "n": 13, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 2650.08, "source": "autotuned"}, {"m": 4, "n": 13, "k": 28, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2729.36, "source": "autotuned"}, {"m": 4, "n": 13, "k": 32, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 2848.12, "source": "autotuned"}, {"m": 4, "n": 13, "k": 45, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 3044.66, "source": "autotuned"}, {"m": 4, "n": 15, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 1230.67, "source": "autotuned"}, {"m": 4, "n": 15, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1345.56, "source": "autotuned"}, {"m": 4, "n": 15, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1572.75, "source": "autotuned"}, {"m": 4, "n": 15, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 24, "algorithm": "medium", "perf": 1639.15, "source": "autotuned"}, {"m": 4, "n": 15, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1776.81, "source": "autotuned"}, {"m": 4, "n": 15, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 1793.29, "source": "autotuned"}, {"m": 4, "n": 15, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 1937.34, "source": "autotuned"}, {"m": 4, "n": 15, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 2200.58, "source": "autotuned"}, {"m": 4, "n": 15, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 2423.12, "source": "autotuned"}, {"m": 4, "n": 15, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2458.43, "source": "autotuned"}, {"m": 4, "n": 15, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2751.5, "source": "autotuned"}, {"m": 4, "n": 15, "k": 25, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2883.44, "source": "autotuned"}, {"m": 4, "n": 15, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 2891.13, "source": "autotuned"}, {"m": 4, "n": 15, "k": 45, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 3282.7, "source": "autotuned"}, {"m": 4, "n": 16, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 1, "algorithm": "medium", "perf": 1102.31, "source": "autotuned"}, {"m": 4, "n": 16, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1466.62, "source": "autotuned"}, {"m": 4, "n": 16, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 1953.78, "source": "autotuned"}, {"m": 4, "n": 16, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 2398.44, "source": "autotuned"}, {"m": 4, "n": 16, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 2588.95, "source": "autotuned"}, {"m": 4, "n": 16, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2665.19, "source": "autotuned"}, {"m": 4, "n": 16, "k": 22, "tile_m": 2, "tile_n": 1, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3063.49, "source": "autotuned"}, {"m": 4, "n": 16, "k": 25, "tile_m": 2, "tile_n": 1, "w": 12, "v": 16, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3021.44, "source": "autotuned"}, {"m": 4, "n": 16, "k": 26, "tile_m": 2, "tile_n": 1, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3130.48, "source": "autotuned"}, {"m": 4, "n": 16, "k": 45, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 3473.06, "source": "autotuned"}, {"m": 4, "n": 22, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1504.19, "source": "autotuned"}, {"m": 4, "n": 22, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 7, "minblocks": 17, "algorithm": "medium", "perf": 1694.47, "source": "autotuned"}, {"m": 4, "n": 22, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 7, "minblocks": 10, "algorithm": "medium", "perf": 1905.24, "source": "autotuned"}, {"m": 4, "n": 22, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2149.26, "source": "autotuned"}, {"m": 4, "n": 22, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 2214.12, "source": "autotuned"}, {"m": 4, "n": 22, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 2203.54, "source": "autotuned"}, {"m": 4, "n": 22, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2349.64, "source": "autotuned"}, {"m": 4, "n": 22, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2692.61, "source": "autotuned"}, {"m": 4, "n": 22, "k": 15, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2858.04, "source": "autotuned"}, {"m": 4, "n": 22, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 3039.53, "source": "autotuned"}, {"m": 4, "n": 22, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 3188.7, "source": "autotuned"}, {"m": 4, "n": 22, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 11, "algorithm": "medium", "perf": 3230.8, "source": "autotuned"}, {"m": 4, "n": 22, "k": 25, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 3221.15, "source": "autotuned"}, {"m": 4, "n": 22, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 3009.88, "source": "autotuned"}, {"m": 4, "n": 22, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 6, "algorithm": "medium", "perf": 3510.13, "source": "autotuned"}, {"m": 4, "n": 22, "k": 45, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 2, "algorithm": "medium", "perf": 3543.15, "source": "autotuned"}, {"m": 4, "n": 23, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 1567.86, "source": "autotuned"}, {"m": 4, "n": 23, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 6, "minblocks": 9, "algorithm": "medium", "perf": 1737.36, "source": "autotuned"}, {"m": 4, "n": 23, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 2696.97, "source": "autotuned"}, {"m": 4, "n": 23, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 3083.2, "source": "autotuned"}, {"m": 4, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 3081.02, "source": "autotuned"}, {"m": 4, "n": 23, "k": 26, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 3348.37, "source": "autotuned"}, {"m": 4, "n": 25, "k": 4, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 1508.44, "source": "autotuned"}, {"m": 4, "n": 25, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1781.44, "source": "autotuned"}, {"m": 4, "n": 25, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2197.88, "source": "autotuned"}, {"m": 4, "n": 25, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 2360.08, "source": "autotuned"}, {"m": 4, "n": 25, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 2740.9, "source": "autotuned"}, {"m": 4, "n": 25, "k": 15, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 2933.47, "source": "autotuned"}, {"m": 4, "n": 25, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 3040.3, "source": "autotuned"}, {"m": 4, "n": 25, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 6, "algorithm": "medium", "perf": 3165.55, "source": "autotuned"}, {"m": 4, "n": 25, "k": 25, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 6, "algorithm": "medium", "perf": 3291.37, "source": "autotuned"}, {"m": 4, "n": 25, "k": 26, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 3300.52, "source": "autotuned"}, {"m": 4, "n": 25, "k": 28, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 3354.34, "source": "autotuned"}, {"m": 4, "n": 25, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 5, "algorithm": "medium", "perf": 3460.54, "source": "autotuned"}, {"m": 4, "n": 25, "k": 45, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 3438.81, "source": "autotuned"}, {"m": 4, "n": 26, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 6, "algorithm": "medium", "perf": 1589.7, "source": "autotuned"}, {"m": 4, "n": 26, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 1861.6, "source": "autotuned"}, {"m": 4, "n": 26, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 2167.34, "source": "autotuned"}, {"m": 4, "n": 26, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 2375.26, "source": "autotuned"}, {"m": 4, "n": 26, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 15, "algorithm": "medium", "perf": 2378.79, "source": "autotuned"}, {"m": 4, "n": 26, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 2557.1, "source": "autotuned"}, {"m": 4, "n": 26, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2649.38, "source": "autotuned"}, {"m": 4, "n": 26, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 2945.74, "source": "autotuned"}, {"m": 4, "n": 26, "k": 15, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 11, "algorithm": "medium", "perf": 3133.51, "source": "autotuned"}, {"m": 4, "n": 26, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 3366.55, "source": "autotuned"}, {"m": 4, "n": 26, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 3463.55, "source": "autotuned"}, {"m": 4, "n": 26, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 3772.86, "source": "autotuned"}, {"m": 4, "n": 26, "k": 25, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 2, "algorithm": "medium", "perf": 3502.78, "source": "autotuned"}, {"m": 4, "n": 26, "k": 26, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 6, "algorithm": "medium", "perf": 3515.07, "source": "autotuned"}, {"m": 4, "n": 26, "k": 28, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 5, "algorithm": "medium", "perf": 3619.65, "source": "autotuned"}, {"m": 4, "n": 26, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 2, "algorithm": "medium", "perf": 3694.83, "source": "autotuned"}, {"m": 4, "n": 26, "k": 45, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 3591.91, "source": "autotuned"}, {"m": 4, "n": 28, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 1683.8, "source": "autotuned"}, {"m": 4, "n": 28, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 2010.42, "source": "autotuned"}, {"m": 4, "n": 28, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2466.7, "source": "autotuned"}, {"m": 4, "n": 28, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 2730.71, "source": "autotuned"}, {"m": 4, "n": 28, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 3119.58, "source": "autotuned"}, {"m": 4, "n": 28, "k": 25, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 3629.25, "source": "autotuned"}, {"m": 4, "n": 28, "k": 26, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 3679.08, "source": "autotuned"}, {"m": 4, "n": 28, "k": 28, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 3721.21, "source": "autotuned"}, {"m": 4, "n": 28, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 6, "algorithm": "medium", "perf": 3884.2, "source": "autotuned"}, {"m": 4, "n": 28, "k": 45, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 16, "minblocks": 5, "algorithm": "medium", "perf": 3705.22, "source": "autotuned"}, {"m": 4, "n": 32, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 5, "algorithm": "small", "perf": 1956.68, "source": "autotuned"}, {"m": 4, "n": 32, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2255.48, "source": "autotuned"}, {"m": 4, "n": 32, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 2560.8, "source": "autotuned"}, {"m": 4, "n": 32, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 2776.84, "source": "autotuned"}, {"m": 4, "n": 32, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2816.0, "source": "autotuned"}, {"m": 4, "n": 32, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 2912.94, "source": "autotuned"}, {"m": 4, "n": 32, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3059.09, "source": "autotuned"}, {"m": 4, "n": 32, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 11, "algorithm": "medium", "perf": 3465.69, "source": "autotuned"}, {"m": 4, "n": 32, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 3850.83, "source": "autotuned"}, {"m": 4, "n": 32, "k": 25, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 3889.43, "source": "autotuned"}, {"m": 4, "n": 32, "k": 26, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 6, "algorithm": "medium", "perf": 3941.25, "source": "autotuned"}, {"m": 4, "n": 32, "k": 28, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 3980.52, "source": "autotuned"}, {"m": 4, "n": 32, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 7, "algorithm": "medium", "perf": 4094.55, "source": "autotuned"}, {"m": 4, "n": 32, "k": 45, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 3790.66, "source": "autotuned"}, {"m": 4, "n": 45, "k": 4, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 2427.89, "source": "autotuned"}, {"m": 4, "n": 45, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 2694.21, "source": "autotuned"}, {"m": 4, "n": 45, "k": 6, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 3129.76, "source": "autotuned"}, {"m": 4, "n": 45, "k": 7, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 3431.2, "source": "autotuned"}, {"m": 4, "n": 45, "k": 8, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3177.17, "source": "autotuned"}, {"m": 4, "n": 45, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 3346.18, "source": "autotuned"}, {"m": 4, "n": 45, "k": 10, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3483.84, "source": "autotuned"}, {"m": 4, "n": 45, "k": 13, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 6, "algorithm": "medium", "perf": 3836.01, "source": "autotuned"}, {"m": 4, "n": 45, "k": 15, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 3, "algorithm": "medium", "perf": 3866.63, "source": "autotuned"}, {"m": 4, "n": 45, "k": 16, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 10, "algorithm": "medium", "perf": 3960.0, "source": "autotuned"}, {"m": 4, "n": 45, "k": 22, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 4, "algorithm": "medium", "perf": 4103.49, "source": "autotuned"}, {"m": 4, "n": 45, "k": 25, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 4, "algorithm": "medium", "perf": 4055.32, "source": "autotuned"}, {"m": 4, "n": 45, "k": 26, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 3849.89, "source": "autotuned"}, {"m": 4, "n": 45, "k": 28, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 16, "minblocks": 3, "algorithm": "medium", "perf": 3838.76, "source": "autotuned"}, {"m": 4, "n": 45, "k": 32, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 3898.38, "source": "autotuned"}, {"m": 4, "n": 45, "k": 45, "tile_m": 1, "tile_n": 6, "w": 16, "v": 42, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3792.73, "source": "autotuned"}, {"m": 5, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 456.734, "source": "autotuned"}, {"m": 5, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 15, "algorithm": "medium", "perf": 547.936, "source": "autotuned"}, {"m": 5, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 627.773, "source": "autotuned"}, {"m": 5, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 9, "algorithm": "medium", "perf": 648.722, "source": "autotuned"}, {"m": 5, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 712.755, "source": "autotuned"}, {"m": 5, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 12, "algorithm": "medium", "perf": 770.569, "source": "autotuned"}, {"m": 5, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 6, "algorithm": "medium", "perf": 820.199, "source": "autotuned"}, {"m": 5, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 889.483, "source": "autotuned"}, {"m": 5, "n": 4, "k": 15, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 987.785, "source": "autotuned"}, {"m": 5, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 1025.03, "source": "autotuned"}, {"m": 5, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 16, "algorithm": "medium", "perf": 1126.7, "source": "autotuned"}, {"m": 5, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 14, "algorithm": "medium", "perf": 1135.53, "source": "autotuned"}, {"m": 5, "n": 4, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 16, "algorithm": "medium", "perf": 1184.31, "source": "autotuned"}, {"m": 5, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 1142.17, "source": "autotuned"}, {"m": 5, "n": 4, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 11, "minblocks": 10, "algorithm": "medium", "perf": 1196.49, "source": "autotuned"}, {"m": 5, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 23, "algorithm": "medium", "perf": 1245.14, "source": "autotuned"}, {"m": 5, "n": 4, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 17, "algorithm": "medium", "perf": 1310.16, "source": "autotuned"}, {"m": 5, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 557.737, "source": "autotuned"}, {"m": 5, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 695.086, "source": "autotuned"}, {"m": 5, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 811.011, "source": "autotuned"}, {"m": 5, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 803.107, "source": "autotuned"}, {"m": 5, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 876.847, "source": "autotuned"}, {"m": 5, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 26, "algorithm": "medium", "perf": 967.401, "source": "autotuned"}, {"m": 5, "n": 5, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 9, "algorithm": "medium", "perf": 1002.24, "source": "autotuned"}, {"m": 5, "n": 5, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 6, "algorithm": "medium", "perf": 1130.87, "source": "autotuned"}, {"m": 5, "n": 5, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 22, "algorithm": "small", "perf": 1148.66, "source": "autotuned"}, {"m": 5, "n": 5, "k": 14, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 29, "algorithm": "small", "perf": 1201.59, "source": "autotuned"}, {"m": 5, "n": 5, "k": 15, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 6, "algorithm": "small", "perf": 1244.73, "source": "autotuned"}, {"m": 5, "n": 5, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "small", "perf": 1321.81, "source": "autotuned"}, {"m": 5, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 14, "algorithm": "medium", "perf": 1408.73, "source": "autotuned"}, {"m": 5, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 2, "algorithm": "medium", "perf": 1399.14, "source": "autotuned"}, {"m": 5, "n": 5, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "small", "perf": 1434.65, "source": "autotuned"}, {"m": 5, "n": 5, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 15, "algorithm": "medium", "perf": 1468.63, "source": "autotuned"}, {"m": 5, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 23, "algorithm": "medium", "perf": 1465.29, "source": "autotuned"}, {"m": 5, "n": 5, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 25, "algorithm": "medium", "perf": 1513.7, "source": "autotuned"}, {"m": 5, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 24, "algorithm": "medium", "perf": 1589.06, "source": "autotuned"}, {"m": 5, "n": 5, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 1655.15, "source": "autotuned"}, {"m": 5, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 673.023, "source": "autotuned"}, {"m": 5, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 820.523, "source": "autotuned"}, {"m": 5, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 881.939, "source": "autotuned"}, {"m": 5, "n": 6, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 985.439, "source": "autotuned"}, {"m": 5, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 25, "algorithm": "medium", "perf": 1076.66, "source": "autotuned"}, {"m": 5, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 1159.81, "source": "autotuned"}, {"m": 5, "n": 6, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 27, "algorithm": "medium", "perf": 1216.16, "source": "autotuned"}, {"m": 5, "n": 6, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 1320.49, "source": "autotuned"}, {"m": 5, "n": 6, "k": 14, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 1387.99, "source": "autotuned"}, {"m": 5, "n": 6, "k": 15, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 1450.68, "source": "autotuned"}, {"m": 5, "n": 6, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 1562.21, "source": "autotuned"}, {"m": 5, "n": 6, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 1683.83, "source": "autotuned"}, {"m": 5, "n": 6, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 19, "algorithm": "medium", "perf": 1746.98, "source": "autotuned"}, {"m": 5, "n": 6, "k": 45, "tile_m": 1, "tile_n": 1, "w": 18, "v": 6, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 1909.47, "source": "autotuned"}, {"m": 5, "n": 7, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 739.478, "source": "autotuned"}, {"m": 5, "n": 7, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 26, "algorithm": "medium", "perf": 788.035, "source": "autotuned"}, {"m": 5, "n": 7, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 899.345, "source": "autotuned"}, {"m": 5, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 977.24, "source": "autotuned"}, {"m": 5, "n": 7, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 1079.15, "source": "autotuned"}, {"m": 5, "n": 7, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 1156.27, "source": "autotuned"}, {"m": 5, "n": 7, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1200.41, "source": "autotuned"}, {"m": 5, "n": 7, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 27, "algorithm": "small", "perf": 1424.46, "source": "autotuned"}, {"m": 5, "n": 7, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1430.12, "source": "autotuned"}, {"m": 5, "n": 7, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 26, "algorithm": "medium", "perf": 1649.56, "source": "autotuned"}, {"m": 5, "n": 7, "k": 25, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 25, "algorithm": "medium", "perf": 1714.78, "source": "autotuned"}, {"m": 5, "n": 7, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 25, "algorithm": "medium", "perf": 1699.51, "source": "autotuned"}, {"m": 5, "n": 7, "k": 28, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 1736.34, "source": "autotuned"}, {"m": 5, "n": 7, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 17, "algorithm": "medium", "perf": 1855.44, "source": "autotuned"}, {"m": 5, "n": 7, "k": 45, "tile_m": 3, "tile_n": 1, "w": 18, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2007.73, "source": "autotuned"}, {"m": 5, "n": 8, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 778.444, "source": "autotuned"}, {"m": 5, "n": 8, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 900.267, "source": "autotuned"}, {"m": 5, "n": 8, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 1055.54, "source": "autotuned"}, {"m": 5, "n": 8, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 1134.58, "source": "autotuned"}, {"m": 5, "n": 8, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 31, "algorithm": "small", "perf": 1140.6, "source": "autotuned"}, {"m": 5, "n": 8, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1299.36, "source": "autotuned"}, {"m": 5, "n": 8, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1390.57, "source": "autotuned"}, {"m": 5, "n": 8, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 1485.47, "source": "autotuned"}, {"m": 5, "n": 8, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 1637.4, "source": "autotuned"}, {"m": 5, "n": 8, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 1839.11, "source": "autotuned"}, {"m": 5, "n": 8, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 1911.78, "source": "autotuned"}, {"m": 5, "n": 8, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 18, "algorithm": "medium", "perf": 2109.0, "source": "autotuned"}, {"m": 5, "n": 8, "k": 45, "tile_m": 3, "tile_n": 1, "w": 16, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2277.75, "source": "autotuned"}, {"m": 5, "n": 9, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 15, "algorithm": "medium", "perf": 860.916, "source": "autotuned"}, {"m": 5, "n": 9, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 1000.64, "source": "autotuned"}, {"m": 5, "n": 9, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 26, "algorithm": "medium", "perf": 1113.25, "source": "autotuned"}, {"m": 5, "n": 9, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 1, "algorithm": "medium", "perf": 1222.28, "source": "autotuned"}, {"m": 5, "n": 9, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1340.32, "source": "autotuned"}, {"m": 5, "n": 9, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 1427.34, "source": "autotuned"}, {"m": 5, "n": 9, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1540.8, "source": "autotuned"}, {"m": 5, "n": 9, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1640.26, "source": "autotuned"}, {"m": 5, "n": 9, "k": 14, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 1742.4, "source": "autotuned"}, {"m": 5, "n": 9, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 21, "algorithm": "medium", "perf": 1697.46, "source": "autotuned"}, {"m": 5, "n": 9, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 27, "algorithm": "medium", "perf": 1769.59, "source": "autotuned"}, {"m": 5, "n": 9, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 2000.29, "source": "autotuned"}, {"m": 5, "n": 9, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 2029.71, "source": "autotuned"}, {"m": 5, "n": 9, "k": 25, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 2060.4, "source": "autotuned"}, {"m": 5, "n": 9, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 2083.24, "source": "autotuned"}, {"m": 5, "n": 9, "k": 28, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 2144.74, "source": "autotuned"}, {"m": 5, "n": 9, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 2284.62, "source": "autotuned"}, {"m": 5, "n": 9, "k": 45, "tile_m": 3, "tile_n": 1, "w": 20, "v": 6, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 2423.49, "source": "autotuned"}, {"m": 5, "n": 10, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 954.952, "source": "autotuned"}, {"m": 5, "n": 10, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 1107.13, "source": "autotuned"}, {"m": 5, "n": 10, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 1242.56, "source": "autotuned"}, {"m": 5, "n": 10, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 16, "algorithm": "medium", "perf": 1330.78, "source": "autotuned"}, {"m": 5, "n": 10, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 1480.0, "source": "autotuned"}, {"m": 5, "n": 10, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 1593.52, "source": "autotuned"}, {"m": 5, "n": 10, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1559.48, "source": "autotuned"}, {"m": 5, "n": 10, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 24, "algorithm": "medium", "perf": 1737.53, "source": "autotuned"}, {"m": 5, "n": 10, "k": 14, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 27, "algorithm": "medium", "perf": 1806.06, "source": "autotuned"}, {"m": 5, "n": 10, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 1, "algorithm": "medium", "perf": 1845.88, "source": "autotuned"}, {"m": 5, "n": 10, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 2184.8, "source": "autotuned"}, {"m": 5, "n": 10, "k": 26, "tile_m": 3, "tile_n": 1, "w": 12, "v": 10, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2347.77, "source": "autotuned"}, {"m": 5, "n": 10, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 2481.4, "source": "autotuned"}, {"m": 5, "n": 10, "k": 45, "tile_m": 3, "tile_n": 1, "w": 18, "v": 10, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2622.59, "source": "autotuned"}, {"m": 5, "n": 12, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 11, "minblocks": 23, "algorithm": "medium", "perf": 1295.41, "source": "autotuned"}, {"m": 5, "n": 12, "k": 12, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 1996.38, "source": "autotuned"}, {"m": 5, "n": 12, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 11, "algorithm": "medium", "perf": 2033.87, "source": "autotuned"}, {"m": 5, "n": 12, "k": 26, "tile_m": 3, "tile_n": 1, "w": 12, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2666.36, "source": "autotuned"}, {"m": 5, "n": 12, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2847.44, "source": "autotuned"}, {"m": 5, "n": 13, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 1173.74, "source": "autotuned"}, {"m": 5, "n": 13, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1325.52, "source": "autotuned"}, {"m": 5, "n": 13, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 1546.38, "source": "autotuned"}, {"m": 5, "n": 13, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1682.94, "source": "autotuned"}, {"m": 5, "n": 13, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1726.92, "source": "autotuned"}, {"m": 5, "n": 13, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1868.74, "source": "autotuned"}, {"m": 5, "n": 13, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 1894.76, "source": "autotuned"}, {"m": 5, "n": 13, "k": 12, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 22, "algorithm": "medium", "perf": 2091.46, "source": "autotuned"}, {"m": 5, "n": 13, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2113.54, "source": "autotuned"}, {"m": 5, "n": 13, "k": 14, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2202.03, "source": "autotuned"}, {"m": 5, "n": 13, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 2234.8, "source": "autotuned"}, {"m": 5, "n": 13, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 2351.02, "source": "autotuned"}, {"m": 5, "n": 13, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 12, "algorithm": "medium", "perf": 2702.78, "source": "autotuned"}, {"m": 5, "n": 13, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 2732.69, "source": "autotuned"}, {"m": 5, "n": 13, "k": 24, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 11, "algorithm": "medium", "perf": 2779.76, "source": "autotuned"}, {"m": 5, "n": 13, "k": 25, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 2765.14, "source": "autotuned"}, {"m": 5, "n": 13, "k": 26, "tile_m": 3, "tile_n": 1, "w": 12, "v": 10, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 2827.65, "source": "autotuned"}, {"m": 5, "n": 13, "k": 28, "tile_m": 3, "tile_n": 1, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 2871.56, "source": "autotuned"}, {"m": 5, "n": 13, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 2958.27, "source": "autotuned"}, {"m": 5, "n": 13, "k": 45, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 11, "minblocks": 2, "algorithm": "medium", "perf": 3093.75, "source": "autotuned"}, {"m": 5, "n": 14, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1419.58, "source": "autotuned"}, {"m": 5, "n": 14, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 1669.01, "source": "autotuned"}, {"m": 5, "n": 14, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2003.97, "source": "autotuned"}, {"m": 5, "n": 14, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2039.36, "source": "autotuned"}, {"m": 5, "n": 14, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 25, "algorithm": "medium", "perf": 2259.2, "source": "autotuned"}, {"m": 5, "n": 14, "k": 14, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 25, "algorithm": "medium", "perf": 2302.99, "source": "autotuned"}, {"m": 5, "n": 15, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 1348.37, "source": "autotuned"}, {"m": 5, "n": 15, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1546.97, "source": "autotuned"}, {"m": 5, "n": 15, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 14, "algorithm": "medium", "perf": 1772.98, "source": "autotuned"}, {"m": 5, "n": 15, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 1785.74, "source": "autotuned"}, {"m": 5, "n": 15, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 1943.93, "source": "autotuned"}, {"m": 5, "n": 15, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2022.26, "source": "autotuned"}, {"m": 5, "n": 15, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2142.76, "source": "autotuned"}, {"m": 5, "n": 15, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 27, "algorithm": "medium", "perf": 2344.95, "source": "autotuned"}, {"m": 5, "n": 15, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2529.91, "source": "autotuned"}, {"m": 5, "n": 15, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2666.91, "source": "autotuned"}, {"m": 5, "n": 15, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 2972.37, "source": "autotuned"}, {"m": 5, "n": 15, "k": 25, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 3045.61, "source": "autotuned"}, {"m": 5, "n": 15, "k": 26, "tile_m": 3, "tile_n": 1, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3115.16, "source": "autotuned"}, {"m": 5, "n": 15, "k": 45, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 11, "minblocks": 4, "algorithm": "medium", "perf": 3398.71, "source": "autotuned"}, {"m": 5, "n": 16, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1415.25, "source": "autotuned"}, {"m": 5, "n": 16, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1641.81, "source": "autotuned"}, {"m": 5, "n": 16, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2142.4, "source": "autotuned"}, {"m": 5, "n": 16, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 25, "algorithm": "medium", "perf": 2511.85, "source": "autotuned"}, {"m": 5, "n": 16, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2709.65, "source": "autotuned"}, {"m": 5, "n": 16, "k": 16, "tile_m": 3, "tile_n": 1, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3030.93, "source": "autotuned"}, {"m": 5, "n": 16, "k": 22, "tile_m": 3, "tile_n": 1, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3309.3, "source": "autotuned"}, {"m": 5, "n": 16, "k": 23, "tile_m": 3, "tile_n": 1, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3282.83, "source": "autotuned"}, {"m": 5, "n": 16, "k": 25, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3262.78, "source": "autotuned"}, {"m": 5, "n": 16, "k": 26, "tile_m": 3, "tile_n": 1, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 3332.59, "source": "autotuned"}, {"m": 5, "n": 16, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 3344.17, "source": "autotuned"}, {"m": 5, "n": 16, "k": 45, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 11, "minblocks": 6, "algorithm": "medium", "perf": 3556.08, "source": "autotuned"}, {"m": 5, "n": 22, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 12, "minblocks": 12, "algorithm": "medium", "perf": 1689.82, "source": "autotuned"}, {"m": 5, "n": 22, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 6, "minblocks": 26, "algorithm": "medium", "perf": 1894.77, "source": "autotuned"}, {"m": 5, "n": 22, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 6, "algorithm": "medium", "perf": 2190.95, "source": "autotuned"}, {"m": 5, "n": 22, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2114.96, "source": "autotuned"}, {"m": 5, "n": 22, "k": 8, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 2377.29, "source": "autotuned"}, {"m": 5, "n": 22, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 2318.77, "source": "autotuned"}, {"m": 5, "n": 22, "k": 10, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2632.97, "source": "autotuned"}, {"m": 5, "n": 22, "k": 13, "tile_m": 3, "tile_n": 2, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 2902.99, "source": "autotuned"}, {"m": 5, "n": 22, "k": 15, "tile_m": 3, "tile_n": 2, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3007.19, "source": "autotuned"}, {"m": 5, "n": 22, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 3294.27, "source": "autotuned"}, {"m": 5, "n": 22, "k": 22, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3450.34, "source": "autotuned"}, {"m": 5, "n": 22, "k": 23, "tile_m": 3, "tile_n": 2, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3273.99, "source": "autotuned"}, {"m": 5, "n": 22, "k": 25, "tile_m": 3, "tile_n": 2, "w": 12, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3338.42, "source": "autotuned"}, {"m": 5, "n": 22, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3331.46, "source": "autotuned"}, {"m": 5, "n": 22, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 9, "algorithm": "medium", "perf": 3655.12, "source": "autotuned"}, {"m": 5, "n": 22, "k": 45, "tile_m": 3, "tile_n": 2, "w": 18, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3859.35, "source": "autotuned"}, {"m": 5, "n": 23, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1770.04, "source": "autotuned"}, {"m": 5, "n": 23, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 1989.26, "source": "autotuned"}, {"m": 5, "n": 23, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2467.99, "source": "autotuned"}, {"m": 5, "n": 23, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 2951.09, "source": "autotuned"}, {"m": 5, "n": 23, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 3260.54, "source": "autotuned"}, {"m": 5, "n": 23, "k": 22, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3265.54, "source": "autotuned"}, {"m": 5, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3216.81, "source": "autotuned"}, {"m": 5, "n": 23, "k": 26, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 4, "algorithm": "medium", "perf": 3441.81, "source": "autotuned"}, {"m": 5, "n": 24, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 2052.98, "source": "autotuned"}, {"m": 5, "n": 24, "k": 13, "tile_m": 3, "tile_n": 2, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3145.35, "source": "autotuned"}, {"m": 5, "n": 24, "k": 24, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 3659.45, "source": "autotuned"}, {"m": 5, "n": 24, "k": 26, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 3659.89, "source": "autotuned"}, {"m": 5, "n": 24, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 4, "algorithm": "medium", "perf": 3829.71, "source": "autotuned"}, {"m": 5, "n": 25, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 7, "minblocks": 25, "algorithm": "medium", "perf": 1806.14, "source": "autotuned"}, {"m": 5, "n": 25, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 25, "algorithm": "medium", "perf": 2146.59, "source": "autotuned"}, {"m": 5, "n": 25, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 24, "algorithm": "medium", "perf": 2383.09, "source": "autotuned"}, {"m": 5, "n": 25, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 2649.02, "source": "autotuned"}, {"m": 5, "n": 25, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 3136.32, "source": "autotuned"}, {"m": 5, "n": 25, "k": 15, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 11, "algorithm": "medium", "perf": 3317.66, "source": "autotuned"}, {"m": 5, "n": 25, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 3450.34, "source": "autotuned"}, {"m": 5, "n": 25, "k": 22, "tile_m": 3, "tile_n": 2, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3397.17, "source": "autotuned"}, {"m": 5, "n": 25, "k": 25, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 12, "minblocks": 10, "algorithm": "medium", "perf": 3582.78, "source": "autotuned"}, {"m": 5, "n": 25, "k": 26, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 3620.28, "source": "autotuned"}, {"m": 5, "n": 25, "k": 28, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 3653.32, "source": "autotuned"}, {"m": 5, "n": 25, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 4, "algorithm": "medium", "perf": 3783.09, "source": "autotuned"}, {"m": 5, "n": 25, "k": 45, "tile_m": 3, "tile_n": 2, "w": 16, "v": 18, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3982.14, "source": "autotuned"}, {"m": 5, "n": 26, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 1936.69, "source": "autotuned"}, {"m": 5, "n": 26, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 2215.14, "source": "autotuned"}, {"m": 5, "n": 26, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 2628.19, "source": "autotuned"}, {"m": 5, "n": 26, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 24, "algorithm": "medium", "perf": 2449.03, "source": "autotuned"}, {"m": 5, "n": 26, "k": 8, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2731.11, "source": "autotuned"}, {"m": 5, "n": 26, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 2733.86, "source": "autotuned"}, {"m": 5, "n": 26, "k": 10, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 2953.23, "source": "autotuned"}, {"m": 5, "n": 26, "k": 12, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 3298.26, "source": "autotuned"}, {"m": 5, "n": 26, "k": 13, "tile_m": 3, "tile_n": 2, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3426.08, "source": "autotuned"}, {"m": 5, "n": 26, "k": 15, "tile_m": 3, "tile_n": 2, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3505.14, "source": "autotuned"}, {"m": 5, "n": 26, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3773.85, "source": "autotuned"}, {"m": 5, "n": 26, "k": 22, "tile_m": 3, "tile_n": 2, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 3498.49, "source": "autotuned"}, {"m": 5, "n": 26, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 11, "minblocks": 6, "algorithm": "medium", "perf": 3659.75, "source": "autotuned"}, {"m": 5, "n": 26, "k": 24, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 3824.72, "source": "autotuned"}, {"m": 5, "n": 26, "k": 25, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 12, "minblocks": 7, "algorithm": "medium", "perf": 3646.0, "source": "autotuned"}, {"m": 5, "n": 26, "k": 26, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 6, "algorithm": "medium", "perf": 3892.24, "source": "autotuned"}, {"m": 5, "n": 26, "k": 28, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 3902.61, "source": "autotuned"}, {"m": 5, "n": 26, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 4079.71, "source": "autotuned"}, {"m": 5, "n": 26, "k": 45, "tile_m": 3, "tile_n": 2, "w": 18, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4143.38, "source": "autotuned"}, {"m": 5, "n": 28, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2079.27, "source": "autotuned"}, {"m": 5, "n": 28, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 2380.74, "source": "autotuned"}, {"m": 5, "n": 28, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 15, "algorithm": "medium", "perf": 2483.36, "source": "autotuned"}, {"m": 5, "n": 28, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 2910.84, "source": "autotuned"}, {"m": 5, "n": 28, "k": 13, "tile_m": 3, "tile_n": 2, "w": 6, "v": 28, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 3567.41, "source": "autotuned"}, {"m": 5, "n": 28, "k": 25, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 11, "minblocks": 8, "algorithm": "medium", "perf": 3836.11, "source": "autotuned"}, {"m": 5, "n": 28, "k": 26, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 2, "algorithm": "medium", "perf": 4045.71, "source": "autotuned"}, {"m": 5, "n": 28, "k": 28, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 6, "algorithm": "medium", "perf": 4046.67, "source": "autotuned"}, {"m": 5, "n": 28, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 7, "algorithm": "medium", "perf": 4257.19, "source": "autotuned"}, {"m": 5, "n": 28, "k": 45, "tile_m": 3, "tile_n": 2, "w": 18, "v": 28, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4221.01, "source": "autotuned"}, {"m": 5, "n": 32, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 2238.05, "source": "autotuned"}, {"m": 5, "n": 32, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 2594.84, "source": "autotuned"}, {"m": 5, "n": 32, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 3050.81, "source": "autotuned"}, {"m": 5, "n": 32, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 2894.96, "source": "autotuned"}, {"m": 5, "n": 32, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 3110.28, "source": "autotuned"}, {"m": 5, "n": 32, "k": 9, "tile_m": 3, "tile_n": 2, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3350.86, "source": "autotuned"}, {"m": 5, "n": 32, "k": 10, "tile_m": 3, "tile_n": 2, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 3610.54, "source": "autotuned"}, {"m": 5, "n": 32, "k": 12, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3872.18, "source": "autotuned"}, {"m": 5, "n": 32, "k": 13, "tile_m": 3, "tile_n": 2, "w": 6, "v": 32, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4036.18, "source": "autotuned"}, {"m": 5, "n": 32, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4097.28, "source": "autotuned"}, {"m": 5, "n": 32, "k": 22, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 7, "algorithm": "medium", "perf": 4290.54, "source": "autotuned"}, {"m": 5, "n": 32, "k": 24, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 2, "algorithm": "medium", "perf": 4360.05, "source": "autotuned"}, {"m": 5, "n": 32, "k": 25, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 11, "minblocks": 2, "algorithm": "medium", "perf": 4234.13, "source": "autotuned"}, {"m": 5, "n": 32, "k": 26, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 4422.21, "source": "autotuned"}, {"m": 5, "n": 32, "k": 28, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 5, "algorithm": "medium", "perf": 4403.6, "source": "autotuned"}, {"m": 5, "n": 32, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 4629.35, "source": "autotuned"}, {"m": 5, "n": 32, "k": 45, "tile_m": 3, "tile_n": 2, "w": 22, "v": 32, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4466.05, "source": "autotuned"}, {"m": 5, "n": 45, "k": 4, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 2610.09, "source": "autotuned"}, {"m": 5, "n": 45, "k": 5, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 3051.24, "source": "autotuned"}, {"m": 5, "n": 45, "k": 6, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 3459.66, "source": "autotuned"}, {"m": 5, "n": 45, "k": 7, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 3238.9, "source": "autotuned"}, {"m": 5, "n": 45, "k": 8, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 3460.4, "source": "autotuned"}, {"m": 5, "n": 45, "k": 9, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 3675.17, "source": "autotuned"}, {"m": 5, "n": 45, "k": 10, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 3810.88, "source": "autotuned"}, {"m": 5, "n": 45, "k": 13, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 4, "algorithm": "medium", "perf": 4175.4, "source": "autotuned"}, {"m": 5, "n": 45, "k": 15, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 4, "algorithm": "medium", "perf": 4264.49, "source": "autotuned"}, {"m": 5, "n": 45, "k": 16, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 3, "algorithm": "medium", "perf": 4372.07, "source": "autotuned"}, {"m": 5, "n": 45, "k": 22, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 4155.14, "source": "autotuned"}, {"m": 5, "n": 45, "k": 25, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 16, "minblocks": 3, "algorithm": "medium", "perf": 4316.1, "source": "autotuned"}, {"m": 5, "n": 45, "k": 26, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 4345.42, "source": "autotuned"}, {"m": 5, "n": 45, "k": 28, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 16, "minblocks": 5, "algorithm": "medium", "perf": 4423.47, "source": "autotuned"}, {"m": 5, "n": 45, "k": 32, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 4573.83, "source": "autotuned"}, {"m": 5, "n": 45, "k": 45, "tile_m": 5, "tile_n": 2, "w": 16, "v": 28, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4510.09, "source": "autotuned"}, {"m": 6, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 541.907, "source": "autotuned"}, {"m": 6, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 11, "algorithm": "medium", "perf": 668.983, "source": "autotuned"}, {"m": 6, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 728.613, "source": "autotuned"}, {"m": 6, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 7, "algorithm": "medium", "perf": 823.187, "source": "autotuned"}, {"m": 6, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 5, "algorithm": "medium", "perf": 897.477, "source": "autotuned"}, {"m": 6, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 976.286, "source": "autotuned"}, {"m": 6, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 8, "algorithm": "medium", "perf": 1048.1, "source": "autotuned"}, {"m": 6, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1159.89, "source": "autotuned"}, {"m": 6, "n": 4, "k": 15, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 1285.31, "source": "autotuned"}, {"m": 6, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1414.01, "source": "autotuned"}, {"m": 6, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 1517.43, "source": "autotuned"}, {"m": 6, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 1609.93, "source": "autotuned"}, {"m": 6, "n": 4, "k": 45, "tile_m": 1, "tile_n": 1, "w": 20, "v": 4, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 1810.71, "source": "autotuned"}, {"m": 6, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 688.008, "source": "autotuned"}, {"m": 6, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 843.302, "source": "autotuned"}, {"m": 6, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 912.045, "source": "autotuned"}, {"m": 6, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 1022.77, "source": "autotuned"}, {"m": 6, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 1169.34, "source": "autotuned"}, {"m": 6, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 26, "algorithm": "medium", "perf": 1222.46, "source": "autotuned"}, {"m": 6, "n": 5, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 6, "algorithm": "medium", "perf": 1295.96, "source": "autotuned"}, {"m": 6, "n": 5, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 1427.22, "source": "autotuned"}, {"m": 6, "n": 5, "k": 14, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 1494.58, "source": "autotuned"}, {"m": 6, "n": 5, "k": 15, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 1584.38, "source": "autotuned"}, {"m": 6, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 1715.32, "source": "autotuned"}, {"m": 6, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 1877.0, "source": "autotuned"}, {"m": 6, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 19, "algorithm": "medium", "perf": 1967.52, "source": "autotuned"}, {"m": 6, "n": 5, "k": 45, "tile_m": 1, "tile_n": 1, "w": 18, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2144.28, "source": "autotuned"}, {"m": 6, "n": 6, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 10, "minblocks": 16, "algorithm": "medium", "perf": 772.552, "source": "autotuned"}, {"m": 6, "n": 6, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 930.07, "source": "autotuned"}, {"m": 6, "n": 6, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 11, "algorithm": "medium", "perf": 1011.15, "source": "autotuned"}, {"m": 6, "n": 6, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 1126.38, "source": "autotuned"}, {"m": 6, "n": 6, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 1237.8, "source": "autotuned"}, {"m": 6, "n": 6, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 1299.28, "source": "autotuned"}, {"m": 6, "n": 6, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 1414.98, "source": "autotuned"}, {"m": 6, "n": 6, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 4, "minblocks": 7, "algorithm": "small", "perf": 1572.58, "source": "autotuned"}, {"m": 6, "n": 6, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 7, "minblocks": 11, "algorithm": "small", "perf": 1611.16, "source": "autotuned"}, {"m": 6, "n": 6, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 4, "minblocks": 8, "algorithm": "small", "perf": 1680.72, "source": "autotuned"}, {"m": 6, "n": 6, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 27, "algorithm": "medium", "perf": 1852.2, "source": "autotuned"}, {"m": 6, "n": 6, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 1974.34, "source": "autotuned"}, {"m": 6, "n": 6, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 2114.42, "source": "autotuned"}, {"m": 6, "n": 6, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 2364.22, "source": "autotuned"}, {"m": 6, "n": 7, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 9, "minblocks": 9, "algorithm": "medium", "perf": 895.441, "source": "autotuned"}, {"m": 6, "n": 7, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 999.909, "source": "autotuned"}, {"m": 6, "n": 7, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 1154.27, "source": "autotuned"}, {"m": 6, "n": 7, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 1275.36, "source": "autotuned"}, {"m": 6, "n": 7, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 1390.57, "source": "autotuned"}, {"m": 6, "n": 7, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 1509.73, "source": "autotuned"}, {"m": 6, "n": 7, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 1497.15, "source": "autotuned"}, {"m": 6, "n": 7, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 1754.64, "source": "autotuned"}, {"m": 6, "n": 7, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1807.63, "source": "autotuned"}, {"m": 6, "n": 7, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2030.03, "source": "autotuned"}, {"m": 6, "n": 7, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 2099.56, "source": "autotuned"}, {"m": 6, "n": 7, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 4, "minblocks": 3, "algorithm": "medium", "perf": 2239.87, "source": "autotuned"}, {"m": 6, "n": 7, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 2402.28, "source": "autotuned"}, {"m": 6, "n": 8, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 994.971, "source": "autotuned"}, {"m": 6, "n": 8, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 1200.84, "source": "autotuned"}, {"m": 6, "n": 8, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 1352.39, "source": "autotuned"}, {"m": 6, "n": 8, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 13, "minblocks": 13, "algorithm": "medium", "perf": 1501.74, "source": "autotuned"}, {"m": 6, "n": 8, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 30, "algorithm": "small", "perf": 1446.78, "source": "autotuned"}, {"m": 6, "n": 8, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 1627.41, "source": "autotuned"}, {"m": 6, "n": 8, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 1740.4, "source": "autotuned"}, {"m": 6, "n": 8, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1900.43, "source": "autotuned"}, {"m": 6, "n": 8, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 2086.19, "source": "autotuned"}, {"m": 6, "n": 8, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 2232.4, "source": "autotuned"}, {"m": 6, "n": 8, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 2388.81, "source": "autotuned"}, {"m": 6, "n": 8, "k": 32, "tile_m": 1, "tile_n": 2, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 2678.54, "source": "autotuned"}, {"m": 6, "n": 8, "k": 45, "tile_m": 1, "tile_n": 2, "w": 20, "v": 8, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 2727.44, "source": "autotuned"}, {"m": 6, "n": 9, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 1071.69, "source": "autotuned"}, {"m": 6, "n": 9, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 4, "algorithm": "medium", "perf": 1275.03, "source": "autotuned"}, {"m": 6, "n": 9, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 1465.47, "source": "autotuned"}, {"m": 6, "n": 9, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 1637.3, "source": "autotuned"}, {"m": 6, "n": 9, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 1684.27, "source": "autotuned"}, {"m": 6, "n": 9, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 1758.87, "source": "autotuned"}, {"m": 6, "n": 9, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1902.88, "source": "autotuned"}, {"m": 6, "n": 9, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2077.93, "source": "autotuned"}, {"m": 6, "n": 9, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2200.36, "source": "autotuned"}, {"m": 6, "n": 9, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2109.3, "source": "autotuned"}, {"m": 6, "n": 9, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 2381.98, "source": "autotuned"}, {"m": 6, "n": 9, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 2548.89, "source": "autotuned"}, {"m": 6, "n": 9, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 2781.56, "source": "autotuned"}, {"m": 6, "n": 9, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 2878.68, "source": "autotuned"}, {"m": 6, "n": 10, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 3, "algorithm": "medium", "perf": 1206.76, "source": "autotuned"}, {"m": 6, "n": 10, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 1428.35, "source": "autotuned"}, {"m": 6, "n": 10, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 1655.24, "source": "autotuned"}, {"m": 6, "n": 10, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 1682.38, "source": "autotuned"}, {"m": 6, "n": 10, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 1880.39, "source": "autotuned"}, {"m": 6, "n": 10, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 1950.99, "source": "autotuned"}, {"m": 6, "n": 10, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 1991.33, "source": "autotuned"}, {"m": 6, "n": 10, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2190.54, "source": "autotuned"}, {"m": 6, "n": 10, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2309.77, "source": "autotuned"}, {"m": 6, "n": 10, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2353.44, "source": "autotuned"}, {"m": 6, "n": 10, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 2666.9, "source": "autotuned"}, {"m": 6, "n": 10, "k": 26, "tile_m": 1, "tile_n": 2, "w": 10, "v": 10, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2897.84, "source": "autotuned"}, {"m": 6, "n": 10, "k": 32, "tile_m": 1, "tile_n": 2, "w": 14, "v": 10, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 3061.53, "source": "autotuned"}, {"m": 6, "n": 10, "k": 45, "tile_m": 1, "tile_n": 2, "w": 16, "v": 10, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3128.69, "source": "autotuned"}, {"m": 6, "n": 13, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 1404.74, "source": "autotuned"}, {"m": 6, "n": 13, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1614.78, "source": "autotuned"}, {"m": 6, "n": 13, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 1840.31, "source": "autotuned"}, {"m": 6, "n": 13, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2049.42, "source": "autotuned"}, {"m": 6, "n": 13, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2066.87, "source": "autotuned"}, {"m": 6, "n": 13, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2216.03, "source": "autotuned"}, {"m": 6, "n": 13, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2264.45, "source": "autotuned"}, {"m": 6, "n": 13, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2521.09, "source": "autotuned"}, {"m": 6, "n": 13, "k": 14, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2623.53, "source": "autotuned"}, {"m": 6, "n": 13, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 27, "algorithm": "medium", "perf": 2683.09, "source": "autotuned"}, {"m": 6, "n": 13, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 3134.82, "source": "autotuned"}, {"m": 6, "n": 13, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 3299.49, "source": "autotuned"}, {"m": 6, "n": 13, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 3433.42, "source": "autotuned"}, {"m": 6, "n": 13, "k": 45, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 11, "minblocks": 2, "algorithm": "medium", "perf": 3658.66, "source": "autotuned"}, {"m": 6, "n": 14, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1717.72, "source": "autotuned"}, {"m": 6, "n": 14, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1992.06, "source": "autotuned"}, {"m": 6, "n": 14, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 2358.63, "source": "autotuned"}, {"m": 6, "n": 14, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 24, "algorithm": "medium", "perf": 2427.5, "source": "autotuned"}, {"m": 6, "n": 14, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 27, "algorithm": "medium", "perf": 2707.47, "source": "autotuned"}, {"m": 6, "n": 14, "k": 14, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 27, "algorithm": "medium", "perf": 2749.16, "source": "autotuned"}, {"m": 6, "n": 15, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 1612.3, "source": "autotuned"}, {"m": 6, "n": 15, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 1828.19, "source": "autotuned"}, {"m": 6, "n": 15, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2117.95, "source": "autotuned"}, {"m": 6, "n": 15, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2123.38, "source": "autotuned"}, {"m": 6, "n": 15, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2357.3, "source": "autotuned"}, {"m": 6, "n": 15, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 23, "algorithm": "medium", "perf": 2384.5, "source": "autotuned"}, {"m": 6, "n": 15, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 24, "algorithm": "medium", "perf": 2569.41, "source": "autotuned"}, {"m": 6, "n": 15, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 2779.97, "source": "autotuned"}, {"m": 6, "n": 15, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 3003.16, "source": "autotuned"}, {"m": 6, "n": 22, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 3, "algorithm": "medium", "perf": 2007.57, "source": "autotuned"}, {"m": 6, "n": 22, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 6, "algorithm": "medium", "perf": 2369.16, "source": "autotuned"}, {"m": 6, "n": 22, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 22, "algorithm": "medium", "perf": 2291.06, "source": "autotuned"}, {"m": 6, "n": 22, "k": 7, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2556.54, "source": "autotuned"}, {"m": 6, "n": 22, "k": 8, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2736.61, "source": "autotuned"}, {"m": 6, "n": 22, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2909.11, "source": "autotuned"}, {"m": 6, "n": 22, "k": 10, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 3167.3, "source": "autotuned"}, {"m": 6, "n": 22, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 3630.14, "source": "autotuned"}, {"m": 6, "n": 22, "k": 22, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4004.01, "source": "autotuned"}, {"m": 6, "n": 22, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 4, "algorithm": "medium", "perf": 4298.39, "source": "autotuned"}, {"m": 6, "n": 26, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2265.68, "source": "autotuned"}, {"m": 6, "n": 26, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 2665.22, "source": "autotuned"}, {"m": 6, "n": 26, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 2667.5, "source": "autotuned"}, {"m": 6, "n": 26, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 24, "algorithm": "medium", "perf": 2917.86, "source": "autotuned"}, {"m": 6, "n": 26, "k": 8, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 3131.94, "source": "autotuned"}, {"m": 6, "n": 26, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 3288.12, "source": "autotuned"}, {"m": 6, "n": 26, "k": 10, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 3522.55, "source": "autotuned"}, {"m": 6, "n": 26, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 12, "algorithm": "medium", "perf": 4005.2, "source": "autotuned"}, {"m": 6, "n": 26, "k": 26, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 6, "algorithm": "medium", "perf": 4508.07, "source": "autotuned"}, {"m": 6, "n": 26, "k": 45, "tile_m": 3, "tile_n": 2, "w": 16, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 4822.94, "source": "autotuned"}, {"m": 6, "n": 32, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 27, "algorithm": "medium", "perf": 2691.45, "source": "autotuned"}, {"m": 6, "n": 32, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 26, "algorithm": "medium", "perf": 3178.99, "source": "autotuned"}, {"m": 6, "n": 32, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 3142.51, "source": "autotuned"}, {"m": 6, "n": 32, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 3420.92, "source": "autotuned"}, {"m": 6, "n": 32, "k": 8, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 3677.99, "source": "autotuned"}, {"m": 6, "n": 32, "k": 9, "tile_m": 3, "tile_n": 2, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3993.33, "source": "autotuned"}, {"m": 6, "n": 32, "k": 10, "tile_m": 3, "tile_n": 2, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4327.3, "source": "autotuned"}, {"m": 6, "n": 32, "k": 13, "tile_m": 3, "tile_n": 2, "w": 6, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4710.91, "source": "autotuned"}, {"m": 6, "n": 32, "k": 22, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 2, "algorithm": "medium", "perf": 4990.54, "source": "autotuned"}, {"m": 6, "n": 32, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 5361.37, "source": "autotuned"}, {"m": 6, "n": 45, "k": 4, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3216.16, "source": "autotuned"}, {"m": 6, "n": 45, "k": 5, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3700.91, "source": "autotuned"}, {"m": 6, "n": 45, "k": 6, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 7, "minblocks": 17, "algorithm": "medium", "perf": 3598.84, "source": "autotuned"}, {"m": 6, "n": 45, "k": 7, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 3938.73, "source": "autotuned"}, {"m": 6, "n": 45, "k": 8, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4223.37, "source": "autotuned"}, {"m": 6, "n": 45, "k": 9, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4447.05, "source": "autotuned"}, {"m": 6, "n": 45, "k": 10, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4571.89, "source": "autotuned"}, {"m": 6, "n": 45, "k": 13, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 5008.7, "source": "autotuned"}, {"m": 6, "n": 45, "k": 26, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 16, "minblocks": 6, "algorithm": "medium", "perf": 5144.46, "source": "autotuned"}, {"m": 6, "n": 45, "k": 45, "tile_m": 3, "tile_n": 3, "w": 16, "v": 42, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5337.64, "source": "autotuned"}, {"m": 7, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 639.311, "source": "autotuned"}, {"m": 7, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 717.429, "source": "autotuned"}, {"m": 7, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 804.703, "source": "autotuned"}, {"m": 7, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 890.352, "source": "autotuned"}, {"m": 7, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 995.786, "source": "autotuned"}, {"m": 7, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 1048.9, "source": "autotuned"}, {"m": 7, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 1076.51, "source": "autotuned"}, {"m": 7, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 1241.59, "source": "autotuned"}, {"m": 7, "n": 4, "k": 15, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 16, "algorithm": "medium", "perf": 1270.47, "source": "autotuned"}, {"m": 7, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 23, "algorithm": "medium", "perf": 1476.09, "source": "autotuned"}, {"m": 7, "n": 4, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1475.06, "source": "autotuned"}, {"m": 7, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1505.15, "source": "autotuned"}, {"m": 7, "n": 4, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 9, "minblocks": 15, "algorithm": "medium", "perf": 1562.24, "source": "autotuned"}, {"m": 7, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 2, "algorithm": "medium", "perf": 1616.71, "source": "autotuned"}, {"m": 7, "n": 4, "k": 45, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 1834.34, "source": "autotuned"}, {"m": 7, "n": 5, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 731.578, "source": "autotuned"}, {"m": 7, "n": 5, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 820.064, "source": "autotuned"}, {"m": 7, "n": 5, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 936.871, "source": "autotuned"}, {"m": 7, "n": 5, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 1040.45, "source": "autotuned"}, {"m": 7, "n": 5, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 1144.06, "source": "autotuned"}, {"m": 7, "n": 5, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 1212.28, "source": "autotuned"}, {"m": 7, "n": 5, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 1242.03, "source": "autotuned"}, {"m": 7, "n": 5, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 1444.39, "source": "autotuned"}, {"m": 7, "n": 5, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1486.25, "source": "autotuned"}, {"m": 7, "n": 5, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 1639.9, "source": "autotuned"}, {"m": 7, "n": 5, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 1681.6, "source": "autotuned"}, {"m": 7, "n": 5, "k": 26, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 6, "algorithm": "medium", "perf": 1704.16, "source": "autotuned"}, {"m": 7, "n": 5, "k": 28, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 1732.76, "source": "autotuned"}, {"m": 7, "n": 5, "k": 32, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 1835.27, "source": "autotuned"}, {"m": 7, "n": 5, "k": 45, "tile_m": 2, "tile_n": 1, "w": 18, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 1987.11, "source": "autotuned"}, {"m": 7, "n": 6, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 875.089, "source": "autotuned"}, {"m": 7, "n": 6, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 7, "algorithm": "medium", "perf": 987.245, "source": "autotuned"}, {"m": 7, "n": 6, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 1120.96, "source": "autotuned"}, {"m": 7, "n": 6, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 1239.28, "source": "autotuned"}, {"m": 7, "n": 6, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 1373.83, "source": "autotuned"}, {"m": 7, "n": 6, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 1444.54, "source": "autotuned"}, {"m": 7, "n": 6, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 1484.92, "source": "autotuned"}, {"m": 7, "n": 6, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1722.19, "source": "autotuned"}, {"m": 7, "n": 6, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1763.18, "source": "autotuned"}, {"m": 7, "n": 6, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 1946.5, "source": "autotuned"}, {"m": 7, "n": 6, "k": 26, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 2018.44, "source": "autotuned"}, {"m": 7, "n": 6, "k": 32, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 2151.45, "source": "autotuned"}, {"m": 7, "n": 6, "k": 45, "tile_m": 2, "tile_n": 1, "w": 18, "v": 6, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2360.78, "source": "autotuned"}, {"m": 7, "n": 7, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 1006.18, "source": "autotuned"}, {"m": 7, "n": 7, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 11, "algorithm": "medium", "perf": 1105.8, "source": "autotuned"}, {"m": 7, "n": 7, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 1266.47, "source": "autotuned"}, {"m": 7, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 1369.54, "source": "autotuned"}, {"m": 7, "n": 7, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 1512.1, "source": "autotuned"}, {"m": 7, "n": 7, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 26, "algorithm": "medium", "perf": 1631.69, "source": "autotuned"}, {"m": 7, "n": 7, "k": 10, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 30, "algorithm": "small", "perf": 1709.52, "source": "autotuned"}, {"m": 7, "n": 7, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "small", "perf": 1989.94, "source": "autotuned"}, {"m": 7, "n": 7, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 1958.46, "source": "autotuned"}, {"m": 7, "n": 7, "k": 22, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 2319.0, "source": "autotuned"}, {"m": 7, "n": 7, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 2381.7, "source": "autotuned"}, {"m": 7, "n": 7, "k": 26, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 2395.99, "source": "autotuned"}, {"m": 7, "n": 7, "k": 28, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 12, "algorithm": "medium", "perf": 2376.27, "source": "autotuned"}, {"m": 7, "n": 7, "k": 32, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 2559.9, "source": "autotuned"}, {"m": 7, "n": 7, "k": 45, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 12, "algorithm": "medium", "perf": 2800.52, "source": "autotuned"}, {"m": 7, "n": 8, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 9, "algorithm": "medium", "perf": 1089.74, "source": "autotuned"}, {"m": 7, "n": 8, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 1287.76, "source": "autotuned"}, {"m": 7, "n": 8, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 1487.55, "source": "autotuned"}, {"m": 7, "n": 8, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 2, "algorithm": "medium", "perf": 1585.88, "source": "autotuned"}, {"m": 7, "n": 8, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 8, "algorithm": "small", "perf": 1598.17, "source": "autotuned"}, {"m": 7, "n": 8, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1808.1, "source": "autotuned"}, {"m": 7, "n": 8, "k": 10, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1903.0, "source": "autotuned"}, {"m": 7, "n": 8, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 2083.1, "source": "autotuned"}, {"m": 7, "n": 8, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 2212.88, "source": "autotuned"}, {"m": 7, "n": 8, "k": 22, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 2449.1, "source": "autotuned"}, {"m": 7, "n": 8, "k": 26, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 2570.4, "source": "autotuned"}, {"m": 7, "n": 8, "k": 32, "tile_m": 4, "tile_n": 1, "w": 14, "v": 8, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 2822.93, "source": "autotuned"}, {"m": 7, "n": 8, "k": 45, "tile_m": 4, "tile_n": 1, "w": 16, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2875.97, "source": "autotuned"}, {"m": 7, "n": 9, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 5, "algorithm": "medium", "perf": 1130.19, "source": "autotuned"}, {"m": 7, "n": 9, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 22, "algorithm": "medium", "perf": 1308.44, "source": "autotuned"}, {"m": 7, "n": 9, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 1481.58, "source": "autotuned"}, {"m": 7, "n": 9, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 1608.52, "source": "autotuned"}, {"m": 7, "n": 9, "k": 8, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1765.1, "source": "autotuned"}, {"m": 7, "n": 9, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1903.57, "source": "autotuned"}, {"m": 7, "n": 9, "k": 10, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2035.66, "source": "autotuned"}, {"m": 7, "n": 9, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2149.9, "source": "autotuned"}, {"m": 7, "n": 9, "k": 15, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2157.07, "source": "autotuned"}, {"m": 7, "n": 9, "k": 22, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 2508.62, "source": "autotuned"}, {"m": 7, "n": 9, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 2565.35, "source": "autotuned"}, {"m": 7, "n": 9, "k": 26, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 2592.0, "source": "autotuned"}, {"m": 7, "n": 9, "k": 28, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 2668.36, "source": "autotuned"}, {"m": 7, "n": 9, "k": 32, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2793.76, "source": "autotuned"}, {"m": 7, "n": 9, "k": 45, "tile_m": 4, "tile_n": 1, "w": 18, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2950.97, "source": "autotuned"}, {"m": 7, "n": 10, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 1255.1, "source": "autotuned"}, {"m": 7, "n": 10, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 1434.2, "source": "autotuned"}, {"m": 7, "n": 10, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 1643.13, "source": "autotuned"}, {"m": 7, "n": 10, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1770.27, "source": "autotuned"}, {"m": 7, "n": 10, "k": 8, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1948.43, "source": "autotuned"}, {"m": 7, "n": 10, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2114.01, "source": "autotuned"}, {"m": 7, "n": 10, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2051.3, "source": "autotuned"}, {"m": 7, "n": 10, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2232.77, "source": "autotuned"}, {"m": 7, "n": 10, "k": 15, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 2371.43, "source": "autotuned"}, {"m": 7, "n": 10, "k": 22, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 2759.48, "source": "autotuned"}, {"m": 7, "n": 10, "k": 26, "tile_m": 4, "tile_n": 1, "w": 12, "v": 10, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2973.98, "source": "autotuned"}, {"m": 7, "n": 10, "k": 32, "tile_m": 4, "tile_n": 1, "w": 12, "v": 10, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3112.95, "source": "autotuned"}, {"m": 7, "n": 10, "k": 45, "tile_m": 4, "tile_n": 1, "w": 18, "v": 6, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 3243.98, "source": "autotuned"}, {"m": 7, "n": 13, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 7, "algorithm": "medium", "perf": 1605.48, "source": "autotuned"}, {"m": 7, "n": 13, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1786.43, "source": "autotuned"}, {"m": 7, "n": 13, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2027.98, "source": "autotuned"}, {"m": 7, "n": 13, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2291.22, "source": "autotuned"}, {"m": 7, "n": 13, "k": 8, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2248.43, "source": "autotuned"}, {"m": 7, "n": 13, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2461.21, "source": "autotuned"}, {"m": 7, "n": 13, "k": 10, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 2453.09, "source": "autotuned"}, {"m": 7, "n": 13, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 2740.55, "source": "autotuned"}, {"m": 7, "n": 13, "k": 15, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 12, "algorithm": "medium", "perf": 2923.83, "source": "autotuned"}, {"m": 7, "n": 13, "k": 22, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 3423.29, "source": "autotuned"}, {"m": 7, "n": 13, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 12, "algorithm": "medium", "perf": 3481.81, "source": "autotuned"}, {"m": 7, "n": 13, "k": 26, "tile_m": 4, "tile_n": 1, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3549.4, "source": "autotuned"}, {"m": 7, "n": 13, "k": 28, "tile_m": 4, "tile_n": 1, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3594.92, "source": "autotuned"}, {"m": 7, "n": 13, "k": 32, "tile_m": 4, "tile_n": 1, "w": 12, "v": 10, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3588.43, "source": "autotuned"}, {"m": 7, "n": 13, "k": 45, "tile_m": 4, "tile_n": 1, "w": 18, "v": 12, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3868.06, "source": "autotuned"}, {"m": 7, "n": 15, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 5, "algorithm": "medium", "perf": 1846.87, "source": "autotuned"}, {"m": 7, "n": 15, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2064.75, "source": "autotuned"}, {"m": 7, "n": 15, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2361.22, "source": "autotuned"}, {"m": 7, "n": 15, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2341.06, "source": "autotuned"}, {"m": 7, "n": 15, "k": 8, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2592.26, "source": "autotuned"}, {"m": 7, "n": 15, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 2631.44, "source": "autotuned"}, {"m": 7, "n": 15, "k": 10, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 2722.98, "source": "autotuned"}, {"m": 7, "n": 15, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 3035.03, "source": "autotuned"}, {"m": 7, "n": 15, "k": 15, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 3232.25, "source": "autotuned"}, {"m": 7, "n": 22, "k": 4, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2287.7, "source": "autotuned"}, {"m": 7, "n": 22, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 2388.81, "source": "autotuned"}, {"m": 7, "n": 22, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 2580.15, "source": "autotuned"}, {"m": 7, "n": 22, "k": 7, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 6, "minblocks": 23, "algorithm": "medium", "perf": 2816.84, "source": "autotuned"}, {"m": 7, "n": 22, "k": 8, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 3045.93, "source": "autotuned"}, {"m": 7, "n": 22, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 6, "minblocks": 24, "algorithm": "medium", "perf": 3161.36, "source": "autotuned"}, {"m": 7, "n": 22, "k": 10, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 3378.25, "source": "autotuned"}, {"m": 7, "n": 22, "k": 13, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 3846.27, "source": "autotuned"}, {"m": 7, "n": 22, "k": 22, "tile_m": 2, "tile_n": 3, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4197.84, "source": "autotuned"}, {"m": 7, "n": 22, "k": 32, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 7, "algorithm": "medium", "perf": 4651.97, "source": "autotuned"}, {"m": 7, "n": 25, "k": 4, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2394.63, "source": "autotuned"}, {"m": 7, "n": 25, "k": 5, "tile_m": 4, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2616.1, "source": "autotuned"}, {"m": 7, "n": 25, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 3010.77, "source": "autotuned"}, {"m": 7, "n": 25, "k": 9, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 3451.78, "source": "autotuned"}, {"m": 7, "n": 25, "k": 13, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 4078.33, "source": "autotuned"}, {"m": 7, "n": 25, "k": 25, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 11, "minblocks": 9, "algorithm": "medium", "perf": 4555.55, "source": "autotuned"}, {"m": 7, "n": 25, "k": 26, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 6, "algorithm": "medium", "perf": 4647.47, "source": "autotuned"}, {"m": 7, "n": 25, "k": 28, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 4619.73, "source": "autotuned"}, {"m": 7, "n": 25, "k": 32, "tile_m": 4, "tile_n": 2, "w": 14, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4760.69, "source": "autotuned"}, {"m": 7, "n": 25, "k": 45, "tile_m": 4, "tile_n": 2, "w": 16, "v": 24, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5154.28, "source": "autotuned"}, {"m": 7, "n": 26, "k": 4, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 25, "algorithm": "medium", "perf": 2529.6, "source": "autotuned"}, {"m": 7, "n": 26, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 2587.17, "source": "autotuned"}, {"m": 7, "n": 26, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 2904.46, "source": "autotuned"}, {"m": 7, "n": 26, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 3125.23, "source": "autotuned"}, {"m": 7, "n": 26, "k": 8, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 3453.36, "source": "autotuned"}, {"m": 7, "n": 26, "k": 9, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3477.74, "source": "autotuned"}, {"m": 7, "n": 26, "k": 10, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3892.88, "source": "autotuned"}, {"m": 7, "n": 26, "k": 13, "tile_m": 4, "tile_n": 2, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 4407.34, "source": "autotuned"}, {"m": 7, "n": 26, "k": 25, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 11, "minblocks": 4, "algorithm": "medium", "perf": 4589.67, "source": "autotuned"}, {"m": 7, "n": 26, "k": 26, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 7, "algorithm": "medium", "perf": 4841.61, "source": "autotuned"}, {"m": 7, "n": 26, "k": 28, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 4928.38, "source": "autotuned"}, {"m": 7, "n": 26, "k": 32, "tile_m": 4, "tile_n": 2, "w": 14, "v": 26, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5020.82, "source": "autotuned"}, {"m": 7, "n": 26, "k": 45, "tile_m": 4, "tile_n": 2, "w": 16, "v": 26, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5378.05, "source": "autotuned"}, {"m": 7, "n": 28, "k": 4, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 2701.81, "source": "autotuned"}, {"m": 7, "n": 28, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 2742.75, "source": "autotuned"}, {"m": 7, "n": 28, "k": 7, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 6, "minblocks": 22, "algorithm": "medium", "perf": 3192.52, "source": "autotuned"}, {"m": 7, "n": 28, "k": 9, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 3726.05, "source": "autotuned"}, {"m": 7, "n": 28, "k": 13, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4285.49, "source": "autotuned"}, {"m": 7, "n": 28, "k": 25, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 11, "minblocks": 3, "algorithm": "medium", "perf": 4853.0, "source": "autotuned"}, {"m": 7, "n": 28, "k": 26, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 4, "algorithm": "medium", "perf": 5084.03, "source": "autotuned"}, {"m": 7, "n": 28, "k": 28, "tile_m": 4, "tile_n": 2, "w": 12, "v": 28, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4938.27, "source": "autotuned"}, {"m": 7, "n": 28, "k": 32, "tile_m": 4, "tile_n": 2, "w": 12, "v": 28, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5228.3, "source": "autotuned"}, {"m": 7, "n": 28, "k": 45, "tile_m": 4, "tile_n": 2, "w": 16, "v": 28, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5567.58, "source": "autotuned"}, {"m": 7, "n": 32, "k": 4, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 2989.9, "source": "autotuned"}, {"m": 7, "n": 32, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 3142.24, "source": "autotuned"}, {"m": 7, "n": 32, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 3474.95, "source": "autotuned"}, {"m": 7, "n": 32, "k": 7, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 3672.05, "source": "autotuned"}, {"m": 7, "n": 32, "k": 8, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4061.69, "source": "autotuned"}, {"m": 7, "n": 32, "k": 9, "tile_m": 4, "tile_n": 2, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4344.62, "source": "autotuned"}, {"m": 7, "n": 32, "k": 10, "tile_m": 4, "tile_n": 2, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4725.22, "source": "autotuned"}, {"m": 7, "n": 32, "k": 13, "tile_m": 4, "tile_n": 2, "w": 6, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5153.31, "source": "autotuned"}, {"m": 7, "n": 32, "k": 22, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 7, "algorithm": "medium", "perf": 5540.88, "source": "autotuned"}, {"m": 7, "n": 32, "k": 25, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 11, "minblocks": 5, "algorithm": "medium", "perf": 5394.94, "source": "autotuned"}, {"m": 7, "n": 32, "k": 26, "tile_m": 4, "tile_n": 2, "w": 12, "v": 32, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5234.34, "source": "autotuned"}, {"m": 7, "n": 32, "k": 28, "tile_m": 4, "tile_n": 2, "w": 12, "v": 32, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5399.28, "source": "autotuned"}, {"m": 7, "n": 32, "k": 32, "tile_m": 4, "tile_n": 2, "w": 12, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5587.2, "source": "autotuned"}, {"m": 7, "n": 32, "k": 45, "tile_m": 4, "tile_n": 2, "w": 22, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5835.16, "source": "autotuned"}, {"m": 7, "n": 45, "k": 4, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 3576.15, "source": "autotuned"}, {"m": 7, "n": 45, "k": 5, "tile_m": 4, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 3740.99, "source": "autotuned"}, {"m": 7, "n": 45, "k": 6, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 4004.07, "source": "autotuned"}, {"m": 7, "n": 45, "k": 7, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4371.16, "source": "autotuned"}, {"m": 7, "n": 45, "k": 8, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4727.22, "source": "autotuned"}, {"m": 7, "n": 45, "k": 9, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 5003.77, "source": "autotuned"}, {"m": 7, "n": 45, "k": 10, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4975.24, "source": "autotuned"}, {"m": 7, "n": 45, "k": 13, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 8, "algorithm": "medium", "perf": 5373.34, "source": "autotuned"}, {"m": 7, "n": 45, "k": 25, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 16, "minblocks": 6, "algorithm": "medium", "perf": 5636.15, "source": "autotuned"}, {"m": 7, "n": 45, "k": 26, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 5722.39, "source": "autotuned"}, {"m": 7, "n": 45, "k": 28, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 5819.76, "source": "autotuned"}, {"m": 7, "n": 45, "k": 32, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 16, "minblocks": 3, "algorithm": "medium", "perf": 6005.45, "source": "autotuned"}, {"m": 7, "n": 45, "k": 45, "tile_m": 4, "tile_n": 3, "w": 16, "v": 44, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5993.84, "source": "autotuned"}, {"m": 8, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 16, "algorithm": "medium", "perf": 606.914, "source": "autotuned"}, {"m": 8, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 6, "algorithm": "medium", "perf": 837.958, "source": "autotuned"}, {"m": 8, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 9, "algorithm": "medium", "perf": 974.924, "source": "autotuned"}, {"m": 8, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 1093.12, "source": "autotuned"}, {"m": 8, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 2, "algorithm": "small", "perf": 1028.78, "source": "autotuned"}, {"m": 8, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 1200.49, "source": "autotuned"}, {"m": 8, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 1321.75, "source": "autotuned"}, {"m": 8, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 15, "algorithm": "medium", "perf": 1430.33, "source": "autotuned"}, {"m": 8, "n": 4, "k": 15, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 1565.38, "source": "autotuned"}, {"m": 8, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 21, "algorithm": "medium", "perf": 1828.03, "source": "autotuned"}, {"m": 8, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 24, "algorithm": "medium", "perf": 1869.97, "source": "autotuned"}, {"m": 8, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 2147.05, "source": "autotuned"}, {"m": 8, "n": 4, "k": 45, "tile_m": 1, "tile_n": 1, "w": 20, "v": 4, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 2268.87, "source": "autotuned"}, {"m": 8, "n": 5, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 802.926, "source": "autotuned"}, {"m": 8, "n": 5, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 957.532, "source": "autotuned"}, {"m": 8, "n": 5, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 10, "algorithm": "medium", "perf": 1105.16, "source": "autotuned"}, {"m": 8, "n": 5, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 1228.09, "source": "autotuned"}, {"m": 8, "n": 5, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 27, "algorithm": "small", "perf": 1184.43, "source": "autotuned"}, {"m": 8, "n": 5, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 1360.12, "source": "autotuned"}, {"m": 8, "n": 5, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 1456.54, "source": "autotuned"}, {"m": 8, "n": 5, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 1570.5, "source": "autotuned"}, {"m": 8, "n": 5, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 1737.16, "source": "autotuned"}, {"m": 8, "n": 5, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 25, "algorithm": "medium", "perf": 1900.07, "source": "autotuned"}, {"m": 8, "n": 5, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 1981.89, "source": "autotuned"}, {"m": 8, "n": 5, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 4, "minblocks": 2, "algorithm": "medium", "perf": 2171.81, "source": "autotuned"}, {"m": 8, "n": 5, "k": 45, "tile_m": 1, "tile_n": 2, "w": 20, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 2334.35, "source": "autotuned"}, {"m": 8, "n": 6, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 996.4, "source": "autotuned"}, {"m": 8, "n": 6, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 1167.16, "source": "autotuned"}, {"m": 8, "n": 6, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 1356.68, "source": "autotuned"}, {"m": 8, "n": 6, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 13, "minblocks": 13, "algorithm": "medium", "perf": 1493.62, "source": "autotuned"}, {"m": 8, "n": 6, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 29, "algorithm": "small", "perf": 1440.17, "source": "autotuned"}, {"m": 8, "n": 6, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 1632.02, "source": "autotuned"}, {"m": 8, "n": 6, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 1762.52, "source": "autotuned"}, {"m": 8, "n": 6, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1926.53, "source": "autotuned"}, {"m": 8, "n": 6, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2084.41, "source": "autotuned"}, {"m": 8, "n": 6, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 2248.38, "source": "autotuned"}, {"m": 8, "n": 6, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 2375.17, "source": "autotuned"}, {"m": 8, "n": 6, "k": 32, "tile_m": 1, "tile_n": 2, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2677.96, "source": "autotuned"}, {"m": 8, "n": 6, "k": 45, "tile_m": 1, "tile_n": 2, "w": 20, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 2709.65, "source": "autotuned"}, {"m": 8, "n": 7, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 1123.52, "source": "autotuned"}, {"m": 8, "n": 7, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 3, "algorithm": "medium", "perf": 1337.95, "source": "autotuned"}, {"m": 8, "n": 7, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 1543.68, "source": "autotuned"}, {"m": 8, "n": 7, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 26, "algorithm": "medium", "perf": 1689.95, "source": "autotuned"}, {"m": 8, "n": 7, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "small", "perf": 1611.58, "source": "autotuned"}, {"m": 8, "n": 7, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 1887.35, "source": "autotuned"}, {"m": 8, "n": 7, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 2016.67, "source": "autotuned"}, {"m": 8, "n": 7, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 2213.85, "source": "autotuned"}, {"m": 8, "n": 7, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 2399.77, "source": "autotuned"}, {"m": 8, "n": 7, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 11, "algorithm": "medium", "perf": 2554.17, "source": "autotuned"}, {"m": 8, "n": 7, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 6, "algorithm": "medium", "perf": 2694.02, "source": "autotuned"}, {"m": 8, "n": 7, "k": 32, "tile_m": 1, "tile_n": 2, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 2937.82, "source": "autotuned"}, {"m": 8, "n": 7, "k": 45, "tile_m": 1, "tile_n": 2, "w": 18, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 2994.7, "source": "autotuned"}, {"m": 8, "n": 8, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 26, "algorithm": "medium", "perf": 1247.02, "source": "autotuned"}, {"m": 8, "n": 8, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 7, "minblocks": 26, "algorithm": "medium", "perf": 1492.22, "source": "autotuned"}, {"m": 8, "n": 8, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 7, "algorithm": "medium", "perf": 1789.47, "source": "autotuned"}, {"m": 8, "n": 8, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 6, "algorithm": "medium", "perf": 1932.25, "source": "autotuned"}, {"m": 8, "n": 8, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "small", "perf": 2043.87, "source": "autotuned"}, {"m": 8, "n": 8, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 2153.75, "source": "autotuned"}, {"m": 8, "n": 8, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 4, "minblocks": 16, "algorithm": "small", "perf": 2366.04, "source": "autotuned"}, {"m": 8, "n": 8, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2496.78, "source": "autotuned"}, {"m": 8, "n": 8, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 9, "minblocks": 15, "algorithm": "medium", "perf": 2720.99, "source": "autotuned"}, {"m": 8, "n": 8, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 3046.92, "source": "autotuned"}, {"m": 8, "n": 8, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 3179.17, "source": "autotuned"}, {"m": 8, "n": 8, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 3675.79, "source": "autotuned"}, {"m": 8, "n": 8, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 3688.73, "source": "autotuned"}, {"m": 8, "n": 9, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 8, "algorithm": "medium", "perf": 1311.16, "source": "autotuned"}, {"m": 8, "n": 9, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 1537.98, "source": "autotuned"}, {"m": 8, "n": 9, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 1728.05, "source": "autotuned"}, {"m": 8, "n": 9, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 1924.27, "source": "autotuned"}, {"m": 8, "n": 9, "k": 8, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2022.7, "source": "autotuned"}, {"m": 8, "n": 9, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2186.37, "source": "autotuned"}, {"m": 8, "n": 9, "k": 10, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2313.65, "source": "autotuned"}, {"m": 8, "n": 9, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2461.93, "source": "autotuned"}, {"m": 8, "n": 9, "k": 15, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2499.73, "source": "autotuned"}, {"m": 8, "n": 9, "k": 22, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 2828.01, "source": "autotuned"}, {"m": 8, "n": 9, "k": 26, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 2935.09, "source": "autotuned"}, {"m": 8, "n": 9, "k": 32, "tile_m": 4, "tile_n": 1, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 3233.33, "source": "autotuned"}, {"m": 8, "n": 9, "k": 45, "tile_m": 4, "tile_n": 1, "w": 16, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3378.4, "source": "autotuned"}, {"m": 8, "n": 10, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 1488.84, "source": "autotuned"}, {"m": 8, "n": 10, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 1727.8, "source": "autotuned"}, {"m": 8, "n": 10, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 1957.64, "source": "autotuned"}, {"m": 8, "n": 10, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2028.95, "source": "autotuned"}, {"m": 8, "n": 10, "k": 8, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2264.3, "source": "autotuned"}, {"m": 8, "n": 10, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2414.0, "source": "autotuned"}, {"m": 8, "n": 10, "k": 10, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2387.38, "source": "autotuned"}, {"m": 8, "n": 10, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2571.88, "source": "autotuned"}, {"m": 8, "n": 10, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 2792.22, "source": "autotuned"}, {"m": 8, "n": 10, "k": 22, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 3155.92, "source": "autotuned"}, {"m": 8, "n": 10, "k": 26, "tile_m": 4, "tile_n": 1, "w": 10, "v": 10, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 3378.59, "source": "autotuned"}, {"m": 8, "n": 10, "k": 32, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 3501.95, "source": "autotuned"}, {"m": 8, "n": 10, "k": 45, "tile_m": 1, "tile_n": 3, "w": 18, "v": 10, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3626.51, "source": "autotuned"}, {"m": 8, "n": 13, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 1872.49, "source": "autotuned"}, {"m": 8, "n": 13, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2048.56, "source": "autotuned"}, {"m": 8, "n": 13, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 12, "minblocks": 11, "algorithm": "medium", "perf": 2355.9, "source": "autotuned"}, {"m": 8, "n": 13, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2139.99, "source": "autotuned"}, {"m": 8, "n": 13, "k": 8, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2656.15, "source": "autotuned"}, {"m": 8, "n": 13, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2826.71, "source": "autotuned"}, {"m": 8, "n": 13, "k": 10, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2789.08, "source": "autotuned"}, {"m": 8, "n": 13, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 3094.79, "source": "autotuned"}, {"m": 8, "n": 13, "k": 15, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 3306.99, "source": "autotuned"}, {"m": 8, "n": 13, "k": 22, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 3840.13, "source": "autotuned"}, {"m": 8, "n": 13, "k": 26, "tile_m": 4, "tile_n": 1, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4040.1, "source": "autotuned"}, {"m": 8, "n": 13, "k": 32, "tile_m": 4, "tile_n": 1, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 4088.06, "source": "autotuned"}, {"m": 8, "n": 13, "k": 45, "tile_m": 4, "tile_n": 1, "w": 18, "v": 8, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 4308.09, "source": "autotuned"}, {"m": 8, "n": 15, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 15, "algorithm": "medium", "perf": 2147.21, "source": "autotuned"}, {"m": 8, "n": 15, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 2368.54, "source": "autotuned"}, {"m": 8, "n": 15, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 12, "minblocks": 11, "algorithm": "medium", "perf": 2656.5, "source": "autotuned"}, {"m": 8, "n": 15, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2716.78, "source": "autotuned"}, {"m": 8, "n": 15, "k": 8, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2993.02, "source": "autotuned"}, {"m": 8, "n": 15, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2934.25, "source": "autotuned"}, {"m": 8, "n": 15, "k": 10, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 3128.42, "source": "autotuned"}, {"m": 8, "n": 15, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 3431.53, "source": "autotuned"}, {"m": 8, "n": 15, "k": 15, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 3684.64, "source": "autotuned"}, {"m": 8, "n": 22, "k": 4, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2637.53, "source": "autotuned"}, {"m": 8, "n": 22, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2760.72, "source": "autotuned"}, {"m": 8, "n": 22, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 3010.27, "source": "autotuned"}, {"m": 8, "n": 22, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 3294.27, "source": "autotuned"}, {"m": 8, "n": 22, "k": 8, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 6, "minblocks": 24, "algorithm": "medium", "perf": 3435.22, "source": "autotuned"}, {"m": 8, "n": 22, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 7, "minblocks": 21, "algorithm": "medium", "perf": 3584.83, "source": "autotuned"}, {"m": 8, "n": 22, "k": 10, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 3869.34, "source": "autotuned"}, {"m": 8, "n": 22, "k": 13, "tile_m": 2, "tile_n": 3, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4382.83, "source": "autotuned"}, {"m": 8, "n": 22, "k": 22, "tile_m": 2, "tile_n": 3, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 4719.59, "source": "autotuned"}, {"m": 8, "n": 22, "k": 32, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 4, "algorithm": "medium", "perf": 5291.57, "source": "autotuned"}, {"m": 8, "n": 26, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 2623.22, "source": "autotuned"}, {"m": 8, "n": 26, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 2891.13, "source": "autotuned"}, {"m": 8, "n": 26, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 3285.24, "source": "autotuned"}, {"m": 8, "n": 26, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 3569.74, "source": "autotuned"}, {"m": 8, "n": 26, "k": 8, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 3659.43, "source": "autotuned"}, {"m": 8, "n": 26, "k": 9, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3863.66, "source": "autotuned"}, {"m": 8, "n": 26, "k": 10, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4164.08, "source": "autotuned"}, {"m": 8, "n": 26, "k": 13, "tile_m": 4, "tile_n": 2, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 4739.11, "source": "autotuned"}, {"m": 8, "n": 26, "k": 26, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 9, "algorithm": "medium", "perf": 5379.21, "source": "autotuned"}, {"m": 8, "n": 26, "k": 45, "tile_m": 4, "tile_n": 2, "w": 16, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5975.06, "source": "autotuned"}, {"m": 8, "n": 32, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 3168.0, "source": "autotuned"}, {"m": 8, "n": 32, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 3540.28, "source": "autotuned"}, {"m": 8, "n": 32, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 3940.96, "source": "autotuned"}, {"m": 8, "n": 32, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 4168.74, "source": "autotuned"}, {"m": 8, "n": 32, "k": 8, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4502.51, "source": "autotuned"}, {"m": 8, "n": 32, "k": 9, "tile_m": 4, "tile_n": 2, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4715.06, "source": "autotuned"}, {"m": 8, "n": 32, "k": 10, "tile_m": 4, "tile_n": 2, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5126.73, "source": "autotuned"}, {"m": 8, "n": 32, "k": 13, "tile_m": 4, "tile_n": 2, "w": 6, "v": 32, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5481.4, "source": "autotuned"}, {"m": 8, "n": 32, "k": 22, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 12, "minblocks": 5, "algorithm": "medium", "perf": 5991.24, "source": "autotuned"}, {"m": 8, "n": 32, "k": 32, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 6345.81, "source": "autotuned"}, {"m": 8, "n": 45, "k": 4, "tile_m": 2, "tile_n": 3, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 3646.71, "source": "autotuned"}, {"m": 8, "n": 45, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 4011.65, "source": "autotuned"}, {"m": 8, "n": 45, "k": 6, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4422.18, "source": "autotuned"}, {"m": 8, "n": 45, "k": 7, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4843.01, "source": "autotuned"}, {"m": 8, "n": 45, "k": 8, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 5142.17, "source": "autotuned"}, {"m": 8, "n": 45, "k": 9, "tile_m": 4, "tile_n": 3, "w": 4, "v": 36, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5410.71, "source": "autotuned"}, {"m": 8, "n": 45, "k": 10, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 5617.98, "source": "autotuned"}, {"m": 8, "n": 45, "k": 13, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 5983.97, "source": "autotuned"}, {"m": 8, "n": 45, "k": 26, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 6482.52, "source": "autotuned"}, {"m": 8, "n": 45, "k": 45, "tile_m": 4, "tile_n": 3, "w": 16, "v": 28, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6756.8, "source": "autotuned"}, {"m": 9, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 710.844, "source": "autotuned"}, {"m": 9, "n": 4, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 815.376, "source": "autotuned"}, {"m": 9, "n": 4, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 942.804, "source": "autotuned"}, {"m": 9, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 4, "algorithm": "medium", "perf": 1010.96, "source": "autotuned"}, {"m": 9, "n": 4, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 1071.43, "source": "autotuned"}, {"m": 9, "n": 4, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1149.08, "source": "autotuned"}, {"m": 9, "n": 4, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1243.28, "source": "autotuned"}, {"m": 9, "n": 4, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 1324.03, "source": "autotuned"}, {"m": 9, "n": 4, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 1370.84, "source": "autotuned"}, {"m": 9, "n": 4, "k": 16, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 1378.11, "source": "autotuned"}, {"m": 9, "n": 4, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 6, "algorithm": "medium", "perf": 1531.01, "source": "autotuned"}, {"m": 9, "n": 4, "k": 23, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 1560.59, "source": "autotuned"}, {"m": 9, "n": 4, "k": 25, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 6, "algorithm": "medium", "perf": 1539.14, "source": "autotuned"}, {"m": 9, "n": 4, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1619.45, "source": "autotuned"}, {"m": 9, "n": 4, "k": 28, "tile_m": 1, "tile_n": 4, "w": 10, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 1755.88, "source": "autotuned"}, {"m": 9, "n": 4, "k": 32, "tile_m": 1, "tile_n": 2, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 1762.29, "source": "autotuned"}, {"m": 9, "n": 4, "k": 45, "tile_m": 1, "tile_n": 4, "w": 16, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 1888.7, "source": "autotuned"}, {"m": 9, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 4, "algorithm": "medium", "perf": 873.445, "source": "autotuned"}, {"m": 9, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 1009.45, "source": "autotuned"}, {"m": 9, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 25, "algorithm": "medium", "perf": 1137.93, "source": "autotuned"}, {"m": 9, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 12, "algorithm": "medium", "perf": 1247.22, "source": "autotuned"}, {"m": 9, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 11, "algorithm": "medium", "perf": 1283.29, "source": "autotuned"}, {"m": 9, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 7, "algorithm": "medium", "perf": 1361.01, "source": "autotuned"}, {"m": 9, "n": 5, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 9, "algorithm": "medium", "perf": 1426.84, "source": "autotuned"}, {"m": 9, "n": 5, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 1562.27, "source": "autotuned"}, {"m": 9, "n": 5, "k": 14, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 1629.97, "source": "autotuned"}, {"m": 9, "n": 5, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1589.56, "source": "autotuned"}, {"m": 9, "n": 5, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1667.41, "source": "autotuned"}, {"m": 9, "n": 5, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1797.57, "source": "autotuned"}, {"m": 9, "n": 5, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 1819.02, "source": "autotuned"}, {"m": 9, "n": 5, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1891.64, "source": "autotuned"}, {"m": 9, "n": 5, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 1804.17, "source": "autotuned"}, {"m": 9, "n": 5, "k": 32, "tile_m": 1, "tile_n": 2, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 1989.57, "source": "autotuned"}, {"m": 9, "n": 5, "k": 45, "tile_m": 2, "tile_n": 1, "w": 18, "v": 4, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 2101.64, "source": "autotuned"}, {"m": 9, "n": 6, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 11, "minblocks": 23, "algorithm": "medium", "perf": 1007.51, "source": "autotuned"}, {"m": 9, "n": 6, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 11, "minblocks": 21, "algorithm": "medium", "perf": 1194.95, "source": "autotuned"}, {"m": 9, "n": 6, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 1336.79, "source": "autotuned"}, {"m": 9, "n": 6, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 5, "algorithm": "medium", "perf": 1468.33, "source": "autotuned"}, {"m": 9, "n": 6, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 1517.02, "source": "autotuned"}, {"m": 9, "n": 6, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 1593.94, "source": "autotuned"}, {"m": 9, "n": 6, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 1729.62, "source": "autotuned"}, {"m": 9, "n": 6, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 1863.81, "source": "autotuned"}, {"m": 9, "n": 6, "k": 14, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 1932.56, "source": "autotuned"}, {"m": 9, "n": 6, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1895.48, "source": "autotuned"}, {"m": 9, "n": 6, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 2054.94, "source": "autotuned"}, {"m": 9, "n": 6, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 2156.11, "source": "autotuned"}, {"m": 9, "n": 6, "k": 32, "tile_m": 2, "tile_n": 1, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 2342.65, "source": "autotuned"}, {"m": 9, "n": 6, "k": 45, "tile_m": 1, "tile_n": 2, "w": 18, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2470.28, "source": "autotuned"}, {"m": 9, "n": 7, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 21, "algorithm": "medium", "perf": 1134.66, "source": "autotuned"}, {"m": 9, "n": 7, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 3, "algorithm": "medium", "perf": 1295.2, "source": "autotuned"}, {"m": 9, "n": 7, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 11, "algorithm": "medium", "perf": 1459.74, "source": "autotuned"}, {"m": 9, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 15, "algorithm": "medium", "perf": 1584.18, "source": "autotuned"}, {"m": 9, "n": 7, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1622.82, "source": "autotuned"}, {"m": 9, "n": 7, "k": 9, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 31, "algorithm": "small", "perf": 1762.91, "source": "autotuned"}, {"m": 9, "n": 7, "k": 10, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 29, "algorithm": "small", "perf": 1863.04, "source": "autotuned"}, {"m": 9, "n": 7, "k": 13, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 30, "algorithm": "small", "perf": 2034.91, "source": "autotuned"}, {"m": 9, "n": 7, "k": 15, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2006.67, "source": "autotuned"}, {"m": 9, "n": 7, "k": 22, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2304.32, "source": "autotuned"}, {"m": 9, "n": 7, "k": 25, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2359.03, "source": "autotuned"}, {"m": 9, "n": 7, "k": 26, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2396.49, "source": "autotuned"}, {"m": 9, "n": 7, "k": 28, "tile_m": 6, "tile_n": 1, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2465.44, "source": "autotuned"}, {"m": 9, "n": 7, "k": 32, "tile_m": 6, "tile_n": 1, "w": 14, "v": 6, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2553.77, "source": "autotuned"}, {"m": 9, "n": 7, "k": 45, "tile_m": 6, "tile_n": 1, "w": 18, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 2676.63, "source": "autotuned"}, {"m": 9, "n": 8, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 1251.3, "source": "autotuned"}, {"m": 9, "n": 8, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 1424.2, "source": "autotuned"}, {"m": 9, "n": 8, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 1624.13, "source": "autotuned"}, {"m": 9, "n": 8, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 1736.48, "source": "autotuned"}, {"m": 9, "n": 8, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1860.93, "source": "autotuned"}, {"m": 9, "n": 8, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1972.75, "source": "autotuned"}, {"m": 9, "n": 8, "k": 10, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 31, "algorithm": "small", "perf": 1778.85, "source": "autotuned"}, {"m": 9, "n": 8, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2198.66, "source": "autotuned"}, {"m": 9, "n": 8, "k": 15, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 2259.69, "source": "autotuned"}, {"m": 9, "n": 8, "k": 22, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 2578.21, "source": "autotuned"}, {"m": 9, "n": 8, "k": 26, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2671.94, "source": "autotuned"}, {"m": 9, "n": 8, "k": 32, "tile_m": 6, "tile_n": 1, "w": 14, "v": 8, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2951.74, "source": "autotuned"}, {"m": 9, "n": 8, "k": 45, "tile_m": 6, "tile_n": 1, "w": 20, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3020.51, "source": "autotuned"}, {"m": 9, "n": 9, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 1372.24, "source": "autotuned"}, {"m": 9, "n": 9, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 1609.35, "source": "autotuned"}, {"m": 9, "n": 9, "k": 6, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 31, "algorithm": "small", "perf": 1791.8, "source": "autotuned"}, {"m": 9, "n": 9, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 1952.42, "source": "autotuned"}, {"m": 9, "n": 9, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "small", "perf": 2109.24, "source": "autotuned"}, {"m": 9, "n": 9, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "small", "perf": 2232.46, "source": "autotuned"}, {"m": 9, "n": 9, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "small", "perf": 2374.72, "source": "autotuned"}, {"m": 9, "n": 9, "k": 12, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "small", "perf": 2403.22, "source": "autotuned"}, {"m": 9, "n": 9, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "small", "perf": 2477.89, "source": "autotuned"}, {"m": 9, "n": 9, "k": 14, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "small", "perf": 2600.65, "source": "autotuned"}, {"m": 9, "n": 9, "k": 15, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 2598.63, "source": "autotuned"}, {"m": 9, "n": 9, "k": 16, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 2703.35, "source": "autotuned"}, {"m": 9, "n": 9, "k": 17, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 25, "algorithm": "medium", "perf": 2756.7, "source": "autotuned"}, {"m": 9, "n": 9, "k": 22, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 2869.8, "source": "autotuned"}, {"m": 9, "n": 9, "k": 23, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2899.76, "source": "autotuned"}, {"m": 9, "n": 9, "k": 25, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 2919.48, "source": "autotuned"}, {"m": 9, "n": 9, "k": 26, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 2934.88, "source": "autotuned"}, {"m": 9, "n": 9, "k": 28, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 11, "minblocks": 2, "algorithm": "medium", "perf": 3029.79, "source": "autotuned"}, {"m": 9, "n": 9, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 3366.19, "source": "autotuned"}, {"m": 9, "n": 9, "k": 45, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 11, "minblocks": 8, "algorithm": "medium", "perf": 3328.79, "source": "autotuned"}, {"m": 9, "n": 10, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 1529.71, "source": "autotuned"}, {"m": 9, "n": 10, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 1764.23, "source": "autotuned"}, {"m": 9, "n": 10, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 3, "algorithm": "medium", "perf": 1926.48, "source": "autotuned"}, {"m": 9, "n": 10, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2089.29, "source": "autotuned"}, {"m": 9, "n": 10, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2279.19, "source": "autotuned"}, {"m": 9, "n": 10, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2413.86, "source": "autotuned"}, {"m": 9, "n": 10, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2336.06, "source": "autotuned"}, {"m": 9, "n": 10, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 2536.0, "source": "autotuned"}, {"m": 9, "n": 10, "k": 14, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 2649.12, "source": "autotuned"}, {"m": 9, "n": 10, "k": 15, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 2735.49, "source": "autotuned"}, {"m": 9, "n": 10, "k": 22, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 2991.87, "source": "autotuned"}, {"m": 9, "n": 10, "k": 26, "tile_m": 5, "tile_n": 1, "w": 12, "v": 10, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3253.73, "source": "autotuned"}, {"m": 9, "n": 10, "k": 32, "tile_m": 5, "tile_n": 1, "w": 14, "v": 10, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3374.41, "source": "autotuned"}, {"m": 9, "n": 10, "k": 45, "tile_m": 5, "tile_n": 1, "w": 16, "v": 10, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3531.03, "source": "autotuned"}, {"m": 9, "n": 12, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2650.53, "source": "autotuned"}, {"m": 9, "n": 12, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2810.72, "source": "autotuned"}, {"m": 9, "n": 12, "k": 32, "tile_m": 5, "tile_n": 1, "w": 14, "v": 6, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3851.18, "source": "autotuned"}, {"m": 9, "n": 13, "k": 4, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 1821.04, "source": "autotuned"}, {"m": 9, "n": 13, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2125.73, "source": "autotuned"}, {"m": 9, "n": 13, "k": 6, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2418.01, "source": "autotuned"}, {"m": 9, "n": 13, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2632.01, "source": "autotuned"}, {"m": 9, "n": 13, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2611.41, "source": "autotuned"}, {"m": 9, "n": 13, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2830.15, "source": "autotuned"}, {"m": 9, "n": 13, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2799.25, "source": "autotuned"}, {"m": 9, "n": 13, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 3114.59, "source": "autotuned"}, {"m": 9, "n": 13, "k": 14, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 3284.53, "source": "autotuned"}, {"m": 9, "n": 13, "k": 15, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 3291.07, "source": "autotuned"}, {"m": 9, "n": 13, "k": 16, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 3396.47, "source": "autotuned"}, {"m": 9, "n": 13, "k": 22, "tile_m": 5, "tile_n": 1, "w": 10, "v": 10, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3724.85, "source": "autotuned"}, {"m": 9, "n": 13, "k": 23, "tile_m": 5, "tile_n": 1, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3721.87, "source": "autotuned"}, {"m": 9, "n": 13, "k": 25, "tile_m": 5, "tile_n": 1, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3842.3, "source": "autotuned"}, {"m": 9, "n": 13, "k": 26, "tile_m": 5, "tile_n": 1, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3864.06, "source": "autotuned"}, {"m": 9, "n": 13, "k": 32, "tile_m": 5, "tile_n": 1, "w": 14, "v": 8, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 4001.25, "source": "autotuned"}, {"m": 9, "n": 13, "k": 45, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 11, "minblocks": 3, "algorithm": "medium", "perf": 4308.68, "source": "autotuned"}, {"m": 9, "n": 14, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2291.19, "source": "autotuned"}, {"m": 9, "n": 14, "k": 6, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2585.42, "source": "autotuned"}, {"m": 9, "n": 14, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 3080.2, "source": "autotuned"}, {"m": 9, "n": 14, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3033.03, "source": "autotuned"}, {"m": 9, "n": 14, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 3312.04, "source": "autotuned"}, {"m": 9, "n": 14, "k": 14, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 3428.22, "source": "autotuned"}, {"m": 9, "n": 15, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2082.8, "source": "autotuned"}, {"m": 9, "n": 15, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2443.96, "source": "autotuned"}, {"m": 9, "n": 15, "k": 6, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2709.27, "source": "autotuned"}, {"m": 9, "n": 15, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2764.02, "source": "autotuned"}, {"m": 9, "n": 15, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2975.39, "source": "autotuned"}, {"m": 9, "n": 15, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 27, "algorithm": "medium", "perf": 2999.46, "source": "autotuned"}, {"m": 9, "n": 15, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3220.4, "source": "autotuned"}, {"m": 9, "n": 15, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 3542.47, "source": "autotuned"}, {"m": 9, "n": 15, "k": 15, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 3671.84, "source": "autotuned"}, {"m": 9, "n": 15, "k": 16, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 3848.73, "source": "autotuned"}, {"m": 9, "n": 15, "k": 22, "tile_m": 5, "tile_n": 1, "w": 10, "v": 10, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4191.79, "source": "autotuned"}, {"m": 9, "n": 15, "k": 25, "tile_m": 5, "tile_n": 1, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4139.01, "source": "autotuned"}, {"m": 9, "n": 15, "k": 26, "tile_m": 5, "tile_n": 1, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4294.04, "source": "autotuned"}, {"m": 9, "n": 15, "k": 45, "tile_m": 5, "tile_n": 1, "w": 16, "v": 10, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4758.73, "source": "autotuned"}, {"m": 9, "n": 16, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2243.19, "source": "autotuned"}, {"m": 9, "n": 16, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2631.95, "source": "autotuned"}, {"m": 9, "n": 16, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 25, "algorithm": "medium", "perf": 3236.52, "source": "autotuned"}, {"m": 9, "n": 16, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 3753.93, "source": "autotuned"}, {"m": 9, "n": 16, "k": 15, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 3941.4, "source": "autotuned"}, {"m": 9, "n": 16, "k": 16, "tile_m": 5, "tile_n": 1, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4296.64, "source": "autotuned"}, {"m": 9, "n": 16, "k": 17, "tile_m": 5, "tile_n": 1, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4327.97, "source": "autotuned"}, {"m": 9, "n": 16, "k": 22, "tile_m": 5, "tile_n": 1, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4564.08, "source": "autotuned"}, {"m": 9, "n": 16, "k": 23, "tile_m": 5, "tile_n": 1, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4635.78, "source": "autotuned"}, {"m": 9, "n": 16, "k": 25, "tile_m": 5, "tile_n": 1, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4554.54, "source": "autotuned"}, {"m": 9, "n": 16, "k": 26, "tile_m": 5, "tile_n": 1, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4584.05, "source": "autotuned"}, {"m": 9, "n": 16, "k": 45, "tile_m": 5, "tile_n": 1, "w": 16, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5128.18, "source": "autotuned"}, {"m": 9, "n": 17, "k": 9, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 3055.67, "source": "autotuned"}, {"m": 9, "n": 17, "k": 16, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 3928.08, "source": "autotuned"}, {"m": 9, "n": 17, "k": 17, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 3805.21, "source": "autotuned"}, {"m": 9, "n": 17, "k": 22, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3983.11, "source": "autotuned"}, {"m": 9, "n": 17, "k": 23, "tile_m": 5, "tile_n": 2, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4001.63, "source": "autotuned"}, {"m": 9, "n": 22, "k": 4, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2663.32, "source": "autotuned"}, {"m": 9, "n": 22, "k": 5, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2717.52, "source": "autotuned"}, {"m": 9, "n": 22, "k": 6, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2995.64, "source": "autotuned"}, {"m": 9, "n": 22, "k": 7, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 6, "minblocks": 24, "algorithm": "medium", "perf": 3260.49, "source": "autotuned"}, {"m": 9, "n": 22, "k": 8, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3491.18, "source": "autotuned"}, {"m": 9, "n": 22, "k": 9, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 3612.59, "source": "autotuned"}, {"m": 9, "n": 22, "k": 10, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4031.11, "source": "autotuned"}, {"m": 9, "n": 22, "k": 13, "tile_m": 5, "tile_n": 2, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4298.5, "source": "autotuned"}, {"m": 9, "n": 22, "k": 15, "tile_m": 5, "tile_n": 2, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4511.66, "source": "autotuned"}, {"m": 9, "n": 22, "k": 16, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4701.77, "source": "autotuned"}, {"m": 9, "n": 22, "k": 17, "tile_m": 5, "tile_n": 2, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4495.4, "source": "autotuned"}, {"m": 9, "n": 22, "k": 22, "tile_m": 5, "tile_n": 2, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4712.36, "source": "autotuned"}, {"m": 9, "n": 22, "k": 23, "tile_m": 5, "tile_n": 2, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4839.33, "source": "autotuned"}, {"m": 9, "n": 22, "k": 25, "tile_m": 5, "tile_n": 2, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4979.77, "source": "autotuned"}, {"m": 9, "n": 22, "k": 26, "tile_m": 5, "tile_n": 2, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4993.16, "source": "autotuned"}, {"m": 9, "n": 22, "k": 32, "tile_m": 5, "tile_n": 2, "w": 14, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5296.36, "source": "autotuned"}, {"m": 9, "n": 22, "k": 45, "tile_m": 5, "tile_n": 2, "w": 16, "v": 20, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5710.88, "source": "autotuned"}, {"m": 9, "n": 23, "k": 4, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2762.09, "source": "autotuned"}, {"m": 9, "n": 23, "k": 5, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2855.41, "source": "autotuned"}, {"m": 9, "n": 23, "k": 9, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 3842.44, "source": "autotuned"}, {"m": 9, "n": 23, "k": 13, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 4545.11, "source": "autotuned"}, {"m": 9, "n": 23, "k": 16, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4785.32, "source": "autotuned"}, {"m": 9, "n": 23, "k": 17, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4720.74, "source": "autotuned"}, {"m": 9, "n": 23, "k": 22, "tile_m": 5, "tile_n": 2, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4775.08, "source": "autotuned"}, {"m": 9, "n": 23, "k": 23, "tile_m": 5, "tile_n": 2, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4804.12, "source": "autotuned"}, {"m": 9, "n": 23, "k": 26, "tile_m": 5, "tile_n": 2, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5020.53, "source": "autotuned"}, {"m": 9, "n": 25, "k": 4, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 2631.81, "source": "autotuned"}, {"m": 9, "n": 25, "k": 5, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3069.39, "source": "autotuned"}, {"m": 9, "n": 25, "k": 9, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 4011.15, "source": "autotuned"}, {"m": 9, "n": 25, "k": 13, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4700.26, "source": "autotuned"}, {"m": 9, "n": 25, "k": 15, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4822.94, "source": "autotuned"}, {"m": 9, "n": 25, "k": 16, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4026.6, "source": "autotuned"}, {"m": 9, "n": 25, "k": 22, "tile_m": 5, "tile_n": 2, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5138.24, "source": "autotuned"}, {"m": 9, "n": 25, "k": 25, "tile_m": 5, "tile_n": 2, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5203.54, "source": "autotuned"}, {"m": 9, "n": 25, "k": 26, "tile_m": 5, "tile_n": 2, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5297.37, "source": "autotuned"}, {"m": 9, "n": 25, "k": 45, "tile_m": 5, "tile_n": 2, "w": 16, "v": 24, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6026.28, "source": "autotuned"}, {"m": 9, "n": 26, "k": 4, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2787.22, "source": "autotuned"}, {"m": 9, "n": 26, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 2980.3, "source": "autotuned"}, {"m": 9, "n": 26, "k": 6, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 3361.91, "source": "autotuned"}, {"m": 9, "n": 26, "k": 7, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 6, "minblocks": 22, "algorithm": "medium", "perf": 3650.41, "source": "autotuned"}, {"m": 9, "n": 26, "k": 8, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3934.0, "source": "autotuned"}, {"m": 9, "n": 26, "k": 9, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 4043.49, "source": "autotuned"}, {"m": 9, "n": 26, "k": 10, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4546.87, "source": "autotuned"}, {"m": 9, "n": 26, "k": 13, "tile_m": 5, "tile_n": 2, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4892.2, "source": "autotuned"}, {"m": 9, "n": 26, "k": 15, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4764.04, "source": "autotuned"}, {"m": 9, "n": 26, "k": 16, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 5287.3, "source": "autotuned"}, {"m": 9, "n": 26, "k": 22, "tile_m": 5, "tile_n": 2, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5173.75, "source": "autotuned"}, {"m": 9, "n": 26, "k": 23, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 11, "minblocks": 7, "algorithm": "medium", "perf": 5309.35, "source": "autotuned"}, {"m": 9, "n": 26, "k": 25, "tile_m": 5, "tile_n": 2, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5393.39, "source": "autotuned"}, {"m": 9, "n": 26, "k": 26, "tile_m": 5, "tile_n": 2, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5494.34, "source": "autotuned"}, {"m": 9, "n": 26, "k": 45, "tile_m": 5, "tile_n": 2, "w": 16, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6214.33, "source": "autotuned"}, {"m": 9, "n": 32, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 3284.95, "source": "autotuned"}, {"m": 9, "n": 32, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 3622.63, "source": "autotuned"}, {"m": 9, "n": 32, "k": 6, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 4045.4, "source": "autotuned"}, {"m": 9, "n": 32, "k": 7, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 4383.98, "source": "autotuned"}, {"m": 9, "n": 32, "k": 8, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4856.13, "source": "autotuned"}, {"m": 9, "n": 32, "k": 9, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 5049.29, "source": "autotuned"}, {"m": 9, "n": 32, "k": 10, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 5503.15, "source": "autotuned"}, {"m": 9, "n": 32, "k": 13, "tile_m": 5, "tile_n": 2, "w": 6, "v": 32, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5860.99, "source": "autotuned"}, {"m": 9, "n": 32, "k": 22, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 11, "minblocks": 8, "algorithm": "medium", "perf": 6197.5, "source": "autotuned"}, {"m": 9, "n": 32, "k": 32, "tile_m": 5, "tile_n": 2, "w": 12, "v": 32, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6675.51, "source": "autotuned"}, {"m": 9, "n": 45, "k": 4, "tile_m": 5, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 3868.88, "source": "autotuned"}, {"m": 9, "n": 45, "k": 5, "tile_m": 5, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 4228.88, "source": "autotuned"}, {"m": 9, "n": 45, "k": 6, "tile_m": 5, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 15, "algorithm": "medium", "perf": 4508.08, "source": "autotuned"}, {"m": 9, "n": 45, "k": 7, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 5039.34, "source": "autotuned"}, {"m": 9, "n": 45, "k": 8, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 5267.08, "source": "autotuned"}, {"m": 9, "n": 45, "k": 9, "tile_m": 5, "tile_n": 3, "w": 4, "v": 24, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5455.57, "source": "autotuned"}, {"m": 9, "n": 45, "k": 10, "tile_m": 5, "tile_n": 3, "w": 4, "v": 44, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5618.95, "source": "autotuned"}, {"m": 9, "n": 45, "k": 13, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 5, "algorithm": "medium", "perf": 6179.09, "source": "autotuned"}, {"m": 9, "n": 45, "k": 15, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 9, "algorithm": "medium", "perf": 6286.45, "source": "autotuned"}, {"m": 9, "n": 45, "k": 16, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 9, "algorithm": "medium", "perf": 6428.45, "source": "autotuned"}, {"m": 9, "n": 45, "k": 22, "tile_m": 5, "tile_n": 3, "w": 10, "v": 44, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6611.86, "source": "autotuned"}, {"m": 9, "n": 45, "k": 25, "tile_m": 5, "tile_n": 3, "w": 12, "v": 44, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6788.31, "source": "autotuned"}, {"m": 9, "n": 45, "k": 26, "tile_m": 5, "tile_n": 3, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6887.5, "source": "autotuned"}, {"m": 9, "n": 45, "k": 45, "tile_m": 5, "tile_n": 3, "w": 16, "v": 38, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7267.09, "source": "autotuned"}, {"m": 10, "n": 4, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 5, "algorithm": "medium", "perf": 818.08, "source": "autotuned"}, {"m": 10, "n": 4, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 958.494, "source": "autotuned"}, {"m": 10, "n": 4, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 1114.04, "source": "autotuned"}, {"m": 10, "n": 4, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 1144.91, "source": "autotuned"}, {"m": 10, "n": 4, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1274.91, "source": "autotuned"}, {"m": 10, "n": 4, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 1358.16, "source": "autotuned"}, {"m": 10, "n": 4, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1368.63, "source": "autotuned"}, {"m": 10, "n": 4, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 1531.02, "source": "autotuned"}, {"m": 10, "n": 4, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 1669.97, "source": "autotuned"}, {"m": 10, "n": 4, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 1911.27, "source": "autotuned"}, {"m": 10, "n": 4, "k": 26, "tile_m": 1, "tile_n": 2, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2044.86, "source": "autotuned"}, {"m": 10, "n": 4, "k": 32, "tile_m": 1, "tile_n": 2, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2166.9, "source": "autotuned"}, {"m": 10, "n": 4, "k": 45, "tile_m": 1, "tile_n": 2, "w": 16, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2262.96, "source": "autotuned"}, {"m": 10, "n": 5, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 1029.37, "source": "autotuned"}, {"m": 10, "n": 5, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 1214.56, "source": "autotuned"}, {"m": 10, "n": 5, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 1364.06, "source": "autotuned"}, {"m": 10, "n": 5, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 1393.91, "source": "autotuned"}, {"m": 10, "n": 5, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 1545.46, "source": "autotuned"}, {"m": 10, "n": 5, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 1662.4, "source": "autotuned"}, {"m": 10, "n": 5, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1657.68, "source": "autotuned"}, {"m": 10, "n": 5, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1819.42, "source": "autotuned"}, {"m": 10, "n": 5, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1922.12, "source": "autotuned"}, {"m": 10, "n": 5, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1982.78, "source": "autotuned"}, {"m": 10, "n": 5, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 2259.01, "source": "autotuned"}, {"m": 10, "n": 5, "k": 26, "tile_m": 1, "tile_n": 2, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2381.21, "source": "autotuned"}, {"m": 10, "n": 5, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 2563.14, "source": "autotuned"}, {"m": 10, "n": 5, "k": 45, "tile_m": 1, "tile_n": 2, "w": 18, "v": 4, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 2674.95, "source": "autotuned"}, {"m": 10, "n": 6, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 1208.74, "source": "autotuned"}, {"m": 10, "n": 6, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 11, "algorithm": "medium", "perf": 1428.52, "source": "autotuned"}, {"m": 10, "n": 6, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 1645.23, "source": "autotuned"}, {"m": 10, "n": 6, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 12, "minblocks": 12, "algorithm": "medium", "perf": 1673.6, "source": "autotuned"}, {"m": 10, "n": 6, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 1884.36, "source": "autotuned"}, {"m": 10, "n": 6, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 15, "algorithm": "medium", "perf": 1976.12, "source": "autotuned"}, {"m": 10, "n": 6, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2012.36, "source": "autotuned"}, {"m": 10, "n": 6, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 2192.47, "source": "autotuned"}, {"m": 10, "n": 6, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2298.49, "source": "autotuned"}, {"m": 10, "n": 6, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2369.16, "source": "autotuned"}, {"m": 10, "n": 6, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 2654.98, "source": "autotuned"}, {"m": 10, "n": 6, "k": 26, "tile_m": 1, "tile_n": 2, "w": 10, "v": 6, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 2910.0, "source": "autotuned"}, {"m": 10, "n": 6, "k": 32, "tile_m": 1, "tile_n": 2, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3065.6, "source": "autotuned"}, {"m": 10, "n": 6, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 3117.86, "source": "autotuned"}, {"m": 10, "n": 7, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 1244.33, "source": "autotuned"}, {"m": 10, "n": 7, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 9, "minblocks": 4, "algorithm": "medium", "perf": 1460.35, "source": "autotuned"}, {"m": 10, "n": 7, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 1664.23, "source": "autotuned"}, {"m": 10, "n": 7, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 1773.35, "source": "autotuned"}, {"m": 10, "n": 7, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1947.82, "source": "autotuned"}, {"m": 10, "n": 7, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2106.57, "source": "autotuned"}, {"m": 10, "n": 7, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2033.78, "source": "autotuned"}, {"m": 10, "n": 7, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 7, "minblocks": 26, "algorithm": "medium", "perf": 2247.62, "source": "autotuned"}, {"m": 10, "n": 7, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2395.03, "source": "autotuned"}, {"m": 10, "n": 7, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 6, "algorithm": "medium", "perf": 2747.18, "source": "autotuned"}, {"m": 10, "n": 7, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2839.46, "source": "autotuned"}, {"m": 10, "n": 7, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 4, "algorithm": "medium", "perf": 3009.27, "source": "autotuned"}, {"m": 10, "n": 7, "k": 45, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 3117.73, "source": "autotuned"}, {"m": 10, "n": 8, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 1494.72, "source": "autotuned"}, {"m": 10, "n": 8, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 1717.99, "source": "autotuned"}, {"m": 10, "n": 8, "k": 6, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 1952.75, "source": "autotuned"}, {"m": 10, "n": 8, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 14, "algorithm": "medium", "perf": 2008.78, "source": "autotuned"}, {"m": 10, "n": 8, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2248.81, "source": "autotuned"}, {"m": 10, "n": 8, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2347.81, "source": "autotuned"}, {"m": 10, "n": 8, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2323.16, "source": "autotuned"}, {"m": 10, "n": 8, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 7, "minblocks": 25, "algorithm": "medium", "perf": 2524.04, "source": "autotuned"}, {"m": 10, "n": 8, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 7, "minblocks": 27, "algorithm": "medium", "perf": 2738.08, "source": "autotuned"}, {"m": 10, "n": 8, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 3087.14, "source": "autotuned"}, {"m": 10, "n": 8, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 3206.76, "source": "autotuned"}, {"m": 10, "n": 8, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 3426.97, "source": "autotuned"}, {"m": 10, "n": 8, "k": 45, "tile_m": 1, "tile_n": 3, "w": 16, "v": 8, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3377.11, "source": "autotuned"}, {"m": 10, "n": 9, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 1603.01, "source": "autotuned"}, {"m": 10, "n": 9, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 1888.7, "source": "autotuned"}, {"m": 10, "n": 9, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 9, "minblocks": 12, "algorithm": "medium", "perf": 2110.75, "source": "autotuned"}, {"m": 10, "n": 9, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 14, "algorithm": "medium", "perf": 2338.62, "source": "autotuned"}, {"m": 10, "n": 9, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 14, "algorithm": "medium", "perf": 2474.5, "source": "autotuned"}, {"m": 10, "n": 9, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 14, "algorithm": "medium", "perf": 2624.44, "source": "autotuned"}, {"m": 10, "n": 9, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2607.19, "source": "autotuned"}, {"m": 10, "n": 9, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2822.2, "source": "autotuned"}, {"m": 10, "n": 9, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 7, "minblocks": 27, "algorithm": "medium", "perf": 2944.85, "source": "autotuned"}, {"m": 10, "n": 9, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3033.14, "source": "autotuned"}, {"m": 10, "n": 9, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 12, "algorithm": "medium", "perf": 3342.82, "source": "autotuned"}, {"m": 10, "n": 9, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 3509.34, "source": "autotuned"}, {"m": 10, "n": 9, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 3778.23, "source": "autotuned"}, {"m": 10, "n": 9, "k": 45, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 4, "algorithm": "medium", "perf": 3768.62, "source": "autotuned"}, {"m": 10, "n": 10, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 1781.14, "source": "autotuned"}, {"m": 10, "n": 10, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 2041.45, "source": "autotuned"}, {"m": 10, "n": 10, "k": 6, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 2308.41, "source": "autotuned"}, {"m": 10, "n": 10, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1979.33, "source": "autotuned"}, {"m": 10, "n": 10, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2642.83, "source": "autotuned"}, {"m": 10, "n": 10, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 2783.27, "source": "autotuned"}, {"m": 10, "n": 10, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2787.03, "source": "autotuned"}, {"m": 10, "n": 10, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 3038.33, "source": "autotuned"}, {"m": 10, "n": 10, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 3166.62, "source": "autotuned"}, {"m": 10, "n": 10, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 3249.53, "source": "autotuned"}, {"m": 10, "n": 10, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 3623.13, "source": "autotuned"}, {"m": 10, "n": 10, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 3867.38, "source": "autotuned"}, {"m": 10, "n": 10, "k": 32, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 4149.96, "source": "autotuned"}, {"m": 10, "n": 10, "k": 45, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 4138.59, "source": "autotuned"}, {"m": 10, "n": 12, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 3283.3, "source": "autotuned"}, {"m": 10, "n": 13, "k": 4, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 2048.89, "source": "autotuned"}, {"m": 10, "n": 13, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2361.66, "source": "autotuned"}, {"m": 10, "n": 13, "k": 6, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2681.25, "source": "autotuned"}, {"m": 10, "n": 13, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2939.32, "source": "autotuned"}, {"m": 10, "n": 13, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2927.74, "source": "autotuned"}, {"m": 10, "n": 13, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 3165.72, "source": "autotuned"}, {"m": 10, "n": 13, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3101.95, "source": "autotuned"}, {"m": 10, "n": 13, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 3462.17, "source": "autotuned"}, {"m": 10, "n": 13, "k": 14, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 6, "algorithm": "medium", "perf": 3599.15, "source": "autotuned"}, {"m": 10, "n": 13, "k": 15, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 3681.55, "source": "autotuned"}, {"m": 10, "n": 13, "k": 22, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4084.07, "source": "autotuned"}, {"m": 10, "n": 13, "k": 26, "tile_m": 5, "tile_n": 1, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4214.03, "source": "autotuned"}, {"m": 10, "n": 13, "k": 32, "tile_m": 5, "tile_n": 1, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4352.82, "source": "autotuned"}, {"m": 10, "n": 13, "k": 45, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 11, "minblocks": 4, "algorithm": "medium", "perf": 4612.58, "source": "autotuned"}, {"m": 10, "n": 14, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2526.26, "source": "autotuned"}, {"m": 10, "n": 14, "k": 6, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2875.5, "source": "autotuned"}, {"m": 10, "n": 14, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 3371.04, "source": "autotuned"}, {"m": 10, "n": 14, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3301.95, "source": "autotuned"}, {"m": 10, "n": 14, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 3680.4, "source": "autotuned"}, {"m": 10, "n": 14, "k": 14, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 3833.06, "source": "autotuned"}, {"m": 10, "n": 15, "k": 4, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 2377.92, "source": "autotuned"}, {"m": 10, "n": 15, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2697.47, "source": "autotuned"}, {"m": 10, "n": 15, "k": 6, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 3054.19, "source": "autotuned"}, {"m": 10, "n": 15, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 3090.03, "source": "autotuned"}, {"m": 10, "n": 15, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 3379.43, "source": "autotuned"}, {"m": 10, "n": 15, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 6, "minblocks": 27, "algorithm": "medium", "perf": 3332.55, "source": "autotuned"}, {"m": 10, "n": 15, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3509.87, "source": "autotuned"}, {"m": 10, "n": 15, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 3880.52, "source": "autotuned"}, {"m": 10, "n": 15, "k": 15, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4058.25, "source": "autotuned"}, {"m": 10, "n": 22, "k": 4, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 12, "minblocks": 12, "algorithm": "medium", "perf": 2930.06, "source": "autotuned"}, {"m": 10, "n": 22, "k": 5, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3135.69, "source": "autotuned"}, {"m": 10, "n": 22, "k": 6, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 3273.75, "source": "autotuned"}, {"m": 10, "n": 22, "k": 7, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 3596.1, "source": "autotuned"}, {"m": 10, "n": 22, "k": 8, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3821.35, "source": "autotuned"}, {"m": 10, "n": 22, "k": 9, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 11, "algorithm": "medium", "perf": 4117.71, "source": "autotuned"}, {"m": 10, "n": 22, "k": 10, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4408.43, "source": "autotuned"}, {"m": 10, "n": 22, "k": 13, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4960.37, "source": "autotuned"}, {"m": 10, "n": 22, "k": 22, "tile_m": 5, "tile_n": 2, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5254.9, "source": "autotuned"}, {"m": 10, "n": 22, "k": 32, "tile_m": 5, "tile_n": 2, "w": 12, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5831.24, "source": "autotuned"}, {"m": 10, "n": 26, "k": 4, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2999.5, "source": "autotuned"}, {"m": 10, "n": 26, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 3355.41, "source": "autotuned"}, {"m": 10, "n": 26, "k": 6, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 3693.46, "source": "autotuned"}, {"m": 10, "n": 26, "k": 7, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4026.32, "source": "autotuned"}, {"m": 10, "n": 26, "k": 8, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4428.49, "source": "autotuned"}, {"m": 10, "n": 26, "k": 9, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 4726.84, "source": "autotuned"}, {"m": 10, "n": 26, "k": 10, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4994.36, "source": "autotuned"}, {"m": 10, "n": 26, "k": 13, "tile_m": 5, "tile_n": 2, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5488.73, "source": "autotuned"}, {"m": 10, "n": 26, "k": 26, "tile_m": 5, "tile_n": 2, "w": 10, "v": 18, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5985.94, "source": "autotuned"}, {"m": 10, "n": 26, "k": 45, "tile_m": 5, "tile_n": 2, "w": 16, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6841.58, "source": "autotuned"}, {"m": 10, "n": 32, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 3618.08, "source": "autotuned"}, {"m": 10, "n": 32, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 4050.43, "source": "autotuned"}, {"m": 10, "n": 32, "k": 6, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 4445.83, "source": "autotuned"}, {"m": 10, "n": 32, "k": 7, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 4739.21, "source": "autotuned"}, {"m": 10, "n": 32, "k": 8, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 5250.23, "source": "autotuned"}, {"m": 10, "n": 32, "k": 9, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 5615.79, "source": "autotuned"}, {"m": 10, "n": 32, "k": 10, "tile_m": 5, "tile_n": 2, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6235.71, "source": "autotuned"}, {"m": 10, "n": 32, "k": 13, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 6260.73, "source": "autotuned"}, {"m": 10, "n": 32, "k": 22, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 11, "minblocks": 5, "algorithm": "medium", "perf": 6717.52, "source": "autotuned"}, {"m": 10, "n": 32, "k": 32, "tile_m": 5, "tile_n": 2, "w": 12, "v": 32, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7287.08, "source": "autotuned"}, {"m": 10, "n": 45, "k": 4, "tile_m": 5, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 4121.85, "source": "autotuned"}, {"m": 10, "n": 45, "k": 5, "tile_m": 6, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 15, "algorithm": "medium", "perf": 4608.32, "source": "autotuned"}, {"m": 10, "n": 45, "k": 6, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4935.3, "source": "autotuned"}, {"m": 10, "n": 45, "k": 7, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 5454.68, "source": "autotuned"}, {"m": 10, "n": 45, "k": 8, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 5746.48, "source": "autotuned"}, {"m": 10, "n": 45, "k": 9, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 5949.0, "source": "autotuned"}, {"m": 10, "n": 45, "k": 10, "tile_m": 5, "tile_n": 3, "w": 4, "v": 30, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5818.28, "source": "autotuned"}, {"m": 10, "n": 45, "k": 13, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 5, "algorithm": "medium", "perf": 6741.74, "source": "autotuned"}, {"m": 10, "n": 45, "k": 26, "tile_m": 5, "tile_n": 3, "w": 12, "v": 42, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7492.74, "source": "autotuned"}, {"m": 10, "n": 45, "k": 45, "tile_m": 5, "tile_n": 3, "w": 16, "v": 42, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7902.34, "source": "autotuned"}, {"m": 11, "n": 11, "k": 11, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "small", "perf": 3233.34, "source": "autotuned"}, {"m": 12, "n": 12, "k": 12, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 11, "algorithm": "medium", "perf": 4018.53, "source": "autotuned"}, {"m": 13, "n": 4, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 11, "minblocks": 22, "algorithm": "medium", "perf": 977.366, "source": "autotuned"}, {"m": 13, "n": 4, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1076.48, "source": "autotuned"}, {"m": 13, "n": 4, "k": 6, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1239.71, "source": "autotuned"}, {"m": 13, "n": 4, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 1394.29, "source": "autotuned"}, {"m": 13, "n": 4, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 1374.27, "source": "autotuned"}, {"m": 13, "n": 4, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 1459.1, "source": "autotuned"}, {"m": 13, "n": 4, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 1515.22, "source": "autotuned"}, {"m": 13, "n": 4, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 1727.97, "source": "autotuned"}, {"m": 13, "n": 4, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 1812.41, "source": "autotuned"}, {"m": 13, "n": 4, "k": 16, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 1871.37, "source": "autotuned"}, {"m": 13, "n": 4, "k": 22, "tile_m": 1, "tile_n": 4, "w": 8, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2169.81, "source": "autotuned"}, {"m": 13, "n": 4, "k": 23, "tile_m": 1, "tile_n": 4, "w": 8, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2194.78, "source": "autotuned"}, {"m": 13, "n": 4, "k": 25, "tile_m": 1, "tile_n": 4, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2214.5, "source": "autotuned"}, {"m": 13, "n": 4, "k": 26, "tile_m": 1, "tile_n": 4, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2264.94, "source": "autotuned"}, {"m": 13, "n": 4, "k": 32, "tile_m": 1, "tile_n": 4, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2379.83, "source": "autotuned"}, {"m": 13, "n": 4, "k": 45, "tile_m": 1, "tile_n": 4, "w": 18, "v": 4, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2413.62, "source": "autotuned"}, {"m": 13, "n": 5, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 1107.91, "source": "autotuned"}, {"m": 13, "n": 5, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 6, "minblocks": 22, "algorithm": "medium", "perf": 1235.14, "source": "autotuned"}, {"m": 13, "n": 5, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 6, "minblocks": 27, "algorithm": "medium", "perf": 1431.48, "source": "autotuned"}, {"m": 13, "n": 5, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1526.0, "source": "autotuned"}, {"m": 13, "n": 5, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1547.34, "source": "autotuned"}, {"m": 13, "n": 5, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1631.33, "source": "autotuned"}, {"m": 13, "n": 5, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 1663.82, "source": "autotuned"}, {"m": 13, "n": 5, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1880.45, "source": "autotuned"}, {"m": 13, "n": 5, "k": 14, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 6, "algorithm": "medium", "perf": 1929.2, "source": "autotuned"}, {"m": 13, "n": 5, "k": 15, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 1963.04, "source": "autotuned"}, {"m": 13, "n": 5, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 2026.94, "source": "autotuned"}, {"m": 13, "n": 5, "k": 22, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 2299.29, "source": "autotuned"}, {"m": 13, "n": 5, "k": 23, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2322.15, "source": "autotuned"}, {"m": 13, "n": 5, "k": 25, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 2339.34, "source": "autotuned"}, {"m": 13, "n": 5, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 2325.35, "source": "autotuned"}, {"m": 13, "n": 5, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2407.23, "source": "autotuned"}, {"m": 13, "n": 5, "k": 45, "tile_m": 2, "tile_n": 2, "w": 16, "v": 4, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 2484.85, "source": "autotuned"}, {"m": 13, "n": 6, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 1348.44, "source": "autotuned"}, {"m": 13, "n": 6, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 1463.01, "source": "autotuned"}, {"m": 13, "n": 6, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1674.71, "source": "autotuned"}, {"m": 13, "n": 6, "k": 7, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 16, "minblocks": 7, "algorithm": "medium", "perf": 1770.93, "source": "autotuned"}, {"m": 13, "n": 6, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1847.55, "source": "autotuned"}, {"m": 13, "n": 6, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 6, "minblocks": 21, "algorithm": "medium", "perf": 1928.55, "source": "autotuned"}, {"m": 13, "n": 6, "k": 10, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2017.44, "source": "autotuned"}, {"m": 13, "n": 6, "k": 13, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2208.24, "source": "autotuned"}, {"m": 13, "n": 6, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2269.26, "source": "autotuned"}, {"m": 13, "n": 6, "k": 15, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2300.7, "source": "autotuned"}, {"m": 13, "n": 6, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 2639.66, "source": "autotuned"}, {"m": 13, "n": 6, "k": 26, "tile_m": 2, "tile_n": 2, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 2738.31, "source": "autotuned"}, {"m": 13, "n": 6, "k": 32, "tile_m": 2, "tile_n": 2, "w": 14, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 2898.51, "source": "autotuned"}, {"m": 13, "n": 6, "k": 45, "tile_m": 2, "tile_n": 2, "w": 18, "v": 4, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2403.76, "source": "autotuned"}, {"m": 13, "n": 7, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 1514.17, "source": "autotuned"}, {"m": 13, "n": 7, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 11, "minblocks": 15, "algorithm": "medium", "perf": 1618.23, "source": "autotuned"}, {"m": 13, "n": 7, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1850.0, "source": "autotuned"}, {"m": 13, "n": 7, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 2006.43, "source": "autotuned"}, {"m": 13, "n": 7, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2040.19, "source": "autotuned"}, {"m": 13, "n": 7, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2182.35, "source": "autotuned"}, {"m": 13, "n": 7, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 7, "minblocks": 25, "algorithm": "medium", "perf": 2150.8, "source": "autotuned"}, {"m": 13, "n": 7, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2488.16, "source": "autotuned"}, {"m": 13, "n": 7, "k": 15, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 2477.59, "source": "autotuned"}, {"m": 13, "n": 7, "k": 22, "tile_m": 8, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2829.9, "source": "autotuned"}, {"m": 13, "n": 7, "k": 26, "tile_m": 2, "tile_n": 2, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2929.86, "source": "autotuned"}, {"m": 13, "n": 7, "k": 32, "tile_m": 2, "tile_n": 2, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 2995.28, "source": "autotuned"}, {"m": 13, "n": 7, "k": 45, "tile_m": 2, "tile_n": 2, "w": 16, "v": 6, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3184.46, "source": "autotuned"}, {"m": 13, "n": 8, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 1711.3, "source": "autotuned"}, {"m": 13, "n": 8, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 11, "minblocks": 16, "algorithm": "medium", "perf": 1874.46, "source": "autotuned"}, {"m": 13, "n": 8, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 11, "minblocks": 15, "algorithm": "medium", "perf": 2122.39, "source": "autotuned"}, {"m": 13, "n": 8, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 15, "algorithm": "medium", "perf": 2253.34, "source": "autotuned"}, {"m": 13, "n": 8, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2293.15, "source": "autotuned"}, {"m": 13, "n": 8, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 2440.71, "source": "autotuned"}, {"m": 13, "n": 8, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2460.85, "source": "autotuned"}, {"m": 13, "n": 8, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 7, "minblocks": 18, "algorithm": "medium", "perf": 2677.48, "source": "autotuned"}, {"m": 13, "n": 8, "k": 15, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 2773.58, "source": "autotuned"}, {"m": 13, "n": 8, "k": 22, "tile_m": 8, "tile_n": 1, "w": 8, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3251.02, "source": "autotuned"}, {"m": 13, "n": 8, "k": 26, "tile_m": 8, "tile_n": 1, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3372.62, "source": "autotuned"}, {"m": 13, "n": 8, "k": 32, "tile_m": 8, "tile_n": 1, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3446.21, "source": "autotuned"}, {"m": 13, "n": 8, "k": 45, "tile_m": 2, "tile_n": 2, "w": 18, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3566.38, "source": "autotuned"}, {"m": 13, "n": 9, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 15, "algorithm": "medium", "perf": 1750.83, "source": "autotuned"}, {"m": 13, "n": 9, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 1966.84, "source": "autotuned"}, {"m": 13, "n": 9, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2168.13, "source": "autotuned"}, {"m": 13, "n": 9, "k": 7, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2416.68, "source": "autotuned"}, {"m": 13, "n": 9, "k": 8, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 13, "minblocks": 10, "algorithm": "medium", "perf": 2344.79, "source": "autotuned"}, {"m": 13, "n": 9, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2478.95, "source": "autotuned"}, {"m": 13, "n": 9, "k": 10, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 2506.67, "source": "autotuned"}, {"m": 13, "n": 9, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 2801.98, "source": "autotuned"}, {"m": 13, "n": 9, "k": 14, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 2917.73, "source": "autotuned"}, {"m": 13, "n": 9, "k": 15, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 2908.6, "source": "autotuned"}, {"m": 13, "n": 9, "k": 16, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 3023.55, "source": "autotuned"}, {"m": 13, "n": 9, "k": 22, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 3268.56, "source": "autotuned"}, {"m": 13, "n": 9, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3262.84, "source": "autotuned"}, {"m": 13, "n": 9, "k": 25, "tile_m": 7, "tile_n": 1, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3353.48, "source": "autotuned"}, {"m": 13, "n": 9, "k": 26, "tile_m": 7, "tile_n": 1, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3350.34, "source": "autotuned"}, {"m": 13, "n": 9, "k": 32, "tile_m": 7, "tile_n": 1, "w": 14, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3514.39, "source": "autotuned"}, {"m": 13, "n": 9, "k": 45, "tile_m": 7, "tile_n": 1, "w": 18, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3667.58, "source": "autotuned"}, {"m": 13, "n": 10, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 11, "minblocks": 8, "algorithm": "medium", "perf": 1918.24, "source": "autotuned"}, {"m": 13, "n": 10, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2115.02, "source": "autotuned"}, {"m": 13, "n": 10, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2394.76, "source": "autotuned"}, {"m": 13, "n": 10, "k": 7, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2652.11, "source": "autotuned"}, {"m": 13, "n": 10, "k": 8, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2595.41, "source": "autotuned"}, {"m": 13, "n": 10, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 2769.44, "source": "autotuned"}, {"m": 13, "n": 10, "k": 10, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 22, "algorithm": "medium", "perf": 2814.73, "source": "autotuned"}, {"m": 13, "n": 10, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 3080.09, "source": "autotuned"}, {"m": 13, "n": 10, "k": 14, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 3225.1, "source": "autotuned"}, {"m": 13, "n": 10, "k": 15, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 3212.64, "source": "autotuned"}, {"m": 13, "n": 10, "k": 22, "tile_m": 7, "tile_n": 1, "w": 10, "v": 10, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3689.1, "source": "autotuned"}, {"m": 13, "n": 10, "k": 26, "tile_m": 7, "tile_n": 1, "w": 12, "v": 10, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3840.65, "source": "autotuned"}, {"m": 13, "n": 10, "k": 32, "tile_m": 7, "tile_n": 1, "w": 14, "v": 10, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 3893.92, "source": "autotuned"}, {"m": 13, "n": 10, "k": 45, "tile_m": 7, "tile_n": 1, "w": 18, "v": 10, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4168.96, "source": "autotuned"}, {"m": 13, "n": 13, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2456.47, "source": "autotuned"}, {"m": 13, "n": 13, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2691.31, "source": "autotuned"}, {"m": 13, "n": 13, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 3070.59, "source": "autotuned"}, {"m": 13, "n": 13, "k": 7, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 3353.27, "source": "autotuned"}, {"m": 13, "n": 13, "k": 8, "tile_m": 8, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 3354.04, "source": "autotuned"}, {"m": 13, "n": 13, "k": 9, "tile_m": 8, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 3530.11, "source": "autotuned"}, {"m": 13, "n": 13, "k": 10, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 3727.15, "source": "autotuned"}, {"m": 13, "n": 13, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 4038.38, "source": "autotuned"}, {"m": 13, "n": 13, "k": 14, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 11, "minblocks": 17, "algorithm": "medium", "perf": 4097.54, "source": "autotuned"}, {"m": 13, "n": 13, "k": 15, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 4096.59, "source": "autotuned"}, {"m": 13, "n": 13, "k": 16, "tile_m": 8, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 4281.51, "source": "autotuned"}, {"m": 13, "n": 13, "k": 17, "tile_m": 8, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 4339.6, "source": "autotuned"}, {"m": 13, "n": 13, "k": 22, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4803.05, "source": "autotuned"}, {"m": 13, "n": 13, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4749.45, "source": "autotuned"}, {"m": 13, "n": 13, "k": 25, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 4800.82, "source": "autotuned"}, {"m": 13, "n": 13, "k": 26, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 16, "minblocks": 10, "algorithm": "medium", "perf": 4824.78, "source": "autotuned"}, {"m": 13, "n": 13, "k": 32, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 11, "minblocks": 3, "algorithm": "medium", "perf": 5001.25, "source": "autotuned"}, {"m": 13, "n": 13, "k": 45, "tile_m": 7, "tile_n": 1, "w": 18, "v": 10, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5085.14, "source": "autotuned"}, {"m": 13, "n": 14, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2928.41, "source": "autotuned"}, {"m": 13, "n": 14, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 3302.85, "source": "autotuned"}, {"m": 13, "n": 14, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3760.52, "source": "autotuned"}, {"m": 13, "n": 14, "k": 10, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3728.13, "source": "autotuned"}, {"m": 13, "n": 14, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 4079.18, "source": "autotuned"}, {"m": 13, "n": 14, "k": 14, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4188.65, "source": "autotuned"}, {"m": 13, "n": 15, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2732.9, "source": "autotuned"}, {"m": 13, "n": 15, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 3117.65, "source": "autotuned"}, {"m": 13, "n": 15, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 3548.71, "source": "autotuned"}, {"m": 13, "n": 15, "k": 7, "tile_m": 8, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 10, "algorithm": "medium", "perf": 3498.1, "source": "autotuned"}, {"m": 13, "n": 15, "k": 8, "tile_m": 8, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 3760.21, "source": "autotuned"}, {"m": 13, "n": 15, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 24, "algorithm": "medium", "perf": 3795.19, "source": "autotuned"}, {"m": 13, "n": 15, "k": 10, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 3956.61, "source": "autotuned"}, {"m": 13, "n": 15, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4279.82, "source": "autotuned"}, {"m": 13, "n": 15, "k": 15, "tile_m": 8, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 4381.75, "source": "autotuned"}, {"m": 13, "n": 15, "k": 16, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4552.84, "source": "autotuned"}, {"m": 13, "n": 15, "k": 22, "tile_m": 7, "tile_n": 1, "w": 10, "v": 14, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4942.04, "source": "autotuned"}, {"m": 13, "n": 15, "k": 25, "tile_m": 7, "tile_n": 1, "w": 12, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4976.04, "source": "autotuned"}, {"m": 13, "n": 15, "k": 26, "tile_m": 7, "tile_n": 1, "w": 12, "v": 14, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5066.52, "source": "autotuned"}, {"m": 13, "n": 15, "k": 45, "tile_m": 7, "tile_n": 1, "w": 18, "v": 10, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5642.43, "source": "autotuned"}, {"m": 13, "n": 16, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2951.97, "source": "autotuned"}, {"m": 13, "n": 16, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 3389.6, "source": "autotuned"}, {"m": 13, "n": 16, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4105.05, "source": "autotuned"}, {"m": 13, "n": 16, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4586.43, "source": "autotuned"}, {"m": 13, "n": 16, "k": 15, "tile_m": 8, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 4752.15, "source": "autotuned"}, {"m": 13, "n": 16, "k": 16, "tile_m": 8, "tile_n": 1, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5207.05, "source": "autotuned"}, {"m": 13, "n": 16, "k": 22, "tile_m": 7, "tile_n": 1, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5421.35, "source": "autotuned"}, {"m": 13, "n": 16, "k": 23, "tile_m": 7, "tile_n": 1, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5360.9, "source": "autotuned"}, {"m": 13, "n": 16, "k": 25, "tile_m": 7, "tile_n": 1, "w": 12, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5384.71, "source": "autotuned"}, {"m": 13, "n": 16, "k": 26, "tile_m": 7, "tile_n": 1, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5508.85, "source": "autotuned"}, {"m": 13, "n": 16, "k": 45, "tile_m": 7, "tile_n": 1, "w": 18, "v": 14, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6087.73, "source": "autotuned"}, {"m": 13, "n": 17, "k": 13, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4423.08, "source": "autotuned"}, {"m": 13, "n": 17, "k": 17, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4739.19, "source": "autotuned"}, {"m": 13, "n": 17, "k": 23, "tile_m": 4, "tile_n": 3, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 4970.27, "source": "autotuned"}, {"m": 13, "n": 22, "k": 4, "tile_m": 4, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 3466.7, "source": "autotuned"}, {"m": 13, "n": 22, "k": 5, "tile_m": 4, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 3665.46, "source": "autotuned"}, {"m": 13, "n": 22, "k": 6, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 3765.51, "source": "autotuned"}, {"m": 13, "n": 22, "k": 7, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 4216.05, "source": "autotuned"}, {"m": 13, "n": 22, "k": 8, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4517.8, "source": "autotuned"}, {"m": 13, "n": 22, "k": 9, "tile_m": 4, "tile_n": 3, "w": 4, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4683.59, "source": "autotuned"}, {"m": 13, "n": 22, "k": 10, "tile_m": 4, "tile_n": 3, "w": 4, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4943.23, "source": "autotuned"}, {"m": 13, "n": 22, "k": 13, "tile_m": 4, "tile_n": 3, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5509.87, "source": "autotuned"}, {"m": 13, "n": 22, "k": 15, "tile_m": 4, "tile_n": 3, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5450.47, "source": "autotuned"}, {"m": 13, "n": 22, "k": 16, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 5589.05, "source": "autotuned"}, {"m": 13, "n": 22, "k": 22, "tile_m": 4, "tile_n": 3, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5930.24, "source": "autotuned"}, {"m": 13, "n": 22, "k": 23, "tile_m": 4, "tile_n": 3, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5963.8, "source": "autotuned"}, {"m": 13, "n": 22, "k": 25, "tile_m": 4, "tile_n": 3, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6032.25, "source": "autotuned"}, {"m": 13, "n": 22, "k": 26, "tile_m": 4, "tile_n": 3, "w": 12, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6137.23, "source": "autotuned"}, {"m": 13, "n": 22, "k": 32, "tile_m": 4, "tile_n": 3, "w": 12, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6495.88, "source": "autotuned"}, {"m": 13, "n": 22, "k": 45, "tile_m": 4, "tile_n": 3, "w": 16, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6822.48, "source": "autotuned"}, {"m": 13, "n": 23, "k": 4, "tile_m": 4, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 3541.66, "source": "autotuned"}, {"m": 13, "n": 23, "k": 5, "tile_m": 4, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 3856.78, "source": "autotuned"}, {"m": 13, "n": 23, "k": 9, "tile_m": 4, "tile_n": 3, "w": 4, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4863.31, "source": "autotuned"}, {"m": 13, "n": 23, "k": 13, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4470.93, "source": "autotuned"}, {"m": 13, "n": 23, "k": 16, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 5831.23, "source": "autotuned"}, {"m": 13, "n": 23, "k": 17, "tile_m": 4, "tile_n": 3, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5760.49, "source": "autotuned"}, {"m": 13, "n": 23, "k": 22, "tile_m": 4, "tile_n": 3, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5947.63, "source": "autotuned"}, {"m": 13, "n": 23, "k": 23, "tile_m": 4, "tile_n": 3, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6059.14, "source": "autotuned"}, {"m": 13, "n": 23, "k": 26, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 5, "algorithm": "medium", "perf": 6273.0, "source": "autotuned"}, {"m": 13, "n": 25, "k": 4, "tile_m": 7, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3420.12, "source": "autotuned"}, {"m": 13, "n": 25, "k": 5, "tile_m": 7, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3880.82, "source": "autotuned"}, {"m": 13, "n": 25, "k": 9, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 5090.76, "source": "autotuned"}, {"m": 13, "n": 25, "k": 13, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 5620.11, "source": "autotuned"}, {"m": 13, "n": 25, "k": 15, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 5755.14, "source": "autotuned"}, {"m": 13, "n": 25, "k": 16, "tile_m": 7, "tile_n": 2, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5835.78, "source": "autotuned"}, {"m": 13, "n": 25, "k": 22, "tile_m": 7, "tile_n": 2, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6255.6, "source": "autotuned"}, {"m": 13, "n": 25, "k": 25, "tile_m": 7, "tile_n": 2, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6457.26, "source": "autotuned"}, {"m": 13, "n": 25, "k": 26, "tile_m": 7, "tile_n": 2, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6533.86, "source": "autotuned"}, {"m": 13, "n": 25, "k": 45, "tile_m": 7, "tile_n": 2, "w": 16, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7223.29, "source": "autotuned"}, {"m": 13, "n": 26, "k": 4, "tile_m": 7, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3569.44, "source": "autotuned"}, {"m": 13, "n": 26, "k": 5, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 3742.47, "source": "autotuned"}, {"m": 13, "n": 26, "k": 6, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4314.71, "source": "autotuned"}, {"m": 13, "n": 26, "k": 7, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4722.15, "source": "autotuned"}, {"m": 13, "n": 26, "k": 8, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 5117.97, "source": "autotuned"}, {"m": 13, "n": 26, "k": 9, "tile_m": 8, "tile_n": 2, "w": 4, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5359.67, "source": "autotuned"}, {"m": 13, "n": 26, "k": 10, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 5524.6, "source": "autotuned"}, {"m": 13, "n": 26, "k": 13, "tile_m": 7, "tile_n": 2, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6023.81, "source": "autotuned"}, {"m": 13, "n": 26, "k": 15, "tile_m": 7, "tile_n": 2, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6061.65, "source": "autotuned"}, {"m": 13, "n": 26, "k": 16, "tile_m": 7, "tile_n": 2, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6161.38, "source": "autotuned"}, {"m": 13, "n": 26, "k": 22, "tile_m": 7, "tile_n": 2, "w": 8, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6492.57, "source": "autotuned"}, {"m": 13, "n": 26, "k": 23, "tile_m": 7, "tile_n": 2, "w": 8, "v": 14, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6518.38, "source": "autotuned"}, {"m": 13, "n": 26, "k": 25, "tile_m": 7, "tile_n": 2, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6674.89, "source": "autotuned"}, {"m": 13, "n": 26, "k": 26, "tile_m": 7, "tile_n": 2, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6788.22, "source": "autotuned"}, {"m": 13, "n": 26, "k": 45, "tile_m": 7, "tile_n": 2, "w": 16, "v": 26, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7634.1, "source": "autotuned"}, {"m": 13, "n": 32, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 4044.3, "source": "autotuned"}, {"m": 13, "n": 32, "k": 5, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 7, "minblocks": 19, "algorithm": "medium", "perf": 4497.08, "source": "autotuned"}, {"m": 13, "n": 32, "k": 6, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 5072.69, "source": "autotuned"}, {"m": 13, "n": 32, "k": 7, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 5519.49, "source": "autotuned"}, {"m": 13, "n": 32, "k": 8, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 6180.15, "source": "autotuned"}, {"m": 13, "n": 32, "k": 9, "tile_m": 7, "tile_n": 2, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6772.46, "source": "autotuned"}, {"m": 13, "n": 32, "k": 10, "tile_m": 7, "tile_n": 2, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6923.96, "source": "autotuned"}, {"m": 13, "n": 32, "k": 13, "tile_m": 8, "tile_n": 2, "w": 6, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6914.81, "source": "autotuned"}, {"m": 13, "n": 32, "k": 22, "tile_m": 7, "tile_n": 2, "w": 8, "v": 32, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7631.17, "source": "autotuned"}, {"m": 13, "n": 32, "k": 32, "tile_m": 7, "tile_n": 2, "w": 12, "v": 32, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8494.25, "source": "autotuned"}, {"m": 13, "n": 45, "k": 4, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 4659.1, "source": "autotuned"}, {"m": 13, "n": 45, "k": 5, "tile_m": 4, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 4834.22, "source": "autotuned"}, {"m": 13, "n": 45, "k": 6, "tile_m": 4, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 5338.72, "source": "autotuned"}, {"m": 13, "n": 45, "k": 7, "tile_m": 4, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 5473.87, "source": "autotuned"}, {"m": 13, "n": 45, "k": 8, "tile_m": 4, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 5602.07, "source": "autotuned"}, {"m": 13, "n": 45, "k": 9, "tile_m": 7, "tile_n": 3, "w": 4, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6714.8, "source": "autotuned"}, {"m": 13, "n": 45, "k": 10, "tile_m": 7, "tile_n": 3, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 6762.51, "source": "autotuned"}, {"m": 13, "n": 45, "k": 13, "tile_m": 7, "tile_n": 3, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7217.62, "source": "autotuned"}, {"m": 13, "n": 45, "k": 15, "tile_m": 7, "tile_n": 3, "w": 6, "v": 44, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7549.66, "source": "autotuned"}, {"m": 13, "n": 45, "k": 16, "tile_m": 7, "tile_n": 3, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7759.33, "source": "autotuned"}, {"m": 13, "n": 45, "k": 22, "tile_m": 7, "tile_n": 3, "w": 8, "v": 44, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8503.32, "source": "autotuned"}, {"m": 13, "n": 45, "k": 25, "tile_m": 7, "tile_n": 3, "w": 10, "v": 34, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8656.55, "source": "autotuned"}, {"m": 13, "n": 45, "k": 26, "tile_m": 7, "tile_n": 3, "w": 10, "v": 44, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8825.26, "source": "autotuned"}, {"m": 13, "n": 45, "k": 45, "tile_m": 7, "tile_n": 3, "w": 16, "v": 42, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 9449.72, "source": "autotuned"}, {"m": 14, "n": 5, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1416.79, "source": "autotuned"}, {"m": 14, "n": 5, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1621.26, "source": "autotuned"}, {"m": 14, "n": 5, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 1897.88, "source": "autotuned"}, {"m": 14, "n": 5, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 6, "minblocks": 21, "algorithm": "medium", "perf": 1941.25, "source": "autotuned"}, {"m": 14, "n": 5, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2162.99, "source": "autotuned"}, {"m": 14, "n": 5, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2253.58, "source": "autotuned"}, {"m": 14, "n": 6, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 1686.34, "source": "autotuned"}, {"m": 14, "n": 6, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 1871.58, "source": "autotuned"}, {"m": 14, "n": 6, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2250.28, "source": "autotuned"}, {"m": 14, "n": 6, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 6, "minblocks": 25, "algorithm": "medium", "perf": 2337.77, "source": "autotuned"}, {"m": 14, "n": 6, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2600.81, "source": "autotuned"}, {"m": 14, "n": 6, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2671.13, "source": "autotuned"}, {"m": 14, "n": 9, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2239.34, "source": "autotuned"}, {"m": 14, "n": 9, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2474.9, "source": "autotuned"}, {"m": 14, "n": 9, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2942.9, "source": "autotuned"}, {"m": 14, "n": 9, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 7, "minblocks": 27, "algorithm": "medium", "perf": 2904.13, "source": "autotuned"}, {"m": 14, "n": 9, "k": 13, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 3256.55, "source": "autotuned"}, {"m": 14, "n": 9, "k": 14, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 3357.4, "source": "autotuned"}, {"m": 14, "n": 10, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2469.14, "source": "autotuned"}, {"m": 14, "n": 10, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2753.02, "source": "autotuned"}, {"m": 14, "n": 10, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 3261.51, "source": "autotuned"}, {"m": 14, "n": 10, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3223.1, "source": "autotuned"}, {"m": 14, "n": 10, "k": 13, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 3568.58, "source": "autotuned"}, {"m": 14, "n": 10, "k": 14, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 3671.56, "source": "autotuned"}, {"m": 14, "n": 13, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2986.05, "source": "autotuned"}, {"m": 14, "n": 13, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 3318.35, "source": "autotuned"}, {"m": 14, "n": 13, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 3744.56, "source": "autotuned"}, {"m": 14, "n": 13, "k": 10, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 3775.81, "source": "autotuned"}, {"m": 14, "n": 13, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 4160.93, "source": "autotuned"}, {"m": 14, "n": 13, "k": 14, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 4173.22, "source": "autotuned"}, {"m": 14, "n": 14, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 3153.8, "source": "autotuned"}, {"m": 14, "n": 14, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 3511.54, "source": "autotuned"}, {"m": 14, "n": 14, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 26, "algorithm": "medium", "perf": 4096.8, "source": "autotuned"}, {"m": 14, "n": 14, "k": 10, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 4271.49, "source": "autotuned"}, {"m": 14, "n": 14, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 4580.05, "source": "autotuned"}, {"m": 14, "n": 14, "k": 14, "tile_m": 8, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 4652.3, "source": "autotuned"}, {"m": 15, "n": 4, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 7, "algorithm": "medium", "perf": 1165.09, "source": "autotuned"}, {"m": 15, "n": 4, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 1264.66, "source": "autotuned"}, {"m": 15, "n": 4, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 1428.85, "source": "autotuned"}, {"m": 15, "n": 4, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 1568.26, "source": "autotuned"}, {"m": 15, "n": 4, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 1636.37, "source": "autotuned"}, {"m": 15, "n": 4, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 12, "algorithm": "medium", "perf": 1661.17, "source": "autotuned"}, {"m": 15, "n": 4, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 1780.71, "source": "autotuned"}, {"m": 15, "n": 4, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 1970.62, "source": "autotuned"}, {"m": 15, "n": 4, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 2158.95, "source": "autotuned"}, {"m": 15, "n": 4, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2178.69, "source": "autotuned"}, {"m": 15, "n": 4, "k": 22, "tile_m": 2, "tile_n": 2, "w": 8, "v": 4, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 2516.14, "source": "autotuned"}, {"m": 15, "n": 4, "k": 25, "tile_m": 2, "tile_n": 2, "w": 10, "v": 4, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 2565.45, "source": "autotuned"}, {"m": 15, "n": 4, "k": 26, "tile_m": 2, "tile_n": 2, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2570.29, "source": "autotuned"}, {"m": 15, "n": 4, "k": 45, "tile_m": 2, "tile_n": 2, "w": 16, "v": 4, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2719.88, "source": "autotuned"}, {"m": 15, "n": 5, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 1332.45, "source": "autotuned"}, {"m": 15, "n": 5, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1485.7, "source": "autotuned"}, {"m": 15, "n": 5, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 1673.62, "source": "autotuned"}, {"m": 15, "n": 5, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1702.43, "source": "autotuned"}, {"m": 15, "n": 5, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1886.49, "source": "autotuned"}, {"m": 15, "n": 5, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 1935.63, "source": "autotuned"}, {"m": 15, "n": 5, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 2004.97, "source": "autotuned"}, {"m": 15, "n": 5, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 2217.02, "source": "autotuned"}, {"m": 15, "n": 5, "k": 15, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2428.66, "source": "autotuned"}, {"m": 15, "n": 5, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2494.54, "source": "autotuned"}, {"m": 15, "n": 5, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2730.06, "source": "autotuned"}, {"m": 15, "n": 5, "k": 25, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 6, "algorithm": "medium", "perf": 2817.61, "source": "autotuned"}, {"m": 15, "n": 5, "k": 26, "tile_m": 2, "tile_n": 2, "w": 10, "v": 4, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2833.82, "source": "autotuned"}, {"m": 15, "n": 5, "k": 45, "tile_m": 2, "tile_n": 2, "w": 18, "v": 4, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3095.4, "source": "autotuned"}, {"m": 15, "n": 6, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 8, "algorithm": "medium", "perf": 1617.63, "source": "autotuned"}, {"m": 15, "n": 6, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1732.79, "source": "autotuned"}, {"m": 15, "n": 6, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2006.76, "source": "autotuned"}, {"m": 15, "n": 6, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2025.33, "source": "autotuned"}, {"m": 15, "n": 6, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2263.6, "source": "autotuned"}, {"m": 15, "n": 6, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2239.92, "source": "autotuned"}, {"m": 15, "n": 6, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2444.37, "source": "autotuned"}, {"m": 15, "n": 6, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2630.63, "source": "autotuned"}, {"m": 15, "n": 6, "k": 15, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2865.11, "source": "autotuned"}, {"m": 15, "n": 7, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 8, "algorithm": "medium", "perf": 1851.64, "source": "autotuned"}, {"m": 15, "n": 7, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 1678.54, "source": "autotuned"}, {"m": 15, "n": 7, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2286.81, "source": "autotuned"}, {"m": 15, "n": 7, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2342.37, "source": "autotuned"}, {"m": 15, "n": 7, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2558.99, "source": "autotuned"}, {"m": 15, "n": 7, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 2550.08, "source": "autotuned"}, {"m": 15, "n": 7, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2675.07, "source": "autotuned"}, {"m": 15, "n": 7, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2984.9, "source": "autotuned"}, {"m": 15, "n": 7, "k": 15, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 3041.49, "source": "autotuned"}, {"m": 15, "n": 8, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 2114.12, "source": "autotuned"}, {"m": 15, "n": 8, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2266.57, "source": "autotuned"}, {"m": 15, "n": 8, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2597.88, "source": "autotuned"}, {"m": 15, "n": 8, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2166.42, "source": "autotuned"}, {"m": 15, "n": 8, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2903.91, "source": "autotuned"}, {"m": 15, "n": 8, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2824.75, "source": "autotuned"}, {"m": 15, "n": 8, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 3042.78, "source": "autotuned"}, {"m": 15, "n": 8, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 3290.43, "source": "autotuned"}, {"m": 15, "n": 8, "k": 15, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 3451.56, "source": "autotuned"}, {"m": 15, "n": 9, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 2073.07, "source": "autotuned"}, {"m": 15, "n": 9, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2360.88, "source": "autotuned"}, {"m": 15, "n": 9, "k": 6, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2704.45, "source": "autotuned"}, {"m": 15, "n": 9, "k": 7, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2686.67, "source": "autotuned"}, {"m": 15, "n": 9, "k": 8, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2921.98, "source": "autotuned"}, {"m": 15, "n": 9, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 2972.32, "source": "autotuned"}, {"m": 15, "n": 9, "k": 10, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 6, "minblocks": 27, "algorithm": "medium", "perf": 3147.84, "source": "autotuned"}, {"m": 15, "n": 9, "k": 13, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 3507.09, "source": "autotuned"}, {"m": 15, "n": 9, "k": 15, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 6, "algorithm": "medium", "perf": 3685.2, "source": "autotuned"}, {"m": 15, "n": 9, "k": 16, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 11, "algorithm": "medium", "perf": 3826.91, "source": "autotuned"}, {"m": 15, "n": 9, "k": 22, "tile_m": 2, "tile_n": 3, "w": 10, "v": 6, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4107.75, "source": "autotuned"}, {"m": 15, "n": 9, "k": 25, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4176.56, "source": "autotuned"}, {"m": 15, "n": 9, "k": 26, "tile_m": 2, "tile_n": 3, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4143.7, "source": "autotuned"}, {"m": 15, "n": 9, "k": 45, "tile_m": 2, "tile_n": 3, "w": 18, "v": 6, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 4674.54, "source": "autotuned"}, {"m": 15, "n": 10, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 2315.09, "source": "autotuned"}, {"m": 15, "n": 10, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2620.33, "source": "autotuned"}, {"m": 15, "n": 10, "k": 6, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2965.2, "source": "autotuned"}, {"m": 15, "n": 10, "k": 7, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2975.43, "source": "autotuned"}, {"m": 15, "n": 10, "k": 8, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 3246.01, "source": "autotuned"}, {"m": 15, "n": 10, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 6, "minblocks": 22, "algorithm": "medium", "perf": 3278.61, "source": "autotuned"}, {"m": 15, "n": 10, "k": 10, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3415.01, "source": "autotuned"}, {"m": 15, "n": 10, "k": 13, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 3765.66, "source": "autotuned"}, {"m": 15, "n": 10, "k": 15, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 3922.45, "source": "autotuned"}, {"m": 15, "n": 13, "k": 4, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2746.13, "source": "autotuned"}, {"m": 15, "n": 13, "k": 5, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 3218.83, "source": "autotuned"}, {"m": 15, "n": 13, "k": 6, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 3604.45, "source": "autotuned"}, {"m": 15, "n": 13, "k": 7, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3619.69, "source": "autotuned"}, {"m": 15, "n": 13, "k": 8, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3891.49, "source": "autotuned"}, {"m": 15, "n": 13, "k": 9, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 3863.2, "source": "autotuned"}, {"m": 15, "n": 13, "k": 10, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4080.77, "source": "autotuned"}, {"m": 15, "n": 13, "k": 13, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4411.99, "source": "autotuned"}, {"m": 15, "n": 13, "k": 15, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 4596.88, "source": "autotuned"}, {"m": 15, "n": 13, "k": 16, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4684.39, "source": "autotuned"}, {"m": 15, "n": 13, "k": 22, "tile_m": 2, "tile_n": 4, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5056.57, "source": "autotuned"}, {"m": 15, "n": 13, "k": 25, "tile_m": 2, "tile_n": 4, "w": 12, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5138.59, "source": "autotuned"}, {"m": 15, "n": 13, "k": 26, "tile_m": 2, "tile_n": 4, "w": 12, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5185.67, "source": "autotuned"}, {"m": 15, "n": 13, "k": 45, "tile_m": 2, "tile_n": 4, "w": 18, "v": 12, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5934.92, "source": "autotuned"}, {"m": 15, "n": 15, "k": 4, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 3225.04, "source": "autotuned"}, {"m": 15, "n": 15, "k": 5, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 13, "minblocks": 10, "algorithm": "medium", "perf": 3558.17, "source": "autotuned"}, {"m": 15, "n": 15, "k": 6, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 3970.53, "source": "autotuned"}, {"m": 15, "n": 15, "k": 7, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 13, "minblocks": 10, "algorithm": "medium", "perf": 4039.72, "source": "autotuned"}, {"m": 15, "n": 15, "k": 8, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4414.95, "source": "autotuned"}, {"m": 15, "n": 15, "k": 9, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 4563.95, "source": "autotuned"}, {"m": 15, "n": 15, "k": 10, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 4836.06, "source": "autotuned"}, {"m": 15, "n": 15, "k": 13, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 5151.26, "source": "autotuned"}, {"m": 15, "n": 15, "k": 15, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 5264.12, "source": "autotuned"}, {"m": 15, "n": 15, "k": 16, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 5520.38, "source": "autotuned"}, {"m": 15, "n": 15, "k": 22, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 11, "minblocks": 3, "algorithm": "medium", "perf": 6031.12, "source": "autotuned"}, {"m": 15, "n": 15, "k": 25, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 6089.56, "source": "autotuned"}, {"m": 15, "n": 15, "k": 26, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 6170.64, "source": "autotuned"}, {"m": 15, "n": 15, "k": 45, "tile_m": 2, "tile_n": 4, "w": 16, "v": 14, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6653.05, "source": "autotuned"}, {"m": 15, "n": 16, "k": 4, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 12, "minblocks": 12, "algorithm": "medium", "perf": 3374.94, "source": "autotuned"}, {"m": 15, "n": 16, "k": 5, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 3916.39, "source": "autotuned"}, {"m": 15, "n": 16, "k": 9, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 4591.32, "source": "autotuned"}, {"m": 15, "n": 16, "k": 13, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 5240.93, "source": "autotuned"}, {"m": 15, "n": 16, "k": 15, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 5393.6, "source": "autotuned"}, {"m": 15, "n": 16, "k": 16, "tile_m": 2, "tile_n": 4, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5820.0, "source": "autotuned"}, {"m": 15, "n": 16, "k": 22, "tile_m": 2, "tile_n": 4, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6010.98, "source": "autotuned"}, {"m": 15, "n": 16, "k": 25, "tile_m": 2, "tile_n": 4, "w": 10, "v": 14, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6080.93, "source": "autotuned"}, {"m": 15, "n": 16, "k": 26, "tile_m": 2, "tile_n": 4, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6105.59, "source": "autotuned"}, {"m": 15, "n": 16, "k": 45, "tile_m": 2, "tile_n": 4, "w": 18, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7056.42, "source": "autotuned"}, {"m": 15, "n": 22, "k": 4, "tile_m": 4, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 3862.11, "source": "autotuned"}, {"m": 15, "n": 22, "k": 5, "tile_m": 4, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 4198.26, "source": "autotuned"}, {"m": 15, "n": 22, "k": 9, "tile_m": 4, "tile_n": 3, "w": 4, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5409.06, "source": "autotuned"}, {"m": 15, "n": 22, "k": 13, "tile_m": 2, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6408.17, "source": "autotuned"}, {"m": 15, "n": 22, "k": 15, "tile_m": 2, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6450.13, "source": "autotuned"}, {"m": 15, "n": 22, "k": 16, "tile_m": 2, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6467.33, "source": "autotuned"}, {"m": 15, "n": 22, "k": 22, "tile_m": 2, "tile_n": 6, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6749.32, "source": "autotuned"}, {"m": 15, "n": 22, "k": 25, "tile_m": 2, "tile_n": 6, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7019.49, "source": "autotuned"}, {"m": 15, "n": 22, "k": 26, "tile_m": 2, "tile_n": 6, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7063.94, "source": "autotuned"}, {"m": 15, "n": 22, "k": 45, "tile_m": 2, "tile_n": 6, "w": 16, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8013.65, "source": "autotuned"}, {"m": 15, "n": 25, "k": 4, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 3836.29, "source": "autotuned"}, {"m": 15, "n": 25, "k": 5, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4319.97, "source": "autotuned"}, {"m": 15, "n": 25, "k": 9, "tile_m": 8, "tile_n": 2, "w": 4, "v": 20, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5468.77, "source": "autotuned"}, {"m": 15, "n": 25, "k": 13, "tile_m": 8, "tile_n": 2, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6259.98, "source": "autotuned"}, {"m": 15, "n": 25, "k": 15, "tile_m": 8, "tile_n": 2, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6355.52, "source": "autotuned"}, {"m": 15, "n": 25, "k": 16, "tile_m": 8, "tile_n": 2, "w": 6, "v": 14, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6472.19, "source": "autotuned"}, {"m": 15, "n": 25, "k": 22, "tile_m": 8, "tile_n": 2, "w": 8, "v": 14, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6938.83, "source": "autotuned"}, {"m": 15, "n": 25, "k": 25, "tile_m": 2, "tile_n": 7, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7210.09, "source": "autotuned"}, {"m": 15, "n": 25, "k": 26, "tile_m": 2, "tile_n": 7, "w": 10, "v": 14, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7312.96, "source": "autotuned"}, {"m": 15, "n": 25, "k": 45, "tile_m": 2, "tile_n": 7, "w": 20, "v": 22, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7949.89, "source": "autotuned"}, {"m": 15, "n": 26, "k": 4, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 3989.74, "source": "autotuned"}, {"m": 15, "n": 26, "k": 5, "tile_m": 2, "tile_n": 4, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4125.36, "source": "autotuned"}, {"m": 15, "n": 26, "k": 9, "tile_m": 8, "tile_n": 2, "w": 4, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5998.46, "source": "autotuned"}, {"m": 15, "n": 26, "k": 13, "tile_m": 8, "tile_n": 2, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6449.66, "source": "autotuned"}, {"m": 15, "n": 26, "k": 15, "tile_m": 8, "tile_n": 2, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6692.9, "source": "autotuned"}, {"m": 15, "n": 26, "k": 16, "tile_m": 8, "tile_n": 2, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6765.12, "source": "autotuned"}, {"m": 15, "n": 26, "k": 22, "tile_m": 8, "tile_n": 2, "w": 8, "v": 26, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7234.63, "source": "autotuned"}, {"m": 15, "n": 26, "k": 25, "tile_m": 2, "tile_n": 7, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7407.38, "source": "autotuned"}, {"m": 15, "n": 26, "k": 26, "tile_m": 2, "tile_n": 7, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7541.39, "source": "autotuned"}, {"m": 15, "n": 26, "k": 45, "tile_m": 2, "tile_n": 7, "w": 16, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 8432.03, "source": "autotuned"}, {"m": 15, "n": 45, "k": 4, "tile_m": 8, "tile_n": 2, "threads": 64, "grouping": 13, "minblocks": 10, "algorithm": "medium", "perf": 5127.37, "source": "autotuned"}, {"m": 15, "n": 45, "k": 5, "tile_m": 4, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 5375.88, "source": "autotuned"}, {"m": 15, "n": 45, "k": 9, "tile_m": 8, "tile_n": 3, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7269.02, "source": "autotuned"}, {"m": 15, "n": 45, "k": 13, "tile_m": 4, "tile_n": 6, "w": 6, "v": 44, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7853.63, "source": "autotuned"}, {"m": 15, "n": 45, "k": 15, "tile_m": 4, "tile_n": 6, "w": 6, "v": 44, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 8326.8, "source": "autotuned"}, {"m": 15, "n": 45, "k": 16, "tile_m": 4, "tile_n": 6, "w": 6, "v": 44, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8656.55, "source": "autotuned"}, {"m": 15, "n": 45, "k": 22, "tile_m": 4, "tile_n": 6, "w": 8, "v": 36, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 9261.0, "source": "autotuned"}, {"m": 15, "n": 45, "k": 25, "tile_m": 4, "tile_n": 6, "w": 10, "v": 44, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 9440.87, "source": "autotuned"}, {"m": 15, "n": 45, "k": 26, "tile_m": 4, "tile_n": 6, "w": 10, "v": 44, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 9518.61, "source": "autotuned"}, {"m": 15, "n": 45, "k": 45, "tile_m": 4, "tile_n": 6, "w": 16, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10255.8, "source": "autotuned"}, {"m": 16, "n": 4, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 15, "algorithm": "medium", "perf": 1090.57, "source": "autotuned"}, {"m": 16, "n": 4, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 1389.73, "source": "autotuned"}, {"m": 16, "n": 4, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 1894.14, "source": "autotuned"}, {"m": 16, "n": 4, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 2271.45, "source": "autotuned"}, {"m": 16, "n": 4, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 2471.08, "source": "autotuned"}, {"m": 16, "n": 4, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2529.19, "source": "autotuned"}, {"m": 16, "n": 4, "k": 22, "tile_m": 1, "tile_n": 2, "w": 8, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2850.37, "source": "autotuned"}, {"m": 16, "n": 4, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 2811.42, "source": "autotuned"}, {"m": 16, "n": 4, "k": 26, "tile_m": 1, "tile_n": 2, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2376.43, "source": "autotuned"}, {"m": 16, "n": 4, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 3048.57, "source": "autotuned"}, {"m": 16, "n": 5, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 1376.55, "source": "autotuned"}, {"m": 16, "n": 5, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 1645.29, "source": "autotuned"}, {"m": 16, "n": 5, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2077.69, "source": "autotuned"}, {"m": 16, "n": 5, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 2451.67, "source": "autotuned"}, {"m": 16, "n": 5, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2637.61, "source": "autotuned"}, {"m": 16, "n": 5, "k": 16, "tile_m": 1, "tile_n": 3, "w": 6, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2768.76, "source": "autotuned"}, {"m": 16, "n": 5, "k": 22, "tile_m": 1, "tile_n": 3, "w": 8, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2437.47, "source": "autotuned"}, {"m": 16, "n": 5, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 2983.1, "source": "autotuned"}, {"m": 16, "n": 5, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 3030.48, "source": "autotuned"}, {"m": 16, "n": 5, "k": 26, "tile_m": 1, "tile_n": 3, "w": 10, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3055.29, "source": "autotuned"}, {"m": 16, "n": 5, "k": 45, "tile_m": 1, "tile_n": 3, "w": 18, "v": 4, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3376.05, "source": "autotuned"}, {"m": 16, "n": 9, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2228.73, "source": "autotuned"}, {"m": 16, "n": 9, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2601.75, "source": "autotuned"}, {"m": 16, "n": 9, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 7, "minblocks": 24, "algorithm": "medium", "perf": 3175.73, "source": "autotuned"}, {"m": 16, "n": 9, "k": 13, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 3839.89, "source": "autotuned"}, {"m": 16, "n": 9, "k": 15, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 3966.0, "source": "autotuned"}, {"m": 16, "n": 9, "k": 16, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 4221.1, "source": "autotuned"}, {"m": 16, "n": 9, "k": 17, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 4224.92, "source": "autotuned"}, {"m": 16, "n": 9, "k": 22, "tile_m": 2, "tile_n": 3, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4486.54, "source": "autotuned"}, {"m": 16, "n": 9, "k": 23, "tile_m": 2, "tile_n": 3, "w": 10, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4511.62, "source": "autotuned"}, {"m": 16, "n": 9, "k": 25, "tile_m": 2, "tile_n": 3, "w": 10, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4480.87, "source": "autotuned"}, {"m": 16, "n": 9, "k": 26, "tile_m": 2, "tile_n": 3, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4501.41, "source": "autotuned"}, {"m": 16, "n": 9, "k": 45, "tile_m": 2, "tile_n": 3, "w": 16, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5026.12, "source": "autotuned"}, {"m": 16, "n": 13, "k": 4, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2968.82, "source": "autotuned"}, {"m": 16, "n": 13, "k": 5, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 7, "algorithm": "medium", "perf": 3398.83, "source": "autotuned"}, {"m": 16, "n": 13, "k": 9, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 4138.31, "source": "autotuned"}, {"m": 16, "n": 13, "k": 13, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4718.44, "source": "autotuned"}, {"m": 16, "n": 13, "k": 15, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4825.63, "source": "autotuned"}, {"m": 16, "n": 13, "k": 16, "tile_m": 2, "tile_n": 4, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5248.09, "source": "autotuned"}, {"m": 16, "n": 13, "k": 22, "tile_m": 2, "tile_n": 4, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5385.21, "source": "autotuned"}, {"m": 16, "n": 13, "k": 23, "tile_m": 2, "tile_n": 4, "w": 10, "v": 10, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5372.94, "source": "autotuned"}, {"m": 16, "n": 13, "k": 25, "tile_m": 2, "tile_n": 4, "w": 10, "v": 10, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5450.53, "source": "autotuned"}, {"m": 16, "n": 13, "k": 26, "tile_m": 2, "tile_n": 4, "w": 12, "v": 12, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5484.65, "source": "autotuned"}, {"m": 16, "n": 13, "k": 45, "tile_m": 2, "tile_n": 4, "w": 16, "v": 10, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6306.42, "source": "autotuned"}, {"m": 16, "n": 15, "k": 4, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 3339.73, "source": "autotuned"}, {"m": 16, "n": 15, "k": 5, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 3903.66, "source": "autotuned"}, {"m": 16, "n": 15, "k": 9, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 4640.62, "source": "autotuned"}, {"m": 16, "n": 15, "k": 13, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 5332.72, "source": "autotuned"}, {"m": 16, "n": 15, "k": 15, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 5390.91, "source": "autotuned"}, {"m": 16, "n": 15, "k": 16, "tile_m": 2, "tile_n": 4, "w": 6, "v": 10, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5820.0, "source": "autotuned"}, {"m": 16, "n": 15, "k": 22, "tile_m": 2, "tile_n": 4, "w": 8, "v": 14, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5961.23, "source": "autotuned"}, {"m": 16, "n": 15, "k": 25, "tile_m": 2, "tile_n": 4, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6052.31, "source": "autotuned"}, {"m": 16, "n": 15, "k": 26, "tile_m": 2, "tile_n": 4, "w": 10, "v": 14, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6129.57, "source": "autotuned"}, {"m": 16, "n": 15, "k": 45, "tile_m": 2, "tile_n": 4, "w": 18, "v": 14, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7047.21, "source": "autotuned"}, {"m": 16, "n": 16, "k": 4, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 12, "minblocks": 11, "algorithm": "medium", "perf": 3675.79, "source": "autotuned"}, {"m": 16, "n": 16, "k": 5, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 12, "minblocks": 11, "algorithm": "medium", "perf": 4142.2, "source": "autotuned"}, {"m": 16, "n": 16, "k": 9, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 5402.53, "source": "autotuned"}, {"m": 16, "n": 16, "k": 13, "tile_m": 2, "tile_n": 4, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6045.47, "source": "autotuned"}, {"m": 16, "n": 16, "k": 15, "tile_m": 2, "tile_n": 4, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6225.61, "source": "autotuned"}, {"m": 16, "n": 16, "k": 16, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 6791.07, "source": "autotuned"}, {"m": 16, "n": 16, "k": 17, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 6770.39, "source": "autotuned"}, {"m": 16, "n": 16, "k": 22, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 16, "minblocks": 3, "algorithm": "medium", "perf": 7039.27, "source": "autotuned"}, {"m": 16, "n": 16, "k": 23, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 11, "minblocks": 8, "algorithm": "medium", "perf": 6816.94, "source": "autotuned"}, {"m": 16, "n": 16, "k": 25, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 12, "minblocks": 5, "algorithm": "medium", "perf": 6844.62, "source": "autotuned"}, {"m": 16, "n": 16, "k": 26, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 7131.11, "source": "autotuned"}, {"m": 16, "n": 16, "k": 45, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 16, "minblocks": 5, "algorithm": "medium", "perf": 7500.72, "source": "autotuned"}, {"m": 16, "n": 17, "k": 9, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 4937.03, "source": "autotuned"}, {"m": 16, "n": 17, "k": 16, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 5990.86, "source": "autotuned"}, {"m": 16, "n": 17, "k": 17, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 5981.18, "source": "autotuned"}, {"m": 16, "n": 17, "k": 22, "tile_m": 2, "tile_n": 5, "w": 8, "v": 14, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 6168.88, "source": "autotuned"}, {"m": 16, "n": 17, "k": 23, "tile_m": 2, "tile_n": 5, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6185.79, "source": "autotuned"}, {"m": 16, "n": 22, "k": 4, "tile_m": 2, "tile_n": 6, "threads": 96, "grouping": 16, "minblocks": 7, "algorithm": "medium", "perf": 4387.66, "source": "autotuned"}, {"m": 16, "n": 22, "k": 5, "tile_m": 2, "tile_n": 6, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4567.77, "source": "autotuned"}, {"m": 16, "n": 22, "k": 9, "tile_m": 4, "tile_n": 3, "w": 4, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5818.22, "source": "autotuned"}, {"m": 16, "n": 22, "k": 13, "tile_m": 2, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5385.21, "source": "autotuned"}, {"m": 16, "n": 22, "k": 15, "tile_m": 2, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6895.1, "source": "autotuned"}, {"m": 16, "n": 22, "k": 16, "tile_m": 2, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7039.27, "source": "autotuned"}, {"m": 16, "n": 22, "k": 17, "tile_m": 2, "tile_n": 6, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6861.91, "source": "autotuned"}, {"m": 16, "n": 22, "k": 22, "tile_m": 2, "tile_n": 6, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7282.75, "source": "autotuned"}, {"m": 16, "n": 22, "k": 23, "tile_m": 2, "tile_n": 6, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7285.03, "source": "autotuned"}, {"m": 16, "n": 22, "k": 25, "tile_m": 2, "tile_n": 6, "w": 10, "v": 14, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7504.48, "source": "autotuned"}, {"m": 16, "n": 22, "k": 26, "tile_m": 2, "tile_n": 6, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7626.93, "source": "autotuned"}, {"m": 16, "n": 22, "k": 45, "tile_m": 2, "tile_n": 6, "w": 16, "v": 20, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8471.73, "source": "autotuned"}, {"m": 16, "n": 23, "k": 5, "tile_m": 2, "tile_n": 6, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4685.38, "source": "autotuned"}, {"m": 16, "n": 23, "k": 9, "tile_m": 2, "tile_n": 6, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4841.26, "source": "autotuned"}, {"m": 16, "n": 23, "k": 13, "tile_m": 2, "tile_n": 6, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 6649.6, "source": "autotuned"}, {"m": 16, "n": 23, "k": 16, "tile_m": 2, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6975.73, "source": "autotuned"}, {"m": 16, "n": 23, "k": 17, "tile_m": 2, "tile_n": 6, "w": 6, "v": 18, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6824.38, "source": "autotuned"}, {"m": 16, "n": 23, "k": 22, "tile_m": 2, "tile_n": 6, "w": 10, "v": 20, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7380.19, "source": "autotuned"}, {"m": 16, "n": 23, "k": 23, "tile_m": 2, "tile_n": 6, "w": 8, "v": 20, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7501.46, "source": "autotuned"}, {"m": 16, "n": 25, "k": 4, "tile_m": 2, "tile_n": 7, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4123.48, "source": "autotuned"}, {"m": 16, "n": 25, "k": 5, "tile_m": 2, "tile_n": 7, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4742.69, "source": "autotuned"}, {"m": 16, "n": 25, "k": 9, "tile_m": 2, "tile_n": 7, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 5919.66, "source": "autotuned"}, {"m": 16, "n": 25, "k": 13, "tile_m": 2, "tile_n": 7, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 6584.34, "source": "autotuned"}, {"m": 16, "n": 25, "k": 15, "tile_m": 8, "tile_n": 2, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6634.35, "source": "autotuned"}, {"m": 16, "n": 25, "k": 16, "tile_m": 3, "tile_n": 5, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6827.59, "source": "autotuned"}, {"m": 16, "n": 25, "k": 22, "tile_m": 2, "tile_n": 7, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7532.3, "source": "autotuned"}, {"m": 16, "n": 25, "k": 25, "tile_m": 2, "tile_n": 7, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7726.41, "source": "autotuned"}, {"m": 16, "n": 25, "k": 26, "tile_m": 2, "tile_n": 7, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7843.62, "source": "autotuned"}, {"m": 16, "n": 25, "k": 45, "tile_m": 2, "tile_n": 7, "w": 16, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8664.88, "source": "autotuned"}, {"m": 16, "n": 26, "k": 4, "tile_m": 2, "tile_n": 7, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4357.38, "source": "autotuned"}, {"m": 16, "n": 26, "k": 5, "tile_m": 2, "tile_n": 4, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4567.84, "source": "autotuned"}, {"m": 16, "n": 26, "k": 9, "tile_m": 2, "tile_n": 7, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 6197.19, "source": "autotuned"}, {"m": 16, "n": 26, "k": 13, "tile_m": 2, "tile_n": 7, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 6885.48, "source": "autotuned"}, {"m": 16, "n": 26, "k": 15, "tile_m": 8, "tile_n": 2, "w": 6, "v": 18, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7031.86, "source": "autotuned"}, {"m": 16, "n": 26, "k": 16, "tile_m": 8, "tile_n": 2, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7078.04, "source": "autotuned"}, {"m": 16, "n": 26, "k": 22, "tile_m": 2, "tile_n": 7, "w": 8, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7806.87, "source": "autotuned"}, {"m": 16, "n": 26, "k": 25, "tile_m": 2, "tile_n": 7, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7982.03, "source": "autotuned"}, {"m": 16, "n": 26, "k": 26, "tile_m": 2, "tile_n": 7, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8128.76, "source": "autotuned"}, {"m": 16, "n": 26, "k": 45, "tile_m": 2, "tile_n": 7, "w": 16, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9007.14, "source": "autotuned"}, {"m": 16, "n": 45, "k": 4, "tile_m": 2, "tile_n": 6, "threads": 96, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 5259.52, "source": "autotuned"}, {"m": 16, "n": 45, "k": 5, "tile_m": 2, "tile_n": 6, "threads": 96, "grouping": 16, "minblocks": 7, "algorithm": "medium", "perf": 5909.94, "source": "autotuned"}, {"m": 16, "n": 45, "k": 9, "tile_m": 8, "tile_n": 3, "w": 4, "v": 28, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7619.94, "source": "autotuned"}, {"m": 16, "n": 45, "k": 13, "tile_m": 4, "tile_n": 6, "w": 6, "v": 40, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8412.33, "source": "autotuned"}, {"m": 16, "n": 45, "k": 15, "tile_m": 4, "tile_n": 6, "w": 6, "v": 44, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8874.62, "source": "autotuned"}, {"m": 16, "n": 45, "k": 16, "tile_m": 4, "tile_n": 6, "w": 6, "v": 34, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9293.23, "source": "autotuned"}, {"m": 16, "n": 45, "k": 22, "tile_m": 4, "tile_n": 6, "w": 8, "v": 42, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9994.71, "source": "autotuned"}, {"m": 16, "n": 45, "k": 25, "tile_m": 4, "tile_n": 6, "w": 10, "v": 32, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 10121.2, "source": "autotuned"}, {"m": 16, "n": 45, "k": 26, "tile_m": 4, "tile_n": 6, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 10277.6, "source": "autotuned"}, {"m": 16, "n": 45, "k": 45, "tile_m": 8, "tile_n": 3, "w": 16, "v": 42, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 10872.2, "source": "autotuned"}, {"m": 17, "n": 9, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 3190.14, "source": "autotuned"}, {"m": 17, "n": 9, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 4011.74, "source": "autotuned"}, {"m": 17, "n": 9, "k": 17, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 3952.62, "source": "autotuned"}, {"m": 17, "n": 9, "k": 22, "tile_m": 3, "tile_n": 2, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4212.32, "source": "autotuned"}, {"m": 17, "n": 9, "k": 23, "tile_m": 3, "tile_n": 2, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4217.37, "source": "autotuned"}, {"m": 17, "n": 13, "k": 13, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 4543.71, "source": "autotuned"}, {"m": 17, "n": 13, "k": 17, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4929.83, "source": "autotuned"}, {"m": 17, "n": 13, "k": 23, "tile_m": 3, "tile_n": 3, "w": 8, "v": 8, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5200.74, "source": "autotuned"}, {"m": 17, "n": 16, "k": 9, "tile_m": 10, "tile_n": 1, "w": 4, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4801.5, "source": "autotuned"}, {"m": 17, "n": 16, "k": 16, "tile_m": 3, "tile_n": 4, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5771.14, "source": "autotuned"}, {"m": 17, "n": 16, "k": 17, "tile_m": 3, "tile_n": 4, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5772.19, "source": "autotuned"}, {"m": 17, "n": 16, "k": 22, "tile_m": 9, "tile_n": 1, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6022.0, "source": "autotuned"}, {"m": 17, "n": 16, "k": 23, "tile_m": 9, "tile_n": 1, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6083.56, "source": "autotuned"}, {"m": 17, "n": 17, "k": 9, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4721.98, "source": "autotuned"}, {"m": 17, "n": 17, "k": 13, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 5303.16, "source": "autotuned"}, {"m": 17, "n": 17, "k": 16, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 6189.27, "source": "autotuned"}, {"m": 17, "n": 17, "k": 17, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 5, "algorithm": "medium", "perf": 5822.91, "source": "autotuned"}, {"m": 17, "n": 17, "k": 22, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 6345.18, "source": "autotuned"}, {"m": 17, "n": 17, "k": 23, "tile_m": 3, "tile_n": 4, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6000.97, "source": "autotuned"}, {"m": 17, "n": 22, "k": 9, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 5407.47, "source": "autotuned"}, {"m": 17, "n": 22, "k": 16, "tile_m": 3, "tile_n": 5, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6487.58, "source": "autotuned"}, {"m": 17, "n": 22, "k": 17, "tile_m": 3, "tile_n": 5, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6570.23, "source": "autotuned"}, {"m": 17, "n": 22, "k": 22, "tile_m": 3, "tile_n": 5, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7002.75, "source": "autotuned"}, {"m": 17, "n": 22, "k": 23, "tile_m": 3, "tile_n": 5, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7113.27, "source": "autotuned"}, {"m": 17, "n": 23, "k": 9, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 5695.95, "source": "autotuned"}, {"m": 17, "n": 23, "k": 13, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 6422.64, "source": "autotuned"}, {"m": 17, "n": 23, "k": 16, "tile_m": 3, "tile_n": 5, "w": 6, "v": 20, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6568.88, "source": "autotuned"}, {"m": 17, "n": 23, "k": 17, "tile_m": 3, "tile_n": 5, "w": 8, "v": 20, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6635.81, "source": "autotuned"}, {"m": 17, "n": 23, "k": 22, "tile_m": 3, "tile_n": 5, "w": 8, "v": 20, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7174.56, "source": "autotuned"}, {"m": 17, "n": 23, "k": 23, "tile_m": 3, "tile_n": 5, "w": 8, "v": 20, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7284.06, "source": "autotuned"}, {"m": 18, "n": 18, "k": 18, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 16, "minblocks": 11, "algorithm": "medium", "perf": 6874.1, "source": "autotuned"}, {"m": 19, "n": 19, "k": 19, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 6618.47, "source": "autotuned"}, {"m": 20, "n": 11, "k": 11, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 4279.98, "source": "autotuned"}, {"m": 20, "n": 11, "k": 12, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 4350.62, "source": "autotuned"}, {"m": 20, "n": 11, "k": 20, "tile_m": 2, "tile_n": 4, "w": 8, "v": 10, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4980.81, "source": "autotuned"}, {"m": 20, "n": 11, "k": 25, "tile_m": 2, "tile_n": 4, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5089.47, "source": "autotuned"}, {"m": 20, "n": 11, "k": 32, "tile_m": 2, "tile_n": 4, "w": 14, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5450.62, "source": "autotuned"}, {"m": 20, "n": 12, "k": 11, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4557.08, "source": "autotuned"}, {"m": 20, "n": 12, "k": 12, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4656.0, "source": "autotuned"}, {"m": 20, "n": 12, "k": 20, "tile_m": 2, "tile_n": 4, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5376.82, "source": "autotuned"}, {"m": 20, "n": 12, "k": 25, "tile_m": 2, "tile_n": 4, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5467.85, "source": "autotuned"}, {"m": 20, "n": 12, "k": 32, "tile_m": 2, "tile_n": 4, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5921.69, "source": "autotuned"}, {"m": 20, "n": 20, "k": 11, "tile_m": 5, "tile_n": 3, "w": 4, "v": 20, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6510.91, "source": "autotuned"}, {"m": 20, "n": 20, "k": 20, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 11, "minblocks": 6, "algorithm": "medium", "perf": 7437.27, "source": "autotuned"}, {"m": 20, "n": 20, "k": 25, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 16, "minblocks": 7, "algorithm": "medium", "perf": 7624.33, "source": "autotuned"}, {"m": 20, "n": 20, "k": 32, "tile_m": 5, "tile_n": 3, "w": 12, "v": 20, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8020.88, "source": "autotuned"}, {"m": 20, "n": 25, "k": 11, "tile_m": 10, "tile_n": 2, "w": 4, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6891.51, "source": "autotuned"}, {"m": 20, "n": 25, "k": 12, "tile_m": 10, "tile_n": 2, "w": 4, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6661.35, "source": "autotuned"}, {"m": 20, "n": 25, "k": 20, "tile_m": 10, "tile_n": 2, "w": 8, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7998.23, "source": "autotuned"}, {"m": 20, "n": 25, "k": 25, "tile_m": 5, "tile_n": 4, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 8126.46, "source": "autotuned"}, {"m": 20, "n": 25, "k": 32, "tile_m": 10, "tile_n": 2, "w": 12, "v": 14, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8832.78, "source": "autotuned"}, {"m": 20, "n": 32, "k": 12, "tile_m": 10, "tile_n": 2, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8635.14, "source": "autotuned"}, {"m": 20, "n": 32, "k": 20, "tile_m": 10, "tile_n": 2, "w": 8, "v": 32, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 9826.55, "source": "autotuned"}, {"m": 20, "n": 32, "k": 25, "tile_m": 10, "tile_n": 2, "w": 10, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10297.0, "source": "autotuned"}, {"m": 20, "n": 32, "k": 32, "tile_m": 10, "tile_n": 2, "w": 12, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 11041.9, "source": "autotuned"}, {"m": 21, "n": 21, "k": 21, "tile_m": 6, "tile_n": 3, "w": 8, "v": 20, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7084.29, "source": "autotuned"}, {"m": 22, "n": 4, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 1463.29, "source": "autotuned"}, {"m": 22, "n": 4, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 7, "minblocks": 24, "algorithm": "medium", "perf": 1648.9, "source": "autotuned"}, {"m": 22, "n": 4, "k": 6, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 1835.01, "source": "autotuned"}, {"m": 22, "n": 4, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 12, "algorithm": "medium", "perf": 2024.95, "source": "autotuned"}, {"m": 22, "n": 4, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 2041.22, "source": "autotuned"}, {"m": 22, "n": 4, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 2091.83, "source": "autotuned"}, {"m": 22, "n": 4, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 2217.32, "source": "autotuned"}, {"m": 22, "n": 4, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2514.52, "source": "autotuned"}, {"m": 22, "n": 4, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 2621.6, "source": "autotuned"}, {"m": 22, "n": 4, "k": 16, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2705.94, "source": "autotuned"}, {"m": 22, "n": 4, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2790.5, "source": "autotuned"}, {"m": 22, "n": 4, "k": 23, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2831.65, "source": "autotuned"}, {"m": 22, "n": 4, "k": 25, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 12, "algorithm": "medium", "perf": 2869.21, "source": "autotuned"}, {"m": 22, "n": 4, "k": 26, "tile_m": 1, "tile_n": 4, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 2781.62, "source": "autotuned"}, {"m": 22, "n": 4, "k": 32, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 11, "minblocks": 7, "algorithm": "medium", "perf": 2925.11, "source": "autotuned"}, {"m": 22, "n": 4, "k": 45, "tile_m": 3, "tile_n": 2, "w": 16, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3097.94, "source": "autotuned"}, {"m": 22, "n": 5, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 1684.97, "source": "autotuned"}, {"m": 22, "n": 5, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 1897.14, "source": "autotuned"}, {"m": 22, "n": 5, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2100.71, "source": "autotuned"}, {"m": 22, "n": 5, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 6, "minblocks": 26, "algorithm": "medium", "perf": 2074.72, "source": "autotuned"}, {"m": 22, "n": 5, "k": 8, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 6, "minblocks": 27, "algorithm": "medium", "perf": 2218.12, "source": "autotuned"}, {"m": 22, "n": 5, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2290.17, "source": "autotuned"}, {"m": 22, "n": 5, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 2458.62, "source": "autotuned"}, {"m": 22, "n": 5, "k": 13, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2779.59, "source": "autotuned"}, {"m": 22, "n": 5, "k": 15, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 2876.89, "source": "autotuned"}, {"m": 22, "n": 5, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2981.82, "source": "autotuned"}, {"m": 22, "n": 5, "k": 22, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 2, "algorithm": "medium", "perf": 2511.16, "source": "autotuned"}, {"m": 22, "n": 5, "k": 23, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 3140.91, "source": "autotuned"}, {"m": 22, "n": 5, "k": 25, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 3071.01, "source": "autotuned"}, {"m": 22, "n": 5, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 9, "algorithm": "medium", "perf": 3126.66, "source": "autotuned"}, {"m": 22, "n": 5, "k": 32, "tile_m": 3, "tile_n": 2, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3257.26, "source": "autotuned"}, {"m": 22, "n": 5, "k": 45, "tile_m": 3, "tile_n": 2, "w": 18, "v": 4, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3444.95, "source": "autotuned"}, {"m": 22, "n": 6, "k": 4, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 13, "minblocks": 12, "algorithm": "medium", "perf": 1941.16, "source": "autotuned"}, {"m": 22, "n": 6, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2258.4, "source": "autotuned"}, {"m": 22, "n": 6, "k": 6, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 2201.1, "source": "autotuned"}, {"m": 22, "n": 6, "k": 7, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 2413.77, "source": "autotuned"}, {"m": 22, "n": 6, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 2636.63, "source": "autotuned"}, {"m": 22, "n": 6, "k": 9, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2222.92, "source": "autotuned"}, {"m": 22, "n": 6, "k": 10, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2873.24, "source": "autotuned"}, {"m": 22, "n": 6, "k": 13, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 3251.02, "source": "autotuned"}, {"m": 22, "n": 6, "k": 22, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3558.85, "source": "autotuned"}, {"m": 22, "n": 6, "k": 32, "tile_m": 3, "tile_n": 2, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3891.91, "source": "autotuned"}, {"m": 22, "n": 7, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2266.66, "source": "autotuned"}, {"m": 22, "n": 7, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 2419.29, "source": "autotuned"}, {"m": 22, "n": 7, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 2494.97, "source": "autotuned"}, {"m": 22, "n": 7, "k": 7, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 6, "minblocks": 26, "algorithm": "medium", "perf": 2803.52, "source": "autotuned"}, {"m": 22, "n": 7, "k": 8, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 6, "minblocks": 26, "algorithm": "medium", "perf": 2992.68, "source": "autotuned"}, {"m": 22, "n": 7, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 7, "minblocks": 22, "algorithm": "medium", "perf": 3151.78, "source": "autotuned"}, {"m": 22, "n": 7, "k": 10, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 7, "minblocks": 24, "algorithm": "medium", "perf": 3256.83, "source": "autotuned"}, {"m": 22, "n": 7, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 3718.9, "source": "autotuned"}, {"m": 22, "n": 7, "k": 22, "tile_m": 3, "tile_n": 2, "w": 10, "v": 6, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4023.42, "source": "autotuned"}, {"m": 22, "n": 7, "k": 32, "tile_m": 3, "tile_n": 2, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4417.15, "source": "autotuned"}, {"m": 22, "n": 8, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2607.65, "source": "autotuned"}, {"m": 22, "n": 8, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 2725.31, "source": "autotuned"}, {"m": 22, "n": 8, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2841.68, "source": "autotuned"}, {"m": 22, "n": 8, "k": 7, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 3133.45, "source": "autotuned"}, {"m": 22, "n": 8, "k": 8, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 7, "minblocks": 22, "algorithm": "medium", "perf": 3383.64, "source": "autotuned"}, {"m": 22, "n": 8, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 7, "minblocks": 23, "algorithm": "medium", "perf": 3534.57, "source": "autotuned"}, {"m": 22, "n": 8, "k": 10, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 3763.01, "source": "autotuned"}, {"m": 22, "n": 8, "k": 13, "tile_m": 3, "tile_n": 2, "w": 6, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4249.38, "source": "autotuned"}, {"m": 22, "n": 8, "k": 22, "tile_m": 3, "tile_n": 2, "w": 8, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4614.63, "source": "autotuned"}, {"m": 22, "n": 8, "k": 32, "tile_m": 3, "tile_n": 2, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5057.24, "source": "autotuned"}, {"m": 22, "n": 9, "k": 4, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 2541.43, "source": "autotuned"}, {"m": 22, "n": 9, "k": 5, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 2664.51, "source": "autotuned"}, {"m": 22, "n": 9, "k": 6, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 6, "minblocks": 23, "algorithm": "medium", "perf": 2891.41, "source": "autotuned"}, {"m": 22, "n": 9, "k": 7, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 6, "minblocks": 21, "algorithm": "medium", "perf": 3245.23, "source": "autotuned"}, {"m": 22, "n": 9, "k": 8, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 7, "minblocks": 18, "algorithm": "medium", "perf": 3418.02, "source": "autotuned"}, {"m": 22, "n": 9, "k": 9, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 7, "minblocks": 17, "algorithm": "medium", "perf": 3594.9, "source": "autotuned"}, {"m": 22, "n": 9, "k": 10, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 3838.41, "source": "autotuned"}, {"m": 22, "n": 9, "k": 13, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4217.53, "source": "autotuned"}, {"m": 22, "n": 9, "k": 15, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4364.2, "source": "autotuned"}, {"m": 22, "n": 9, "k": 16, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4428.03, "source": "autotuned"}, {"m": 22, "n": 9, "k": 17, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4527.64, "source": "autotuned"}, {"m": 22, "n": 9, "k": 22, "tile_m": 3, "tile_n": 3, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4622.38, "source": "autotuned"}, {"m": 22, "n": 9, "k": 23, "tile_m": 3, "tile_n": 3, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 4702.78, "source": "autotuned"}, {"m": 22, "n": 9, "k": 25, "tile_m": 3, "tile_n": 3, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4781.02, "source": "autotuned"}, {"m": 22, "n": 9, "k": 26, "tile_m": 3, "tile_n": 3, "w": 10, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4808.22, "source": "autotuned"}, {"m": 22, "n": 9, "k": 32, "tile_m": 3, "tile_n": 3, "w": 14, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5152.83, "source": "autotuned"}, {"m": 22, "n": 9, "k": 45, "tile_m": 3, "tile_n": 3, "w": 16, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5475.8, "source": "autotuned"}, {"m": 22, "n": 10, "k": 4, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2897.68, "source": "autotuned"}, {"m": 22, "n": 10, "k": 5, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 2958.64, "source": "autotuned"}, {"m": 22, "n": 10, "k": 6, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 6, "minblocks": 22, "algorithm": "medium", "perf": 3152.18, "source": "autotuned"}, {"m": 22, "n": 10, "k": 7, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 6, "minblocks": 23, "algorithm": "medium", "perf": 3486.24, "source": "autotuned"}, {"m": 22, "n": 10, "k": 8, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 7, "minblocks": 17, "algorithm": "medium", "perf": 3787.29, "source": "autotuned"}, {"m": 22, "n": 10, "k": 9, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 7, "minblocks": 20, "algorithm": "medium", "perf": 3954.65, "source": "autotuned"}, {"m": 22, "n": 10, "k": 10, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 4172.71, "source": "autotuned"}, {"m": 22, "n": 10, "k": 13, "tile_m": 3, "tile_n": 3, "w": 6, "v": 10, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4794.12, "source": "autotuned"}, {"m": 22, "n": 10, "k": 22, "tile_m": 3, "tile_n": 3, "w": 8, "v": 10, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5209.66, "source": "autotuned"}, {"m": 22, "n": 10, "k": 32, "tile_m": 3, "tile_n": 3, "w": 12, "v": 10, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5702.19, "source": "autotuned"}, {"m": 22, "n": 13, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 3582.83, "source": "autotuned"}, {"m": 22, "n": 13, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3771.78, "source": "autotuned"}, {"m": 22, "n": 13, "k": 6, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 7, "minblocks": 18, "algorithm": "medium", "perf": 3866.07, "source": "autotuned"}, {"m": 22, "n": 13, "k": 7, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 4388.52, "source": "autotuned"}, {"m": 22, "n": 13, "k": 8, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4619.93, "source": "autotuned"}, {"m": 22, "n": 13, "k": 9, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 12, "algorithm": "medium", "perf": 4869.61, "source": "autotuned"}, {"m": 22, "n": 13, "k": 10, "tile_m": 3, "tile_n": 4, "w": 4, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5129.35, "source": "autotuned"}, {"m": 22, "n": 13, "k": 13, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 5493.59, "source": "autotuned"}, {"m": 22, "n": 13, "k": 15, "tile_m": 3, "tile_n": 4, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5651.46, "source": "autotuned"}, {"m": 22, "n": 13, "k": 16, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 5623.38, "source": "autotuned"}, {"m": 22, "n": 13, "k": 22, "tile_m": 3, "tile_n": 4, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5956.44, "source": "autotuned"}, {"m": 22, "n": 13, "k": 23, "tile_m": 3, "tile_n": 4, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 6098.29, "source": "autotuned"}, {"m": 22, "n": 13, "k": 25, "tile_m": 3, "tile_n": 4, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5042.7, "source": "autotuned"}, {"m": 22, "n": 13, "k": 26, "tile_m": 3, "tile_n": 4, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6301.88, "source": "autotuned"}, {"m": 22, "n": 13, "k": 32, "tile_m": 3, "tile_n": 4, "w": 12, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6640.37, "source": "autotuned"}, {"m": 22, "n": 13, "k": 45, "tile_m": 3, "tile_n": 4, "w": 16, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7131.11, "source": "autotuned"}, {"m": 22, "n": 15, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 10, "algorithm": "medium", "perf": 3961.24, "source": "autotuned"}, {"m": 22, "n": 15, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4275.95, "source": "autotuned"}, {"m": 22, "n": 15, "k": 9, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 5471.32, "source": "autotuned"}, {"m": 22, "n": 15, "k": 13, "tile_m": 3, "tile_n": 4, "w": 6, "v": 14, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6222.34, "source": "autotuned"}, {"m": 22, "n": 15, "k": 15, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 6400.1, "source": "autotuned"}, {"m": 22, "n": 15, "k": 16, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 6483.2, "source": "autotuned"}, {"m": 22, "n": 15, "k": 22, "tile_m": 3, "tile_n": 4, "w": 8, "v": 14, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 6776.61, "source": "autotuned"}, {"m": 22, "n": 15, "k": 25, "tile_m": 3, "tile_n": 4, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7053.49, "source": "autotuned"}, {"m": 22, "n": 15, "k": 26, "tile_m": 3, "tile_n": 4, "w": 10, "v": 14, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7048.47, "source": "autotuned"}, {"m": 22, "n": 15, "k": 45, "tile_m": 3, "tile_n": 4, "w": 16, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8005.02, "source": "autotuned"}, {"m": 22, "n": 16, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 12, "minblocks": 11, "algorithm": "medium", "perf": 4397.94, "source": "autotuned"}, {"m": 22, "n": 16, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4610.49, "source": "autotuned"}, {"m": 22, "n": 16, "k": 9, "tile_m": 3, "tile_n": 4, "w": 4, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6109.88, "source": "autotuned"}, {"m": 22, "n": 16, "k": 13, "tile_m": 3, "tile_n": 4, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6960.11, "source": "autotuned"}, {"m": 22, "n": 16, "k": 15, "tile_m": 3, "tile_n": 4, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 6803.33, "source": "autotuned"}, {"m": 22, "n": 16, "k": 16, "tile_m": 3, "tile_n": 4, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7012.98, "source": "autotuned"}, {"m": 22, "n": 16, "k": 17, "tile_m": 3, "tile_n": 4, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6880.31, "source": "autotuned"}, {"m": 22, "n": 16, "k": 22, "tile_m": 3, "tile_n": 4, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7273.63, "source": "autotuned"}, {"m": 22, "n": 16, "k": 23, "tile_m": 3, "tile_n": 4, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7344.5, "source": "autotuned"}, {"m": 22, "n": 16, "k": 25, "tile_m": 3, "tile_n": 4, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7636.86, "source": "autotuned"}, {"m": 22, "n": 16, "k": 26, "tile_m": 3, "tile_n": 4, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7719.11, "source": "autotuned"}, {"m": 22, "n": 16, "k": 45, "tile_m": 3, "tile_n": 4, "w": 16, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8552.51, "source": "autotuned"}, {"m": 22, "n": 17, "k": 9, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 5308.02, "source": "autotuned"}, {"m": 22, "n": 17, "k": 16, "tile_m": 3, "tile_n": 5, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 6450.29, "source": "autotuned"}, {"m": 22, "n": 17, "k": 17, "tile_m": 3, "tile_n": 5, "w": 8, "v": 14, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6507.49, "source": "autotuned"}, {"m": 22, "n": 17, "k": 22, "tile_m": 3, "tile_n": 5, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6963.26, "source": "autotuned"}, {"m": 22, "n": 17, "k": 23, "tile_m": 3, "tile_n": 5, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7093.72, "source": "autotuned"}, {"m": 22, "n": 22, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 4727.27, "source": "autotuned"}, {"m": 22, "n": 22, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4934.28, "source": "autotuned"}, {"m": 22, "n": 22, "k": 6, "tile_m": 3, "tile_n": 3, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 5112.02, "source": "autotuned"}, {"m": 22, "n": 22, "k": 7, "tile_m": 3, "tile_n": 3, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 5445.73, "source": "autotuned"}, {"m": 22, "n": 22, "k": 8, "tile_m": 3, "tile_n": 3, "threads": 192, "grouping": 21, "minblocks": 6, "algorithm": "medium", "perf": 5704.29, "source": "autotuned"}, {"m": 22, "n": 22, "k": 9, "tile_m": 6, "tile_n": 3, "w": 4, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6379.74, "source": "autotuned"}, {"m": 22, "n": 22, "k": 10, "tile_m": 6, "tile_n": 3, "w": 4, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6677.95, "source": "autotuned"}, {"m": 22, "n": 22, "k": 13, "tile_m": 3, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7206.83, "source": "autotuned"}, {"m": 22, "n": 22, "k": 15, "tile_m": 3, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7418.05, "source": "autotuned"}, {"m": 22, "n": 22, "k": 16, "tile_m": 3, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7654.57, "source": "autotuned"}, {"m": 22, "n": 22, "k": 17, "tile_m": 3, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7733.08, "source": "autotuned"}, {"m": 22, "n": 22, "k": 22, "tile_m": 3, "tile_n": 6, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 8482.61, "source": "autotuned"}, {"m": 22, "n": 22, "k": 23, "tile_m": 3, "tile_n": 6, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8465.9, "source": "autotuned"}, {"m": 22, "n": 22, "k": 25, "tile_m": 3, "tile_n": 6, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8739.19, "source": "autotuned"}, {"m": 22, "n": 22, "k": 26, "tile_m": 3, "tile_n": 6, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8790.46, "source": "autotuned"}, {"m": 22, "n": 22, "k": 32, "tile_m": 3, "tile_n": 6, "w": 12, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 9221.93, "source": "autotuned"}, {"m": 22, "n": 22, "k": 45, "tile_m": 3, "tile_n": 6, "w": 16, "v": 20, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9846.4, "source": "autotuned"}, {"m": 22, "n": 23, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 10, "algorithm": "medium", "perf": 4908.2, "source": "autotuned"}, {"m": 22, "n": 23, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 5151.74, "source": "autotuned"}, {"m": 22, "n": 23, "k": 9, "tile_m": 6, "tile_n": 3, "w": 4, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5299.06, "source": "autotuned"}, {"m": 22, "n": 23, "k": 13, "tile_m": 3, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7254.75, "source": "autotuned"}, {"m": 22, "n": 23, "k": 16, "tile_m": 3, "tile_n": 6, "w": 6, "v": 20, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7784.55, "source": "autotuned"}, {"m": 22, "n": 23, "k": 17, "tile_m": 3, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7834.31, "source": "autotuned"}, {"m": 22, "n": 23, "k": 22, "tile_m": 3, "tile_n": 6, "w": 8, "v": 20, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8583.36, "source": "autotuned"}, {"m": 22, "n": 23, "k": 23, "tile_m": 3, "tile_n": 6, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8664.08, "source": "autotuned"}, {"m": 22, "n": 23, "k": 26, "tile_m": 3, "tile_n": 6, "w": 10, "v": 20, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8916.06, "source": "autotuned"}, {"m": 22, "n": 25, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4821.84, "source": "autotuned"}, {"m": 22, "n": 25, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 5479.8, "source": "autotuned"}, {"m": 22, "n": 25, "k": 9, "tile_m": 11, "tile_n": 2, "w": 4, "v": 24, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6340.01, "source": "autotuned"}, {"m": 22, "n": 25, "k": 13, "tile_m": 11, "tile_n": 2, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7009.7, "source": "autotuned"}, {"m": 22, "n": 25, "k": 15, "tile_m": 11, "tile_n": 2, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7213.79, "source": "autotuned"}, {"m": 22, "n": 25, "k": 16, "tile_m": 6, "tile_n": 4, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7386.92, "source": "autotuned"}, {"m": 22, "n": 25, "k": 22, "tile_m": 3, "tile_n": 7, "w": 8, "v": 24, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8557.94, "source": "autotuned"}, {"m": 22, "n": 25, "k": 25, "tile_m": 3, "tile_n": 7, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8894.78, "source": "autotuned"}, {"m": 22, "n": 25, "k": 26, "tile_m": 3, "tile_n": 7, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8977.7, "source": "autotuned"}, {"m": 22, "n": 25, "k": 45, "tile_m": 3, "tile_n": 7, "w": 16, "v": 18, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 9766.36, "source": "autotuned"}, {"m": 22, "n": 26, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 5079.26, "source": "autotuned"}, {"m": 22, "n": 26, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 192, "grouping": 21, "minblocks": 6, "algorithm": "medium", "perf": 5117.88, "source": "autotuned"}, {"m": 22, "n": 26, "k": 9, "tile_m": 11, "tile_n": 2, "w": 4, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6826.7, "source": "autotuned"}, {"m": 22, "n": 26, "k": 13, "tile_m": 6, "tile_n": 4, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7416.08, "source": "autotuned"}, {"m": 22, "n": 26, "k": 15, "tile_m": 6, "tile_n": 4, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7595.29, "source": "autotuned"}, {"m": 22, "n": 26, "k": 16, "tile_m": 6, "tile_n": 4, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7871.76, "source": "autotuned"}, {"m": 22, "n": 26, "k": 22, "tile_m": 3, "tile_n": 7, "w": 8, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9002.1, "source": "autotuned"}, {"m": 22, "n": 26, "k": 23, "tile_m": 3, "tile_n": 7, "w": 8, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 9101.05, "source": "autotuned"}, {"m": 22, "n": 26, "k": 25, "tile_m": 3, "tile_n": 7, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9175.41, "source": "autotuned"}, {"m": 22, "n": 26, "k": 26, "tile_m": 3, "tile_n": 7, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9282.43, "source": "autotuned"}, {"m": 22, "n": 26, "k": 45, "tile_m": 3, "tile_n": 7, "w": 16, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 10111.8, "source": "autotuned"}, {"m": 22, "n": 32, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 192, "grouping": 21, "minblocks": 6, "algorithm": "medium", "perf": 5636.58, "source": "autotuned"}, {"m": 22, "n": 32, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 192, "grouping": 21, "minblocks": 6, "algorithm": "medium", "perf": 6257.88, "source": "autotuned"}, {"m": 22, "n": 32, "k": 6, "tile_m": 3, "tile_n": 4, "threads": 224, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 6132.54, "source": "autotuned"}, {"m": 22, "n": 32, "k": 7, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 6584.43, "source": "autotuned"}, {"m": 22, "n": 32, "k": 8, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 7015.89, "source": "autotuned"}, {"m": 22, "n": 32, "k": 9, "tile_m": 11, "tile_n": 2, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8416.97, "source": "autotuned"}, {"m": 22, "n": 32, "k": 10, "tile_m": 11, "tile_n": 2, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8324.11, "source": "autotuned"}, {"m": 22, "n": 32, "k": 13, "tile_m": 6, "tile_n": 4, "w": 6, "v": 32, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8680.33, "source": "autotuned"}, {"m": 22, "n": 32, "k": 22, "tile_m": 3, "tile_n": 8, "w": 8, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10463.4, "source": "autotuned"}, {"m": 22, "n": 32, "k": 32, "tile_m": 3, "tile_n": 8, "w": 12, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 11246.9, "source": "autotuned"}, {"m": 22, "n": 45, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 7, "algorithm": "medium", "perf": 6144.63, "source": "autotuned"}, {"m": 22, "n": 45, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 6546.78, "source": "autotuned"}, {"m": 22, "n": 45, "k": 9, "tile_m": 11, "tile_n": 3, "w": 4, "v": 44, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 8564.49, "source": "autotuned"}, {"m": 22, "n": 45, "k": 13, "tile_m": 11, "tile_n": 3, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 9636.24, "source": "autotuned"}, {"m": 22, "n": 45, "k": 15, "tile_m": 11, "tile_n": 3, "w": 6, "v": 44, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 10089.2, "source": "autotuned"}, {"m": 22, "n": 45, "k": 16, "tile_m": 11, "tile_n": 3, "w": 6, "v": 44, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10403.8, "source": "autotuned"}, {"m": 22, "n": 45, "k": 22, "tile_m": 11, "tile_n": 3, "w": 8, "v": 44, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 10959.2, "source": "autotuned"}, {"m": 22, "n": 45, "k": 25, "tile_m": 11, "tile_n": 3, "w": 10, "v": 36, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 11388.1, "source": "autotuned"}, {"m": 22, "n": 45, "k": 26, "tile_m": 11, "tile_n": 3, "w": 10, "v": 44, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 11659.5, "source": "autotuned"}, {"m": 22, "n": 45, "k": 45, "tile_m": 11, "tile_n": 3, "w": 10, "v": 36, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 12160.4, "source": "autotuned"}, {"m": 23, "n": 4, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 1509.42, "source": "autotuned"}, {"m": 23, "n": 4, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 7, "minblocks": 5, "algorithm": "medium", "perf": 1689.17, "source": "autotuned"}, {"m": 23, "n": 4, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 2174.29, "source": "autotuned"}, {"m": 23, "n": 4, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 2559.64, "source": "autotuned"}, {"m": 23, "n": 4, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2859.65, "source": "autotuned"}, {"m": 23, "n": 4, "k": 23, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 2784.35, "source": "autotuned"}, {"m": 23, "n": 4, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 11, "minblocks": 5, "algorithm": "medium", "perf": 2915.14, "source": "autotuned"}, {"m": 23, "n": 5, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 1744.93, "source": "autotuned"}, {"m": 23, "n": 5, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 24, "algorithm": "medium", "perf": 1965.63, "source": "autotuned"}, {"m": 23, "n": 5, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2422.28, "source": "autotuned"}, {"m": 23, "n": 5, "k": 13, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 2793.31, "source": "autotuned"}, {"m": 23, "n": 5, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 3070.18, "source": "autotuned"}, {"m": 23, "n": 5, "k": 22, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3156.58, "source": "autotuned"}, {"m": 23, "n": 5, "k": 23, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 4, "algorithm": "medium", "perf": 3117.32, "source": "autotuned"}, {"m": 23, "n": 5, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 3, "algorithm": "medium", "perf": 3310.39, "source": "autotuned"}, {"m": 23, "n": 9, "k": 4, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 2664.93, "source": "autotuned"}, {"m": 23, "n": 9, "k": 5, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 2790.63, "source": "autotuned"}, {"m": 23, "n": 9, "k": 9, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 7, "minblocks": 17, "algorithm": "medium", "perf": 3717.25, "source": "autotuned"}, {"m": 23, "n": 9, "k": 13, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4339.93, "source": "autotuned"}, {"m": 23, "n": 9, "k": 16, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4609.97, "source": "autotuned"}, {"m": 23, "n": 9, "k": 17, "tile_m": 3, "tile_n": 3, "w": 8, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4545.97, "source": "autotuned"}, {"m": 23, "n": 9, "k": 22, "tile_m": 3, "tile_n": 3, "w": 10, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4761.77, "source": "autotuned"}, {"m": 23, "n": 9, "k": 23, "tile_m": 3, "tile_n": 3, "w": 8, "v": 8, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4788.02, "source": "autotuned"}, {"m": 23, "n": 9, "k": 26, "tile_m": 3, "tile_n": 3, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4903.17, "source": "autotuned"}, {"m": 23, "n": 13, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 3659.75, "source": "autotuned"}, {"m": 23, "n": 13, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3148.35, "source": "autotuned"}, {"m": 23, "n": 13, "k": 9, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 4989.51, "source": "autotuned"}, {"m": 23, "n": 13, "k": 13, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 5567.85, "source": "autotuned"}, {"m": 23, "n": 13, "k": 16, "tile_m": 3, "tile_n": 4, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5984.36, "source": "autotuned"}, {"m": 23, "n": 13, "k": 17, "tile_m": 3, "tile_n": 4, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5760.49, "source": "autotuned"}, {"m": 23, "n": 13, "k": 22, "tile_m": 3, "tile_n": 4, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6242.94, "source": "autotuned"}, {"m": 23, "n": 13, "k": 23, "tile_m": 3, "tile_n": 4, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 6240.53, "source": "autotuned"}, {"m": 23, "n": 13, "k": 26, "tile_m": 3, "tile_n": 4, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6451.68, "source": "autotuned"}, {"m": 23, "n": 16, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4735.61, "source": "autotuned"}, {"m": 23, "n": 16, "k": 9, "tile_m": 3, "tile_n": 4, "w": 4, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6247.08, "source": "autotuned"}, {"m": 23, "n": 16, "k": 13, "tile_m": 3, "tile_n": 4, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6972.55, "source": "autotuned"}, {"m": 23, "n": 16, "k": 16, "tile_m": 3, "tile_n": 4, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7133.44, "source": "autotuned"}, {"m": 23, "n": 16, "k": 17, "tile_m": 3, "tile_n": 4, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7076.47, "source": "autotuned"}, {"m": 23, "n": 16, "k": 22, "tile_m": 3, "tile_n": 4, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7461.79, "source": "autotuned"}, {"m": 23, "n": 16, "k": 23, "tile_m": 3, "tile_n": 4, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7519.22, "source": "autotuned"}, {"m": 23, "n": 17, "k": 9, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 5720.64, "source": "autotuned"}, {"m": 23, "n": 17, "k": 13, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 6409.15, "source": "autotuned"}, {"m": 23, "n": 17, "k": 16, "tile_m": 3, "tile_n": 5, "w": 6, "v": 14, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6638.57, "source": "autotuned"}, {"m": 23, "n": 17, "k": 17, "tile_m": 3, "tile_n": 5, "w": 8, "v": 14, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6704.95, "source": "autotuned"}, {"m": 23, "n": 17, "k": 22, "tile_m": 3, "tile_n": 5, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7134.9, "source": "autotuned"}, {"m": 23, "n": 17, "k": 23, "tile_m": 3, "tile_n": 5, "w": 10, "v": 14, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7258.59, "source": "autotuned"}, {"m": 23, "n": 22, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 7, "algorithm": "medium", "perf": 4952.22, "source": "autotuned"}, {"m": 23, "n": 22, "k": 5, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 5133.45, "source": "autotuned"}, {"m": 23, "n": 22, "k": 9, "tile_m": 6, "tile_n": 3, "w": 4, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6614.85, "source": "autotuned"}, {"m": 23, "n": 22, "k": 13, "tile_m": 3, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7396.09, "source": "autotuned"}, {"m": 23, "n": 22, "k": 16, "tile_m": 3, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7844.88, "source": "autotuned"}, {"m": 23, "n": 22, "k": 17, "tile_m": 3, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7977.15, "source": "autotuned"}, {"m": 23, "n": 22, "k": 22, "tile_m": 3, "tile_n": 6, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8777.31, "source": "autotuned"}, {"m": 23, "n": 22, "k": 23, "tile_m": 3, "tile_n": 6, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8742.16, "source": "autotuned"}, {"m": 23, "n": 22, "k": 26, "tile_m": 3, "tile_n": 6, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9086.38, "source": "autotuned"}, {"m": 23, "n": 23, "k": 4, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 5102.85, "source": "autotuned"}, {"m": 23, "n": 23, "k": 5, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 5421.78, "source": "autotuned"}, {"m": 23, "n": 23, "k": 9, "tile_m": 6, "tile_n": 3, "w": 4, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6832.84, "source": "autotuned"}, {"m": 23, "n": 23, "k": 13, "tile_m": 3, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7669.06, "source": "autotuned"}, {"m": 23, "n": 23, "k": 16, "tile_m": 3, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7999.98, "source": "autotuned"}, {"m": 23, "n": 23, "k": 17, "tile_m": 3, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8072.82, "source": "autotuned"}, {"m": 23, "n": 23, "k": 22, "tile_m": 3, "tile_n": 6, "w": 8, "v": 20, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8882.23, "source": "autotuned"}, {"m": 23, "n": 23, "k": 23, "tile_m": 3, "tile_n": 6, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8935.98, "source": "autotuned"}, {"m": 23, "n": 23, "k": 26, "tile_m": 3, "tile_n": 6, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 9233.76, "source": "autotuned"}, {"m": 23, "n": 26, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 5194.85, "source": "autotuned"}, {"m": 23, "n": 26, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 5310.14, "source": "autotuned"}, {"m": 23, "n": 26, "k": 9, "tile_m": 6, "tile_n": 4, "w": 4, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7074.48, "source": "autotuned"}, {"m": 23, "n": 26, "k": 13, "tile_m": 6, "tile_n": 4, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7643.93, "source": "autotuned"}, {"m": 23, "n": 26, "k": 22, "tile_m": 3, "tile_n": 7, "w": 8, "v": 26, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 9368.85, "source": "autotuned"}, {"m": 23, "n": 26, "k": 23, "tile_m": 3, "tile_n": 7, "w": 8, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 9397.74, "source": "autotuned"}, {"m": 23, "n": 26, "k": 26, "tile_m": 3, "tile_n": 7, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9600.53, "source": "autotuned"}, {"m": 24, "n": 5, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 12, "algorithm": "medium", "perf": 2037.99, "source": "autotuned"}, {"m": 24, "n": 5, "k": 13, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 2979.45, "source": "autotuned"}, {"m": 24, "n": 5, "k": 24, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 9, "algorithm": "medium", "perf": 3373.42, "source": "autotuned"}, {"m": 24, "n": 5, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 4, "algorithm": "medium", "perf": 3405.32, "source": "autotuned"}, {"m": 24, "n": 5, "k": 32, "tile_m": 2, "tile_n": 3, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3556.67, "source": "autotuned"}, {"m": 24, "n": 13, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4047.96, "source": "autotuned"}, {"m": 24, "n": 13, "k": 13, "tile_m": 3, "tile_n": 4, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6073.75, "source": "autotuned"}, {"m": 24, "n": 13, "k": 24, "tile_m": 3, "tile_n": 4, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6733.9, "source": "autotuned"}, {"m": 24, "n": 13, "k": 26, "tile_m": 3, "tile_n": 4, "w": 12, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6797.99, "source": "autotuned"}, {"m": 24, "n": 13, "k": 32, "tile_m": 3, "tile_n": 4, "w": 12, "v": 12, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7279.24, "source": "autotuned"}, {"m": 24, "n": 24, "k": 5, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 5976.97, "source": "autotuned"}, {"m": 24, "n": 24, "k": 13, "tile_m": 3, "tile_n": 6, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8237.18, "source": "autotuned"}, {"m": 24, "n": 24, "k": 24, "tile_m": 3, "tile_n": 6, "w": 8, "v": 20, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10238.1, "source": "autotuned"}, {"m": 24, "n": 24, "k": 26, "tile_m": 3, "tile_n": 6, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8609.59, "source": "autotuned"}, {"m": 24, "n": 24, "k": 32, "tile_m": 3, "tile_n": 6, "w": 12, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 10761.3, "source": "autotuned"}, {"m": 24, "n": 26, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 160, "grouping": 9, "minblocks": 7, "algorithm": "medium", "perf": 5413.66, "source": "autotuned"}, {"m": 24, "n": 26, "k": 13, "tile_m": 6, "tile_n": 4, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7782.48, "source": "autotuned"}, {"m": 24, "n": 26, "k": 24, "tile_m": 3, "tile_n": 7, "w": 8, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 9973.82, "source": "autotuned"}, {"m": 24, "n": 26, "k": 26, "tile_m": 3, "tile_n": 7, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 10155.9, "source": "autotuned"}, {"m": 24, "n": 26, "k": 32, "tile_m": 3, "tile_n": 7, "w": 12, "v": 18, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 10592.7, "source": "autotuned"}, {"m": 24, "n": 32, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 192, "grouping": 21, "minblocks": 6, "algorithm": "medium", "perf": 6742.89, "source": "autotuned"}, {"m": 24, "n": 32, "k": 13, "tile_m": 6, "tile_n": 4, "w": 6, "v": 32, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9310.55, "source": "autotuned"}, {"m": 24, "n": 32, "k": 24, "tile_m": 3, "tile_n": 8, "w": 10, "v": 32, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 11435.5, "source": "autotuned"}, {"m": 24, "n": 32, "k": 26, "tile_m": 3, "tile_n": 8, "w": 10, "v": 32, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11561.4, "source": "autotuned"}, {"m": 24, "n": 32, "k": 32, "tile_m": 3, "tile_n": 8, "w": 12, "v": 30, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 12080.4, "source": "autotuned"}, {"m": 25, "n": 4, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 7, "minblocks": 10, "algorithm": "medium", "perf": 1523.63, "source": "autotuned"}, {"m": 25, "n": 4, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 7, "minblocks": 8, "algorithm": "medium", "perf": 1787.04, "source": "autotuned"}, {"m": 25, "n": 4, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 25, "algorithm": "medium", "perf": 2176.98, "source": "autotuned"}, {"m": 25, "n": 4, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 2344.95, "source": "autotuned"}, {"m": 25, "n": 4, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 2668.41, "source": "autotuned"}, {"m": 25, "n": 4, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 2834.42, "source": "autotuned"}, {"m": 25, "n": 4, "k": 16, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 2907.73, "source": "autotuned"}, {"m": 25, "n": 4, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 12, "minblocks": 12, "algorithm": "medium", "perf": 2899.46, "source": "autotuned"}, {"m": 25, "n": 4, "k": 25, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 3146.43, "source": "autotuned"}, {"m": 25, "n": 4, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 12, "minblocks": 9, "algorithm": "medium", "perf": 3007.59, "source": "autotuned"}, {"m": 25, "n": 4, "k": 28, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 3007.65, "source": "autotuned"}, {"m": 25, "n": 4, "k": 32, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 12, "minblocks": 7, "algorithm": "medium", "perf": 3140.29, "source": "autotuned"}, {"m": 25, "n": 4, "k": 45, "tile_m": 1, "tile_n": 4, "w": 22, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3309.86, "source": "autotuned"}, {"m": 25, "n": 5, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 7, "minblocks": 14, "algorithm": "medium", "perf": 1805.36, "source": "autotuned"}, {"m": 25, "n": 5, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 2115.0, "source": "autotuned"}, {"m": 25, "n": 5, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 6, "minblocks": 25, "algorithm": "medium", "perf": 2263.78, "source": "autotuned"}, {"m": 25, "n": 5, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2599.51, "source": "autotuned"}, {"m": 25, "n": 5, "k": 13, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 2991.21, "source": "autotuned"}, {"m": 25, "n": 5, "k": 15, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 3117.32, "source": "autotuned"}, {"m": 25, "n": 5, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 3230.29, "source": "autotuned"}, {"m": 25, "n": 5, "k": 22, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 5, "algorithm": "medium", "perf": 3260.28, "source": "autotuned"}, {"m": 25, "n": 5, "k": 25, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 2, "algorithm": "medium", "perf": 3401.5, "source": "autotuned"}, {"m": 25, "n": 5, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 3426.93, "source": "autotuned"}, {"m": 25, "n": 5, "k": 28, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 8, "algorithm": "medium", "perf": 3438.06, "source": "autotuned"}, {"m": 25, "n": 5, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 8, "algorithm": "medium", "perf": 3472.3, "source": "autotuned"}, {"m": 25, "n": 5, "k": 45, "tile_m": 1, "tile_n": 5, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3535.88, "source": "autotuned"}, {"m": 25, "n": 7, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 2348.8, "source": "autotuned"}, {"m": 25, "n": 7, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 13, "minblocks": 10, "algorithm": "medium", "perf": 2538.08, "source": "autotuned"}, {"m": 25, "n": 7, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 6, "minblocks": 27, "algorithm": "medium", "perf": 2898.94, "source": "autotuned"}, {"m": 25, "n": 7, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 3252.27, "source": "autotuned"}, {"m": 25, "n": 7, "k": 13, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 3792.85, "source": "autotuned"}, {"m": 25, "n": 7, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 11, "minblocks": 6, "algorithm": "medium", "perf": 4071.04, "source": "autotuned"}, {"m": 25, "n": 7, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 11, "minblocks": 9, "algorithm": "medium", "perf": 4093.01, "source": "autotuned"}, {"m": 25, "n": 7, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 11, "minblocks": 6, "algorithm": "medium", "perf": 4124.71, "source": "autotuned"}, {"m": 25, "n": 7, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 11, "minblocks": 5, "algorithm": "medium", "perf": 4228.8, "source": "autotuned"}, {"m": 25, "n": 7, "k": 45, "tile_m": 1, "tile_n": 7, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4486.88, "source": "autotuned"}, {"m": 25, "n": 9, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2597.93, "source": "autotuned"}, {"m": 25, "n": 9, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2948.75, "source": "autotuned"}, {"m": 25, "n": 9, "k": 7, "tile_m": 1, "tile_n": 9, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 3344.99, "source": "autotuned"}, {"m": 25, "n": 9, "k": 9, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 11, "minblocks": 11, "algorithm": "medium", "perf": 3613.97, "source": "autotuned"}, {"m": 25, "n": 9, "k": 13, "tile_m": 1, "tile_n": 9, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 4200.88, "source": "autotuned"}, {"m": 25, "n": 9, "k": 15, "tile_m": 3, "tile_n": 3, "w": 6, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4341.26, "source": "autotuned"}, {"m": 25, "n": 9, "k": 16, "tile_m": 1, "tile_n": 9, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4395.19, "source": "autotuned"}, {"m": 25, "n": 9, "k": 22, "tile_m": 3, "tile_n": 3, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4627.61, "source": "autotuned"}, {"m": 25, "n": 9, "k": 25, "tile_m": 3, "tile_n": 3, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4757.69, "source": "autotuned"}, {"m": 25, "n": 9, "k": 26, "tile_m": 3, "tile_n": 3, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4820.29, "source": "autotuned"}, {"m": 25, "n": 9, "k": 28, "tile_m": 3, "tile_n": 3, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4901.71, "source": "autotuned"}, {"m": 25, "n": 9, "k": 32, "tile_m": 3, "tile_n": 3, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5025.99, "source": "autotuned"}, {"m": 25, "n": 9, "k": 45, "tile_m": 3, "tile_n": 3, "w": 16, "v": 8, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5327.81, "source": "autotuned"}, {"m": 25, "n": 11, "k": 11, "tile_m": 1, "tile_n": 11, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 4562.3, "source": "autotuned"}, {"m": 25, "n": 11, "k": 12, "tile_m": 1, "tile_n": 11, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4524.03, "source": "autotuned"}, {"m": 25, "n": 11, "k": 20, "tile_m": 5, "tile_n": 2, "w": 8, "v": 10, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5006.11, "source": "autotuned"}, {"m": 25, "n": 11, "k": 25, "tile_m": 5, "tile_n": 2, "w": 10, "v": 10, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4273.29, "source": "autotuned"}, {"m": 25, "n": 11, "k": 32, "tile_m": 5, "tile_n": 2, "w": 14, "v": 10, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5520.12, "source": "autotuned"}, {"m": 25, "n": 12, "k": 11, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 4733.79, "source": "autotuned"}, {"m": 25, "n": 12, "k": 12, "tile_m": 1, "tile_n": 12, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4951.13, "source": "autotuned"}, {"m": 25, "n": 12, "k": 20, "tile_m": 5, "tile_n": 2, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5533.38, "source": "autotuned"}, {"m": 25, "n": 13, "k": 4, "tile_m": 7, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3222.37, "source": "autotuned"}, {"m": 25, "n": 13, "k": 5, "tile_m": 7, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 7, "algorithm": "medium", "perf": 3621.44, "source": "autotuned"}, {"m": 25, "n": 13, "k": 7, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 4098.9, "source": "autotuned"}, {"m": 25, "n": 13, "k": 9, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 4406.5, "source": "autotuned"}, {"m": 25, "n": 13, "k": 13, "tile_m": 7, "tile_n": 2, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 4966.3, "source": "autotuned"}, {"m": 25, "n": 13, "k": 14, "tile_m": 7, "tile_n": 2, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5102.49, "source": "autotuned"}, {"m": 25, "n": 13, "k": 15, "tile_m": 7, "tile_n": 2, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5124.19, "source": "autotuned"}, {"m": 25, "n": 13, "k": 16, "tile_m": 7, "tile_n": 2, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5163.76, "source": "autotuned"}, {"m": 25, "n": 13, "k": 22, "tile_m": 7, "tile_n": 2, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5489.05, "source": "autotuned"}, {"m": 25, "n": 13, "k": 25, "tile_m": 7, "tile_n": 2, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5609.07, "source": "autotuned"}, {"m": 25, "n": 13, "k": 26, "tile_m": 7, "tile_n": 2, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5739.68, "source": "autotuned"}, {"m": 25, "n": 13, "k": 28, "tile_m": 5, "tile_n": 3, "w": 12, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5780.81, "source": "autotuned"}, {"m": 25, "n": 13, "k": 32, "tile_m": 7, "tile_n": 2, "w": 12, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5937.93, "source": "autotuned"}, {"m": 25, "n": 13, "k": 45, "tile_m": 7, "tile_n": 2, "w": 20, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 6204.23, "source": "autotuned"}, {"m": 25, "n": 14, "k": 13, "tile_m": 7, "tile_n": 2, "w": 6, "v": 14, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5459.52, "source": "autotuned"}, {"m": 25, "n": 14, "k": 14, "tile_m": 7, "tile_n": 2, "w": 6, "v": 14, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5488.84, "source": "autotuned"}, {"m": 25, "n": 14, "k": 26, "tile_m": 7, "tile_n": 2, "w": 10, "v": 14, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 6205.07, "source": "autotuned"}, {"m": 25, "n": 14, "k": 32, "tile_m": 7, "tile_n": 2, "w": 12, "v": 14, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6393.48, "source": "autotuned"}, {"m": 25, "n": 15, "k": 4, "tile_m": 7, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3750.0, "source": "autotuned"}, {"m": 25, "n": 15, "k": 5, "tile_m": 7, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4274.03, "source": "autotuned"}, {"m": 25, "n": 15, "k": 9, "tile_m": 7, "tile_n": 2, "w": 4, "v": 14, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5102.35, "source": "autotuned"}, {"m": 25, "n": 15, "k": 13, "tile_m": 7, "tile_n": 2, "w": 6, "v": 14, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5655.03, "source": "autotuned"}, {"m": 25, "n": 15, "k": 15, "tile_m": 7, "tile_n": 2, "w": 6, "v": 14, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5838.9, "source": "autotuned"}, {"m": 25, "n": 15, "k": 16, "tile_m": 7, "tile_n": 2, "w": 6, "v": 8, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5936.57, "source": "autotuned"}, {"m": 25, "n": 15, "k": 22, "tile_m": 7, "tile_n": 2, "w": 10, "v": 14, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6253.53, "source": "autotuned"}, {"m": 25, "n": 15, "k": 25, "tile_m": 7, "tile_n": 2, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6410.07, "source": "autotuned"}, {"m": 25, "n": 15, "k": 26, "tile_m": 3, "tile_n": 5, "w": 10, "v": 14, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6449.01, "source": "autotuned"}, {"m": 25, "n": 15, "k": 45, "tile_m": 7, "tile_n": 2, "w": 16, "v": 14, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7116.47, "source": "autotuned"}, {"m": 25, "n": 16, "k": 4, "tile_m": 7, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 7, "algorithm": "medium", "perf": 3918.68, "source": "autotuned"}, {"m": 25, "n": 16, "k": 5, "tile_m": 7, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 4469.01, "source": "autotuned"}, {"m": 25, "n": 16, "k": 9, "tile_m": 7, "tile_n": 2, "w": 4, "v": 16, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5574.5, "source": "autotuned"}, {"m": 25, "n": 16, "k": 13, "tile_m": 7, "tile_n": 2, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6312.65, "source": "autotuned"}, {"m": 25, "n": 16, "k": 15, "tile_m": 7, "tile_n": 2, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6425.99, "source": "autotuned"}, {"m": 25, "n": 16, "k": 16, "tile_m": 7, "tile_n": 2, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6440.64, "source": "autotuned"}, {"m": 25, "n": 16, "k": 22, "tile_m": 7, "tile_n": 2, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6736.8, "source": "autotuned"}, {"m": 25, "n": 16, "k": 25, "tile_m": 7, "tile_n": 2, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6941.79, "source": "autotuned"}, {"m": 25, "n": 16, "k": 26, "tile_m": 7, "tile_n": 2, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6989.87, "source": "autotuned"}, {"m": 25, "n": 16, "k": 45, "tile_m": 7, "tile_n": 2, "w": 16, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7573.87, "source": "autotuned"}, {"m": 25, "n": 20, "k": 11, "tile_m": 7, "tile_n": 3, "w": 4, "v": 20, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6485.33, "source": "autotuned"}, {"m": 25, "n": 20, "k": 12, "tile_m": 7, "tile_n": 3, "w": 4, "v": 20, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6583.41, "source": "autotuned"}, {"m": 25, "n": 20, "k": 20, "tile_m": 7, "tile_n": 3, "w": 8, "v": 20, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7360.65, "source": "autotuned"}, {"m": 25, "n": 20, "k": 25, "tile_m": 7, "tile_n": 3, "w": 10, "v": 20, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7764.79, "source": "autotuned"}, {"m": 25, "n": 20, "k": 32, "tile_m": 7, "tile_n": 3, "w": 12, "v": 20, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8086.06, "source": "autotuned"}, {"m": 25, "n": 22, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 4411.96, "source": "autotuned"}, {"m": 25, "n": 22, "k": 5, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 14, "minblocks": 10, "algorithm": "medium", "perf": 4912.25, "source": "autotuned"}, {"m": 25, "n": 22, "k": 9, "tile_m": 7, "tile_n": 3, "w": 4, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6836.01, "source": "autotuned"}, {"m": 25, "n": 22, "k": 13, "tile_m": 7, "tile_n": 3, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7280.86, "source": "autotuned"}, {"m": 25, "n": 22, "k": 15, "tile_m": 7, "tile_n": 3, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7479.68, "source": "autotuned"}, {"m": 25, "n": 22, "k": 16, "tile_m": 7, "tile_n": 3, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7623.63, "source": "autotuned"}, {"m": 25, "n": 22, "k": 22, "tile_m": 7, "tile_n": 3, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8243.21, "source": "autotuned"}, {"m": 25, "n": 22, "k": 25, "tile_m": 7, "tile_n": 3, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8555.44, "source": "autotuned"}, {"m": 25, "n": 22, "k": 26, "tile_m": 7, "tile_n": 3, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8539.98, "source": "autotuned"}, {"m": 25, "n": 22, "k": 45, "tile_m": 7, "tile_n": 3, "w": 18, "v": 22, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 9163.88, "source": "autotuned"}, {"m": 25, "n": 25, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4803.65, "source": "autotuned"}, {"m": 25, "n": 25, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 5291.54, "source": "autotuned"}, {"m": 25, "n": 25, "k": 7, "tile_m": 3, "tile_n": 4, "threads": 192, "grouping": 21, "minblocks": 6, "algorithm": "medium", "perf": 5642.07, "source": "autotuned"}, {"m": 25, "n": 25, "k": 9, "tile_m": 7, "tile_n": 4, "w": 4, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6669.41, "source": "autotuned"}, {"m": 25, "n": 25, "k": 11, "tile_m": 7, "tile_n": 4, "w": 4, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6972.44, "source": "autotuned"}, {"m": 25, "n": 25, "k": 12, "tile_m": 7, "tile_n": 4, "w": 4, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7218.42, "source": "autotuned"}, {"m": 25, "n": 25, "k": 13, "tile_m": 7, "tile_n": 4, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6045.78, "source": "autotuned"}, {"m": 25, "n": 25, "k": 14, "tile_m": 7, "tile_n": 4, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7466.08, "source": "autotuned"}, {"m": 25, "n": 25, "k": 15, "tile_m": 7, "tile_n": 4, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7626.4, "source": "autotuned"}, {"m": 25, "n": 25, "k": 16, "tile_m": 7, "tile_n": 4, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7734.38, "source": "autotuned"}, {"m": 25, "n": 25, "k": 20, "tile_m": 7, "tile_n": 4, "w": 8, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8177.83, "source": "autotuned"}, {"m": 25, "n": 25, "k": 22, "tile_m": 7, "tile_n": 4, "w": 8, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8407.27, "source": "autotuned"}, {"m": 25, "n": 25, "k": 25, "tile_m": 7, "tile_n": 4, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8608.34, "source": "autotuned"}, {"m": 25, "n": 25, "k": 26, "tile_m": 7, "tile_n": 4, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8517.94, "source": "autotuned"}, {"m": 25, "n": 25, "k": 28, "tile_m": 5, "tile_n": 5, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8738.17, "source": "autotuned"}, {"m": 25, "n": 25, "k": 32, "tile_m": 7, "tile_n": 4, "w": 12, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8924.72, "source": "autotuned"}, {"m": 25, "n": 25, "k": 45, "tile_m": 7, "tile_n": 4, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9300.43, "source": "autotuned"}, {"m": 25, "n": 26, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 18, "minblocks": 7, "algorithm": "medium", "perf": 4946.86, "source": "autotuned"}, {"m": 25, "n": 26, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 160, "grouping": 21, "minblocks": 6, "algorithm": "medium", "perf": 5171.29, "source": "autotuned"}, {"m": 25, "n": 26, "k": 7, "tile_m": 3, "tile_n": 4, "threads": 192, "grouping": 21, "minblocks": 6, "algorithm": "medium", "perf": 5746.74, "source": "autotuned"}, {"m": 25, "n": 26, "k": 9, "tile_m": 7, "tile_n": 4, "w": 4, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7022.19, "source": "autotuned"}, {"m": 25, "n": 26, "k": 13, "tile_m": 7, "tile_n": 4, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7771.35, "source": "autotuned"}, {"m": 25, "n": 26, "k": 14, "tile_m": 7, "tile_n": 4, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7906.35, "source": "autotuned"}, {"m": 25, "n": 26, "k": 15, "tile_m": 7, "tile_n": 4, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8047.07, "source": "autotuned"}, {"m": 25, "n": 26, "k": 16, "tile_m": 7, "tile_n": 4, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8230.42, "source": "autotuned"}, {"m": 25, "n": 26, "k": 22, "tile_m": 7, "tile_n": 4, "w": 8, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8835.37, "source": "autotuned"}, {"m": 25, "n": 26, "k": 25, "tile_m": 7, "tile_n": 4, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8911.77, "source": "autotuned"}, {"m": 25, "n": 26, "k": 26, "tile_m": 7, "tile_n": 4, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9012.95, "source": "autotuned"}, {"m": 25, "n": 26, "k": 28, "tile_m": 7, "tile_n": 4, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9157.79, "source": "autotuned"}, {"m": 25, "n": 26, "k": 32, "tile_m": 7, "tile_n": 4, "w": 12, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9377.93, "source": "autotuned"}, {"m": 25, "n": 26, "k": 45, "tile_m": 7, "tile_n": 4, "w": 16, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9760.64, "source": "autotuned"}, {"m": 25, "n": 28, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 5375.96, "source": "autotuned"}, {"m": 25, "n": 28, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 5484.74, "source": "autotuned"}, {"m": 25, "n": 28, "k": 7, "tile_m": 3, "tile_n": 4, "threads": 224, "grouping": 25, "minblocks": 5, "algorithm": "medium", "perf": 5858.4, "source": "autotuned"}, {"m": 25, "n": 28, "k": 9, "tile_m": 7, "tile_n": 4, "w": 4, "v": 28, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7538.24, "source": "autotuned"}, {"m": 25, "n": 28, "k": 13, "tile_m": 7, "tile_n": 4, "w": 6, "v": 28, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8096.21, "source": "autotuned"}, {"m": 25, "n": 28, "k": 25, "tile_m": 7, "tile_n": 4, "w": 10, "v": 28, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9555.39, "source": "autotuned"}, {"m": 25, "n": 28, "k": 28, "tile_m": 7, "tile_n": 4, "w": 10, "v": 28, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9804.7, "source": "autotuned"}, {"m": 25, "n": 28, "k": 32, "tile_m": 7, "tile_n": 4, "w": 12, "v": 28, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10149.6, "source": "autotuned"}, {"m": 25, "n": 28, "k": 45, "tile_m": 7, "tile_n": 4, "w": 16, "v": 28, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10340.1, "source": "autotuned"}, {"m": 25, "n": 32, "k": 4, "tile_m": 7, "tile_n": 2, "threads": 160, "grouping": 18, "minblocks": 7, "algorithm": "medium", "perf": 5320.22, "source": "autotuned"}, {"m": 25, "n": 32, "k": 5, "tile_m": 7, "tile_n": 2, "threads": 192, "grouping": 31, "minblocks": 4, "algorithm": "medium", "perf": 5759.96, "source": "autotuned"}, {"m": 25, "n": 32, "k": 7, "tile_m": 7, "tile_n": 2, "threads": 256, "grouping": 31, "minblocks": 4, "algorithm": "medium", "perf": 6126.6, "source": "autotuned"}, {"m": 25, "n": 32, "k": 9, "tile_m": 7, "tile_n": 4, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8574.11, "source": "autotuned"}, {"m": 25, "n": 32, "k": 11, "tile_m": 7, "tile_n": 4, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8811.56, "source": "autotuned"}, {"m": 25, "n": 32, "k": 12, "tile_m": 7, "tile_n": 4, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9116.77, "source": "autotuned"}, {"m": 25, "n": 32, "k": 13, "tile_m": 7, "tile_n": 4, "w": 6, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9176.64, "source": "autotuned"}, {"m": 25, "n": 32, "k": 14, "tile_m": 7, "tile_n": 4, "w": 6, "v": 32, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9391.03, "source": "autotuned"}, {"m": 25, "n": 32, "k": 20, "tile_m": 7, "tile_n": 4, "w": 8, "v": 32, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 10386.1, "source": "autotuned"}, {"m": 25, "n": 32, "k": 25, "tile_m": 7, "tile_n": 4, "w": 10, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10734.9, "source": "autotuned"}, {"m": 25, "n": 32, "k": 26, "tile_m": 7, "tile_n": 4, "w": 10, "v": 30, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10849.9, "source": "autotuned"}, {"m": 25, "n": 32, "k": 28, "tile_m": 7, "tile_n": 4, "w": 10, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 11136.7, "source": "autotuned"}, {"m": 25, "n": 32, "k": 32, "tile_m": 7, "tile_n": 4, "w": 12, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 11279.4, "source": "autotuned"}, {"m": 25, "n": 32, "k": 45, "tile_m": 7, "tile_n": 4, "w": 12, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 11662.9, "source": "autotuned"}, {"m": 25, "n": 45, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 192, "grouping": 31, "minblocks": 5, "algorithm": "medium", "perf": 5498.46, "source": "autotuned"}, {"m": 25, "n": 45, "k": 5, "tile_m": 7, "tile_n": 2, "threads": 256, "grouping": 31, "minblocks": 4, "algorithm": "medium", "perf": 5898.07, "source": "autotuned"}, {"m": 25, "n": 45, "k": 7, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 16, "minblocks": 7, "algorithm": "medium", "perf": 6075.16, "source": "autotuned"}, {"m": 25, "n": 45, "k": 9, "tile_m": 7, "tile_n": 3, "w": 4, "v": 28, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7818.96, "source": "autotuned"}, {"m": 25, "n": 45, "k": 13, "tile_m": 7, "tile_n": 6, "w": 6, "v": 44, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9798.77, "source": "autotuned"}, {"m": 25, "n": 45, "k": 15, "tile_m": 7, "tile_n": 6, "w": 6, "v": 44, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 10303.3, "source": "autotuned"}, {"m": 25, "n": 45, "k": 16, "tile_m": 7, "tile_n": 6, "w": 6, "v": 44, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 10523.5, "source": "autotuned"}, {"m": 25, "n": 45, "k": 22, "tile_m": 7, "tile_n": 6, "w": 8, "v": 44, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11469.0, "source": "autotuned"}, {"m": 25, "n": 45, "k": 25, "tile_m": 7, "tile_n": 6, "w": 10, "v": 44, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 11495.7, "source": "autotuned"}, {"m": 25, "n": 45, "k": 26, "tile_m": 7, "tile_n": 6, "w": 12, "v": 44, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11618.5, "source": "autotuned"}, {"m": 25, "n": 45, "k": 28, "tile_m": 7, "tile_n": 6, "w": 12, "v": 44, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 11802.9, "source": "autotuned"}, {"m": 25, "n": 45, "k": 32, "tile_m": 7, "tile_n": 6, "w": 12, "v": 44, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 12097.8, "source": "autotuned"}, {"m": 25, "n": 45, "k": 45, "tile_m": 7, "tile_n": 6, "w": 12, "v": 44, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 12279.5, "source": "autotuned"}, {"m": 26, "n": 4, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 7, "minblocks": 9, "algorithm": "medium", "perf": 1587.07, "source": "autotuned"}, {"m": 26, "n": 4, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 1828.07, "source": "autotuned"}, {"m": 26, "n": 4, "k": 6, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 25, "algorithm": "medium", "perf": 2094.61, "source": "autotuned"}, {"m": 26, "n": 4, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 2229.8, "source": "autotuned"}, {"m": 26, "n": 4, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 2281.41, "source": "autotuned"}, {"m": 26, "n": 4, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 2415.52, "source": "autotuned"}, {"m": 26, "n": 4, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 2435.41, "source": "autotuned"}, {"m": 26, "n": 4, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 6, "algorithm": "medium", "perf": 2769.47, "source": "autotuned"}, {"m": 26, "n": 4, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 2366.62, "source": "autotuned"}, {"m": 26, "n": 4, "k": 16, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 2979.2, "source": "autotuned"}, {"m": 26, "n": 4, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 2964.66, "source": "autotuned"}, {"m": 26, "n": 4, "k": 23, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 11, "minblocks": 2, "algorithm": "medium", "perf": 3050.42, "source": "autotuned"}, {"m": 26, "n": 4, "k": 25, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 6, "algorithm": "medium", "perf": 3223.81, "source": "autotuned"}, {"m": 26, "n": 4, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 11, "minblocks": 4, "algorithm": "medium", "perf": 3050.29, "source": "autotuned"}, {"m": 26, "n": 4, "k": 45, "tile_m": 1, "tile_n": 4, "w": 22, "v": 4, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3351.08, "source": "autotuned"}, {"m": 26, "n": 5, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 7, "minblocks": 7, "algorithm": "medium", "perf": 1918.83, "source": "autotuned"}, {"m": 26, "n": 5, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 26, "algorithm": "medium", "perf": 2191.57, "source": "autotuned"}, {"m": 26, "n": 5, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 2490.31, "source": "autotuned"}, {"m": 26, "n": 5, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 6, "minblocks": 26, "algorithm": "medium", "perf": 2362.49, "source": "autotuned"}, {"m": 26, "n": 5, "k": 8, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 7, "minblocks": 21, "algorithm": "medium", "perf": 2555.56, "source": "autotuned"}, {"m": 26, "n": 5, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2695.45, "source": "autotuned"}, {"m": 26, "n": 5, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 2858.73, "source": "autotuned"}, {"m": 26, "n": 5, "k": 13, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 3108.4, "source": "autotuned"}, {"m": 26, "n": 5, "k": 15, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 3200.34, "source": "autotuned"}, {"m": 26, "n": 5, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 3331.71, "source": "autotuned"}, {"m": 26, "n": 5, "k": 22, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 10, "algorithm": "medium", "perf": 3349.99, "source": "autotuned"}, {"m": 26, "n": 5, "k": 23, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 9, "algorithm": "medium", "perf": 3453.73, "source": "autotuned"}, {"m": 26, "n": 5, "k": 25, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 3491.96, "source": "autotuned"}, {"m": 26, "n": 5, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 11, "minblocks": 8, "algorithm": "medium", "perf": 3520.71, "source": "autotuned"}, {"m": 26, "n": 5, "k": 45, "tile_m": 2, "tile_n": 5, "w": 16, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3645.24, "source": "autotuned"}, {"m": 26, "n": 6, "k": 4, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 8, "minblocks": 21, "algorithm": "medium", "perf": 2205.64, "source": "autotuned"}, {"m": 26, "n": 6, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 2553.47, "source": "autotuned"}, {"m": 26, "n": 6, "k": 6, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 2578.23, "source": "autotuned"}, {"m": 26, "n": 6, "k": 7, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 2841.28, "source": "autotuned"}, {"m": 26, "n": 6, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 9, "minblocks": 15, "algorithm": "medium", "perf": 2945.01, "source": "autotuned"}, {"m": 26, "n": 6, "k": 9, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 9, "minblocks": 15, "algorithm": "medium", "perf": 3111.47, "source": "autotuned"}, {"m": 26, "n": 6, "k": 10, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 3306.99, "source": "autotuned"}, {"m": 26, "n": 6, "k": 13, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 3666.21, "source": "autotuned"}, {"m": 26, "n": 6, "k": 26, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 12, "minblocks": 2, "algorithm": "medium", "perf": 3913.76, "source": "autotuned"}, {"m": 26, "n": 6, "k": 45, "tile_m": 1, "tile_n": 6, "w": 16, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4534.35, "source": "autotuned"}, {"m": 26, "n": 7, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 8, "minblocks": 11, "algorithm": "medium", "perf": 2402.92, "source": "autotuned"}, {"m": 26, "n": 7, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 6, "minblocks": 23, "algorithm": "medium", "perf": 2439.94, "source": "autotuned"}, {"m": 26, "n": 7, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 6, "minblocks": 27, "algorithm": "medium", "perf": 2787.88, "source": "autotuned"}, {"m": 26, "n": 7, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2965.25, "source": "autotuned"}, {"m": 26, "n": 7, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 3217.8, "source": "autotuned"}, {"m": 26, "n": 7, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 3359.57, "source": "autotuned"}, {"m": 26, "n": 7, "k": 10, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3516.87, "source": "autotuned"}, {"m": 26, "n": 7, "k": 13, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 3909.38, "source": "autotuned"}, {"m": 26, "n": 7, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 11, "minblocks": 9, "algorithm": "medium", "perf": 4231.36, "source": "autotuned"}, {"m": 26, "n": 7, "k": 45, "tile_m": 1, "tile_n": 7, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4637.3, "source": "autotuned"}, {"m": 26, "n": 8, "k": 4, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 2567.12, "source": "autotuned"}, {"m": 26, "n": 8, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 2743.71, "source": "autotuned"}, {"m": 26, "n": 8, "k": 6, "tile_m": 1, "tile_n": 8, "threads": 64, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 3059.03, "source": "autotuned"}, {"m": 26, "n": 8, "k": 7, "tile_m": 1, "tile_n": 8, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3333.8, "source": "autotuned"}, {"m": 26, "n": 8, "k": 8, "tile_m": 1, "tile_n": 8, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 3590.64, "source": "autotuned"}, {"m": 26, "n": 8, "k": 9, "tile_m": 1, "tile_n": 8, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 3720.37, "source": "autotuned"}, {"m": 26, "n": 8, "k": 10, "tile_m": 1, "tile_n": 8, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 3978.3, "source": "autotuned"}, {"m": 26, "n": 8, "k": 13, "tile_m": 1, "tile_n": 8, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4237.91, "source": "autotuned"}, {"m": 26, "n": 8, "k": 26, "tile_m": 1, "tile_n": 8, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4755.07, "source": "autotuned"}, {"m": 26, "n": 8, "k": 45, "tile_m": 1, "tile_n": 8, "w": 16, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5279.84, "source": "autotuned"}, {"m": 26, "n": 9, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 2679.83, "source": "autotuned"}, {"m": 26, "n": 9, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 32, "grouping": 6, "minblocks": 24, "algorithm": "medium", "perf": 2855.25, "source": "autotuned"}, {"m": 26, "n": 9, "k": 6, "tile_m": 1, "tile_n": 9, "threads": 32, "grouping": 6, "minblocks": 26, "algorithm": "medium", "perf": 3203.74, "source": "autotuned"}, {"m": 26, "n": 9, "k": 7, "tile_m": 1, "tile_n": 9, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 3472.47, "source": "autotuned"}, {"m": 26, "n": 9, "k": 8, "tile_m": 1, "tile_n": 9, "threads": 32, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 3663.35, "source": "autotuned"}, {"m": 26, "n": 9, "k": 9, "tile_m": 1, "tile_n": 9, "threads": 32, "grouping": 8, "minblocks": 18, "algorithm": "medium", "perf": 3759.2, "source": "autotuned"}, {"m": 26, "n": 9, "k": 10, "tile_m": 1, "tile_n": 9, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 4055.32, "source": "autotuned"}, {"m": 26, "n": 9, "k": 13, "tile_m": 1, "tile_n": 9, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 3567.35, "source": "autotuned"}, {"m": 26, "n": 9, "k": 15, "tile_m": 3, "tile_n": 3, "w": 6, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4470.84, "source": "autotuned"}, {"m": 26, "n": 9, "k": 16, "tile_m": 1, "tile_n": 9, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 4496.0, "source": "autotuned"}, {"m": 26, "n": 9, "k": 22, "tile_m": 3, "tile_n": 3, "w": 8, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4730.2, "source": "autotuned"}, {"m": 26, "n": 9, "k": 23, "tile_m": 3, "tile_n": 3, "w": 8, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4767.13, "source": "autotuned"}, {"m": 26, "n": 9, "k": 25, "tile_m": 3, "tile_n": 3, "w": 10, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4863.02, "source": "autotuned"}, {"m": 26, "n": 9, "k": 26, "tile_m": 3, "tile_n": 3, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4945.21, "source": "autotuned"}, {"m": 26, "n": 9, "k": 45, "tile_m": 3, "tile_n": 3, "w": 16, "v": 8, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5426.73, "source": "autotuned"}, {"m": 26, "n": 10, "k": 4, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3006.0, "source": "autotuned"}, {"m": 26, "n": 10, "k": 5, "tile_m": 1, "tile_n": 10, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 2600.81, "source": "autotuned"}, {"m": 26, "n": 10, "k": 6, "tile_m": 1, "tile_n": 10, "threads": 32, "grouping": 7, "minblocks": 22, "algorithm": "medium", "perf": 3505.73, "source": "autotuned"}, {"m": 26, "n": 10, "k": 7, "tile_m": 1, "tile_n": 10, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 3778.42, "source": "autotuned"}, {"m": 26, "n": 10, "k": 8, "tile_m": 1, "tile_n": 10, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4120.1, "source": "autotuned"}, {"m": 26, "n": 10, "k": 9, "tile_m": 1, "tile_n": 10, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 4287.05, "source": "autotuned"}, {"m": 26, "n": 10, "k": 10, "tile_m": 1, "tile_n": 10, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 4395.12, "source": "autotuned"}, {"m": 26, "n": 10, "k": 13, "tile_m": 5, "tile_n": 2, "w": 6, "v": 10, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4766.53, "source": "autotuned"}, {"m": 26, "n": 10, "k": 26, "tile_m": 5, "tile_n": 2, "w": 10, "v": 10, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5408.25, "source": "autotuned"}, {"m": 26, "n": 10, "k": 45, "tile_m": 1, "tile_n": 10, "w": 16, "v": 10, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5994.7, "source": "autotuned"}, {"m": 26, "n": 13, "k": 4, "tile_m": 7, "tile_n": 2, "threads": 128, "grouping": 14, "minblocks": 9, "algorithm": "medium", "perf": 3374.49, "source": "autotuned"}, {"m": 26, "n": 13, "k": 5, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 3606.73, "source": "autotuned"}, {"m": 26, "n": 13, "k": 6, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 20, "algorithm": "medium", "perf": 4033.07, "source": "autotuned"}, {"m": 26, "n": 13, "k": 7, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4386.1, "source": "autotuned"}, {"m": 26, "n": 13, "k": 8, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 4647.5, "source": "autotuned"}, {"m": 26, "n": 13, "k": 9, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4788.28, "source": "autotuned"}, {"m": 26, "n": 13, "k": 10, "tile_m": 5, "tile_n": 3, "w": 4, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4994.17, "source": "autotuned"}, {"m": 26, "n": 13, "k": 13, "tile_m": 5, "tile_n": 3, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5519.51, "source": "autotuned"}, {"m": 26, "n": 13, "k": 15, "tile_m": 5, "tile_n": 3, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5637.18, "source": "autotuned"}, {"m": 26, "n": 13, "k": 16, "tile_m": 5, "tile_n": 3, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5686.43, "source": "autotuned"}, {"m": 26, "n": 13, "k": 22, "tile_m": 5, "tile_n": 3, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6087.01, "source": "autotuned"}, {"m": 26, "n": 13, "k": 23, "tile_m": 5, "tile_n": 3, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6089.61, "source": "autotuned"}, {"m": 26, "n": 13, "k": 25, "tile_m": 5, "tile_n": 3, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6233.51, "source": "autotuned"}, {"m": 26, "n": 13, "k": 26, "tile_m": 5, "tile_n": 3, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6388.62, "source": "autotuned"}, {"m": 26, "n": 13, "k": 45, "tile_m": 5, "tile_n": 3, "w": 12, "v": 10, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 6989.93, "source": "autotuned"}, {"m": 26, "n": 15, "k": 4, "tile_m": 7, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 3850.68, "source": "autotuned"}, {"m": 26, "n": 15, "k": 5, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 4042.71, "source": "autotuned"}, {"m": 26, "n": 15, "k": 9, "tile_m": 5, "tile_n": 3, "w": 4, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5432.33, "source": "autotuned"}, {"m": 26, "n": 15, "k": 13, "tile_m": 5, "tile_n": 3, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6227.9, "source": "autotuned"}, {"m": 26, "n": 15, "k": 15, "tile_m": 5, "tile_n": 3, "w": 6, "v": 14, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6326.3, "source": "autotuned"}, {"m": 26, "n": 15, "k": 16, "tile_m": 5, "tile_n": 3, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6404.19, "source": "autotuned"}, {"m": 26, "n": 15, "k": 22, "tile_m": 5, "tile_n": 3, "w": 8, "v": 14, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6866.15, "source": "autotuned"}, {"m": 26, "n": 15, "k": 25, "tile_m": 5, "tile_n": 3, "w": 10, "v": 10, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7101.73, "source": "autotuned"}, {"m": 26, "n": 15, "k": 26, "tile_m": 5, "tile_n": 3, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7124.68, "source": "autotuned"}, {"m": 26, "n": 15, "k": 45, "tile_m": 5, "tile_n": 3, "w": 18, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7989.45, "source": "autotuned"}, {"m": 26, "n": 16, "k": 4, "tile_m": 7, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4221.61, "source": "autotuned"}, {"m": 26, "n": 16, "k": 5, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 4292.95, "source": "autotuned"}, {"m": 26, "n": 16, "k": 9, "tile_m": 7, "tile_n": 2, "w": 4, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5960.48, "source": "autotuned"}, {"m": 26, "n": 16, "k": 13, "tile_m": 7, "tile_n": 2, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 6586.47, "source": "autotuned"}, {"m": 26, "n": 16, "k": 15, "tile_m": 7, "tile_n": 2, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6616.91, "source": "autotuned"}, {"m": 26, "n": 16, "k": 16, "tile_m": 7, "tile_n": 2, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6720.81, "source": "autotuned"}, {"m": 26, "n": 16, "k": 22, "tile_m": 5, "tile_n": 4, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7182.16, "source": "autotuned"}, {"m": 26, "n": 16, "k": 25, "tile_m": 5, "tile_n": 4, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7327.95, "source": "autotuned"}, {"m": 26, "n": 16, "k": 26, "tile_m": 5, "tile_n": 4, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7477.11, "source": "autotuned"}, {"m": 26, "n": 16, "k": 45, "tile_m": 5, "tile_n": 4, "w": 12, "v": 16, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8036.85, "source": "autotuned"}, {"m": 26, "n": 22, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 4593.97, "source": "autotuned"}, {"m": 26, "n": 22, "k": 5, "tile_m": 1, "tile_n": 8, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 4808.22, "source": "autotuned"}, {"m": 26, "n": 22, "k": 9, "tile_m": 7, "tile_n": 3, "w": 4, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7063.94, "source": "autotuned"}, {"m": 26, "n": 22, "k": 13, "tile_m": 7, "tile_n": 3, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7455.72, "source": "autotuned"}, {"m": 26, "n": 22, "k": 15, "tile_m": 7, "tile_n": 3, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7622.27, "source": "autotuned"}, {"m": 26, "n": 22, "k": 16, "tile_m": 7, "tile_n": 3, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7963.06, "source": "autotuned"}, {"m": 26, "n": 22, "k": 22, "tile_m": 7, "tile_n": 3, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8578.78, "source": "autotuned"}, {"m": 26, "n": 22, "k": 23, "tile_m": 7, "tile_n": 3, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8573.36, "source": "autotuned"}, {"m": 26, "n": 22, "k": 25, "tile_m": 7, "tile_n": 3, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8641.44, "source": "autotuned"}, {"m": 26, "n": 22, "k": 26, "tile_m": 7, "tile_n": 3, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8823.63, "source": "autotuned"}, {"m": 26, "n": 22, "k": 45, "tile_m": 7, "tile_n": 3, "w": 18, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9432.67, "source": "autotuned"}, {"m": 26, "n": 23, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 4766.43, "source": "autotuned"}, {"m": 26, "n": 23, "k": 5, "tile_m": 1, "tile_n": 8, "threads": 160, "grouping": 21, "minblocks": 6, "algorithm": "medium", "perf": 4855.41, "source": "autotuned"}, {"m": 26, "n": 23, "k": 9, "tile_m": 7, "tile_n": 3, "w": 4, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6869.86, "source": "autotuned"}, {"m": 26, "n": 23, "k": 13, "tile_m": 7, "tile_n": 3, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7636.43, "source": "autotuned"}, {"m": 26, "n": 23, "k": 22, "tile_m": 7, "tile_n": 3, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 8781.21, "source": "autotuned"}, {"m": 26, "n": 23, "k": 23, "tile_m": 7, "tile_n": 3, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 8766.97, "source": "autotuned"}, {"m": 26, "n": 23, "k": 26, "tile_m": 7, "tile_n": 3, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8983.17, "source": "autotuned"}, {"m": 26, "n": 25, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 4991.96, "source": "autotuned"}, {"m": 26, "n": 25, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 160, "grouping": 18, "minblocks": 7, "algorithm": "medium", "perf": 5204.4, "source": "autotuned"}, {"m": 26, "n": 25, "k": 9, "tile_m": 7, "tile_n": 4, "w": 4, "v": 20, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 6836.25, "source": "autotuned"}, {"m": 26, "n": 25, "k": 13, "tile_m": 5, "tile_n": 5, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7860.48, "source": "autotuned"}, {"m": 26, "n": 25, "k": 15, "tile_m": 5, "tile_n": 5, "w": 6, "v": 20, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8237.37, "source": "autotuned"}, {"m": 26, "n": 25, "k": 16, "tile_m": 5, "tile_n": 5, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 8387.46, "source": "autotuned"}, {"m": 26, "n": 25, "k": 22, "tile_m": 5, "tile_n": 5, "w": 8, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9169.53, "source": "autotuned"}, {"m": 26, "n": 25, "k": 25, "tile_m": 5, "tile_n": 5, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9325.92, "source": "autotuned"}, {"m": 26, "n": 25, "k": 26, "tile_m": 5, "tile_n": 5, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9481.37, "source": "autotuned"}, {"m": 26, "n": 25, "k": 45, "tile_m": 5, "tile_n": 5, "w": 16, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 10200.7, "source": "autotuned"}, {"m": 26, "n": 26, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 5184.18, "source": "autotuned"}, {"m": 26, "n": 26, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 160, "grouping": 21, "minblocks": 6, "algorithm": "medium", "perf": 5349.77, "source": "autotuned"}, {"m": 26, "n": 26, "k": 6, "tile_m": 3, "tile_n": 4, "threads": 160, "grouping": 18, "minblocks": 7, "algorithm": "medium", "perf": 5829.41, "source": "autotuned"}, {"m": 26, "n": 26, "k": 7, "tile_m": 3, "tile_n": 4, "threads": 192, "grouping": 21, "minblocks": 6, "algorithm": "medium", "perf": 6024.79, "source": "autotuned"}, {"m": 26, "n": 26, "k": 8, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 6062.41, "source": "autotuned"}, {"m": 26, "n": 26, "k": 9, "tile_m": 7, "tile_n": 4, "w": 4, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7265.3, "source": "autotuned"}, {"m": 26, "n": 26, "k": 10, "tile_m": 7, "tile_n": 4, "w": 4, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7482.97, "source": "autotuned"}, {"m": 26, "n": 26, "k": 13, "tile_m": 7, "tile_n": 4, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7919.59, "source": "autotuned"}, {"m": 26, "n": 26, "k": 15, "tile_m": 7, "tile_n": 4, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8348.29, "source": "autotuned"}, {"m": 26, "n": 26, "k": 16, "tile_m": 7, "tile_n": 4, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8516.96, "source": "autotuned"}, {"m": 26, "n": 26, "k": 22, "tile_m": 7, "tile_n": 4, "w": 8, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 9160.5, "source": "autotuned"}, {"m": 26, "n": 26, "k": 23, "tile_m": 7, "tile_n": 4, "w": 8, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9248.48, "source": "autotuned"}, {"m": 26, "n": 26, "k": 25, "tile_m": 5, "tile_n": 6, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9179.34, "source": "autotuned"}, {"m": 26, "n": 26, "k": 26, "tile_m": 5, "tile_n": 6, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9322.11, "source": "autotuned"}, {"m": 26, "n": 26, "k": 45, "tile_m": 5, "tile_n": 6, "w": 16, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 10093.8, "source": "autotuned"}, {"m": 26, "n": 45, "k": 4, "tile_m": 5, "tile_n": 3, "threads": 224, "grouping": 25, "minblocks": 5, "algorithm": "medium", "perf": 5978.88, "source": "autotuned"}, {"m": 26, "n": 45, "k": 5, "tile_m": 5, "tile_n": 3, "threads": 256, "grouping": 31, "minblocks": 4, "algorithm": "medium", "perf": 6251.95, "source": "autotuned"}, {"m": 26, "n": 45, "k": 6, "tile_m": 7, "tile_n": 2, "threads": 160, "grouping": 21, "minblocks": 6, "algorithm": "medium", "perf": 6383.81, "source": "autotuned"}, {"m": 26, "n": 45, "k": 7, "tile_m": 3, "tile_n": 4, "threads": 320, "grouping": 31, "minblocks": 4, "algorithm": "medium", "perf": 6152.11, "source": "autotuned"}, {"m": 26, "n": 45, "k": 8, "tile_m": 5, "tile_n": 3, "threads": 96, "grouping": 21, "minblocks": 6, "algorithm": "medium", "perf": 6322.03, "source": "autotuned"}, {"m": 26, "n": 45, "k": 9, "tile_m": 7, "tile_n": 3, "w": 4, "v": 36, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8146.4, "source": "autotuned"}, {"m": 26, "n": 45, "k": 10, "tile_m": 7, "tile_n": 3, "w": 4, "v": 36, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8345.84, "source": "autotuned"}, {"m": 26, "n": 45, "k": 13, "tile_m": 7, "tile_n": 6, "w": 6, "v": 42, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 10111.7, "source": "autotuned"}, {"m": 26, "n": 45, "k": 15, "tile_m": 7, "tile_n": 6, "w": 6, "v": 44, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 10573.5, "source": "autotuned"}, {"m": 26, "n": 45, "k": 16, "tile_m": 7, "tile_n": 6, "w": 6, "v": 44, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 10813.8, "source": "autotuned"}, {"m": 26, "n": 45, "k": 22, "tile_m": 7, "tile_n": 6, "w": 8, "v": 44, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11829.1, "source": "autotuned"}, {"m": 26, "n": 45, "k": 25, "tile_m": 7, "tile_n": 6, "w": 10, "v": 44, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 11874.7, "source": "autotuned"}, {"m": 26, "n": 45, "k": 26, "tile_m": 7, "tile_n": 6, "w": 10, "v": 44, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 12030.6, "source": "autotuned"}, {"m": 26, "n": 45, "k": 45, "tile_m": 7, "tile_n": 6, "w": 12, "v": 44, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 12649.1, "source": "autotuned"}, {"m": 27, "n": 27, "k": 27, "tile_m": 5, "tile_n": 6, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9928.97, "source": "autotuned"}, {"m": 28, "n": 4, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 1860.48, "source": "autotuned"}, {"m": 28, "n": 4, "k": 13, "tile_m": 1, "tile_n": 4, "w": 6, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 2827.38, "source": "autotuned"}, {"m": 28, "n": 4, "k": 28, "tile_m": 1, "tile_n": 4, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3118.27, "source": "autotuned"}, {"m": 28, "n": 5, "k": 25, "tile_m": 3, "tile_n": 2, "w": 10, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3476.76, "source": "autotuned"}, {"m": 28, "n": 28, "k": 28, "tile_m": 5, "tile_n": 6, "w": 10, "v": 28, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 10944.8, "source": "autotuned"}, {"m": 29, "n": 14, "k": 14, "tile_m": 3, "tile_n": 5, "w": 6, "v": 14, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6652.62, "source": "autotuned"}, {"m": 29, "n": 14, "k": 16, "tile_m": 3, "tile_n": 5, "w": 6, "v": 14, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6752.37, "source": "autotuned"}, {"m": 29, "n": 14, "k": 29, "tile_m": 3, "tile_n": 5, "w": 10, "v": 14, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7899.18, "source": "autotuned"}, {"m": 29, "n": 14, "k": 32, "tile_m": 3, "tile_n": 5, "w": 12, "v": 14, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8052.08, "source": "autotuned"}, {"m": 29, "n": 16, "k": 14, "tile_m": 3, "tile_n": 6, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7190.74, "source": "autotuned"}, {"m": 29, "n": 16, "k": 16, "tile_m": 3, "tile_n": 6, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7421.37, "source": "autotuned"}, {"m": 29, "n": 29, "k": 14, "tile_m": 5, "tile_n": 6, "w": 6, "v": 28, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7918.65, "source": "autotuned"}, {"m": 29, "n": 29, "k": 16, "tile_m": 5, "tile_n": 6, "w": 6, "v": 28, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 9941.07, "source": "autotuned"}, {"m": 29, "n": 29, "k": 29, "tile_m": 5, "tile_n": 6, "w": 10, "v": 28, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 11386.1, "source": "autotuned"}, {"m": 29, "n": 29, "k": 32, "tile_m": 5, "tile_n": 6, "w": 12, "v": 28, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 11597.0, "source": "autotuned"}, {"m": 29, "n": 32, "k": 14, "tile_m": 9, "tile_n": 4, "w": 6, "v": 32, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9688.91, "source": "autotuned"}, {"m": 29, "n": 32, "k": 29, "tile_m": 5, "tile_n": 7, "w": 10, "v": 32, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 11397.3, "source": "autotuned"}, {"m": 29, "n": 32, "k": 32, "tile_m": 3, "tile_n": 11, "w": 12, "v": 32, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11453.0, "source": "autotuned"}, {"m": 30, "n": 30, "k": 30, "tile_m": 5, "tile_n": 6, "w": 12, "v": 30, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 12096.9, "source": "autotuned"}, {"m": 30, "n": 30, "k": 76, "tile_m": 5, "tile_n": 6, "w": 20, "v": 30, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 13112.6, "source": "autotuned"}, {"m": 30, "n": 76, "k": 30, "tile_m": 5, "tile_n": 8, "w": 10, "v": 72, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 13174.0, "source": "autotuned"}, {"m": 30, "n": 76, "k": 76, "tile_m": 5, "tile_n": 8, "w": 16, "v": 74, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 14289.3, "source": "autotuned"}, {"m": 31, "n": 31, "k": 31, "tile_m": 9, "tile_n": 4, "w": 8, "v": 30, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8885.01, "source": "autotuned"}, {"m": 32, "n": 4, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 6, "minblocks": 15, "algorithm": "small", "perf": 1900.11, "source": "autotuned"}, {"m": 32, "n": 4, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 2072.2, "source": "autotuned"}, {"m": 32, "n": 4, "k": 6, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2313.11, "source": "autotuned"}, {"m": 32, "n": 4, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2495.53, "source": "autotuned"}, {"m": 32, "n": 4, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 2689.09, "source": "autotuned"}, {"m": 32, "n": 4, "k": 9, "tile_m": 1, "tile_n": 4, "w": 4, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 2723.61, "source": "autotuned"}, {"m": 32, "n": 4, "k": 10, "tile_m": 1, "tile_n": 4, "w": 4, "v": 4, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3009.56, "source": "autotuned"}, {"m": 32, "n": 4, "k": 13, "tile_m": 1, "tile_n": 4, "w": 6, "v": 4, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 3217.8, "source": "autotuned"}, {"m": 32, "n": 4, "k": 22, "tile_m": 1, "tile_n": 4, "w": 8, "v": 4, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3249.93, "source": "autotuned"}, {"m": 32, "n": 4, "k": 25, "tile_m": 1, "tile_n": 4, "w": 12, "v": 4, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3329.75, "source": "autotuned"}, {"m": 32, "n": 4, "k": 26, "tile_m": 1, "tile_n": 4, "w": 10, "v": 4, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3352.51, "source": "autotuned"}, {"m": 32, "n": 4, "k": 28, "tile_m": 2, "tile_n": 2, "w": 12, "v": 4, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3482.95, "source": "autotuned"}, {"m": 32, "n": 4, "k": 32, "tile_m": 2, "tile_n": 2, "w": 12, "v": 4, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3593.05, "source": "autotuned"}, {"m": 32, "n": 5, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2115.08, "source": "autotuned"}, {"m": 32, "n": 5, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2421.09, "source": "autotuned"}, {"m": 32, "n": 5, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2712.12, "source": "autotuned"}, {"m": 32, "n": 5, "k": 7, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2741.07, "source": "autotuned"}, {"m": 32, "n": 5, "k": 8, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2962.36, "source": "autotuned"}, {"m": 32, "n": 5, "k": 9, "tile_m": 2, "tile_n": 3, "w": 4, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3204.56, "source": "autotuned"}, {"m": 32, "n": 5, "k": 10, "tile_m": 2, "tile_n": 3, "w": 4, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3468.58, "source": "autotuned"}, {"m": 32, "n": 5, "k": 13, "tile_m": 1, "tile_n": 5, "w": 6, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3729.88, "source": "autotuned"}, {"m": 32, "n": 5, "k": 16, "tile_m": 1, "tile_n": 5, "w": 6, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3774.21, "source": "autotuned"}, {"m": 32, "n": 5, "k": 22, "tile_m": 1, "tile_n": 5, "w": 8, "v": 4, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3830.06, "source": "autotuned"}, {"m": 32, "n": 5, "k": 26, "tile_m": 1, "tile_n": 5, "w": 10, "v": 4, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3983.38, "source": "autotuned"}, {"m": 32, "n": 5, "k": 32, "tile_m": 1, "tile_n": 5, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4262.08, "source": "autotuned"}, {"m": 32, "n": 5, "k": 45, "tile_m": 1, "tile_n": 5, "w": 20, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4405.05, "source": "autotuned"}, {"m": 32, "n": 6, "k": 4, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 2448.57, "source": "autotuned"}, {"m": 32, "n": 6, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2821.86, "source": "autotuned"}, {"m": 32, "n": 6, "k": 6, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 2900.48, "source": "autotuned"}, {"m": 32, "n": 6, "k": 7, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 3210.34, "source": "autotuned"}, {"m": 32, "n": 6, "k": 8, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 3457.62, "source": "autotuned"}, {"m": 32, "n": 6, "k": 9, "tile_m": 2, "tile_n": 3, "w": 4, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3880.62, "source": "autotuned"}, {"m": 32, "n": 6, "k": 10, "tile_m": 2, "tile_n": 3, "w": 4, "v": 6, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4188.88, "source": "autotuned"}, {"m": 32, "n": 6, "k": 13, "tile_m": 2, "tile_n": 3, "w": 6, "v": 6, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4487.38, "source": "autotuned"}, {"m": 32, "n": 6, "k": 22, "tile_m": 2, "tile_n": 3, "w": 10, "v": 6, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4409.03, "source": "autotuned"}, {"m": 32, "n": 6, "k": 32, "tile_m": 2, "tile_n": 3, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4886.76, "source": "autotuned"}, {"m": 32, "n": 7, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2662.02, "source": "autotuned"}, {"m": 32, "n": 7, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2809.82, "source": "autotuned"}, {"m": 32, "n": 7, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 3212.05, "source": "autotuned"}, {"m": 32, "n": 7, "k": 7, "tile_m": 2, "tile_n": 4, "threads": 64, "grouping": 5, "minblocks": 16, "algorithm": "medium", "perf": 3422.52, "source": "autotuned"}, {"m": 32, "n": 7, "k": 8, "tile_m": 2, "tile_n": 4, "threads": 64, "grouping": 5, "minblocks": 15, "algorithm": "medium", "perf": 3679.56, "source": "autotuned"}, {"m": 32, "n": 7, "k": 9, "tile_m": 2, "tile_n": 4, "w": 4, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4074.0, "source": "autotuned"}, {"m": 32, "n": 7, "k": 10, "tile_m": 2, "tile_n": 4, "w": 4, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4467.11, "source": "autotuned"}, {"m": 32, "n": 7, "k": 13, "tile_m": 2, "tile_n": 4, "w": 6, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4767.45, "source": "autotuned"}, {"m": 32, "n": 7, "k": 22, "tile_m": 1, "tile_n": 7, "w": 8, "v": 4, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 4895.27, "source": "autotuned"}, {"m": 32, "n": 7, "k": 26, "tile_m": 1, "tile_n": 7, "w": 10, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5132.88, "source": "autotuned"}, {"m": 32, "n": 7, "k": 32, "tile_m": 2, "tile_n": 4, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5491.63, "source": "autotuned"}, {"m": 32, "n": 7, "k": 45, "tile_m": 2, "tile_n": 4, "w": 18, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5734.49, "source": "autotuned"}, {"m": 32, "n": 8, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 5, "minblocks": 23, "algorithm": "medium", "perf": 2704.48, "source": "autotuned"}, {"m": 32, "n": 8, "k": 5, "tile_m": 2, "tile_n": 4, "threads": 64, "grouping": 5, "minblocks": 16, "algorithm": "medium", "perf": 3133.97, "source": "autotuned"}, {"m": 32, "n": 8, "k": 6, "tile_m": 2, "tile_n": 4, "threads": 64, "grouping": 5, "minblocks": 13, "algorithm": "medium", "perf": 3465.42, "source": "autotuned"}, {"m": 32, "n": 8, "k": 7, "tile_m": 2, "tile_n": 4, "threads": 64, "grouping": 5, "minblocks": 16, "algorithm": "medium", "perf": 3874.41, "source": "autotuned"}, {"m": 32, "n": 8, "k": 8, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 4193.74, "source": "autotuned"}, {"m": 32, "n": 8, "k": 9, "tile_m": 2, "tile_n": 4, "w": 4, "v": 8, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 4801.5, "source": "autotuned"}, {"m": 32, "n": 8, "k": 10, "tile_m": 2, "tile_n": 4, "w": 4, "v": 8, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5131.86, "source": "autotuned"}, {"m": 32, "n": 8, "k": 13, "tile_m": 2, "tile_n": 4, "w": 6, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5427.78, "source": "autotuned"}, {"m": 32, "n": 8, "k": 22, "tile_m": 2, "tile_n": 4, "w": 8, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5646.94, "source": "autotuned"}, {"m": 32, "n": 8, "k": 32, "tile_m": 2, "tile_n": 4, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6200.17, "source": "autotuned"}, {"m": 32, "n": 9, "k": 4, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2825.1, "source": "autotuned"}, {"m": 32, "n": 9, "k": 5, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 3364.55, "source": "autotuned"}, {"m": 32, "n": 9, "k": 6, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 3731.05, "source": "autotuned"}, {"m": 32, "n": 9, "k": 7, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 3451.16, "source": "autotuned"}, {"m": 32, "n": 9, "k": 8, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 4, "minblocks": 19, "algorithm": "medium", "perf": 4004.03, "source": "autotuned"}, {"m": 32, "n": 9, "k": 9, "tile_m": 2, "tile_n": 3, "w": 4, "v": 8, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4389.01, "source": "autotuned"}, {"m": 32, "n": 9, "k": 10, "tile_m": 2, "tile_n": 3, "w": 4, "v": 8, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4641.0, "source": "autotuned"}, {"m": 32, "n": 9, "k": 12, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 4, "minblocks": 15, "algorithm": "medium", "perf": 4952.84, "source": "autotuned"}, {"m": 32, "n": 9, "k": 13, "tile_m": 2, "tile_n": 5, "w": 6, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5475.39, "source": "autotuned"}, {"m": 32, "n": 9, "k": 22, "tile_m": 2, "tile_n": 5, "w": 8, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5866.69, "source": "autotuned"}, {"m": 32, "n": 9, "k": 25, "tile_m": 2, "tile_n": 5, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6122.63, "source": "autotuned"}, {"m": 32, "n": 9, "k": 26, "tile_m": 2, "tile_n": 5, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6252.37, "source": "autotuned"}, {"m": 32, "n": 9, "k": 32, "tile_m": 2, "tile_n": 5, "w": 12, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6486.08, "source": "autotuned"}, {"m": 32, "n": 9, "k": 45, "tile_m": 2, "tile_n": 5, "w": 16, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6836.38, "source": "autotuned"}, {"m": 32, "n": 10, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 5, "minblocks": 18, "algorithm": "medium", "perf": 3129.71, "source": "autotuned"}, {"m": 32, "n": 10, "k": 5, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 3089.77, "source": "autotuned"}, {"m": 32, "n": 10, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 5, "minblocks": 15, "algorithm": "medium", "perf": 4005.42, "source": "autotuned"}, {"m": 32, "n": 10, "k": 7, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 4154.06, "source": "autotuned"}, {"m": 32, "n": 10, "k": 8, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 5, "minblocks": 13, "algorithm": "medium", "perf": 4384.93, "source": "autotuned"}, {"m": 32, "n": 10, "k": 9, "tile_m": 2, "tile_n": 4, "w": 4, "v": 10, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4728.6, "source": "autotuned"}, {"m": 32, "n": 10, "k": 10, "tile_m": 2, "tile_n": 4, "w": 4, "v": 10, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4970.5, "source": "autotuned"}, {"m": 32, "n": 10, "k": 13, "tile_m": 2, "tile_n": 5, "w": 6, "v": 10, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6063.09, "source": "autotuned"}, {"m": 32, "n": 10, "k": 22, "tile_m": 2, "tile_n": 5, "w": 8, "v": 10, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 6444.97, "source": "autotuned"}, {"m": 32, "n": 10, "k": 32, "tile_m": 2, "tile_n": 5, "w": 12, "v": 10, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7168.09, "source": "autotuned"}, {"m": 32, "n": 11, "k": 11, "tile_m": 2, "tile_n": 6, "threads": 32, "grouping": 4, "minblocks": 15, "algorithm": "medium", "perf": 5452.67, "source": "autotuned"}, {"m": 32, "n": 11, "k": 12, "tile_m": 2, "tile_n": 6, "threads": 32, "grouping": 4, "minblocks": 14, "algorithm": "medium", "perf": 5679.19, "source": "autotuned"}, {"m": 32, "n": 11, "k": 20, "tile_m": 2, "tile_n": 6, "w": 8, "v": 10, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 6691.99, "source": "autotuned"}, {"m": 32, "n": 11, "k": 32, "tile_m": 2, "tile_n": 6, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7543.53, "source": "autotuned"}, {"m": 32, "n": 12, "k": 11, "tile_m": 2, "tile_n": 4, "w": 4, "v": 12, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6033.3, "source": "autotuned"}, {"m": 32, "n": 12, "k": 20, "tile_m": 2, "tile_n": 6, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7304.98, "source": "autotuned"}, {"m": 32, "n": 12, "k": 26, "tile_m": 2, "tile_n": 6, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7764.02, "source": "autotuned"}, {"m": 32, "n": 12, "k": 32, "tile_m": 2, "tile_n": 6, "w": 12, "v": 12, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8220.13, "source": "autotuned"}, {"m": 32, "n": 13, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 5, "minblocks": 15, "algorithm": "medium", "perf": 3649.12, "source": "autotuned"}, {"m": 32, "n": 13, "k": 5, "tile_m": 2, "tile_n": 4, "threads": 192, "grouping": 24, "minblocks": 6, "algorithm": "medium", "perf": 4030.97, "source": "autotuned"}, {"m": 32, "n": 13, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 5, "minblocks": 13, "algorithm": "medium", "perf": 4322.68, "source": "autotuned"}, {"m": 32, "n": 13, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 5, "minblocks": 13, "algorithm": "medium", "perf": 4621.83, "source": "autotuned"}, {"m": 32, "n": 13, "k": 8, "tile_m": 2, "tile_n": 7, "threads": 32, "grouping": 4, "minblocks": 14, "algorithm": "medium", "perf": 5044.0, "source": "autotuned"}, {"m": 32, "n": 13, "k": 9, "tile_m": 2, "tile_n": 4, "w": 4, "v": 12, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5623.38, "source": "autotuned"}, {"m": 32, "n": 13, "k": 10, "tile_m": 2, "tile_n": 4, "w": 4, "v": 12, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5766.24, "source": "autotuned"}, {"m": 32, "n": 13, "k": 13, "tile_m": 2, "tile_n": 7, "threads": 32, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 6114.95, "source": "autotuned"}, {"m": 32, "n": 13, "k": 16, "tile_m": 2, "tile_n": 4, "w": 6, "v": 10, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6285.16, "source": "autotuned"}, {"m": 32, "n": 13, "k": 22, "tile_m": 2, "tile_n": 7, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7559.75, "source": "autotuned"}, {"m": 32, "n": 13, "k": 28, "tile_m": 2, "tile_n": 7, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8030.08, "source": "autotuned"}, {"m": 32, "n": 13, "k": 32, "tile_m": 2, "tile_n": 7, "w": 12, "v": 12, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8255.52, "source": "autotuned"}, {"m": 32, "n": 14, "k": 13, "tile_m": 2, "tile_n": 4, "w": 6, "v": 12, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6456.39, "source": "autotuned"}, {"m": 32, "n": 16, "k": 5, "tile_m": 2, "tile_n": 4, "threads": 192, "grouping": 32, "minblocks": 5, "algorithm": "medium", "perf": 4934.1, "source": "autotuned"}, {"m": 32, "n": 16, "k": 12, "tile_m": 2, "tile_n": 4, "w": 4, "v": 16, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7422.61, "source": "autotuned"}, {"m": 32, "n": 16, "k": 13, "tile_m": 2, "tile_n": 4, "w": 6, "v": 16, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7324.62, "source": "autotuned"}, {"m": 32, "n": 20, "k": 11, "tile_m": 6, "tile_n": 4, "w": 4, "v": 20, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7764.28, "source": "autotuned"}, {"m": 32, "n": 20, "k": 20, "tile_m": 6, "tile_n": 4, "w": 8, "v": 20, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 9163.17, "source": "autotuned"}, {"m": 32, "n": 22, "k": 4, "tile_m": 2, "tile_n": 6, "threads": 160, "grouping": 32, "minblocks": 5, "algorithm": "medium", "perf": 5391.16, "source": "autotuned"}, {"m": 32, "n": 22, "k": 5, "tile_m": 2, "tile_n": 6, "threads": 192, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 5888.13, "source": "autotuned"}, {"m": 32, "n": 22, "k": 6, "tile_m": 2, "tile_n": 4, "threads": 224, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 6117.74, "source": "autotuned"}, {"m": 32, "n": 22, "k": 7, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 6161.92, "source": "autotuned"}, {"m": 32, "n": 22, "k": 8, "tile_m": 2, "tile_n": 4, "threads": 288, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 6505.5, "source": "autotuned"}, {"m": 32, "n": 22, "k": 9, "tile_m": 9, "tile_n": 3, "w": 4, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7341.29, "source": "autotuned"}, {"m": 32, "n": 22, "k": 10, "tile_m": 9, "tile_n": 3, "w": 4, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7580.41, "source": "autotuned"}, {"m": 32, "n": 22, "k": 13, "tile_m": 2, "tile_n": 6, "w": 6, "v": 12, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8317.56, "source": "autotuned"}, {"m": 32, "n": 22, "k": 22, "tile_m": 2, "tile_n": 6, "w": 10, "v": 14, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 9267.9, "source": "autotuned"}, {"m": 32, "n": 22, "k": 32, "tile_m": 2, "tile_n": 11, "w": 12, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10616.4, "source": "autotuned"}, {"m": 32, "n": 24, "k": 5, "tile_m": 2, "tile_n": 6, "threads": 192, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 6394.89, "source": "autotuned"}, {"m": 32, "n": 24, "k": 13, "tile_m": 2, "tile_n": 6, "w": 6, "v": 16, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8933.02, "source": "autotuned"}, {"m": 32, "n": 24, "k": 24, "tile_m": 2, "tile_n": 6, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10199.8, "source": "autotuned"}, {"m": 32, "n": 24, "k": 26, "tile_m": 2, "tile_n": 6, "w": 12, "v": 24, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10483.3, "source": "autotuned"}, {"m": 32, "n": 24, "k": 32, "tile_m": 2, "tile_n": 6, "w": 12, "v": 22, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10766.6, "source": "autotuned"}, {"m": 32, "n": 25, "k": 5, "tile_m": 2, "tile_n": 7, "threads": 192, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 4877.59, "source": "autotuned"}, {"m": 32, "n": 25, "k": 7, "tile_m": 2, "tile_n": 5, "threads": 256, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 6375.28, "source": "autotuned"}, {"m": 32, "n": 25, "k": 11, "tile_m": 9, "tile_n": 4, "w": 4, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 7739.82, "source": "autotuned"}, {"m": 32, "n": 25, "k": 13, "tile_m": 6, "tile_n": 5, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8416.87, "source": "autotuned"}, {"m": 32, "n": 25, "k": 26, "tile_m": 6, "tile_n": 5, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 10411.9, "source": "autotuned"}, {"m": 32, "n": 25, "k": 32, "tile_m": 6, "tile_n": 5, "w": 8, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8724.05, "source": "autotuned"}, {"m": 32, "n": 25, "k": 45, "tile_m": 6, "tile_n": 5, "w": 20, "v": 16, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 11020.5, "source": "autotuned"}, {"m": 32, "n": 26, "k": 5, "tile_m": 2, "tile_n": 7, "threads": 192, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 6282.79, "source": "autotuned"}, {"m": 32, "n": 26, "k": 7, "tile_m": 2, "tile_n": 7, "threads": 256, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 6590.29, "source": "autotuned"}, {"m": 32, "n": 26, "k": 9, "tile_m": 9, "tile_n": 4, "w": 4, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 7614.71, "source": "autotuned"}, {"m": 32, "n": 26, "k": 12, "tile_m": 9, "tile_n": 4, "w": 4, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8175.0, "source": "autotuned"}, {"m": 32, "n": 26, "k": 24, "tile_m": 4, "tile_n": 7, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9952.29, "source": "autotuned"}, {"m": 32, "n": 26, "k": 28, "tile_m": 6, "tile_n": 6, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10167.2, "source": "autotuned"}, {"m": 32, "n": 26, "k": 32, "tile_m": 4, "tile_n": 7, "w": 12, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10457.7, "source": "autotuned"}, {"m": 32, "n": 26, "k": 45, "tile_m": 4, "tile_n": 7, "w": 16, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10720.9, "source": "autotuned"}, {"m": 32, "n": 28, "k": 4, "tile_m": 2, "tile_n": 7, "threads": 160, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 5978.52, "source": "autotuned"}, {"m": 32, "n": 28, "k": 13, "tile_m": 6, "tile_n": 6, "w": 6, "v": 28, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9058.03, "source": "autotuned"}, {"m": 32, "n": 28, "k": 25, "tile_m": 6, "tile_n": 6, "w": 10, "v": 28, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8707.38, "source": "autotuned"}, {"m": 32, "n": 28, "k": 26, "tile_m": 6, "tile_n": 6, "w": 10, "v": 28, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 10788.6, "source": "autotuned"}, {"m": 32, "n": 28, "k": 28, "tile_m": 6, "tile_n": 6, "w": 10, "v": 28, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 10947.7, "source": "autotuned"}, {"m": 32, "n": 28, "k": 32, "tile_m": 4, "tile_n": 7, "w": 12, "v": 24, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11232.8, "source": "autotuned"}, {"m": 32, "n": 28, "k": 45, "tile_m": 4, "tile_n": 7, "w": 12, "v": 18, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 11365.6, "source": "autotuned"}, {"m": 32, "n": 29, "k": 29, "tile_m": 6, "tile_n": 6, "w": 12, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 11124.1, "source": "autotuned"}, {"m": 32, "n": 32, "k": 4, "tile_m": 2, "tile_n": 8, "threads": 160, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 6791.07, "source": "autotuned"}, {"m": 32, "n": 32, "k": 5, "tile_m": 2, "tile_n": 8, "threads": 192, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 7473.15, "source": "autotuned"}, {"m": 32, "n": 32, "k": 6, "tile_m": 2, "tile_n": 8, "threads": 224, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 7756.74, "source": "autotuned"}, {"m": 32, "n": 32, "k": 7, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 7687.89, "source": "autotuned"}, {"m": 32, "n": 32, "k": 8, "tile_m": 2, "tile_n": 8, "threads": 64, "grouping": 24, "minblocks": 3, "algorithm": "medium", "perf": 8227.47, "source": "autotuned"}, {"m": 32, "n": 32, "k": 9, "tile_m": 9, "tile_n": 4, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 9139.67, "source": "autotuned"}, {"m": 32, "n": 32, "k": 10, "tile_m": 9, "tile_n": 4, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 9449.45, "source": "autotuned"}, {"m": 32, "n": 32, "k": 11, "tile_m": 9, "tile_n": 4, "w": 4, "v": 32, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 9627.62, "source": "autotuned"}, {"m": 32, "n": 32, "k": 13, "tile_m": 9, "tile_n": 4, "w": 6, "v": 20, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 9925.09, "source": "autotuned"}, {"m": 32, "n": 32, "k": 16, "tile_m": 9, "tile_n": 4, "w": 6, "v": 20, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 10780.0, "source": "autotuned"}, {"m": 32, "n": 32, "k": 22, "tile_m": 9, "tile_n": 4, "w": 8, "v": 28, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 11560.4, "source": "autotuned"}, {"m": 32, "n": 32, "k": 24, "tile_m": 9, "tile_n": 4, "w": 8, "v": 30, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 11868.5, "source": "autotuned"}, {"m": 32, "n": 32, "k": 25, "tile_m": 4, "tile_n": 8, "w": 10, "v": 32, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11819.1, "source": "autotuned"}, {"m": 32, "n": 32, "k": 26, "tile_m": 9, "tile_n": 4, "w": 10, "v": 32, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 11893.0, "source": "autotuned"}, {"m": 32, "n": 32, "k": 29, "tile_m": 2, "tile_n": 8, "w": 12, "v": 22, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 12000.5, "source": "autotuned"}, {"m": 32, "n": 32, "k": 32, "tile_m": 9, "tile_n": 4, "w": 8, "v": 28, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 12344.3, "source": "autotuned"}, {"m": 32, "n": 32, "k": 45, "tile_m": 9, "tile_n": 4, "w": 8, "v": 28, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 12612.5, "source": "autotuned"}, {"m": 32, "n": 45, "k": 5, "tile_m": 2, "tile_n": 6, "threads": 256, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 7694.71, "source": "autotuned"}, {"m": 32, "n": 45, "k": 7, "tile_m": 2, "tile_n": 4, "threads": 320, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 7889.79, "source": "autotuned"}, {"m": 32, "n": 45, "k": 9, "tile_m": 2, "tile_n": 6, "threads": 416, "grouping": 32, "minblocks": 2, "algorithm": "medium", "perf": 7753.62, "source": "autotuned"}, {"m": 32, "n": 45, "k": 28, "tile_m": 8, "tile_n": 6, "w": 8, "v": 30, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11337.9, "source": "autotuned"}, {"m": 33, "n": 33, "k": 33, "tile_m": 6, "tile_n": 7, "w": 12, "v": 30, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 11240.8, "source": "autotuned"}, {"m": 34, "n": 34, "k": 34, "tile_m": 7, "tile_n": 6, "w": 6, "v": 32, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11881.6, "source": "autotuned"}, {"m": 35, "n": 35, "k": 35, "tile_m": 6, "tile_n": 7, "w": 10, "v": 32, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 12585.9, "source": "autotuned"}, {"m": 36, "n": 36, "k": 36, "tile_m": 5, "tile_n": 9, "w": 16, "v": 36, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 12432.2, "source": "autotuned"}, {"m": 37, "n": 37, "k": 37, "tile_m": 5, "tile_n": 5, "w": 14, "v": 36, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11854.2, "source": "autotuned"}, {"m": 38, "n": 38, "k": 38, "tile_m": 5, "tile_n": 5, "w": 10, "v": 38, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 12609.5, "source": "autotuned"}, {"m": 39, "n": 39, "k": 39, "tile_m": 5, "tile_n": 5, "w": 14, "v": 38, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 13197.9, "source": "autotuned"}, {"m": 40, "n": 40, "k": 40, "tile_m": 5, "tile_n": 5, "w": 14, "v": 40, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 13958.9, "source": "autotuned"}, {"m": 41, "n": 41, "k": 41, "tile_m": 5, "tile_n": 6, "w": 18, "v": 32, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 12029.1, "source": "autotuned"}, {"m": 42, "n": 42, "k": 42, "tile_m": 5, "tile_n": 6, "w": 18, "v": 42, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 12690.3, "source": "autotuned"}, {"m": 43, "n": 43, "k": 43, "tile_m": 6, "tile_n": 6, "w": 16, "v": 40, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 12663.6, "source": "autotuned"}, {"m": 44, "n": 44, "k": 44, "tile_m": 6, "tile_n": 6, "w": 16, "v": 44, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 13548.4, "source": "autotuned"}, {"m": 45, "n": 4, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 2163.22, "source": "autotuned"}, {"m": 45, "n": 4, "k": 5, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 2324.46, "source": "autotuned"}, {"m": 45, "n": 4, "k": 6, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2675.31, "source": "autotuned"}, {"m": 45, "n": 4, "k": 7, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 4, "minblocks": 2, "algorithm": "medium", "perf": 2707.94, "source": "autotuned"}, {"m": 45, "n": 4, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 5, "minblocks": 15, "algorithm": "medium", "perf": 2807.21, "source": "autotuned"}, {"m": 45, "n": 4, "k": 9, "tile_m": 2, "tile_n": 4, "w": 4, "v": 4, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 3022.53, "source": "autotuned"}, {"m": 45, "n": 4, "k": 10, "tile_m": 2, "tile_n": 4, "w": 4, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3065.66, "source": "autotuned"}, {"m": 45, "n": 4, "k": 13, "tile_m": 2, "tile_n": 4, "w": 6, "v": 4, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3120.98, "source": "autotuned"}, {"m": 45, "n": 4, "k": 15, "tile_m": 2, "tile_n": 4, "w": 6, "v": 4, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 2670.8, "source": "autotuned"}, {"m": 45, "n": 4, "k": 16, "tile_m": 2, "tile_n": 4, "w": 6, "v": 4, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 3107.77, "source": "autotuned"}, {"m": 45, "n": 4, "k": 22, "tile_m": 3, "tile_n": 4, "w": 8, "v": 4, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3391.47, "source": "autotuned"}, {"m": 45, "n": 4, "k": 25, "tile_m": 2, "tile_n": 4, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3486.76, "source": "autotuned"}, {"m": 45, "n": 4, "k": 26, "tile_m": 3, "tile_n": 4, "w": 12, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3551.05, "source": "autotuned"}, {"m": 45, "n": 4, "k": 45, "tile_m": 2, "tile_n": 4, "w": 16, "v": 4, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3518.76, "source": "autotuned"}, {"m": 45, "n": 5, "k": 4, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 2289.45, "source": "autotuned"}, {"m": 45, "n": 5, "k": 5, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2682.89, "source": "autotuned"}, {"m": 45, "n": 5, "k": 6, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 2995.02, "source": "autotuned"}, {"m": 45, "n": 5, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 5, "minblocks": 17, "algorithm": "medium", "perf": 2880.24, "source": "autotuned"}, {"m": 45, "n": 5, "k": 8, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 5, "minblocks": 14, "algorithm": "medium", "perf": 3010.14, "source": "autotuned"}, {"m": 45, "n": 5, "k": 9, "tile_m": 3, "tile_n": 3, "w": 4, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3246.21, "source": "autotuned"}, {"m": 45, "n": 5, "k": 10, "tile_m": 3, "tile_n": 3, "w": 4, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3342.3, "source": "autotuned"}, {"m": 45, "n": 5, "k": 13, "tile_m": 2, "tile_n": 5, "w": 6, "v": 4, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 3625.67, "source": "autotuned"}, {"m": 45, "n": 5, "k": 15, "tile_m": 2, "tile_n": 5, "w": 6, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3662.99, "source": "autotuned"}, {"m": 45, "n": 5, "k": 16, "tile_m": 2, "tile_n": 5, "w": 6, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3643.63, "source": "autotuned"}, {"m": 45, "n": 5, "k": 22, "tile_m": 2, "tile_n": 5, "w": 8, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4049.79, "source": "autotuned"}, {"m": 45, "n": 5, "k": 25, "tile_m": 2, "tile_n": 5, "w": 10, "v": 4, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 3530.7, "source": "autotuned"}, {"m": 45, "n": 5, "k": 26, "tile_m": 2, "tile_n": 5, "w": 10, "v": 4, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4217.03, "source": "autotuned"}, {"m": 45, "n": 5, "k": 45, "tile_m": 2, "tile_n": 5, "w": 16, "v": 4, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4488.11, "source": "autotuned"}, {"m": 45, "n": 6, "k": 4, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 2711.94, "source": "autotuned"}, {"m": 45, "n": 6, "k": 5, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 3078.47, "source": "autotuned"}, {"m": 45, "n": 6, "k": 6, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 5, "minblocks": 13, "algorithm": "medium", "perf": 3165.93, "source": "autotuned"}, {"m": 45, "n": 6, "k": 7, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 5, "minblocks": 14, "algorithm": "medium", "perf": 3358.06, "source": "autotuned"}, {"m": 45, "n": 6, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 5, "minblocks": 15, "algorithm": "medium", "perf": 3586.78, "source": "autotuned"}, {"m": 45, "n": 6, "k": 9, "tile_m": 3, "tile_n": 3, "w": 4, "v": 6, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 4052.62, "source": "autotuned"}, {"m": 45, "n": 6, "k": 10, "tile_m": 3, "tile_n": 3, "w": 4, "v": 6, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4128.15, "source": "autotuned"}, {"m": 45, "n": 6, "k": 13, "tile_m": 2, "tile_n": 6, "w": 6, "v": 6, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4145.33, "source": "autotuned"}, {"m": 45, "n": 6, "k": 26, "tile_m": 2, "tile_n": 6, "w": 12, "v": 6, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4910.62, "source": "autotuned"}, {"m": 45, "n": 6, "k": 45, "tile_m": 3, "tile_n": 3, "w": 16, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5268.23, "source": "autotuned"}, {"m": 45, "n": 7, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 2724.19, "source": "autotuned"}, {"m": 45, "n": 7, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 5, "minblocks": 13, "algorithm": "medium", "perf": 3084.88, "source": "autotuned"}, {"m": 45, "n": 7, "k": 6, "tile_m": 6, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 14, "algorithm": "medium", "perf": 3426.02, "source": "autotuned"}, {"m": 45, "n": 7, "k": 7, "tile_m": 6, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 14, "algorithm": "medium", "perf": 3668.81, "source": "autotuned"}, {"m": 45, "n": 7, "k": 8, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 5, "minblocks": 13, "algorithm": "medium", "perf": 3838.28, "source": "autotuned"}, {"m": 45, "n": 7, "k": 9, "tile_m": 6, "tile_n": 2, "w": 4, "v": 6, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4293.54, "source": "autotuned"}, {"m": 45, "n": 7, "k": 10, "tile_m": 6, "tile_n": 2, "w": 4, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4354.19, "source": "autotuned"}, {"m": 45, "n": 7, "k": 13, "tile_m": 6, "tile_n": 2, "w": 6, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4436.4, "source": "autotuned"}, {"m": 45, "n": 7, "k": 26, "tile_m": 2, "tile_n": 7, "w": 10, "v": 6, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5442.36, "source": "autotuned"}, {"m": 45, "n": 7, "k": 45, "tile_m": 2, "tile_n": 7, "w": 16, "v": 6, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 5856.04, "source": "autotuned"}, {"m": 45, "n": 8, "k": 4, "tile_m": 1, "tile_n": 8, "threads": 64, "grouping": 5, "minblocks": 15, "algorithm": "medium", "perf": 3086.13, "source": "autotuned"}, {"m": 45, "n": 8, "k": 5, "tile_m": 6, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 16, "algorithm": "medium", "perf": 3567.83, "source": "autotuned"}, {"m": 45, "n": 8, "k": 6, "tile_m": 6, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 13, "algorithm": "medium", "perf": 3893.11, "source": "autotuned"}, {"m": 45, "n": 8, "k": 7, "tile_m": 6, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 13, "algorithm": "medium", "perf": 4233.06, "source": "autotuned"}, {"m": 45, "n": 8, "k": 8, "tile_m": 2, "tile_n": 8, "threads": 32, "grouping": 4, "minblocks": 14, "algorithm": "medium", "perf": 4176.73, "source": "autotuned"}, {"m": 45, "n": 8, "k": 9, "tile_m": 3, "tile_n": 4, "w": 4, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4806.25, "source": "autotuned"}, {"m": 45, "n": 8, "k": 10, "tile_m": 6, "tile_n": 2, "w": 4, "v": 8, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4857.63, "source": "autotuned"}, {"m": 45, "n": 8, "k": 13, "tile_m": 6, "tile_n": 2, "w": 6, "v": 8, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5090.39, "source": "autotuned"}, {"m": 45, "n": 8, "k": 26, "tile_m": 2, "tile_n": 8, "w": 10, "v": 6, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6066.69, "source": "autotuned"}, {"m": 45, "n": 8, "k": 45, "tile_m": 2, "tile_n": 8, "w": 16, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6577.62, "source": "autotuned"}, {"m": 45, "n": 9, "k": 4, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 5, "minblocks": 17, "algorithm": "medium", "perf": 3163.29, "source": "autotuned"}, {"m": 45, "n": 9, "k": 5, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 5, "minblocks": 16, "algorithm": "medium", "perf": 3583.08, "source": "autotuned"}, {"m": 45, "n": 9, "k": 6, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 5, "minblocks": 14, "algorithm": "medium", "perf": 3967.94, "source": "autotuned"}, {"m": 45, "n": 9, "k": 7, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 5, "minblocks": 14, "algorithm": "medium", "perf": 4227.93, "source": "autotuned"}, {"m": 45, "n": 9, "k": 8, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 4, "minblocks": 14, "algorithm": "medium", "perf": 4309.86, "source": "autotuned"}, {"m": 45, "n": 9, "k": 9, "tile_m": 6, "tile_n": 3, "w": 4, "v": 6, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5142.65, "source": "autotuned"}, {"m": 45, "n": 9, "k": 10, "tile_m": 6, "tile_n": 3, "w": 4, "v": 6, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5176.23, "source": "autotuned"}, {"m": 45, "n": 9, "k": 13, "tile_m": 6, "tile_n": 3, "w": 6, "v": 6, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5403.54, "source": "autotuned"}, {"m": 45, "n": 9, "k": 15, "tile_m": 6, "tile_n": 3, "w": 6, "v": 6, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 5640.69, "source": "autotuned"}, {"m": 45, "n": 9, "k": 16, "tile_m": 6, "tile_n": 3, "w": 6, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 5722.8, "source": "autotuned"}, {"m": 45, "n": 9, "k": 22, "tile_m": 6, "tile_n": 3, "w": 8, "v": 8, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 6286.94, "source": "autotuned"}, {"m": 45, "n": 9, "k": 25, "tile_m": 6, "tile_n": 3, "w": 10, "v": 6, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6434.67, "source": "autotuned"}, {"m": 45, "n": 9, "k": 26, "tile_m": 6, "tile_n": 3, "w": 10, "v": 6, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6476.71, "source": "autotuned"}, {"m": 45, "n": 9, "k": 45, "tile_m": 6, "tile_n": 3, "w": 16, "v": 8, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7047.95, "source": "autotuned"}, {"m": 45, "n": 10, "k": 4, "tile_m": 1, "tile_n": 10, "threads": 64, "grouping": 5, "minblocks": 14, "algorithm": "medium", "perf": 2938.89, "source": "autotuned"}, {"m": 45, "n": 10, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 5, "minblocks": 15, "algorithm": "medium", "perf": 3809.59, "source": "autotuned"}, {"m": 45, "n": 10, "k": 6, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 5, "minblocks": 15, "algorithm": "medium", "perf": 4062.95, "source": "autotuned"}, {"m": 45, "n": 10, "k": 7, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 15, "algorithm": "medium", "perf": 4277.35, "source": "autotuned"}, {"m": 45, "n": 10, "k": 8, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 4, "minblocks": 16, "algorithm": "medium", "perf": 4638.63, "source": "autotuned"}, {"m": 45, "n": 10, "k": 9, "tile_m": 6, "tile_n": 3, "w": 4, "v": 10, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 4523.18, "source": "autotuned"}, {"m": 45, "n": 10, "k": 10, "tile_m": 6, "tile_n": 3, "w": 4, "v": 10, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5719.7, "source": "autotuned"}, {"m": 45, "n": 10, "k": 13, "tile_m": 6, "tile_n": 3, "w": 6, "v": 10, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5902.99, "source": "autotuned"}, {"m": 45, "n": 10, "k": 26, "tile_m": 6, "tile_n": 3, "w": 10, "v": 10, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 6977.54, "source": "autotuned"}, {"m": 45, "n": 10, "k": 45, "tile_m": 3, "tile_n": 5, "w": 16, "v": 10, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7624.72, "source": "autotuned"}, {"m": 45, "n": 13, "k": 4, "tile_m": 6, "tile_n": 2, "threads": 192, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 3967.34, "source": "autotuned"}, {"m": 45, "n": 13, "k": 5, "tile_m": 5, "tile_n": 2, "threads": 256, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 4053.92, "source": "autotuned"}, {"m": 45, "n": 13, "k": 6, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 5, "minblocks": 10, "algorithm": "medium", "perf": 4383.39, "source": "autotuned"}, {"m": 45, "n": 13, "k": 7, "tile_m": 5, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 13, "algorithm": "medium", "perf": 4623.34, "source": "autotuned"}, {"m": 45, "n": 13, "k": 8, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 26, "minblocks": 5, "algorithm": "medium", "perf": 4624.43, "source": "autotuned"}, {"m": 45, "n": 13, "k": 9, "tile_m": 6, "tile_n": 4, "w": 4, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6218.0, "source": "autotuned"}, {"m": 45, "n": 13, "k": 10, "tile_m": 6, "tile_n": 4, "w": 4, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 6597.33, "source": "autotuned"}, {"m": 45, "n": 13, "k": 13, "tile_m": 6, "tile_n": 4, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5691.3, "source": "autotuned"}, {"m": 45, "n": 13, "k": 15, "tile_m": 6, "tile_n": 4, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7264.34, "source": "autotuned"}, {"m": 45, "n": 13, "k": 16, "tile_m": 6, "tile_n": 4, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7450.6, "source": "autotuned"}, {"m": 45, "n": 13, "k": 22, "tile_m": 6, "tile_n": 4, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8039.56, "source": "autotuned"}, {"m": 45, "n": 13, "k": 25, "tile_m": 6, "tile_n": 4, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8102.03, "source": "autotuned"}, {"m": 45, "n": 13, "k": 26, "tile_m": 6, "tile_n": 4, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8291.42, "source": "autotuned"}, {"m": 45, "n": 13, "k": 45, "tile_m": 6, "tile_n": 4, "w": 18, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8966.03, "source": "autotuned"}, {"m": 45, "n": 15, "k": 4, "tile_m": 6, "tile_n": 2, "threads": 192, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 4471.6, "source": "autotuned"}, {"m": 45, "n": 15, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 256, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 4658.77, "source": "autotuned"}, {"m": 45, "n": 15, "k": 9, "tile_m": 6, "tile_n": 4, "w": 4, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7077.13, "source": "autotuned"}, {"m": 45, "n": 15, "k": 13, "tile_m": 6, "tile_n": 4, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 7800.13, "source": "autotuned"}, {"m": 45, "n": 15, "k": 15, "tile_m": 6, "tile_n": 4, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8236.51, "source": "autotuned"}, {"m": 45, "n": 15, "k": 16, "tile_m": 6, "tile_n": 4, "w": 6, "v": 12, "threads": 32, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 8517.77, "source": "autotuned"}, {"m": 45, "n": 15, "k": 22, "tile_m": 6, "tile_n": 4, "w": 8, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9148.82, "source": "autotuned"}, {"m": 45, "n": 15, "k": 25, "tile_m": 6, "tile_n": 4, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 9252.84, "source": "autotuned"}, {"m": 45, "n": 15, "k": 26, "tile_m": 6, "tile_n": 4, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9367.92, "source": "autotuned"}, {"m": 45, "n": 15, "k": 45, "tile_m": 6, "tile_n": 4, "w": 12, "v": 14, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 10072.2, "source": "autotuned"}, {"m": 45, "n": 16, "k": 4, "tile_m": 6, "tile_n": 2, "threads": 192, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 4868.44, "source": "autotuned"}, {"m": 45, "n": 16, "k": 5, "tile_m": 6, "tile_n": 2, "threads": 256, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 4851.09, "source": "autotuned"}, {"m": 45, "n": 16, "k": 9, "tile_m": 6, "tile_n": 4, "w": 4, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 7809.67, "source": "autotuned"}, {"m": 45, "n": 16, "k": 13, "tile_m": 6, "tile_n": 4, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 8352.3, "source": "autotuned"}, {"m": 45, "n": 16, "k": 15, "tile_m": 6, "tile_n": 4, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8843.14, "source": "autotuned"}, {"m": 45, "n": 16, "k": 16, "tile_m": 6, "tile_n": 4, "w": 6, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 9107.17, "source": "autotuned"}, {"m": 45, "n": 16, "k": 22, "tile_m": 6, "tile_n": 4, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 9813.14, "source": "autotuned"}, {"m": 45, "n": 16, "k": 25, "tile_m": 6, "tile_n": 4, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 10064.6, "source": "autotuned"}, {"m": 45, "n": 16, "k": 26, "tile_m": 6, "tile_n": 4, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 10201.1, "source": "autotuned"}, {"m": 45, "n": 16, "k": 45, "tile_m": 6, "tile_n": 4, "w": 18, "v": 16, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 10730.6, "source": "autotuned"}, {"m": 45, "n": 22, "k": 4, "tile_m": 6, "tile_n": 2, "threads": 224, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 5272.28, "source": "autotuned"}, {"m": 45, "n": 22, "k": 5, "tile_m": 6, "tile_n": 2, "threads": 256, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 5646.01, "source": "autotuned"}, {"m": 45, "n": 22, "k": 9, "tile_m": 9, "tile_n": 4, "w": 4, "v": 22, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 8181.87, "source": "autotuned"}, {"m": 45, "n": 22, "k": 13, "tile_m": 6, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 9433.82, "source": "autotuned"}, {"m": 45, "n": 22, "k": 15, "tile_m": 6, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 10043.7, "source": "autotuned"}, {"m": 45, "n": 22, "k": 16, "tile_m": 6, "tile_n": 6, "w": 6, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 10340.4, "source": "autotuned"}, {"m": 45, "n": 22, "k": 22, "tile_m": 6, "tile_n": 6, "w": 8, "v": 20, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11010.9, "source": "autotuned"}, {"m": 45, "n": 22, "k": 25, "tile_m": 6, "tile_n": 6, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 11407.3, "source": "autotuned"}, {"m": 45, "n": 22, "k": 26, "tile_m": 6, "tile_n": 6, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11522.1, "source": "autotuned"}, {"m": 45, "n": 22, "k": 45, "tile_m": 6, "tile_n": 6, "w": 12, "v": 20, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11959.2, "source": "autotuned"}, {"m": 45, "n": 25, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 192, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 5440.86, "source": "autotuned"}, {"m": 45, "n": 25, "k": 5, "tile_m": 3, "tile_n": 5, "threads": 256, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 5849.02, "source": "autotuned"}, {"m": 45, "n": 25, "k": 9, "tile_m": 6, "tile_n": 4, "w": 4, "v": 18, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 7960.31, "source": "autotuned"}, {"m": 45, "n": 25, "k": 13, "tile_m": 9, "tile_n": 5, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8639.51, "source": "autotuned"}, {"m": 45, "n": 25, "k": 15, "tile_m": 9, "tile_n": 5, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 9210.77, "source": "autotuned"}, {"m": 45, "n": 25, "k": 16, "tile_m": 9, "tile_n": 5, "w": 6, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9387.71, "source": "autotuned"}, {"m": 45, "n": 25, "k": 22, "tile_m": 6, "tile_n": 7, "w": 8, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 11155.5, "source": "autotuned"}, {"m": 45, "n": 25, "k": 25, "tile_m": 6, "tile_n": 7, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 11455.1, "source": "autotuned"}, {"m": 45, "n": 25, "k": 26, "tile_m": 6, "tile_n": 7, "w": 10, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 11593.9, "source": "autotuned"}, {"m": 45, "n": 25, "k": 45, "tile_m": 6, "tile_n": 7, "w": 12, "v": 24, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 12002.1, "source": "autotuned"}, {"m": 45, "n": 26, "k": 4, "tile_m": 3, "tile_n": 4, "threads": 192, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 4609.25, "source": "autotuned"}, {"m": 45, "n": 26, "k": 5, "tile_m": 3, "tile_n": 4, "threads": 256, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 5899.02, "source": "autotuned"}, {"m": 45, "n": 26, "k": 6, "tile_m": 3, "tile_n": 4, "threads": 288, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 6102.72, "source": "autotuned"}, {"m": 45, "n": 26, "k": 7, "tile_m": 5, "tile_n": 2, "threads": 320, "grouping": 32, "minblocks": 4, "algorithm": "medium", "perf": 5977.06, "source": "autotuned"}, {"m": 45, "n": 26, "k": 8, "tile_m": 3, "tile_n": 4, "threads": 224, "grouping": 26, "minblocks": 5, "algorithm": "medium", "perf": 6102.28, "source": "autotuned"}, {"m": 45, "n": 26, "k": 9, "tile_m": 6, "tile_n": 4, "w": 4, "v": 14, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 6916.15, "source": "autotuned"}, {"m": 45, "n": 26, "k": 10, "tile_m": 6, "tile_n": 4, "w": 4, "v": 18, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 8526.22, "source": "autotuned"}, {"m": 45, "n": 26, "k": 13, "tile_m": 9, "tile_n": 5, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9031.31, "source": "autotuned"}, {"m": 45, "n": 26, "k": 15, "tile_m": 9, "tile_n": 5, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 9567.02, "source": "autotuned"}, {"m": 45, "n": 26, "k": 16, "tile_m": 9, "tile_n": 5, "w": 6, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 9845.35, "source": "autotuned"}, {"m": 45, "n": 26, "k": 22, "tile_m": 6, "tile_n": 7, "w": 8, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 11329.4, "source": "autotuned"}, {"m": 45, "n": 26, "k": 25, "tile_m": 6, "tile_n": 7, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11577.1, "source": "autotuned"}, {"m": 45, "n": 26, "k": 26, "tile_m": 6, "tile_n": 7, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11718.7, "source": "autotuned"}, {"m": 45, "n": 26, "k": 45, "tile_m": 6, "tile_n": 7, "w": 12, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 12313.9, "source": "autotuned"}, {"m": 45, "n": 45, "k": 4, "tile_m": 6, "tile_n": 2, "threads": 192, "grouping": 26, "minblocks": 3, "algorithm": "medium", "perf": 6185.14, "source": "autotuned"}, {"m": 45, "n": 45, "k": 5, "tile_m": 3, "tile_n": 5, "threads": 256, "grouping": 26, "minblocks": 3, "algorithm": "medium", "perf": 6488.25, "source": "autotuned"}, {"m": 45, "n": 45, "k": 6, "tile_m": 5, "tile_n": 3, "threads": 288, "grouping": 26, "minblocks": 3, "algorithm": "medium", "perf": 7023.96, "source": "autotuned"}, {"m": 45, "n": 45, "k": 7, "tile_m": 6, "tile_n": 2, "threads": 320, "grouping": 26, "minblocks": 3, "algorithm": "medium", "perf": 5733.7, "source": "autotuned"}, {"m": 45, "n": 45, "k": 8, "tile_m": 3, "tile_n": 4, "threads": 448, "grouping": 32, "minblocks": 2, "algorithm": "medium", "perf": 7150.34, "source": "autotuned"}, {"m": 45, "n": 45, "k": 9, "tile_m": 6, "tile_n": 4, "w": 4, "v": 30, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 8728.39, "source": "autotuned"}, {"m": 45, "n": 45, "k": 10, "tile_m": 6, "tile_n": 4, "w": 4, "v": 32, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 9231.2, "source": "autotuned"}, {"m": 45, "n": 45, "k": 13, "tile_m": 6, "tile_n": 6, "w": 6, "v": 44, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 10363.3, "source": "autotuned"}, {"m": 45, "n": 45, "k": 15, "tile_m": 6, "tile_n": 6, "w": 6, "v": 42, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 11327.6, "source": "autotuned"}, {"m": 45, "n": 45, "k": 16, "tile_m": 6, "tile_n": 6, "w": 6, "v": 44, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 11641.6, "source": "autotuned"}, {"m": 45, "n": 45, "k": 22, "tile_m": 6, "tile_n": 6, "w": 8, "v": 44, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 12543.8, "source": "autotuned"}, {"m": 45, "n": 45, "k": 25, "tile_m": 6, "tile_n": 6, "w": 10, "v": 42, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 12937.3, "source": "autotuned"}, {"m": 45, "n": 45, "k": 26, "tile_m": 6, "tile_n": 6, "w": 10, "v": 44, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 12998.7, "source": "autotuned"}, {"m": 45, "n": 45, "k": 45, "tile_m": 6, "tile_n": 6, "w": 16, "v": 36, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 13819.5, "source": "autotuned"}, {"m": 55, "n": 55, "k": 32, "tile_m": 7, "tile_n": 7, "w": 12, "v": 54, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 14584.3, "source": "autotuned"}, {"m": 64, "n": 64, "k": 64, "tile_m": 4, "tile_n": 8, "w": 12, "v": 46, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 15694.3, "source": "autotuned"}, {"m": 72, "n": 72, "k": 72, "tile_m": 9, "tile_n": 5, "w": 8, "v": 72, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 15446.4, "source": "autotuned"}, {"m": 76, "n": 30, "k": 30, "tile_m": 5, "tile_n": 8, "w": 10, "v": 26, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 11490.4, "source": "autotuned"}, {"m": 76, "n": 30, "k": 76, "tile_m": 5, "tile_n": 8, "w": 20, "v": 28, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 15036.8, "source": "autotuned"}, {"m": 76, "n": 76, "k": 30, "tile_m": 7, "tile_n": 7, "w": 8, "v": 72, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 15328.0, "source": "autotuned"}, {"m": 76, "n": 76, "k": 76, "tile_m": 5, "tile_n": 5, "w": 10, "v": 36, "threads": 256, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 15792.4, "source": "autotuned"} ] ================================================ FILE: src/acc/libsmm_acc/parameters/parameters_K20X.json ================================================ [ {"m": 4, "n": 4, "k": 4, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 16.5663, "source": "autotuned"}, {"m": 4, "n": 4, "k": 5, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 20.1639, "source": "autotuned"}, {"m": 4, "n": 4, "k": 6, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 23.5514, "source": "autotuned"}, {"m": 4, "n": 4, "k": 7, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 27.508, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 4, "k": 8, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 31.7227, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 4, "k": 9, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 34.2669, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 4, "k": 10, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 37.6563, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 4, "k": 13, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 45.9102, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 4, "k": 15, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 51.3947, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 4, "k": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 54.8645, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 4, "k": 17, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 54.3192, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 4, "k": 22, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 62.9255, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 4, "k": 23, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 60.6683, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 4, "k": 24, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 62.8983, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 4, "k": 25, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 50.8246, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 4, "k": 26, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 53.309, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 4, "k": 28, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 54.7759, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 4, "k": 32, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 58.5147, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 4, "k": 45, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 55.094, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 5, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 14.9148, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 5, "k": 5, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 18.1077, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 5, "k": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 21.2783, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 5, "k": 7, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 25.2832, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 5, "k": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 29.5849, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 5, "k": 9, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 30.8254, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 5, "k": 13, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 42.687, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 5, "k": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 52.9062, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 5, "k": 17, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 51.922, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 5, "k": 22, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 48.5357, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 5, "k": 23, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 50.2012, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 5, "k": 24, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 50.9804, "source": "autotuned", "source": "autotuned"}, {"m": 4, "n": 5, "k": 25, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 45.0794, "source": "autotuned"}, {"m": 4, "n": 5, "k": 26, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 46.9644, "source": "autotuned"}, {"m": 4, "n": 5, "k": 28, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 44.74, "source": "autotuned"}, {"m": 4, "n": 5, "k": 32, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 47.0079, "source": "autotuned"}, {"m": 4, "n": 5, "k": 45, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 39.578, "source": "autotuned"}, {"m": 4, "n": 6, "k": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 17.7217, "source": "autotuned"}, {"m": 4, "n": 6, "k": 5, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 21.2885, "source": "autotuned"}, {"m": 4, "n": 6, "k": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 26.0691, "source": "autotuned"}, {"m": 4, "n": 6, "k": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 35.3897, "source": "autotuned"}, {"m": 4, "n": 6, "k": 9, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 36.1752, "source": "autotuned"}, {"m": 4, "n": 6, "k": 13, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 50.7414, "source": "autotuned"}, {"m": 4, "n": 6, "k": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 62.3605, "source": "autotuned"}, {"m": 4, "n": 6, "k": 17, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 52.168, "source": "autotuned"}, {"m": 4, "n": 6, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 61.4407, "source": "autotuned"}, {"m": 4, "n": 6, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 63.1415, "source": "autotuned"}, {"m": 4, "n": 6, "k": 24, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 59.2859, "source": "autotuned"}, {"m": 4, "n": 6, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 63.6068, "source": "autotuned"}, {"m": 4, "n": 6, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 66.9879, "source": "autotuned"}, {"m": 4, "n": 7, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 20.3949, "source": "autotuned"}, {"m": 4, "n": 7, "k": 5, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 25.5066, "source": "autotuned"}, {"m": 4, "n": 7, "k": 7, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 34.4269, "source": "autotuned"}, {"m": 4, "n": 7, "k": 9, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 41.6453, "source": "autotuned"}, {"m": 4, "n": 7, "k": 13, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 57.6433, "source": "autotuned"}, {"m": 4, "n": 7, "k": 25, "tile_m": 1, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 70.7435, "source": "autotuned"}, {"m": 4, "n": 7, "k": 26, "tile_m": 1, "tile_n": 1, "w": 12, "v": 6, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 72.8932, "source": "autotuned"}, {"m": 4, "n": 7, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 81.1008, "source": "autotuned"}, {"m": 4, "n": 7, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 87.9914, "source": "autotuned"}, {"m": 4, "n": 7, "k": 45, "tile_m": 1, "tile_n": 1, "w": 18, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 89.4636, "source": "autotuned"}, {"m": 4, "n": 8, "k": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 24.016, "source": "autotuned"}, {"m": 4, "n": 8, "k": 5, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 28.6828, "source": "autotuned"}, {"m": 4, "n": 8, "k": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 34.4605, "source": "autotuned"}, {"m": 4, "n": 8, "k": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 45.9955, "source": "autotuned"}, {"m": 4, "n": 8, "k": 9, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 48.4776, "source": "autotuned"}, {"m": 4, "n": 8, "k": 13, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 54.9661, "source": "autotuned"}, {"m": 4, "n": 8, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 64.3579, "source": "autotuned"}, {"m": 4, "n": 8, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 67.3422, "source": "autotuned"}, {"m": 4, "n": 8, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 80.9386, "source": "autotuned"}, {"m": 4, "n": 8, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 83.121, "source": "autotuned"}, {"m": 4, "n": 8, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 72.6651, "source": "autotuned"}, {"m": 4, "n": 8, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 74.4863, "source": "autotuned"}, {"m": 4, "n": 8, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 8, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 83.7638, "source": "autotuned"}, {"m": 4, "n": 9, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 24.1362, "source": "autotuned"}, {"m": 4, "n": 9, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 29.7245, "source": "autotuned"}, {"m": 4, "n": 9, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 34.6329, "source": "autotuned"}, {"m": 4, "n": 9, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 39.4845, "source": "autotuned"}, {"m": 4, "n": 9, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 44.6668, "source": "autotuned"}, {"m": 4, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 49.1063, "source": "autotuned"}, {"m": 4, "n": 9, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 58.1283, "source": "autotuned"}, {"m": 4, "n": 9, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 66.7055, "source": "autotuned"}, {"m": 4, "n": 9, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 69.4121, "source": "autotuned"}, {"m": 4, "n": 9, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 81.2228, "source": "autotuned"}, {"m": 4, "n": 9, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 83.4097, "source": "autotuned"}, {"m": 4, "n": 9, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 79.1819, "source": "autotuned"}, {"m": 4, "n": 9, "k": 25, "tile_m": 1, "tile_n": 1, "w": 10, "v": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 80.8055, "source": "autotuned"}, {"m": 4, "n": 9, "k": 26, "tile_m": 1, "tile_n": 1, "w": 10, "v": 6, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 82.8333, "source": "autotuned"}, {"m": 4, "n": 9, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 91.3053, "source": "autotuned"}, {"m": 4, "n": 9, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 92.4279, "source": "autotuned"}, {"m": 4, "n": 9, "k": 45, "tile_m": 1, "tile_n": 1, "w": 18, "v": 6, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 97.8429, "source": "autotuned"}, {"m": 4, "n": 10, "k": 4, "tile_m": 1, "tile_n": 1, "w": 2, "v": 10, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 27.7177, "source": "autotuned"}, {"m": 4, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 52.2698, "source": "autotuned"}, {"m": 4, "n": 10, "k": 15, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 70.3125, "source": "autotuned"}, {"m": 4, "n": 13, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 34.7964, "source": "autotuned"}, {"m": 4, "n": 13, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 42.8558, "source": "autotuned"}, {"m": 4, "n": 13, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 49.8578, "source": "autotuned"}, {"m": 4, "n": 13, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 56.807, "source": "autotuned"}, {"m": 4, "n": 13, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 56.9443, "source": "autotuned"}, {"m": 4, "n": 13, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 62.3945, "source": "autotuned"}, {"m": 4, "n": 13, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 82.5655, "source": "autotuned"}, {"m": 4, "n": 13, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 95.0394, "source": "autotuned"}, {"m": 4, "n": 13, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 98.1766, "source": "autotuned"}, {"m": 4, "n": 13, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 106.482, "source": "autotuned"}, {"m": 4, "n": 13, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 99.1141, "source": "autotuned"}, {"m": 4, "n": 13, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 102.229, "source": "autotuned"}, {"m": 4, "n": 13, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 104.392, "source": "autotuned"}, {"m": 4, "n": 13, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 107.25, "source": "autotuned"}, {"m": 4, "n": 13, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 10, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 112.358, "source": "autotuned"}, {"m": 4, "n": 13, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 10, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 117.253, "source": "autotuned"}, {"m": 4, "n": 13, "k": 45, "tile_m": 1, "tile_n": 1, "w": 20, "v": 12, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 117.218, "source": "autotuned"}, {"m": 4, "n": 15, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 39.8849, "source": "autotuned"}, {"m": 4, "n": 15, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 76.3306, "source": "autotuned"}, {"m": 4, "n": 15, "k": 15, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 100.748, "source": "autotuned"}, {"m": 4, "n": 16, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 43.4494, "source": "autotuned"}, {"m": 4, "n": 16, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 53.0611, "source": "autotuned"}, {"m": 4, "n": 16, "k": 6, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 56.7665, "source": "autotuned"}, {"m": 4, "n": 16, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 71.163, "source": "autotuned"}, {"m": 4, "n": 16, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 75.903, "source": "autotuned"}, {"m": 4, "n": 16, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 101.297, "source": "autotuned"}, {"m": 4, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 112.777, "source": "autotuned"}, {"m": 4, "n": 16, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 114.289, "source": "autotuned"}, {"m": 4, "n": 16, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 117.51, "source": "autotuned"}, {"m": 4, "n": 16, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 118.855, "source": "autotuned"}, {"m": 4, "n": 16, "k": 24, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 116.045, "source": "autotuned"}, {"m": 4, "n": 16, "k": 26, "tile_m": 1, "tile_n": 1, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 109.271, "source": "autotuned"}, {"m": 4, "n": 16, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 119.269, "source": "autotuned"}, {"m": 4, "n": 17, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 44.3641, "source": "autotuned"}, {"m": 4, "n": 17, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 54.048, "source": "autotuned"}, {"m": 4, "n": 17, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 56.5091, "source": "autotuned"}, {"m": 4, "n": 17, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 71.3946, "source": "autotuned"}, {"m": 4, "n": 17, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 76.8119, "source": "autotuned"}, {"m": 4, "n": 17, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 99.368, "source": "autotuned"}, {"m": 4, "n": 17, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 109.498, "source": "autotuned"}, {"m": 4, "n": 17, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 98.7893, "source": "autotuned"}, {"m": 4, "n": 17, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 113.492, "source": "autotuned"}, {"m": 4, "n": 17, "k": 23, "tile_m": 1, "tile_n": 1, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 99.7952, "source": "autotuned"}, {"m": 4, "n": 17, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 107.141, "source": "autotuned"}, {"m": 4, "n": 17, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 106.081, "source": "autotuned"}, {"m": 4, "n": 17, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 6, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 113.471, "source": "autotuned"}, {"m": 4, "n": 22, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 57.4498, "source": "autotuned"}, {"m": 4, "n": 22, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 62.5018, "source": "autotuned"}, {"m": 4, "n": 22, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 72.8839, "source": "autotuned"}, {"m": 4, "n": 22, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 91.5999, "source": "autotuned"}, {"m": 4, "n": 22, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 99.159, "source": "autotuned"}, {"m": 4, "n": 22, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 118.024, "source": "autotuned"}, {"m": 4, "n": 22, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 120.717, "source": "autotuned"}, {"m": 4, "n": 22, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 121.506, "source": "autotuned"}, {"m": 4, "n": 22, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 120.919, "source": "autotuned"}, {"m": 4, "n": 22, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 116.314, "source": "autotuned"}, {"m": 4, "n": 22, "k": 24, "tile_m": 1, "tile_n": 1, "w": 8, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 121.22, "source": "autotuned"}, {"m": 4, "n": 22, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 117.406, "source": "autotuned"}, {"m": 4, "n": 22, "k": 32, "tile_m": 1, "tile_n": 1, "w": 8, "v": 20, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 127.401, "source": "autotuned"}, {"m": 4, "n": 23, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 59.7783, "source": "autotuned"}, {"m": 4, "n": 23, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 64.7027, "source": "autotuned"}, {"m": 4, "n": 23, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 75.5435, "source": "autotuned"}, {"m": 4, "n": 23, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 94.7326, "source": "autotuned"}, {"m": 4, "n": 23, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 102.115, "source": "autotuned"}, {"m": 4, "n": 23, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 109.914, "source": "autotuned"}, {"m": 4, "n": 23, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 123.335, "source": "autotuned"}, {"m": 4, "n": 23, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 110.912, "source": "autotuned"}, {"m": 4, "n": 23, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 118.425, "source": "autotuned"}, {"m": 4, "n": 23, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 119.87, "source": "autotuned"}, {"m": 4, "n": 23, "k": 24, "tile_m": 1, "tile_n": 1, "w": 10, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 119.172, "source": "autotuned"}, {"m": 4, "n": 23, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 119.54, "source": "autotuned"}, {"m": 4, "n": 23, "k": 32, "tile_m": 1, "tile_n": 1, "w": 8, "v": 20, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 127.587, "source": "autotuned"}, {"m": 4, "n": 24, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 58.0271, "source": "autotuned"}, {"m": 4, "n": 24, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 67.3989, "source": "autotuned"}, {"m": 4, "n": 24, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 78.5843, "source": "autotuned"}, {"m": 4, "n": 24, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 90.4024, "source": "autotuned"}, {"m": 4, "n": 24, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 107.128, "source": "autotuned"}, {"m": 4, "n": 24, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 115.396, "source": "autotuned"}, {"m": 4, "n": 24, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 24, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 117.543, "source": "autotuned"}, {"m": 4, "n": 24, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 115.374, "source": "autotuned"}, {"m": 4, "n": 24, "k": 22, "tile_m": 1, "tile_n": 1, "w": 8, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 123.01, "source": "autotuned"}, {"m": 4, "n": 24, "k": 23, "tile_m": 1, "tile_n": 1, "w": 8, "v": 24, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 121.888, "source": "autotuned"}, {"m": 4, "n": 24, "k": 24, "tile_m": 1, "tile_n": 1, "w": 8, "v": 24, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 126.228, "source": "autotuned"}, {"m": 4, "n": 24, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 124.519, "source": "autotuned"}, {"m": 4, "n": 24, "k": 32, "tile_m": 1, "tile_n": 1, "w": 8, "v": 22, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 131.226, "source": "autotuned"}, {"m": 4, "n": 25, "k": 4, "tile_m": 2, "tile_n": 1, "w": 2, "v": 24, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 59.7499, "source": "autotuned"}, {"m": 4, "n": 25, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 65.252, "source": "autotuned"}, {"m": 4, "n": 25, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 77.9696, "source": "autotuned"}, {"m": 4, "n": 25, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 89.8186, "source": "autotuned"}, {"m": 4, "n": 25, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 112.687, "source": "autotuned"}, {"m": 4, "n": 25, "k": 25, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 129.771, "source": "autotuned"}, {"m": 4, "n": 25, "k": 26, "tile_m": 2, "tile_n": 1, "w": 12, "v": 22, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 127.735, "source": "autotuned"}, {"m": 4, "n": 25, "k": 28, "tile_m": 2, "tile_n": 1, "w": 14, "v": 24, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 135.101, "source": "autotuned"}, {"m": 4, "n": 25, "k": 32, "tile_m": 2, "tile_n": 1, "w": 16, "v": 24, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 139.761, "source": "autotuned"}, {"m": 4, "n": 25, "k": 45, "tile_m": 2, "tile_n": 1, "w": 16, "v": 24, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 140.077, "source": "autotuned"}, {"m": 4, "n": 26, "k": 4, "tile_m": 1, "tile_n": 1, "w": 2, "v": 26, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 63.4377, "source": "autotuned"}, {"m": 4, "n": 26, "k": 5, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 61.4438, "source": "autotuned"}, {"m": 4, "n": 26, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 71.391, "source": "autotuned"}, {"m": 4, "n": 26, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 81.5028, "source": "autotuned"}, {"m": 4, "n": 26, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 87.1416, "source": "autotuned"}, {"m": 4, "n": 26, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 95.4329, "source": "autotuned"}, {"m": 4, "n": 26, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 117.999, "source": "autotuned"}, {"m": 4, "n": 26, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 118.965, "source": "autotuned"}, {"m": 4, "n": 26, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 117.606, "source": "autotuned"}, {"m": 4, "n": 26, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 124.959, "source": "autotuned"}, {"m": 4, "n": 26, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 125.45, "source": "autotuned"}, {"m": 4, "n": 26, "k": 24, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 128.616, "source": "autotuned"}, {"m": 4, "n": 26, "k": 25, "tile_m": 2, "tile_n": 1, "w": 12, "v": 14, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 128.125, "source": "autotuned"}, {"m": 4, "n": 26, "k": 26, "tile_m": 2, "tile_n": 1, "w": 12, "v": 22, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 130.88, "source": "autotuned"}, {"m": 4, "n": 26, "k": 28, "tile_m": 2, "tile_n": 1, "w": 14, "v": 26, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 137.164, "source": "autotuned"}, {"m": 4, "n": 26, "k": 32, "tile_m": 2, "tile_n": 1, "w": 16, "v": 24, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 141.257, "source": "autotuned"}, {"m": 4, "n": 26, "k": 45, "tile_m": 2, "tile_n": 1, "w": 16, "v": 14, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 140.164, "source": "autotuned"}, {"m": 4, "n": 28, "k": 4, "tile_m": 1, "tile_n": 1, "w": 2, "v": 28, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 68.2828, "source": "autotuned"}, {"m": 4, "n": 28, "k": 5, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 65.6686, "source": "autotuned"}, {"m": 4, "n": 28, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 83.3092, "source": "autotuned"}, {"m": 4, "n": 28, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 100.922, "source": "autotuned"}, {"m": 4, "n": 28, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 123.15, "source": "autotuned"}, {"m": 4, "n": 28, "k": 25, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 133.073, "source": "autotuned"}, {"m": 4, "n": 28, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 134.749, "source": "autotuned"}, {"m": 4, "n": 28, "k": 28, "tile_m": 2, "tile_n": 1, "w": 14, "v": 28, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 140.056, "source": "autotuned"}, {"m": 4, "n": 28, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 28, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 141.483, "source": "autotuned"}, {"m": 4, "n": 28, "k": 45, "tile_m": 1, "tile_n": 1, "w": 12, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 142.643, "source": "autotuned"}, {"m": 4, "n": 32, "k": 4, "tile_m": 1, "tile_n": 1, "w": 2, "v": 32, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 78.1248, "source": "autotuned"}, {"m": 4, "n": 32, "k": 5, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 74.5054, "source": "autotuned"}, {"m": 4, "n": 32, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 85.0733, "source": "autotuned"}, {"m": 4, "n": 32, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 94.5942, "source": "autotuned"}, {"m": 4, "n": 32, "k": 8, "tile_m": 1, "tile_n": 1, "w": 4, "v": 32, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 101.579, "source": "autotuned"}, {"m": 4, "n": 32, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 114.088, "source": "autotuned"}, {"m": 4, "n": 32, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 127.948, "source": "autotuned"}, {"m": 4, "n": 32, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 129.951, "source": "autotuned"}, {"m": 4, "n": 32, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 129.899, "source": "autotuned"}, {"m": 4, "n": 32, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 133.965, "source": "autotuned"}, {"m": 4, "n": 32, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 135.677, "source": "autotuned"}, {"m": 4, "n": 32, "k": 24, "tile_m": 1, "tile_n": 1, "w": 8, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 137.129, "source": "autotuned"}, {"m": 4, "n": 32, "k": 25, "tile_m": 1, "tile_n": 1, "w": 12, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 138.999, "source": "autotuned"}, {"m": 4, "n": 32, "k": 26, "tile_m": 1, "tile_n": 1, "w": 8, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 140.06, "source": "autotuned"}, {"m": 4, "n": 32, "k": 28, "tile_m": 2, "tile_n": 1, "w": 14, "v": 20, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 142.731, "source": "autotuned"}, {"m": 4, "n": 32, "k": 32, "tile_m": 1, "tile_n": 1, "w": 12, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 146.525, "source": "autotuned"}, {"m": 4, "n": 32, "k": 45, "tile_m": 2, "tile_n": 1, "w": 16, "v": 32, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 148.422, "source": "autotuned"}, {"m": 4, "n": 45, "k": 4, "tile_m": 2, "tile_n": 1, "w": 2, "v": 24, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 89.1846, "source": "autotuned"}, {"m": 4, "n": 45, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 90.7481, "source": "autotuned"}, {"m": 4, "n": 45, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 112.025, "source": "autotuned"}, {"m": 4, "n": 45, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 123.37, "source": "autotuned"}, {"m": 4, "n": 45, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 132.048, "source": "autotuned"}, {"m": 4, "n": 45, "k": 25, "tile_m": 2, "tile_n": 1, "w": 10, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 142.681, "source": "autotuned"}, {"m": 4, "n": 45, "k": 26, "tile_m": 2, "tile_n": 1, "w": 10, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 144.113, "source": "autotuned"}, {"m": 4, "n": 45, "k": 28, "tile_m": 2, "tile_n": 1, "w": 14, "v": 32, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 147.358, "source": "autotuned"}, {"m": 4, "n": 45, "k": 32, "tile_m": 2, "tile_n": 1, "w": 8, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 150.112, "source": "autotuned"}, {"m": 4, "n": 45, "k": 45, "tile_m": 1, "tile_n": 1, "w": 12, "v": 26, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 150.749, "source": "autotuned"}, {"m": 5, "n": 4, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 14.8425, "source": "autotuned"}, {"m": 5, "n": 4, "k": 5, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 17.8923, "source": "autotuned"}, {"m": 5, "n": 4, "k": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 20.6833, "source": "autotuned"}, {"m": 5, "n": 4, "k": 7, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 25.0033, "source": "autotuned"}, {"m": 5, "n": 4, "k": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 28.7395, "source": "autotuned"}, {"m": 5, "n": 4, "k": 9, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 30.3363, "source": "autotuned"}, {"m": 5, "n": 4, "k": 13, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 35.8017, "source": "autotuned"}, {"m": 5, "n": 4, "k": 16, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 35.9461, "source": "autotuned"}, {"m": 5, "n": 4, "k": 17, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 34.9185, "source": "autotuned"}, {"m": 5, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 37.0424, "source": "autotuned"}, {"m": 5, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 37.32, "source": "autotuned"}, {"m": 5, "n": 4, "k": 24, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 50.5776, "source": "autotuned"}, {"m": 5, "n": 4, "k": 25, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 42.9798, "source": "autotuned"}, {"m": 5, "n": 4, "k": 26, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 46.6834, "source": "autotuned"}, {"m": 5, "n": 4, "k": 28, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 44.9266, "source": "autotuned"}, {"m": 5, "n": 4, "k": 32, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 46.7652, "source": "autotuned"}, {"m": 5, "n": 4, "k": 45, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 39.2713, "source": "autotuned"}, {"m": 5, "n": 5, "k": 4, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 23.8033, "source": "autotuned"}, {"m": 5, "n": 5, "k": 5, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 29.5496, "source": "autotuned"}, {"m": 5, "n": 5, "k": 6, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 33.673, "source": "autotuned"}, {"m": 5, "n": 5, "k": 7, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 39.8149, "source": "autotuned"}, {"m": 5, "n": 5, "k": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 37.8978, "source": "autotuned"}, {"m": 5, "n": 5, "k": 9, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 48.7651, "source": "autotuned"}, {"m": 5, "n": 5, "k": 13, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 55.6173, "source": "autotuned"}, {"m": 5, "n": 5, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 58.79, "source": "autotuned"}, {"m": 5, "n": 5, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 60.0103, "source": "autotuned"}, {"m": 5, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 64.9733, "source": "autotuned"}, {"m": 5, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 66.7856, "source": "autotuned"}, {"m": 5, "n": 5, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 68.8446, "source": "autotuned"}, {"m": 5, "n": 5, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 69.5795, "source": "autotuned"}, {"m": 5, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 73.6718, "source": "autotuned"}, {"m": 5, "n": 5, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 78.9513, "source": "autotuned"}, {"m": 5, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 85.3813, "source": "autotuned"}, {"m": 5, "n": 5, "k": 45, "tile_m": 1, "tile_n": 1, "w": 18, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 85.4611, "source": "autotuned"}, {"m": 5, "n": 6, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 20.9988, "source": "autotuned"}, {"m": 5, "n": 6, "k": 5, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 25.4954, "source": "autotuned"}, {"m": 5, "n": 6, "k": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 31.0513, "source": "autotuned"}, {"m": 5, "n": 6, "k": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 39.6543, "source": "autotuned"}, {"m": 5, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 37.5652, "source": "autotuned"}, {"m": 5, "n": 6, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 49.3659, "source": "autotuned"}, {"m": 5, "n": 6, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 58.1624, "source": "autotuned"}, {"m": 5, "n": 6, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 52.8571, "source": "autotuned"}, {"m": 5, "n": 6, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 69.8459, "source": "autotuned"}, {"m": 5, "n": 6, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 72.2008, "source": "autotuned"}, {"m": 5, "n": 6, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 74.465, "source": "autotuned"}, {"m": 5, "n": 6, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 78.7224, "source": "autotuned"}, {"m": 5, "n": 6, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 81.0562, "source": "autotuned"}, {"m": 5, "n": 7, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 23.7332, "source": "autotuned"}, {"m": 5, "n": 7, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 29.2419, "source": "autotuned"}, {"m": 5, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 38.8739, "source": "autotuned"}, {"m": 5, "n": 7, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 47.5812, "source": "autotuned"}, {"m": 5, "n": 7, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 63.0682, "source": "autotuned"}, {"m": 5, "n": 7, "k": 25, "tile_m": 1, "tile_n": 1, "w": 10, "v": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 79.9775, "source": "autotuned"}, {"m": 5, "n": 7, "k": 26, "tile_m": 1, "tile_n": 1, "w": 10, "v": 6, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 81.302, "source": "autotuned"}, {"m": 5, "n": 7, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 4, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 89.0756, "source": "autotuned"}, {"m": 5, "n": 7, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 93.7976, "source": "autotuned"}, {"m": 5, "n": 7, "k": 45, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 98.0821, "source": "autotuned"}, {"m": 5, "n": 8, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 27.2512, "source": "autotuned"}, {"m": 5, "n": 8, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 32.9231, "source": "autotuned"}, {"m": 5, "n": 8, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 39.1691, "source": "autotuned"}, {"m": 5, "n": 8, "k": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 47.0366, "source": "autotuned"}, {"m": 5, "n": 8, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 48.3135, "source": "autotuned"}, {"m": 5, "n": 8, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 59.2125, "source": "autotuned"}, {"m": 5, "n": 8, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 67.8873, "source": "autotuned"}, {"m": 5, "n": 8, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 63.6387, "source": "autotuned"}, {"m": 5, "n": 8, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 85.8051, "source": "autotuned"}, {"m": 5, "n": 8, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 87.9872, "source": "autotuned"}, {"m": 5, "n": 8, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 8, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 84.7498, "source": "autotuned"}, {"m": 5, "n": 8, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 83.6633, "source": "autotuned"}, {"m": 5, "n": 8, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 94.1701, "source": "autotuned"}, {"m": 5, "n": 9, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 30.6314, "source": "autotuned"}, {"m": 5, "n": 9, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 37.6561, "source": "autotuned"}, {"m": 5, "n": 9, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 43.5479, "source": "autotuned"}, {"m": 5, "n": 9, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 49.7157, "source": "autotuned"}, {"m": 5, "n": 9, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 49.4117, "source": "autotuned"}, {"m": 5, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 61.0651, "source": "autotuned"}, {"m": 5, "n": 9, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 71.6433, "source": "autotuned"}, {"m": 5, "n": 9, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 71.2271, "source": "autotuned"}, {"m": 5, "n": 9, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 71.4887, "source": "autotuned"}, {"m": 5, "n": 9, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 85.9047, "source": "autotuned"}, {"m": 5, "n": 9, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 88.2854, "source": "autotuned"}, {"m": 5, "n": 9, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 90.6552, "source": "autotuned"}, {"m": 5, "n": 9, "k": 25, "tile_m": 1, "tile_n": 1, "w": 10, "v": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 98.39, "source": "autotuned"}, {"m": 5, "n": 9, "k": 26, "tile_m": 1, "tile_n": 1, "w": 10, "v": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 99.7839, "source": "autotuned"}, {"m": 5, "n": 9, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 8, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 110.791, "source": "autotuned"}, {"m": 5, "n": 9, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 8, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 114.978, "source": "autotuned"}, {"m": 5, "n": 9, "k": 45, "tile_m": 1, "tile_n": 1, "w": 18, "v": 6, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 117.396, "source": "autotuned"}, {"m": 5, "n": 13, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 43.3144, "source": "autotuned"}, {"m": 5, "n": 13, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 52.3204, "source": "autotuned"}, {"m": 5, "n": 13, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 60.4434, "source": "autotuned"}, {"m": 5, "n": 13, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 69.0831, "source": "autotuned"}, {"m": 5, "n": 13, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 63.9439, "source": "autotuned"}, {"m": 5, "n": 13, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 74.3939, "source": "autotuned"}, {"m": 5, "n": 13, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 93.8869, "source": "autotuned"}, {"m": 5, "n": 13, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 94.5206, "source": "autotuned"}, {"m": 5, "n": 13, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 99.4373, "source": "autotuned"}, {"m": 5, "n": 13, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 110.942, "source": "autotuned"}, {"m": 5, "n": 13, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 110.721, "source": "autotuned"}, {"m": 5, "n": 13, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 113.32, "source": "autotuned"}, {"m": 5, "n": 13, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 114.526, "source": "autotuned"}, {"m": 5, "n": 13, "k": 26, "tile_m": 1, "tile_n": 1, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 115.088, "source": "autotuned"}, {"m": 5, "n": 13, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 12, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 124.415, "source": "autotuned"}, {"m": 5, "n": 13, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 12, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 122.982, "source": "autotuned"}, {"m": 5, "n": 13, "k": 45, "tile_m": 1, "tile_n": 1, "w": 16, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 127.844, "source": "autotuned"}, {"m": 5, "n": 16, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 53.1228, "source": "autotuned"}, {"m": 5, "n": 16, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 63.7683, "source": "autotuned"}, {"m": 5, "n": 16, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 68.1547, "source": "autotuned"}, {"m": 5, "n": 16, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 79.5016, "source": "autotuned"}, {"m": 5, "n": 16, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 83.055, "source": "autotuned"}, {"m": 5, "n": 16, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 101.84, "source": "autotuned"}, {"m": 5, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 116.875, "source": "autotuned"}, {"m": 5, "n": 16, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 121.579, "source": "autotuned"}, {"m": 5, "n": 16, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 135.569, "source": "autotuned"}, {"m": 5, "n": 16, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 129.272, "source": "autotuned"}, {"m": 5, "n": 16, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 131.765, "source": "autotuned"}, {"m": 5, "n": 16, "k": 26, "tile_m": 1, "tile_n": 1, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 128.942, "source": "autotuned"}, {"m": 5, "n": 16, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 139.49, "source": "autotuned"}, {"m": 5, "n": 17, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 54.7705, "source": "autotuned"}, {"m": 5, "n": 17, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 66.6945, "source": "autotuned"}, {"m": 5, "n": 17, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 67.0057, "source": "autotuned"}, {"m": 5, "n": 17, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 77.7652, "source": "autotuned"}, {"m": 5, "n": 17, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 87.0744, "source": "autotuned"}, {"m": 5, "n": 17, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 106.256, "source": "autotuned"}, {"m": 5, "n": 17, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 121.156, "source": "autotuned"}, {"m": 5, "n": 17, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 119.245, "source": "autotuned"}, {"m": 5, "n": 17, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 136.959, "source": "autotuned"}, {"m": 5, "n": 17, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 123.364, "source": "autotuned"}, {"m": 5, "n": 17, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 128.46, "source": "autotuned"}, {"m": 5, "n": 17, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 132.131, "source": "autotuned"}, {"m": 5, "n": 17, "k": 32, "tile_m": 1, "tile_n": 1, "w": 14, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 135.01, "source": "autotuned"}, {"m": 5, "n": 22, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 64.6247, "source": "autotuned"}, {"m": 5, "n": 22, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 71.6059, "source": "autotuned"}, {"m": 5, "n": 22, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 73.2559, "source": "autotuned"}, {"m": 5, "n": 22, "k": 8, "tile_m": 1, "tile_n": 1, "w": 4, "v": 22, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 92.3688, "source": "autotuned"}, {"m": 5, "n": 22, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 98.0181, "source": "autotuned"}, {"m": 5, "n": 22, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 119.94, "source": "autotuned"}, {"m": 5, "n": 22, "k": 16, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 136.353, "source": "autotuned"}, {"m": 5, "n": 22, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 137.955, "source": "autotuned"}, {"m": 5, "n": 22, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 135.568, "source": "autotuned"}, {"m": 5, "n": 22, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 135.879, "source": "autotuned"}, {"m": 5, "n": 22, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 138.483, "source": "autotuned"}, {"m": 5, "n": 22, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 145.469, "source": "autotuned"}, {"m": 5, "n": 22, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 22, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 143.787, "source": "autotuned"}, {"m": 5, "n": 23, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 66.9592, "source": "autotuned"}, {"m": 5, "n": 23, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 74.1593, "source": "autotuned"}, {"m": 5, "n": 23, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 76.2473, "source": "autotuned"}, {"m": 5, "n": 23, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 94.6116, "source": "autotuned"}, {"m": 5, "n": 23, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 102.375, "source": "autotuned"}, {"m": 5, "n": 23, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 123.606, "source": "autotuned"}, {"m": 5, "n": 23, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 140, "source": "autotuned"}, {"m": 5, "n": 23, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 125.344, "source": "autotuned"}, {"m": 5, "n": 23, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 144.101, "source": "autotuned"}, {"m": 5, "n": 23, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 141.081, "source": "autotuned"}, {"m": 5, "n": 23, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 143.882, "source": "autotuned"}, {"m": 5, "n": 23, "k": 26, "tile_m": 1, "tile_n": 1, "w": 10, "v": 22, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 136.154, "source": "autotuned"}, {"m": 5, "n": 23, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 22, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 145.364, "source": "autotuned"}, {"m": 5, "n": 24, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 70.2727, "source": "autotuned"}, {"m": 5, "n": 24, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 79.6991, "source": "autotuned"}, {"m": 5, "n": 24, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 80.5021, "source": "autotuned"}, {"m": 5, "n": 24, "k": 8, "tile_m": 1, "tile_n": 1, "w": 4, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 100.583, "source": "autotuned"}, {"m": 5, "n": 24, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 107.639, "source": "autotuned"}, {"m": 5, "n": 24, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 130.403, "source": "autotuned"}, {"m": 5, "n": 24, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 138.648, "source": "autotuned"}, {"m": 5, "n": 24, "k": 17, "tile_m": 1, "tile_n": 1, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 128.385, "source": "autotuned"}, {"m": 5, "n": 24, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 147.78, "source": "autotuned"}, {"m": 5, "n": 24, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 147.238, "source": "autotuned"}, {"m": 5, "n": 24, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 149.11, "source": "autotuned"}, {"m": 5, "n": 24, "k": 26, "tile_m": 1, "tile_n": 1, "w": 10, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 144.829, "source": "autotuned"}, {"m": 5, "n": 24, "k": 32, "tile_m": 1, "tile_n": 1, "w": 12, "v": 24, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 151.834, "source": "autotuned"}, {"m": 5, "n": 25, "k": 4, "tile_m": 1, "tile_n": 1, "w": 2, "v": 24, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 71.6625, "source": "autotuned"}, {"m": 5, "n": 25, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 80.6391, "source": "autotuned"}, {"m": 5, "n": 25, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 92.0275, "source": "autotuned"}, {"m": 5, "n": 25, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 111.946, "source": "autotuned"}, {"m": 5, "n": 25, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 138.956, "source": "autotuned"}, {"m": 5, "n": 25, "k": 25, "tile_m": 1, "tile_n": 1, "w": 10, "v": 22, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 151.406, "source": "autotuned"}, {"m": 5, "n": 25, "k": 26, "tile_m": 1, "tile_n": 1, "w": 10, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 152.399, "source": "autotuned"}, {"m": 5, "n": 25, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 159.392, "source": "autotuned"}, {"m": 5, "n": 25, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 20, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 164.81, "source": "autotuned"}, {"m": 5, "n": 25, "k": 45, "tile_m": 1, "tile_n": 1, "w": 16, "v": 22, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 167.254, "source": "autotuned"}, {"m": 5, "n": 26, "k": 4, "tile_m": 1, "tile_n": 2, "w": 2, "v": 26, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 73.0565, "source": "autotuned"}, {"m": 5, "n": 26, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 72.8437, "source": "autotuned"}, {"m": 5, "n": 26, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 83.0577, "source": "autotuned"}, {"m": 5, "n": 26, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 92.7505, "source": "autotuned"}, {"m": 5, "n": 26, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 97.7841, "source": "autotuned"}, {"m": 5, "n": 26, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 106.059, "source": "autotuned"}, {"m": 5, "n": 26, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 127.925, "source": "autotuned"}, {"m": 5, "n": 26, "k": 16, "tile_m": 1, "tile_n": 2, "w": 8, "v": 24, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 124.739, "source": "autotuned"}, {"m": 5, "n": 26, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 121.911, "source": "autotuned"}, {"m": 5, "n": 26, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 138.328, "source": "autotuned"}, {"m": 5, "n": 26, "k": 23, "tile_m": 1, "tile_n": 2, "w": 6, "v": 26, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 133.003, "source": "autotuned"}, {"m": 5, "n": 26, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 26, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 142.549, "source": "autotuned"}, {"m": 5, "n": 26, "k": 25, "tile_m": 6, "tile_n": 1, "w": 12, "v": 26, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 150.57, "source": "autotuned"}, {"m": 5, "n": 26, "k": 26, "tile_m": 5, "tile_n": 1, "w": 12, "v": 26, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 152.336, "source": "autotuned"}, {"m": 5, "n": 26, "k": 28, "tile_m": 2, "tile_n": 3, "w": 14, "v": 26, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 161.207, "source": "autotuned"}, {"m": 5, "n": 26, "k": 32, "tile_m": 2, "tile_n": 3, "w": 16, "v": 26, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 165.179, "source": "autotuned"}, {"m": 5, "n": 26, "k": 45, "tile_m": 3, "tile_n": 1, "w": 16, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 163.833, "source": "autotuned"}, {"m": 5, "n": 28, "k": 4, "tile_m": 1, "tile_n": 2, "w": 2, "v": 28, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 78.7832, "source": "autotuned"}, {"m": 5, "n": 28, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 78.538, "source": "autotuned"}, {"m": 5, "n": 28, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 94.7919, "source": "autotuned"}, {"m": 5, "n": 28, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 114.142, "source": "autotuned"}, {"m": 5, "n": 28, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 136.621, "source": "autotuned"}, {"m": 5, "n": 28, "k": 25, "tile_m": 1, "tile_n": 2, "w": 10, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 155.335, "source": "autotuned"}, {"m": 5, "n": 28, "k": 26, "tile_m": 6, "tile_n": 1, "w": 10, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 157.636, "source": "autotuned"}, {"m": 5, "n": 28, "k": 28, "tile_m": 3, "tile_n": 2, "w": 14, "v": 28, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 164.633, "source": "autotuned"}, {"m": 5, "n": 28, "k": 32, "tile_m": 5, "tile_n": 1, "w": 12, "v": 28, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 167.029, "source": "autotuned"}, {"m": 5, "n": 28, "k": 45, "tile_m": 2, "tile_n": 1, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 170.753, "source": "autotuned"}, {"m": 5, "n": 32, "k": 4, "tile_m": 1, "tile_n": 2, "w": 2, "v": 32, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 90.3387, "source": "autotuned"}, {"m": 5, "n": 32, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 90.1318, "source": "autotuned"}, {"m": 5, "n": 32, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 95.4478, "source": "autotuned"}, {"m": 5, "n": 32, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 110.148, "source": "autotuned"}, {"m": 5, "n": 32, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 120.304, "source": "autotuned"}, {"m": 5, "n": 32, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 128.642, "source": "autotuned"}, {"m": 5, "n": 32, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 146.704, "source": "autotuned"}, {"m": 5, "n": 32, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 148.849, "source": "autotuned"}, {"m": 5, "n": 32, "k": 17, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 145.146, "source": "autotuned"}, {"m": 5, "n": 32, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 152.464, "source": "autotuned"}, {"m": 5, "n": 32, "k": 23, "tile_m": 1, "tile_n": 2, "w": 6, "v": 32, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 153.738, "source": "autotuned"}, {"m": 5, "n": 32, "k": 24, "tile_m": 1, "tile_n": 2, "w": 8, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 156.997, "source": "autotuned"}, {"m": 5, "n": 32, "k": 25, "tile_m": 5, "tile_n": 1, "w": 12, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 165.526, "source": "autotuned"}, {"m": 5, "n": 32, "k": 26, "tile_m": 1, "tile_n": 2, "w": 10, "v": 32, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 167.342, "source": "autotuned"}, {"m": 5, "n": 32, "k": 28, "tile_m": 2, "tile_n": 1, "w": 10, "v": 32, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 170.549, "source": "autotuned"}, {"m": 5, "n": 32, "k": 32, "tile_m": 1, "tile_n": 2, "w": 12, "v": 32, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 175.093, "source": "autotuned"}, {"m": 5, "n": 32, "k": 45, "tile_m": 2, "tile_n": 1, "w": 12, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 178.419, "source": "autotuned"}, {"m": 5, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "w": 2, "v": 44, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 102.104, "source": "autotuned"}, {"m": 5, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "w": 2, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 103.389, "source": "autotuned"}, {"m": 5, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 131.225, "source": "autotuned"}, {"m": 5, "n": 45, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 142.875, "source": "autotuned"}, {"m": 5, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 154.231, "source": "autotuned"}, {"m": 5, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "w": 10, "v": 44, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 169.95, "source": "autotuned"}, {"m": 5, "n": 45, "k": 26, "tile_m": 3, "tile_n": 1, "w": 8, "v": 18, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 170.684, "source": "autotuned"}, {"m": 5, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "w": 14, "v": 26, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 177.397, "source": "autotuned"}, {"m": 5, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "w": 8, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 181.043, "source": "autotuned"}, {"m": 5, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "w": 12, "v": 42, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 183.404, "source": "autotuned"}, {"m": 6, "n": 4, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 17.3648, "source": "autotuned"}, {"m": 6, "n": 4, "k": 5, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 20.891, "source": "autotuned"}, {"m": 6, "n": 4, "k": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 25.3088, "source": "autotuned"}, {"m": 6, "n": 4, "k": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 34.4029, "source": "autotuned"}, {"m": 6, "n": 4, "k": 9, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 30.9154, "source": "autotuned"}, {"m": 6, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 40.7212, "source": "autotuned"}, {"m": 6, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 48.547, "source": "autotuned"}, {"m": 6, "n": 4, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 42.7597, "source": "autotuned"}, {"m": 6, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 59.0194, "source": "autotuned"}, {"m": 6, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 62.4159, "source": "autotuned"}, {"m": 6, "n": 4, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 59.3286, "source": "autotuned"}, {"m": 6, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 63.2716, "source": "autotuned"}, {"m": 6, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 71.0281, "source": "autotuned"}, {"m": 6, "n": 5, "k": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 21.0382, "source": "autotuned"}, {"m": 6, "n": 5, "k": 5, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 25.6146, "source": "autotuned"}, {"m": 6, "n": 5, "k": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 30.7386, "source": "autotuned"}, {"m": 6, "n": 5, "k": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 39.7844, "source": "autotuned"}, {"m": 6, "n": 5, "k": 9, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 37.5717, "source": "autotuned"}, {"m": 6, "n": 5, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 49.4221, "source": "autotuned"}, {"m": 6, "n": 5, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 58.085, "source": "autotuned"}, {"m": 6, "n": 5, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 52.5703, "source": "autotuned"}, {"m": 6, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 69.4004, "source": "autotuned"}, {"m": 6, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 71.6165, "source": "autotuned"}, {"m": 6, "n": 5, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 73.8541, "source": "autotuned"}, {"m": 6, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 78.7409, "source": "autotuned"}, {"m": 6, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 87.6399, "source": "autotuned"}, {"m": 6, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 29.0092, "source": "autotuned"}, {"m": 6, "n": 6, "k": 5, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 34.7398, "source": "autotuned"}, {"m": 6, "n": 6, "k": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 41.3431, "source": "autotuned"}, {"m": 6, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 51.4584, "source": "autotuned"}, {"m": 6, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 54.7869, "source": "autotuned"}, {"m": 6, "n": 6, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 65.899, "source": "autotuned"}, {"m": 6, "n": 6, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 74.696, "source": "autotuned"}, {"m": 6, "n": 6, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 73.6249, "source": "autotuned"}, {"m": 6, "n": 6, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 83.3214, "source": "autotuned"}, {"m": 6, "n": 6, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 85.2118, "source": "autotuned"}, {"m": 6, "n": 6, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 87.2119, "source": "autotuned"}, {"m": 6, "n": 6, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 91.5958, "source": "autotuned"}, {"m": 6, "n": 6, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 93.8914, "source": "autotuned"}, {"m": 6, "n": 6, "k": 36, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 90.6049, "source": "autotuned"}, {"m": 6, "n": 8, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 32.8542, "source": "autotuned"}, {"m": 6, "n": 8, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 39.5654, "source": "autotuned"}, {"m": 6, "n": 8, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 46.7754, "source": "autotuned"}, {"m": 6, "n": 8, "k": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 56.4219, "source": "autotuned"}, {"m": 6, "n": 8, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 57.8262, "source": "autotuned"}, {"m": 6, "n": 8, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 70.6689, "source": "autotuned"}, {"m": 6, "n": 8, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 81.6668, "source": "autotuned"}, {"m": 6, "n": 8, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 75.7991, "source": "autotuned"}, {"m": 6, "n": 8, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 102.189, "source": "autotuned"}, {"m": 6, "n": 8, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 104.903, "source": "autotuned"}, {"m": 6, "n": 8, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 8, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 99.5961, "source": "autotuned"}, {"m": 6, "n": 8, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 100.125, "source": "autotuned"}, {"m": 6, "n": 8, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 8, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 110.732, "source": "autotuned"}, {"m": 6, "n": 9, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 35.8024, "source": "autotuned"}, {"m": 6, "n": 9, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 43.8484, "source": "autotuned"}, {"m": 6, "n": 9, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 51.8175, "source": "autotuned"}, {"m": 6, "n": 9, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 58.965, "source": "autotuned"}, {"m": 6, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 63.9309, "source": "autotuned"}, {"m": 6, "n": 9, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 78.5539, "source": "autotuned"}, {"m": 6, "n": 9, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 84.561, "source": "autotuned"}, {"m": 6, "n": 9, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 84.3988, "source": "autotuned"}, {"m": 6, "n": 9, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 100.301, "source": "autotuned"}, {"m": 6, "n": 9, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 103.968, "source": "autotuned"}, {"m": 6, "n": 9, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 106.858, "source": "autotuned"}, {"m": 6, "n": 9, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 110.172, "source": "autotuned"}, {"m": 6, "n": 9, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 117.743, "source": "autotuned"}, {"m": 6, "n": 13, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 50.793, "source": "autotuned"}, {"m": 6, "n": 13, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 61.4172, "source": "autotuned"}, {"m": 6, "n": 13, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 72.3602, "source": "autotuned"}, {"m": 6, "n": 13, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 76.7893, "source": "autotuned"}, {"m": 6, "n": 13, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 82.6919, "source": "autotuned"}, {"m": 6, "n": 13, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 103.505, "source": "autotuned"}, {"m": 6, "n": 13, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 109.832, "source": "autotuned"}, {"m": 6, "n": 13, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 107.414, "source": "autotuned"}, {"m": 6, "n": 13, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 126.399, "source": "autotuned"}, {"m": 6, "n": 13, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 127.16, "source": "autotuned"}, {"m": 6, "n": 13, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 129.224, "source": "autotuned"}, {"m": 6, "n": 13, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 124.698, "source": "autotuned"}, {"m": 6, "n": 13, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 134.667, "source": "autotuned"}, {"m": 6, "n": 16, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 63.5995, "source": "autotuned"}, {"m": 6, "n": 16, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 78.998, "source": "autotuned"}, {"m": 6, "n": 16, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 79.6159, "source": "autotuned"}, {"m": 6, "n": 16, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 94.2819, "source": "autotuned"}, {"m": 6, "n": 16, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 99.4404, "source": "autotuned"}, {"m": 6, "n": 16, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 121.474, "source": "autotuned"}, {"m": 6, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 131.447, "source": "autotuned"}, {"m": 6, "n": 16, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 130.503, "source": "autotuned"}, {"m": 6, "n": 16, "k": 22, "tile_m": 1, "tile_n": 1, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 140.994, "source": "autotuned"}, {"m": 6, "n": 16, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 143.929, "source": "autotuned"}, {"m": 6, "n": 16, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 151.414, "source": "autotuned"}, {"m": 6, "n": 16, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 150.43, "source": "autotuned"}, {"m": 6, "n": 16, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 162.722, "source": "autotuned"}, {"m": 6, "n": 17, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 60.5441, "source": "autotuned"}, {"m": 6, "n": 17, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 68.6498, "source": "autotuned"}, {"m": 6, "n": 17, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 75.0572, "source": "autotuned"}, {"m": 6, "n": 17, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 88.8231, "source": "autotuned"}, {"m": 6, "n": 17, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 96.638, "source": "autotuned"}, {"m": 6, "n": 17, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 115.635, "source": "autotuned"}, {"m": 6, "n": 17, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 122.699, "source": "autotuned"}, {"m": 6, "n": 17, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 122.369, "source": "autotuned"}, {"m": 6, "n": 17, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 138.221, "source": "autotuned"}, {"m": 6, "n": 17, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 137.919, "source": "autotuned"}, {"m": 6, "n": 17, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 141.952, "source": "autotuned"}, {"m": 6, "n": 17, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 145.765, "source": "autotuned"}, {"m": 6, "n": 17, "k": 32, "tile_m": 1, "tile_n": 1, "w": 14, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 147.119, "source": "autotuned"}, {"m": 6, "n": 22, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 68.9181, "source": "autotuned"}, {"m": 6, "n": 22, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 77.9158, "source": "autotuned"}, {"m": 6, "n": 22, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 85.5436, "source": "autotuned"}, {"m": 6, "n": 22, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 107.115, "source": "autotuned"}, {"m": 6, "n": 22, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 107.717, "source": "autotuned"}, {"m": 6, "n": 22, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 130.85, "source": "autotuned"}, {"m": 6, "n": 22, "k": 16, "tile_m": 1, "tile_n": 2, "w": 8, "v": 14, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 143.533, "source": "autotuned"}, {"m": 6, "n": 22, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 147.658, "source": "autotuned"}, {"m": 6, "n": 22, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 142.021, "source": "autotuned"}, {"m": 6, "n": 22, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 144.504, "source": "autotuned"}, {"m": 6, "n": 22, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 22, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 150.931, "source": "autotuned"}, {"m": 6, "n": 22, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 151.978, "source": "autotuned"}, {"m": 6, "n": 22, "k": 32, "tile_m": 2, "tile_n": 3, "w": 16, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 160.565, "source": "autotuned"}, {"m": 6, "n": 23, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 70.9369, "source": "autotuned"}, {"m": 6, "n": 23, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 80.8594, "source": "autotuned"}, {"m": 6, "n": 23, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 88.9708, "source": "autotuned"}, {"m": 6, "n": 23, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 111.224, "source": "autotuned"}, {"m": 6, "n": 23, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 111.977, "source": "autotuned"}, {"m": 6, "n": 23, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 138.705, "source": "autotuned"}, {"m": 6, "n": 23, "k": 16, "tile_m": 2, "tile_n": 1, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 145.791, "source": "autotuned"}, {"m": 6, "n": 23, "k": 17, "tile_m": 2, "tile_n": 1, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 130.847, "source": "autotuned"}, {"m": 6, "n": 23, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 145.676, "source": "autotuned"}, {"m": 6, "n": 23, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 147.626, "source": "autotuned"}, {"m": 6, "n": 23, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 153.564, "source": "autotuned"}, {"m": 6, "n": 23, "k": 26, "tile_m": 2, "tile_n": 1, "w": 10, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 149.513, "source": "autotuned"}, {"m": 6, "n": 23, "k": 32, "tile_m": 2, "tile_n": 1, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 163.779, "source": "autotuned"}, {"m": 6, "n": 24, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 77.1222, "source": "autotuned"}, {"m": 6, "n": 24, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 85.3145, "source": "autotuned"}, {"m": 6, "n": 24, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 94.4076, "source": "autotuned"}, {"m": 6, "n": 24, "k": 8, "tile_m": 2, "tile_n": 1, "w": 4, "v": 24, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 110.004, "source": "autotuned"}, {"m": 6, "n": 24, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 118.271, "source": "autotuned"}, {"m": 6, "n": 24, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 142.641, "source": "autotuned"}, {"m": 6, "n": 24, "k": 16, "tile_m": 1, "tile_n": 2, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 155.64, "source": "autotuned"}, {"m": 6, "n": 24, "k": 17, "tile_m": 1, "tile_n": 2, "w": 8, "v": 24, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 140.277, "source": "autotuned"}, {"m": 6, "n": 24, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 154.822, "source": "autotuned"}, {"m": 6, "n": 24, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 156.783, "source": "autotuned"}, {"m": 6, "n": 24, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 24, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 163.247, "source": "autotuned"}, {"m": 6, "n": 24, "k": 26, "tile_m": 1, "tile_n": 2, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 158.81, "source": "autotuned"}, {"m": 6, "n": 24, "k": 32, "tile_m": 2, "tile_n": 1, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 171.227, "source": "autotuned"}, {"m": 6, "n": 26, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 72.8888, "source": "autotuned"}, {"m": 6, "n": 26, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 86.2243, "source": "autotuned"}, {"m": 6, "n": 26, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 100.321, "source": "autotuned"}, {"m": 6, "n": 26, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 114.794, "source": "autotuned"}, {"m": 6, "n": 26, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 124.78, "source": "autotuned"}, {"m": 6, "n": 26, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 150.084, "source": "autotuned"}, {"m": 6, "n": 26, "k": 16, "tile_m": 2, "tile_n": 1, "w": 8, "v": 26, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 148.541, "source": "autotuned"}, {"m": 6, "n": 26, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 146.817, "source": "autotuned"}, {"m": 6, "n": 26, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 164.867, "source": "autotuned"}, {"m": 6, "n": 26, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 167.944, "source": "autotuned"}, {"m": 6, "n": 26, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 26, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 167.824, "source": "autotuned"}, {"m": 6, "n": 26, "k": 26, "tile_m": 1, "tile_n": 2, "w": 10, "v": 26, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 160.058, "source": "autotuned"}, {"m": 6, "n": 26, "k": 32, "tile_m": 1, "tile_n": 1, "w": 12, "v": 26, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 172.981, "source": "autotuned"}, {"m": 6, "n": 32, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 88.5988, "source": "autotuned"}, {"m": 6, "n": 32, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 107.109, "source": "autotuned"}, {"m": 6, "n": 32, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 112.623, "source": "autotuned"}, {"m": 6, "n": 32, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 136.523, "source": "autotuned"}, {"m": 6, "n": 32, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 148.067, "source": "autotuned"}, {"m": 6, "n": 32, "k": 13, "tile_m": 1, "tile_n": 2, "w": 6, "v": 16, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 157.238, "source": "autotuned"}, {"m": 6, "n": 32, "k": 16, "tile_m": 2, "tile_n": 1, "w": 8, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 170.847, "source": "autotuned"}, {"m": 6, "n": 32, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 172.856, "source": "autotuned"}, {"m": 6, "n": 32, "k": 22, "tile_m": 2, "tile_n": 1, "w": 8, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 177.946, "source": "autotuned"}, {"m": 6, "n": 32, "k": 23, "tile_m": 2, "tile_n": 1, "w": 8, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 179.578, "source": "autotuned"}, {"m": 6, "n": 32, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 184.552, "source": "autotuned"}, {"m": 6, "n": 32, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 182.386, "source": "autotuned"}, {"m": 6, "n": 32, "k": 32, "tile_m": 2, "tile_n": 1, "w": 8, "v": 18, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 192.489, "source": "autotuned"}, {"m": 6, "n": 36, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 119.79, "source": "autotuned"}, {"m": 7, "n": 4, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 20.321, "source": "autotuned"}, {"m": 7, "n": 4, "k": 5, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 25.1685, "source": "autotuned"}, {"m": 7, "n": 4, "k": 7, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 33.8708, "source": "autotuned"}, {"m": 7, "n": 4, "k": 9, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 41.5372, "source": "autotuned"}, {"m": 7, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 53.8869, "source": "autotuned"}, {"m": 7, "n": 4, "k": 25, "tile_m": 1, "tile_n": 1, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 73.2421, "source": "autotuned"}, {"m": 7, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 75.2431, "source": "autotuned"}, {"m": 7, "n": 4, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 84.3456, "source": "autotuned"}, {"m": 7, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 90.5669, "source": "autotuned"}, {"m": 7, "n": 4, "k": 45, "tile_m": 1, "tile_n": 1, "w": 18, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 89.7354, "source": "autotuned"}, {"m": 7, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 23.648, "source": "autotuned"}, {"m": 7, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 28.8325, "source": "autotuned"}, {"m": 7, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 38.3808, "source": "autotuned"}, {"m": 7, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 47.369, "source": "autotuned"}, {"m": 7, "n": 5, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 62.9693, "source": "autotuned"}, {"m": 7, "n": 5, "k": 25, "tile_m": 1, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 79.6162, "source": "autotuned"}, {"m": 7, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 81.9313, "source": "autotuned"}, {"m": 7, "n": 5, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 88.1174, "source": "autotuned"}, {"m": 7, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 93.4222, "source": "autotuned"}, {"m": 7, "n": 5, "k": 45, "tile_m": 1, "tile_n": 1, "w": 18, "v": 4, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 98.0637, "source": "autotuned"}, {"m": 7, "n": 7, "k": 4, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 40.7019, "source": "autotuned"}, {"m": 7, "n": 7, "k": 5, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 49.7395, "source": "autotuned"}, {"m": 7, "n": 7, "k": 7, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 64.2082, "source": "autotuned"}, {"m": 7, "n": 7, "k": 9, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 74.9724, "source": "autotuned"}, {"m": 7, "n": 7, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 92.3343, "source": "autotuned"}, {"m": 7, "n": 7, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 116.952, "source": "autotuned"}, {"m": 7, "n": 7, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 111.036, "source": "autotuned"}, {"m": 7, "n": 7, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 6, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 119.39, "source": "autotuned"}, {"m": 7, "n": 7, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 126.959, "source": "autotuned"}, {"m": 7, "n": 7, "k": 45, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 128.604, "source": "autotuned"}, {"m": 7, "n": 7, "k": 49, "tile_m": 1, "tile_n": 1, "w": 18, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 120.76, "source": "autotuned"}, {"m": 7, "n": 9, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 42.249, "source": "autotuned"}, {"m": 7, "n": 9, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 50.9731, "source": "autotuned"}, {"m": 7, "n": 9, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 68.4855, "source": "autotuned"}, {"m": 7, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 84.8179, "source": "autotuned"}, {"m": 7, "n": 9, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 101.494, "source": "autotuned"}, {"m": 7, "n": 9, "k": 25, "tile_m": 1, "tile_n": 1, "w": 10, "v": 8, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 127.326, "source": "autotuned"}, {"m": 7, "n": 9, "k": 26, "tile_m": 1, "tile_n": 1, "w": 10, "v": 8, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 129.924, "source": "autotuned"}, {"m": 7, "n": 9, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 8, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 142.345, "source": "autotuned"}, {"m": 7, "n": 9, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 145.13, "source": "autotuned"}, {"m": 7, "n": 9, "k": 45, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 145.375, "source": "autotuned"}, {"m": 7, "n": 13, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 59.6126, "source": "autotuned"}, {"m": 7, "n": 13, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 71.567, "source": "autotuned"}, {"m": 7, "n": 13, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 94.7367, "source": "autotuned"}, {"m": 7, "n": 13, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 104.845, "source": "autotuned"}, {"m": 7, "n": 13, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 131.471, "source": "autotuned"}, {"m": 7, "n": 13, "k": 25, "tile_m": 1, "tile_n": 1, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 152.657, "source": "autotuned"}, {"m": 7, "n": 13, "k": 26, "tile_m": 1, "tile_n": 1, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 154.864, "source": "autotuned"}, {"m": 7, "n": 13, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 6, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 160.679, "source": "autotuned"}, {"m": 7, "n": 13, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 12, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 167.82, "source": "autotuned"}, {"m": 7, "n": 13, "k": 45, "tile_m": 1, "tile_n": 1, "w": 16, "v": 12, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 170.871, "source": "autotuned"}, {"m": 7, "n": 25, "k": 4, "tile_m": 1, "tile_n": 2, "w": 2, "v": 24, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 90.6823, "source": "autotuned"}, {"m": 7, "n": 25, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 96.0502, "source": "autotuned"}, {"m": 7, "n": 25, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 116.201, "source": "autotuned"}, {"m": 7, "n": 25, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 137.027, "source": "autotuned"}, {"m": 7, "n": 25, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 165.715, "source": "autotuned"}, {"m": 7, "n": 25, "k": 25, "tile_m": 1, "tile_n": 2, "w": 12, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 192.888, "source": "autotuned"}, {"m": 7, "n": 25, "k": 26, "tile_m": 1, "tile_n": 2, "w": 12, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 195.055, "source": "autotuned"}, {"m": 7, "n": 25, "k": 28, "tile_m": 2, "tile_n": 2, "w": 14, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 204.588, "source": "autotuned"}, {"m": 7, "n": 25, "k": 32, "tile_m": 1, "tile_n": 2, "w": 16, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 209.44, "source": "autotuned"}, {"m": 7, "n": 25, "k": 45, "tile_m": 1, "tile_n": 2, "w": 12, "v": 24, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 212.537, "source": "autotuned"}, {"m": 7, "n": 26, "k": 4, "tile_m": 1, "tile_n": 2, "w": 2, "v": 26, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 98.6714, "source": "autotuned"}, {"m": 7, "n": 26, "k": 5, "tile_m": 1, "tile_n": 2, "w": 2, "v": 26, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 97.2595, "source": "autotuned"}, {"m": 7, "n": 26, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 120.571, "source": "autotuned"}, {"m": 7, "n": 26, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 142.154, "source": "autotuned"}, {"m": 7, "n": 26, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 171.139, "source": "autotuned"}, {"m": 7, "n": 26, "k": 25, "tile_m": 1, "tile_n": 2, "w": 12, "v": 26, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 197.945, "source": "autotuned"}, {"m": 7, "n": 26, "k": 26, "tile_m": 1, "tile_n": 2, "w": 12, "v": 26, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 200.252, "source": "autotuned"}, {"m": 7, "n": 26, "k": 28, "tile_m": 1, "tile_n": 2, "w": 14, "v": 26, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 208.875, "source": "autotuned"}, {"m": 7, "n": 26, "k": 32, "tile_m": 1, "tile_n": 2, "w": 16, "v": 18, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 213.257, "source": "autotuned"}, {"m": 7, "n": 26, "k": 45, "tile_m": 1, "tile_n": 2, "w": 12, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 219.31, "source": "autotuned"}, {"m": 7, "n": 28, "k": 4, "tile_m": 2, "tile_n": 2, "w": 2, "v": 28, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 101.062, "source": "autotuned"}, {"m": 7, "n": 28, "k": 5, "tile_m": 2, "tile_n": 2, "w": 2, "v": 28, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 99.5538, "source": "autotuned"}, {"m": 7, "n": 28, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 121.608, "source": "autotuned"}, {"m": 7, "n": 28, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 147.435, "source": "autotuned"}, {"m": 7, "n": 28, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 169.528, "source": "autotuned"}, {"m": 7, "n": 28, "k": 25, "tile_m": 2, "tile_n": 2, "w": 12, "v": 28, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 201.753, "source": "autotuned"}, {"m": 7, "n": 28, "k": 26, "tile_m": 2, "tile_n": 2, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 204.712, "source": "autotuned"}, {"m": 7, "n": 28, "k": 28, "tile_m": 2, "tile_n": 2, "w": 14, "v": 28, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 210.808, "source": "autotuned"}, {"m": 7, "n": 28, "k": 32, "tile_m": 2, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 216.209, "source": "autotuned"}, {"m": 7, "n": 28, "k": 45, "tile_m": 2, "tile_n": 2, "w": 12, "v": 28, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 223.329, "source": "autotuned"}, {"m": 7, "n": 32, "k": 4, "tile_m": 2, "tile_n": 2, "w": 2, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 115.233, "source": "autotuned"}, {"m": 7, "n": 32, "k": 5, "tile_m": 2, "tile_n": 2, "w": 2, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 114.267, "source": "autotuned"}, {"m": 7, "n": 32, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 140.19, "source": "autotuned"}, {"m": 7, "n": 32, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 162.426, "source": "autotuned"}, {"m": 7, "n": 32, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 185.749, "source": "autotuned"}, {"m": 7, "n": 32, "k": 25, "tile_m": 2, "tile_n": 2, "w": 12, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 215.554, "source": "autotuned"}, {"m": 7, "n": 32, "k": 26, "tile_m": 2, "tile_n": 2, "w": 12, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 217.184, "source": "autotuned"}, {"m": 7, "n": 32, "k": 28, "tile_m": 2, "tile_n": 2, "w": 10, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 220.896, "source": "autotuned"}, {"m": 7, "n": 32, "k": 32, "tile_m": 2, "tile_n": 2, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 226.677, "source": "autotuned"}, {"m": 7, "n": 32, "k": 45, "tile_m": 2, "tile_n": 2, "w": 12, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 234.276, "source": "autotuned"}, {"m": 7, "n": 45, "k": 4, "tile_m": 2, "tile_n": 2, "w": 2, "v": 32, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 128.485, "source": "autotuned"}, {"m": 7, "n": 45, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 130.706, "source": "autotuned"}, {"m": 7, "n": 45, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 151.354, "source": "autotuned"}, {"m": 7, "n": 45, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 179.007, "source": "autotuned"}, {"m": 7, "n": 45, "k": 13, "tile_m": 2, "tile_n": 2, "w": 6, "v": 28, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 193.014, "source": "autotuned"}, {"m": 7, "n": 45, "k": 25, "tile_m": 2, "tile_n": 2, "w": 8, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 223.056, "source": "autotuned"}, {"m": 7, "n": 45, "k": 26, "tile_m": 2, "tile_n": 2, "w": 8, "v": 36, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 225.941, "source": "autotuned"}, {"m": 7, "n": 45, "k": 28, "tile_m": 2, "tile_n": 2, "w": 14, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 232.072, "source": "autotuned"}, {"m": 7, "n": 45, "k": 32, "tile_m": 2, "tile_n": 3, "w": 8, "v": 38, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 236.673, "source": "autotuned"}, {"m": 7, "n": 45, "k": 45, "tile_m": 2, "tile_n": 2, "w": 12, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 241.311, "source": "autotuned"}, {"m": 7, "n": 49, "k": 7, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 147.937, "source": "autotuned"}, {"m": 8, "n": 4, "k": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 23.9735, "source": "autotuned"}, {"m": 8, "n": 4, "k": 5, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 28.4815, "source": "autotuned"}, {"m": 8, "n": 4, "k": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 34.2353, "source": "autotuned"}, {"m": 8, "n": 4, "k": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 45.8575, "source": "autotuned"}, {"m": 8, "n": 4, "k": 9, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 48.5061, "source": "autotuned"}, {"m": 8, "n": 4, "k": 13, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 55.0971, "source": "autotuned"}, {"m": 8, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 64.3498, "source": "autotuned"}, {"m": 8, "n": 4, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 66.887, "source": "autotuned"}, {"m": 8, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 80.5774, "source": "autotuned"}, {"m": 8, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 83.3154, "source": "autotuned"}, {"m": 8, "n": 4, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 78.1446, "source": "autotuned"}, {"m": 8, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 72.9839, "source": "autotuned"}, {"m": 8, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 84.7409, "source": "autotuned"}, {"m": 8, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 27.0068, "source": "autotuned"}, {"m": 8, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 33.1999, "source": "autotuned"}, {"m": 8, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 38.8056, "source": "autotuned"}, {"m": 8, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 49.3499, "source": "autotuned"}, {"m": 8, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 54.6039, "source": "autotuned"}, {"m": 8, "n": 5, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 64.6405, "source": "autotuned"}, {"m": 8, "n": 5, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 75.6469, "source": "autotuned"}, {"m": 8, "n": 5, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 78.0896, "source": "autotuned"}, {"m": 8, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 86.0905, "source": "autotuned"}, {"m": 8, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 88.5829, "source": "autotuned"}, {"m": 8, "n": 5, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 80.7721, "source": "autotuned"}, {"m": 8, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 83.5916, "source": "autotuned"}, {"m": 8, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 94.7041, "source": "autotuned"}, {"m": 8, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 32.5636, "source": "autotuned"}, {"m": 8, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 39.9008, "source": "autotuned"}, {"m": 8, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 46.2498, "source": "autotuned"}, {"m": 8, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 59.3358, "source": "autotuned"}, {"m": 8, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 65.4188, "source": "autotuned"}, {"m": 8, "n": 6, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 77.8557, "source": "autotuned"}, {"m": 8, "n": 6, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 85.9489, "source": "autotuned"}, {"m": 8, "n": 6, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 87.1602, "source": "autotuned"}, {"m": 8, "n": 6, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 102.308, "source": "autotuned"}, {"m": 8, "n": 6, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 105.056, "source": "autotuned"}, {"m": 8, "n": 6, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 6, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 99.2986, "source": "autotuned"}, {"m": 8, "n": 6, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 100.382, "source": "autotuned"}, {"m": 8, "n": 6, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 112.447, "source": "autotuned"}, {"m": 8, "n": 8, "k": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 52.7483, "source": "autotuned"}, {"m": 8, "n": 8, "k": 5, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 62.8469, "source": "autotuned"}, {"m": 8, "n": 8, "k": 6, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 72.9942, "source": "autotuned"}, {"m": 8, "n": 8, "k": 8, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 90.7763, "source": "autotuned"}, {"m": 8, "n": 8, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 96.8478, "source": "autotuned"}, {"m": 8, "n": 8, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 110.805, "source": "autotuned"}, {"m": 8, "n": 8, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 122.011, "source": "autotuned"}, {"m": 8, "n": 8, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 123.976, "source": "autotuned"}, {"m": 8, "n": 8, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 142.579, "source": "autotuned"}, {"m": 8, "n": 8, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 138.92, "source": "autotuned"}, {"m": 8, "n": 8, "k": 24, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 139.574, "source": "autotuned"}, {"m": 8, "n": 8, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 139.438, "source": "autotuned"}, {"m": 8, "n": 8, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 141.729, "source": "autotuned"}, {"m": 8, "n": 8, "k": 64, "tile_m": 1, "tile_n": 1, "w": 16, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 155.798, "source": "autotuned"}, {"m": 8, "n": 9, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 47.6694, "source": "autotuned"}, {"m": 8, "n": 9, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 57.6518, "source": "autotuned"}, {"m": 8, "n": 9, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 67.1608, "source": "autotuned"}, {"m": 8, "n": 9, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 84.8613, "source": "autotuned"}, {"m": 8, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 92.0394, "source": "autotuned"}, {"m": 8, "n": 9, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 100.035, "source": "autotuned"}, {"m": 8, "n": 9, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 113.671, "source": "autotuned"}, {"m": 8, "n": 9, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 116.819, "source": "autotuned"}, {"m": 8, "n": 9, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 122.26, "source": "autotuned"}, {"m": 8, "n": 9, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 123.944, "source": "autotuned"}, {"m": 8, "n": 9, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 6, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 125.923, "source": "autotuned"}, {"m": 8, "n": 9, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 128.998, "source": "autotuned"}, {"m": 8, "n": 9, "k": 32, "tile_m": 1, "tile_n": 1, "w": 12, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 131.311, "source": "autotuned"}, {"m": 8, "n": 13, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 63.3347, "source": "autotuned"}, {"m": 8, "n": 13, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 75.8181, "source": "autotuned"}, {"m": 8, "n": 13, "k": 6, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 86.1038, "source": "autotuned"}, {"m": 8, "n": 13, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 98.14, "source": "autotuned"}, {"m": 8, "n": 13, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 105.704, "source": "autotuned"}, {"m": 8, "n": 13, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 123.059, "source": "autotuned"}, {"m": 8, "n": 13, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 10, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 135.239, "source": "autotuned"}, {"m": 8, "n": 13, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 137.477, "source": "autotuned"}, {"m": 8, "n": 13, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 162.424, "source": "autotuned"}, {"m": 8, "n": 13, "k": 23, "tile_m": 1, "tile_n": 1, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 145.317, "source": "autotuned"}, {"m": 8, "n": 13, "k": 24, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 151.977, "source": "autotuned"}, {"m": 8, "n": 13, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 152.263, "source": "autotuned"}, {"m": 8, "n": 13, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 10, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 160.083, "source": "autotuned"}, {"m": 8, "n": 16, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 77.4084, "source": "autotuned"}, {"m": 8, "n": 16, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 91.6492, "source": "autotuned"}, {"m": 8, "n": 16, "k": 6, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 102.56, "source": "autotuned"}, {"m": 8, "n": 16, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 121.25, "source": "autotuned"}, {"m": 8, "n": 16, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 120.932, "source": "autotuned"}, {"m": 8, "n": 16, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 150.649, "source": "autotuned"}, {"m": 8, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 165.868, "source": "autotuned"}, {"m": 8, "n": 16, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 166.714, "source": "autotuned"}, {"m": 8, "n": 16, "k": 22, "tile_m": 1, "tile_n": 1, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 174.831, "source": "autotuned"}, {"m": 8, "n": 16, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 177.658, "source": "autotuned"}, {"m": 8, "n": 16, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 183.951, "source": "autotuned"}, {"m": 8, "n": 16, "k": 26, "tile_m": 2, "tile_n": 1, "w": 10, "v": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 180.88, "source": "autotuned"}, {"m": 8, "n": 16, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 193.463, "source": "autotuned"}, {"m": 8, "n": 17, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 77.1216, "source": "autotuned"}, {"m": 8, "n": 17, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 92.0325, "source": "autotuned"}, {"m": 8, "n": 17, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 91.8413, "source": "autotuned"}, {"m": 8, "n": 17, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 111.233, "source": "autotuned"}, {"m": 8, "n": 17, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 121.218, "source": "autotuned"}, {"m": 8, "n": 17, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 139.461, "source": "autotuned"}, {"m": 8, "n": 17, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 147.572, "source": "autotuned"}, {"m": 8, "n": 17, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 143.132, "source": "autotuned"}, {"m": 8, "n": 17, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 150.659, "source": "autotuned"}, {"m": 8, "n": 17, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 157.854, "source": "autotuned"}, {"m": 8, "n": 17, "k": 24, "tile_m": 2, "tile_n": 1, "w": 12, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 164.338, "source": "autotuned"}, {"m": 8, "n": 17, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 155.587, "source": "autotuned"}, {"m": 8, "n": 17, "k": 32, "tile_m": 2, "tile_n": 3, "w": 16, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 172.147, "source": "autotuned"}, {"m": 8, "n": 22, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 98.4831, "source": "autotuned"}, {"m": 8, "n": 22, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 102.251, "source": "autotuned"}, {"m": 8, "n": 22, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 113.706, "source": "autotuned"}, {"m": 8, "n": 22, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 142.267, "source": "autotuned"}, {"m": 8, "n": 22, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 141.743, "source": "autotuned"}, {"m": 8, "n": 22, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 172.127, "source": "autotuned"}, {"m": 8, "n": 22, "k": 16, "tile_m": 2, "tile_n": 1, "w": 8, "v": 22, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 186.548, "source": "autotuned"}, {"m": 8, "n": 22, "k": 17, "tile_m": 2, "tile_n": 1, "w": 8, "v": 10, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 175.381, "source": "autotuned"}, {"m": 8, "n": 22, "k": 22, "tile_m": 2, "tile_n": 1, "w": 8, "v": 22, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 183.582, "source": "autotuned"}, {"m": 8, "n": 22, "k": 23, "tile_m": 2, "tile_n": 1, "w": 8, "v": 22, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 185.959, "source": "autotuned"}, {"m": 8, "n": 22, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 195.033, "source": "autotuned"}, {"m": 8, "n": 22, "k": 26, "tile_m": 2, "tile_n": 1, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 187.132, "source": "autotuned"}, {"m": 8, "n": 22, "k": 32, "tile_m": 2, "tile_n": 1, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 211.83, "source": "autotuned"}, {"m": 8, "n": 23, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 102.42, "source": "autotuned"}, {"m": 8, "n": 23, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 105.176, "source": "autotuned"}, {"m": 8, "n": 23, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 118.044, "source": "autotuned"}, {"m": 8, "n": 23, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 147.212, "source": "autotuned"}, {"m": 8, "n": 23, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 147.697, "source": "autotuned"}, {"m": 8, "n": 23, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 178.045, "source": "autotuned"}, {"m": 8, "n": 23, "k": 16, "tile_m": 2, "tile_n": 1, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 188.608, "source": "autotuned"}, {"m": 8, "n": 23, "k": 17, "tile_m": 2, "tile_n": 1, "w": 8, "v": 10, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 178.959, "source": "autotuned"}, {"m": 8, "n": 23, "k": 22, "tile_m": 2, "tile_n": 1, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 187.535, "source": "autotuned"}, {"m": 8, "n": 23, "k": 23, "tile_m": 2, "tile_n": 1, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 189.238, "source": "autotuned"}, {"m": 8, "n": 23, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 196.5, "source": "autotuned"}, {"m": 8, "n": 23, "k": 26, "tile_m": 2, "tile_n": 1, "w": 10, "v": 22, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 191.916, "source": "autotuned"}, {"m": 8, "n": 23, "k": 32, "tile_m": 2, "tile_n": 1, "w": 8, "v": 10, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 214.467, "source": "autotuned"}, {"m": 8, "n": 24, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 99.7498, "source": "autotuned"}, {"m": 8, "n": 24, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 111.391, "source": "autotuned"}, {"m": 8, "n": 24, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 123.551, "source": "autotuned"}, {"m": 8, "n": 24, "k": 8, "tile_m": 2, "tile_n": 1, "w": 4, "v": 24, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 143.632, "source": "autotuned"}, {"m": 8, "n": 24, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 154.155, "source": "autotuned"}, {"m": 8, "n": 24, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 185.726, "source": "autotuned"}, {"m": 8, "n": 24, "k": 16, "tile_m": 2, "tile_n": 1, "w": 8, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 198.469, "source": "autotuned"}, {"m": 8, "n": 24, "k": 17, "tile_m": 2, "tile_n": 1, "w": 8, "v": 10, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 187.951, "source": "autotuned"}, {"m": 8, "n": 24, "k": 22, "tile_m": 2, "tile_n": 1, "w": 8, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 199.801, "source": "autotuned"}, {"m": 8, "n": 24, "k": 23, "tile_m": 2, "tile_n": 1, "w": 8, "v": 24, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 199.689, "source": "autotuned"}, {"m": 8, "n": 24, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 24, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 207.228, "source": "autotuned"}, {"m": 8, "n": 24, "k": 26, "tile_m": 2, "tile_n": 1, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 204.676, "source": "autotuned"}, {"m": 8, "n": 24, "k": 32, "tile_m": 2, "tile_n": 1, "w": 8, "v": 10, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 221.005, "source": "autotuned"}, {"m": 8, "n": 26, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 98.6441, "source": "autotuned"}, {"m": 8, "n": 26, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 103.296, "source": "autotuned"}, {"m": 8, "n": 26, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 117.769, "source": "autotuned"}, {"m": 8, "n": 26, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 147.311, "source": "autotuned"}, {"m": 8, "n": 26, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 157.749, "source": "autotuned"}, {"m": 8, "n": 26, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 183.678, "source": "autotuned"}, {"m": 8, "n": 26, "k": 16, "tile_m": 2, "tile_n": 1, "w": 8, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 184.93, "source": "autotuned"}, {"m": 8, "n": 26, "k": 17, "tile_m": 2, "tile_n": 1, "w": 8, "v": 26, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 174.79, "source": "autotuned"}, {"m": 8, "n": 26, "k": 22, "tile_m": 2, "tile_n": 1, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 190.782, "source": "autotuned"}, {"m": 8, "n": 26, "k": 23, "tile_m": 2, "tile_n": 1, "w": 8, "v": 26, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 192.48, "source": "autotuned"}, {"m": 8, "n": 26, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 26, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 201.264, "source": "autotuned"}, {"m": 8, "n": 26, "k": 26, "tile_m": 2, "tile_n": 2, "w": 8, "v": 26, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 200.465, "source": "autotuned"}, {"m": 8, "n": 26, "k": 32, "tile_m": 2, "tile_n": 2, "w": 8, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 213.624, "source": "autotuned"}, {"m": 8, "n": 32, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 120.164, "source": "autotuned"}, {"m": 8, "n": 32, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 126.86, "source": "autotuned"}, {"m": 8, "n": 32, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 143.186, "source": "autotuned"}, {"m": 8, "n": 32, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 175.277, "source": "autotuned"}, {"m": 8, "n": 32, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 183.653, "source": "autotuned"}, {"m": 8, "n": 32, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 193.414, "source": "autotuned"}, {"m": 8, "n": 32, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 216.01, "source": "autotuned"}, {"m": 8, "n": 32, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 213.609, "source": "autotuned"}, {"m": 8, "n": 32, "k": 22, "tile_m": 2, "tile_n": 1, "w": 8, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 222.573, "source": "autotuned"}, {"m": 8, "n": 32, "k": 23, "tile_m": 2, "tile_n": 1, "w": 8, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 224.463, "source": "autotuned"}, {"m": 8, "n": 32, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 231.134, "source": "autotuned"}, {"m": 8, "n": 32, "k": 26, "tile_m": 2, "tile_n": 2, "w": 8, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 230.134, "source": "autotuned"}, {"m": 8, "n": 32, "k": 32, "tile_m": 2, "tile_n": 1, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 238.795, "source": "autotuned"}, {"m": 8, "n": 64, "k": 8, "tile_m": 1, "tile_n": 4, "w": 4, "v": 48, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 205.107, "source": "autotuned"}, {"m": 9, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 25.2097, "source": "autotuned"}, {"m": 9, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 29.9919, "source": "autotuned"}, {"m": 9, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 35.1352, "source": "autotuned"}, {"m": 9, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 40.3827, "source": "autotuned"}, {"m": 9, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 40.9728, "source": "autotuned"}, {"m": 9, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 48.8693, "source": "autotuned"}, {"m": 9, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 57.4295, "source": "autotuned"}, {"m": 9, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 60.1671, "source": "autotuned"}, {"m": 9, "n": 4, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 59.5034, "source": "autotuned"}, {"m": 9, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 80.7153, "source": "autotuned"}, {"m": 9, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 81.9869, "source": "autotuned"}, {"m": 9, "n": 4, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 78.1791, "source": "autotuned"}, {"m": 9, "n": 4, "k": 25, "tile_m": 1, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 82.9701, "source": "autotuned"}, {"m": 9, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 84.3279, "source": "autotuned"}, {"m": 9, "n": 4, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 92.4296, "source": "autotuned"}, {"m": 9, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 97.0899, "source": "autotuned"}, {"m": 9, "n": 4, "k": 45, "tile_m": 1, "tile_n": 1, "w": 18, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 97.9513, "source": "autotuned"}, {"m": 9, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 30.4526, "source": "autotuned"}, {"m": 9, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 37.3908, "source": "autotuned"}, {"m": 9, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 43.6465, "source": "autotuned"}, {"m": 9, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 49.939, "source": "autotuned"}, {"m": 9, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 49.3598, "source": "autotuned"}, {"m": 9, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 60.7052, "source": "autotuned"}, {"m": 9, "n": 5, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 71.4975, "source": "autotuned"}, {"m": 9, "n": 5, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 70.7421, "source": "autotuned"}, {"m": 9, "n": 5, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 73.9933, "source": "autotuned"}, {"m": 9, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 86.1888, "source": "autotuned"}, {"m": 9, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 88.3985, "source": "autotuned"}, {"m": 9, "n": 5, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 91.3193, "source": "autotuned"}, {"m": 9, "n": 5, "k": 25, "tile_m": 1, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 98.0414, "source": "autotuned"}, {"m": 9, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 99.6254, "source": "autotuned"}, {"m": 9, "n": 5, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 110.374, "source": "autotuned"}, {"m": 9, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 115.467, "source": "autotuned"}, {"m": 9, "n": 5, "k": 45, "tile_m": 1, "tile_n": 1, "w": 18, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 117.769, "source": "autotuned"}, {"m": 9, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 35.7692, "source": "autotuned"}, {"m": 9, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 43.884, "source": "autotuned"}, {"m": 9, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 51.8037, "source": "autotuned"}, {"m": 9, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 58.9838, "source": "autotuned"}, {"m": 9, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 63.1913, "source": "autotuned"}, {"m": 9, "n": 6, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 78.6654, "source": "autotuned"}, {"m": 9, "n": 6, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 87.0012, "source": "autotuned"}, {"m": 9, "n": 6, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 84.4738, "source": "autotuned"}, {"m": 9, "n": 6, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 101.406, "source": "autotuned"}, {"m": 9, "n": 6, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 104.769, "source": "autotuned"}, {"m": 9, "n": 6, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 6, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 108.241, "source": "autotuned"}, {"m": 9, "n": 6, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 111.759, "source": "autotuned"}, {"m": 9, "n": 6, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 118.358, "source": "autotuned"}, {"m": 9, "n": 7, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 42.4018, "source": "autotuned"}, {"m": 9, "n": 7, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 51.6611, "source": "autotuned"}, {"m": 9, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 69.256, "source": "autotuned"}, {"m": 9, "n": 7, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 84.5734, "source": "autotuned"}, {"m": 9, "n": 7, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 99.4122, "source": "autotuned"}, {"m": 9, "n": 7, "k": 25, "tile_m": 1, "tile_n": 1, "w": 10, "v": 6, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 127.018, "source": "autotuned"}, {"m": 9, "n": 7, "k": 26, "tile_m": 1, "tile_n": 1, "w": 12, "v": 6, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 128.925, "source": "autotuned"}, {"m": 9, "n": 7, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 6, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 142.303, "source": "autotuned"}, {"m": 9, "n": 7, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 143.679, "source": "autotuned"}, {"m": 9, "n": 7, "k": 45, "tile_m": 1, "tile_n": 1, "w": 16, "v": 6, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 145.789, "source": "autotuned"}, {"m": 9, "n": 8, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 48.1233, "source": "autotuned"}, {"m": 9, "n": 8, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 57.2607, "source": "autotuned"}, {"m": 9, "n": 8, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 67.6162, "source": "autotuned"}, {"m": 9, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 76.9026, "source": "autotuned"}, {"m": 9, "n": 8, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 82.1029, "source": "autotuned"}, {"m": 9, "n": 8, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 99.4363, "source": "autotuned"}, {"m": 9, "n": 8, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 106.792, "source": "autotuned"}, {"m": 9, "n": 8, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 103.155, "source": "autotuned"}, {"m": 9, "n": 8, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 122.251, "source": "autotuned"}, {"m": 9, "n": 8, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 125.713, "source": "autotuned"}, {"m": 9, "n": 8, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 8, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 127.47, "source": "autotuned"}, {"m": 9, "n": 8, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 127.087, "source": "autotuned"}, {"m": 9, "n": 8, "k": 32, "tile_m": 1, "tile_n": 1, "w": 12, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 132.924, "source": "autotuned"}, {"m": 9, "n": 9, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 62.4312, "source": "autotuned"}, {"m": 9, "n": 9, "k": 5, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 74.0588, "source": "autotuned"}, {"m": 9, "n": 9, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 83.6127, "source": "autotuned"}, {"m": 9, "n": 9, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 92.4293, "source": "autotuned"}, {"m": 9, "n": 9, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 97.3911, "source": "autotuned"}, {"m": 9, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 107.815, "source": "autotuned"}, {"m": 9, "n": 9, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 123.717, "source": "autotuned"}, {"m": 9, "n": 9, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 123.42, "source": "autotuned"}, {"m": 9, "n": 9, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 126.933, "source": "autotuned"}, {"m": 9, "n": 9, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 140.116, "source": "autotuned"}, {"m": 9, "n": 9, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 144.441, "source": "autotuned"}, {"m": 9, "n": 9, "k": 24, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 147.669, "source": "autotuned"}, {"m": 9, "n": 9, "k": 25, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 152.349, "source": "autotuned"}, {"m": 9, "n": 9, "k": 26, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 155.592, "source": "autotuned"}, {"m": 9, "n": 9, "k": 28, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 155.64, "source": "autotuned"}, {"m": 9, "n": 9, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 159.535, "source": "autotuned"}, {"m": 9, "n": 9, "k": 45, "tile_m": 1, "tile_n": 1, "w": 16, "v": 8, "threads": 160, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 160.12, "source": "autotuned"}, {"m": 9, "n": 9, "k": 64, "tile_m": 1, "tile_n": 1, "w": 14, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 160.483, "source": "autotuned"}, {"m": 9, "n": 13, "k": 4, "tile_m": 1, "tile_n": 1, "w": 2, "v": 12, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 68.546, "source": "autotuned"}, {"m": 9, "n": 13, "k": 5, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 81.5548, "source": "autotuned"}, {"m": 9, "n": 13, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 86.6047, "source": "autotuned"}, {"m": 9, "n": 13, "k": 7, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 104.773, "source": "autotuned"}, {"m": 9, "n": 13, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 110.269, "source": "autotuned"}, {"m": 9, "n": 13, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 118.614, "source": "autotuned"}, {"m": 9, "n": 13, "k": 13, "tile_m": 1, "tile_n": 2, "w": 6, "v": 10, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 137.421, "source": "autotuned"}, {"m": 9, "n": 13, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 148.198, "source": "autotuned"}, {"m": 9, "n": 13, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 144.57, "source": "autotuned"}, {"m": 9, "n": 13, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 157.619, "source": "autotuned"}, {"m": 9, "n": 13, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 159.911, "source": "autotuned"}, {"m": 9, "n": 13, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 164.48, "source": "autotuned"}, {"m": 9, "n": 13, "k": 25, "tile_m": 1, "tile_n": 2, "w": 10, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 167.537, "source": "autotuned"}, {"m": 9, "n": 13, "k": 26, "tile_m": 1, "tile_n": 2, "w": 10, "v": 6, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 171.427, "source": "autotuned"}, {"m": 9, "n": 13, "k": 28, "tile_m": 1, "tile_n": 2, "w": 14, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 186.17, "source": "autotuned"}, {"m": 9, "n": 13, "k": 32, "tile_m": 1, "tile_n": 2, "w": 16, "v": 8, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 191.308, "source": "autotuned"}, {"m": 9, "n": 13, "k": 45, "tile_m": 1, "tile_n": 2, "w": 18, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 196.238, "source": "autotuned"}, {"m": 9, "n": 16, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 76.4401, "source": "autotuned"}, {"m": 9, "n": 16, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 90.0694, "source": "autotuned"}, {"m": 9, "n": 16, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 101.254, "source": "autotuned"}, {"m": 9, "n": 16, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 114.152, "source": "autotuned"}, {"m": 9, "n": 16, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 125.152, "source": "autotuned"}, {"m": 9, "n": 16, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 138.713, "source": "autotuned"}, {"m": 9, "n": 16, "k": 16, "tile_m": 1, "tile_n": 2, "w": 8, "v": 10, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 161.565, "source": "autotuned"}, {"m": 9, "n": 16, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 162.59, "source": "autotuned"}, {"m": 9, "n": 16, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 167.882, "source": "autotuned"}, {"m": 9, "n": 16, "k": 23, "tile_m": 1, "tile_n": 2, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 166.582, "source": "autotuned"}, {"m": 9, "n": 16, "k": 24, "tile_m": 1, "tile_n": 2, "w": 12, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 170.479, "source": "autotuned"}, {"m": 9, "n": 16, "k": 26, "tile_m": 1, "tile_n": 2, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 173.529, "source": "autotuned"}, {"m": 9, "n": 16, "k": 32, "tile_m": 1, "tile_n": 2, "w": 14, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 179.16, "source": "autotuned"}, {"m": 9, "n": 16, "k": 64, "tile_m": 3, "tile_n": 2, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 207.542, "source": "autotuned"}, {"m": 9, "n": 17, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 77.9597, "source": "autotuned"}, {"m": 9, "n": 17, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 93.47, "source": "autotuned"}, {"m": 9, "n": 17, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 98.6733, "source": "autotuned"}, {"m": 9, "n": 17, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 116.283, "source": "autotuned"}, {"m": 9, "n": 17, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 130.008, "source": "autotuned"}, {"m": 9, "n": 17, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 146.013, "source": "autotuned"}, {"m": 9, "n": 17, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 163.56, "source": "autotuned"}, {"m": 9, "n": 17, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 162.657, "source": "autotuned"}, {"m": 9, "n": 17, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 165.859, "source": "autotuned"}, {"m": 9, "n": 17, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 162.634, "source": "autotuned"}, {"m": 9, "n": 17, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 10, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 166.06, "source": "autotuned"}, {"m": 9, "n": 17, "k": 26, "tile_m": 1, "tile_n": 2, "w": 10, "v": 10, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 167.993, "source": "autotuned"}, {"m": 9, "n": 17, "k": 32, "tile_m": 2, "tile_n": 1, "w": 16, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 180.16, "source": "autotuned"}, {"m": 9, "n": 22, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 90.7465, "source": "autotuned"}, {"m": 9, "n": 22, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 106.972, "source": "autotuned"}, {"m": 9, "n": 22, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 111.035, "source": "autotuned"}, {"m": 9, "n": 22, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 132.298, "source": "autotuned"}, {"m": 9, "n": 22, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 151.642, "source": "autotuned"}, {"m": 9, "n": 22, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 172.574, "source": "autotuned"}, {"m": 9, "n": 22, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 172.49, "source": "autotuned"}, {"m": 9, "n": 22, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 170.487, "source": "autotuned"}, {"m": 9, "n": 22, "k": 22, "tile_m": 2, "tile_n": 2, "w": 10, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 183.705, "source": "autotuned"}, {"m": 9, "n": 22, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 191.689, "source": "autotuned"}, {"m": 9, "n": 22, "k": 24, "tile_m": 2, "tile_n": 2, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 194.866, "source": "autotuned"}, {"m": 9, "n": 22, "k": 26, "tile_m": 2, "tile_n": 2, "w": 10, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 194.953, "source": "autotuned"}, {"m": 9, "n": 22, "k": 32, "tile_m": 2, "tile_n": 2, "w": 10, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 207.422, "source": "autotuned"}, {"m": 9, "n": 22, "k": 64, "tile_m": 2, "tile_n": 2, "w": 12, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 239.402, "source": "autotuned"}, {"m": 9, "n": 23, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 94.256, "source": "autotuned"}, {"m": 9, "n": 23, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 111.899, "source": "autotuned"}, {"m": 9, "n": 23, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 114.731, "source": "autotuned"}, {"m": 9, "n": 23, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 143.712, "source": "autotuned"}, {"m": 9, "n": 23, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 157.699, "source": "autotuned"}, {"m": 9, "n": 23, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 177.746, "source": "autotuned"}, {"m": 9, "n": 23, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 177.57, "source": "autotuned"}, {"m": 9, "n": 23, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 176.836, "source": "autotuned"}, {"m": 9, "n": 23, "k": 22, "tile_m": 2, "tile_n": 2, "w": 10, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 194.385, "source": "autotuned"}, {"m": 9, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "w": 10, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 198.019, "source": "autotuned"}, {"m": 9, "n": 23, "k": 24, "tile_m": 2, "tile_n": 2, "w": 10, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 203.27, "source": "autotuned"}, {"m": 9, "n": 23, "k": 26, "tile_m": 2, "tile_n": 1, "w": 10, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 199.492, "source": "autotuned"}, {"m": 9, "n": 23, "k": 32, "tile_m": 1, "tile_n": 2, "w": 14, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 209.275, "source": "autotuned"}, {"m": 9, "n": 24, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 100.426, "source": "autotuned"}, {"m": 9, "n": 24, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 117.722, "source": "autotuned"}, {"m": 9, "n": 24, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 122.677, "source": "autotuned"}, {"m": 9, "n": 24, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 141.521, "source": "autotuned"}, {"m": 9, "n": 24, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 165.569, "source": "autotuned"}, {"m": 9, "n": 24, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 189.324, "source": "autotuned"}, {"m": 9, "n": 24, "k": 16, "tile_m": 1, "tile_n": 2, "w": 8, "v": 14, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 191.231, "source": "autotuned"}, {"m": 9, "n": 24, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 187.441, "source": "autotuned"}, {"m": 9, "n": 24, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 209.101, "source": "autotuned"}, {"m": 9, "n": 24, "k": 23, "tile_m": 2, "tile_n": 2, "w": 10, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 207.575, "source": "autotuned"}, {"m": 9, "n": 24, "k": 24, "tile_m": 2, "tile_n": 2, "w": 8, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 215.864, "source": "autotuned"}, {"m": 9, "n": 24, "k": 26, "tile_m": 1, "tile_n": 2, "w": 10, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 210.582, "source": "autotuned"}, {"m": 9, "n": 24, "k": 32, "tile_m": 2, "tile_n": 2, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 225.901, "source": "autotuned"}, {"m": 9, "n": 25, "k": 4, "tile_m": 2, "tile_n": 1, "w": 2, "v": 14, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 107.355, "source": "autotuned"}, {"m": 9, "n": 25, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 116.291, "source": "autotuned"}, {"m": 9, "n": 25, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 132.632, "source": "autotuned"}, {"m": 9, "n": 25, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 153.698, "source": "autotuned"}, {"m": 9, "n": 25, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 192.195, "source": "autotuned"}, {"m": 9, "n": 25, "k": 25, "tile_m": 2, "tile_n": 1, "w": 10, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 219.162, "source": "autotuned"}, {"m": 9, "n": 25, "k": 26, "tile_m": 2, "tile_n": 1, "w": 12, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 219.784, "source": "autotuned"}, {"m": 9, "n": 25, "k": 28, "tile_m": 2, "tile_n": 3, "w": 14, "v": 18, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 229.143, "source": "autotuned"}, {"m": 9, "n": 25, "k": 32, "tile_m": 2, "tile_n": 3, "w": 16, "v": 18, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 232.091, "source": "autotuned"}, {"m": 9, "n": 25, "k": 45, "tile_m": 1, "tile_n": 4, "w": 14, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 239.491, "source": "autotuned"}, {"m": 9, "n": 26, "k": 4, "tile_m": 1, "tile_n": 2, "w": 2, "v": 26, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 112.616, "source": "autotuned"}, {"m": 9, "n": 26, "k": 5, "tile_m": 3, "tile_n": 1, "w": 2, "v": 26, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 114.528, "source": "autotuned"}, {"m": 9, "n": 26, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 129.406, "source": "autotuned"}, {"m": 9, "n": 26, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 137.992, "source": "autotuned"}, {"m": 9, "n": 26, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 148.898, "source": "autotuned"}, {"m": 9, "n": 26, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 160.328, "source": "autotuned"}, {"m": 9, "n": 26, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 200.731, "source": "autotuned"}, {"m": 9, "n": 26, "k": 16, "tile_m": 1, "tile_n": 2, "w": 8, "v": 14, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 192.481, "source": "autotuned"}, {"m": 9, "n": 26, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 191.617, "source": "autotuned"}, {"m": 9, "n": 26, "k": 22, "tile_m": 1, "tile_n": 2, "w": 10, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 201.724, "source": "autotuned"}, {"m": 9, "n": 26, "k": 23, "tile_m": 1, "tile_n": 2, "w": 10, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 205.283, "source": "autotuned"}, {"m": 9, "n": 26, "k": 24, "tile_m": 1, "tile_n": 2, "w": 8, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 215.418, "source": "autotuned"}, {"m": 9, "n": 26, "k": 25, "tile_m": 1, "tile_n": 2, "w": 12, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 224.702, "source": "autotuned"}, {"m": 9, "n": 26, "k": 26, "tile_m": 1, "tile_n": 2, "w": 12, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 225.99, "source": "autotuned"}, {"m": 9, "n": 26, "k": 28, "tile_m": 1, "tile_n": 4, "w": 14, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 240.33, "source": "autotuned"}, {"m": 9, "n": 26, "k": 32, "tile_m": 1, "tile_n": 4, "w": 16, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 246.812, "source": "autotuned"}, {"m": 9, "n": 26, "k": 45, "tile_m": 1, "tile_n": 4, "w": 16, "v": 26, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 249.034, "source": "autotuned"}, {"m": 9, "n": 28, "k": 4, "tile_m": 1, "tile_n": 2, "w": 2, "v": 28, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 121.338, "source": "autotuned"}, {"m": 9, "n": 28, "k": 5, "tile_m": 3, "tile_n": 1, "w": 2, "v": 28, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 123.294, "source": "autotuned"}, {"m": 9, "n": 28, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 149.096, "source": "autotuned"}, {"m": 9, "n": 28, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 170.708, "source": "autotuned"}, {"m": 9, "n": 28, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 209.922, "source": "autotuned"}, {"m": 9, "n": 28, "k": 25, "tile_m": 1, "tile_n": 2, "w": 12, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 234.576, "source": "autotuned"}, {"m": 9, "n": 28, "k": 26, "tile_m": 1, "tile_n": 2, "w": 10, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 240.981, "source": "autotuned"}, {"m": 9, "n": 28, "k": 28, "tile_m": 1, "tile_n": 2, "w": 14, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 250.549, "source": "autotuned"}, {"m": 9, "n": 28, "k": 32, "tile_m": 1, "tile_n": 2, "w": 16, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 255.13, "source": "autotuned"}, {"m": 9, "n": 28, "k": 45, "tile_m": 1, "tile_n": 4, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 263.838, "source": "autotuned"}, {"m": 9, "n": 32, "k": 4, "tile_m": 3, "tile_n": 1, "w": 2, "v": 32, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 137.267, "source": "autotuned"}, {"m": 9, "n": 32, "k": 5, "tile_m": 3, "tile_n": 1, "w": 2, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 141.586, "source": "autotuned"}, {"m": 9, "n": 32, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 150.539, "source": "autotuned"}, {"m": 9, "n": 32, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 168.582, "source": "autotuned"}, {"m": 9, "n": 32, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 183.327, "source": "autotuned"}, {"m": 9, "n": 32, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 192.731, "source": "autotuned"}, {"m": 9, "n": 32, "k": 13, "tile_m": 3, "tile_n": 1, "w": 6, "v": 30, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 209.298, "source": "autotuned"}, {"m": 9, "n": 32, "k": 16, "tile_m": 3, "tile_n": 1, "w": 8, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 215.364, "source": "autotuned"}, {"m": 9, "n": 32, "k": 17, "tile_m": 2, "tile_n": 2, "w": 6, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 212.232, "source": "autotuned"}, {"m": 9, "n": 32, "k": 22, "tile_m": 3, "tile_n": 1, "w": 8, "v": 20, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 230.249, "source": "autotuned"}, {"m": 9, "n": 32, "k": 23, "tile_m": 3, "tile_n": 1, "w": 8, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 232.646, "source": "autotuned"}, {"m": 9, "n": 32, "k": 24, "tile_m": 3, "tile_n": 1, "w": 8, "v": 20, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 239.302, "source": "autotuned"}, {"m": 9, "n": 32, "k": 25, "tile_m": 2, "tile_n": 3, "w": 10, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 253.788, "source": "autotuned"}, {"m": 9, "n": 32, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 30, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 254.099, "source": "autotuned"}, {"m": 9, "n": 32, "k": 28, "tile_m": 3, "tile_n": 2, "w": 14, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 261.58, "source": "autotuned"}, {"m": 9, "n": 32, "k": 32, "tile_m": 3, "tile_n": 2, "w": 16, "v": 32, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 266.524, "source": "autotuned"}, {"m": 9, "n": 32, "k": 45, "tile_m": 2, "tile_n": 2, "w": 10, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 277.488, "source": "autotuned"}, {"m": 9, "n": 45, "k": 4, "tile_m": 5, "tile_n": 1, "w": 2, "v": 42, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 133.76, "source": "autotuned"}, {"m": 9, "n": 45, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 143.893, "source": "autotuned"}, {"m": 9, "n": 45, "k": 7, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 171.55, "source": "autotuned"}, {"m": 9, "n": 45, "k": 9, "tile_m": 2, "tile_n": 2, "w": 4, "v": 44, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 194.717, "source": "autotuned"}, {"m": 9, "n": 45, "k": 13, "tile_m": 3, "tile_n": 2, "w": 6, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 225.041, "source": "autotuned"}, {"m": 9, "n": 45, "k": 25, "tile_m": 3, "tile_n": 2, "w": 10, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 260.831, "source": "autotuned"}, {"m": 9, "n": 45, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 38, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 265.9, "source": "autotuned"}, {"m": 9, "n": 45, "k": 28, "tile_m": 2, "tile_n": 2, "w": 14, "v": 16, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 275.862, "source": "autotuned"}, {"m": 9, "n": 45, "k": 32, "tile_m": 2, "tile_n": 4, "w": 12, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 275.89, "source": "autotuned"}, {"m": 9, "n": 45, "k": 45, "tile_m": 2, "tile_n": 3, "w": 8, "v": 18, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 284.511, "source": "autotuned"}, {"m": 9, "n": 64, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 213.899, "source": "autotuned"}, {"m": 9, "n": 64, "k": 16, "tile_m": 3, "tile_n": 2, "w": 6, "v": 48, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 262.958, "source": "autotuned"}, {"m": 9, "n": 64, "k": 22, "tile_m": 3, "tile_n": 2, "w": 6, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 285.617, "source": "autotuned"}, {"m": 9, "n": 64, "k": 64, "tile_m": 3, "tile_n": 2, "w": 10, "v": 64, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 319.273, "source": "autotuned"}, {"m": 10, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 28.1008, "source": "autotuned"}, {"m": 10, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 54.1832, "source": "autotuned"}, {"m": 10, "n": 4, "k": 15, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 70.4501, "source": "autotuned"}, {"m": 10, "n": 10, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 74.7338, "source": "autotuned"}, {"m": 10, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 116.741, "source": "autotuned"}, {"m": 10, "n": 10, "k": 15, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 141.061, "source": "autotuned"}, {"m": 10, "n": 15, "k": 4, "tile_m": 1, "tile_n": 2, "w": 2, "v": 8, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 81.7434, "source": "autotuned"}, {"m": 10, "n": 15, "k": 10, "tile_m": 2, "tile_n": 1, "w": 4, "v": 8, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 137.343, "source": "autotuned"}, {"m": 10, "n": 15, "k": 15, "tile_m": 2, "tile_n": 1, "w": 6, "v": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 168.752, "source": "autotuned"}, {"m": 11, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 148.474, "source": "autotuned"}, {"m": 12, "n": 12, "k": 12, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 154.228, "source": "autotuned"}, {"m": 13, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 35.8537, "source": "autotuned"}, {"m": 13, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 43.1223, "source": "autotuned"}, {"m": 13, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 50.5155, "source": "autotuned"}, {"m": 13, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 58.1156, "source": "autotuned"}, {"m": 13, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 56.8225, "source": "autotuned"}, {"m": 13, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 62.7402, "source": "autotuned"}, {"m": 13, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 81.1843, "source": "autotuned"}, {"m": 13, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 82.3205, "source": "autotuned"}, {"m": 13, "n": 4, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 85.3823, "source": "autotuned"}, {"m": 13, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 106.3, "source": "autotuned"}, {"m": 13, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 104.38, "source": "autotuned"}, {"m": 13, "n": 4, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 103.008, "source": "autotuned"}, {"m": 13, "n": 4, "k": 25, "tile_m": 1, "tile_n": 1, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 102.905, "source": "autotuned"}, {"m": 13, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 107.426, "source": "autotuned"}, {"m": 13, "n": 4, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 115.153, "source": "autotuned"}, {"m": 13, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 116.235, "source": "autotuned"}, {"m": 13, "n": 4, "k": 45, "tile_m": 1, "tile_n": 1, "w": 20, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 116.154, "source": "autotuned"}, {"m": 13, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 43.1026, "source": "autotuned"}, {"m": 13, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 52.3569, "source": "autotuned"}, {"m": 13, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 60.9248, "source": "autotuned"}, {"m": 13, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 68.9053, "source": "autotuned"}, {"m": 13, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 64.2414, "source": "autotuned"}, {"m": 13, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 74.1677, "source": "autotuned"}, {"m": 13, "n": 5, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 93.5165, "source": "autotuned"}, {"m": 13, "n": 5, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 94.8452, "source": "autotuned"}, {"m": 13, "n": 5, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 97.5907, "source": "autotuned"}, {"m": 13, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 110.275, "source": "autotuned"}, {"m": 13, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 112.051, "source": "autotuned"}, {"m": 13, "n": 5, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 114.338, "source": "autotuned"}, {"m": 13, "n": 5, "k": 25, "tile_m": 1, "tile_n": 1, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 115.183, "source": "autotuned"}, {"m": 13, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 116.18, "source": "autotuned"}, {"m": 13, "n": 5, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 124.902, "source": "autotuned"}, {"m": 13, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "w": 14, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 124.762, "source": "autotuned"}, {"m": 13, "n": 5, "k": 45, "tile_m": 1, "tile_n": 1, "w": 18, "v": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 128.223, "source": "autotuned"}, {"m": 13, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 50.8013, "source": "autotuned"}, {"m": 13, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 61.8717, "source": "autotuned"}, {"m": 13, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 72.4236, "source": "autotuned"}, {"m": 13, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 77.0262, "source": "autotuned"}, {"m": 13, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 82.5687, "source": "autotuned"}, {"m": 13, "n": 6, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 102.487, "source": "autotuned"}, {"m": 13, "n": 6, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 6, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 112.36, "source": "autotuned"}, {"m": 13, "n": 6, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 105.637, "source": "autotuned"}, {"m": 13, "n": 6, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 126.591, "source": "autotuned"}, {"m": 13, "n": 6, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 127.181, "source": "autotuned"}, {"m": 13, "n": 6, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 131.17, "source": "autotuned"}, {"m": 13, "n": 6, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 129.955, "source": "autotuned"}, {"m": 13, "n": 6, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 138.459, "source": "autotuned"}, {"m": 13, "n": 7, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 59.9957, "source": "autotuned"}, {"m": 13, "n": 7, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 72.1074, "source": "autotuned"}, {"m": 13, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 95.9252, "source": "autotuned"}, {"m": 13, "n": 7, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 103.151, "source": "autotuned"}, {"m": 13, "n": 7, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 129.722, "source": "autotuned"}, {"m": 13, "n": 7, "k": 25, "tile_m": 1, "tile_n": 1, "w": 12, "v": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 153.809, "source": "autotuned"}, {"m": 13, "n": 7, "k": 26, "tile_m": 1, "tile_n": 1, "w": 12, "v": 6, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 155.84, "source": "autotuned"}, {"m": 13, "n": 7, "k": 28, "tile_m": 1, "tile_n": 1, "w": 14, "v": 6, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 160.527, "source": "autotuned"}, {"m": 13, "n": 7, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 6, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 168.672, "source": "autotuned"}, {"m": 13, "n": 7, "k": 45, "tile_m": 1, "tile_n": 1, "w": 18, "v": 6, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 170.503, "source": "autotuned"}, {"m": 13, "n": 8, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 64.3202, "source": "autotuned"}, {"m": 13, "n": 8, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 71.3921, "source": "autotuned"}, {"m": 13, "n": 8, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 81.3107, "source": "autotuned"}, {"m": 13, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 99.8992, "source": "autotuned"}, {"m": 13, "n": 8, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 106.433, "source": "autotuned"}, {"m": 13, "n": 8, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 117.265, "source": "autotuned"}, {"m": 13, "n": 8, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 138.215, "source": "autotuned"}, {"m": 13, "n": 8, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 139.52, "source": "autotuned"}, {"m": 13, "n": 8, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 163.585, "source": "autotuned"}, {"m": 13, "n": 8, "k": 23, "tile_m": 1, "tile_n": 1, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 147.91, "source": "autotuned"}, {"m": 13, "n": 8, "k": 24, "tile_m": 1, "tile_n": 2, "w": 12, "v": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 151.064, "source": "autotuned"}, {"m": 13, "n": 8, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 151.357, "source": "autotuned"}, {"m": 13, "n": 8, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 157.473, "source": "autotuned"}, {"m": 13, "n": 9, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 68.6834, "source": "autotuned"}, {"m": 13, "n": 9, "k": 5, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 82.6413, "source": "autotuned"}, {"m": 13, "n": 9, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 87.8396, "source": "autotuned"}, {"m": 13, "n": 9, "k": 7, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 105.779, "source": "autotuned"}, {"m": 13, "n": 9, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 109.971, "source": "autotuned"}, {"m": 13, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 118.002, "source": "autotuned"}, {"m": 13, "n": 9, "k": 13, "tile_m": 2, "tile_n": 1, "w": 6, "v": 6, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 137.392, "source": "autotuned"}, {"m": 13, "n": 9, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 147.281, "source": "autotuned"}, {"m": 13, "n": 9, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 143.348, "source": "autotuned"}, {"m": 13, "n": 9, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 158.407, "source": "autotuned"}, {"m": 13, "n": 9, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 160.165, "source": "autotuned"}, {"m": 13, "n": 9, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 163.24, "source": "autotuned"}, {"m": 13, "n": 9, "k": 25, "tile_m": 2, "tile_n": 1, "w": 10, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 172.498, "source": "autotuned"}, {"m": 13, "n": 9, "k": 26, "tile_m": 2, "tile_n": 1, "w": 10, "v": 6, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 175.531, "source": "autotuned"}, {"m": 13, "n": 9, "k": 28, "tile_m": 2, "tile_n": 1, "w": 14, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 187.173, "source": "autotuned"}, {"m": 13, "n": 9, "k": 32, "tile_m": 2, "tile_n": 1, "w": 16, "v": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 190.526, "source": "autotuned"}, {"m": 13, "n": 9, "k": 45, "tile_m": 2, "tile_n": 1, "w": 16, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 195.377, "source": "autotuned"}, {"m": 13, "n": 13, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 100.777, "source": "autotuned"}, {"m": 13, "n": 13, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 116.755, "source": "autotuned"}, {"m": 13, "n": 13, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 128.884, "source": "autotuned"}, {"m": 13, "n": 13, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 143.945, "source": "autotuned"}, {"m": 13, "n": 13, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 141.808, "source": "autotuned"}, {"m": 13, "n": 13, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 155.464, "source": "autotuned"}, {"m": 13, "n": 13, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 174.905, "source": "autotuned"}, {"m": 13, "n": 13, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 188.6, "source": "autotuned"}, {"m": 13, "n": 13, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 196.824, "source": "autotuned"}, {"m": 13, "n": 13, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 200.407, "source": "autotuned"}, {"m": 13, "n": 13, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 192.756, "source": "autotuned"}, {"m": 13, "n": 13, "k": 24, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 194.026, "source": "autotuned"}, {"m": 13, "n": 13, "k": 25, "tile_m": 1, "tile_n": 2, "w": 10, "v": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 204.499, "source": "autotuned"}, {"m": 13, "n": 13, "k": 26, "tile_m": 1, "tile_n": 2, "w": 10, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 205.053, "source": "autotuned"}, {"m": 13, "n": 13, "k": 28, "tile_m": 2, "tile_n": 2, "w": 14, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 218.849, "source": "autotuned"}, {"m": 13, "n": 13, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 223.821, "source": "autotuned"}, {"m": 13, "n": 13, "k": 45, "tile_m": 2, "tile_n": 2, "w": 16, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 232.303, "source": "autotuned"}, {"m": 13, "n": 16, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 100.974, "source": "autotuned"}, {"m": 13, "n": 16, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 114.075, "source": "autotuned"}, {"m": 13, "n": 16, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 131.042, "source": "autotuned"}, {"m": 13, "n": 16, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 148.468, "source": "autotuned"}, {"m": 13, "n": 16, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 153.966, "source": "autotuned"}, {"m": 13, "n": 16, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 175.389, "source": "autotuned"}, {"m": 13, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 210.814, "source": "autotuned"}, {"m": 13, "n": 16, "k": 17, "tile_m": 2, "tile_n": 2, "w": 6, "v": 16, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 185.642, "source": "autotuned"}, {"m": 13, "n": 16, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 212.052, "source": "autotuned"}, {"m": 13, "n": 16, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 217.955, "source": "autotuned"}, {"m": 13, "n": 16, "k": 24, "tile_m": 2, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 214.166, "source": "autotuned"}, {"m": 13, "n": 16, "k": 26, "tile_m": 2, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 210.017, "source": "autotuned"}, {"m": 13, "n": 16, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 232.99, "source": "autotuned"}, {"m": 13, "n": 17, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 99.2194, "source": "autotuned"}, {"m": 13, "n": 17, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 118.252, "source": "autotuned"}, {"m": 13, "n": 17, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 135.183, "source": "autotuned"}, {"m": 13, "n": 17, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 144.56, "source": "autotuned"}, {"m": 13, "n": 17, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 156.989, "source": "autotuned"}, {"m": 13, "n": 17, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 195.592, "source": "autotuned"}, {"m": 13, "n": 17, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 218.026, "source": "autotuned"}, {"m": 13, "n": 17, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 187.859, "source": "autotuned"}, {"m": 13, "n": 17, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 222.018, "source": "autotuned"}, {"m": 13, "n": 17, "k": 23, "tile_m": 2, "tile_n": 2, "w": 6, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 216.451, "source": "autotuned"}, {"m": 13, "n": 17, "k": 24, "tile_m": 2, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 214.46, "source": "autotuned"}, {"m": 13, "n": 17, "k": 26, "tile_m": 2, "tile_n": 2, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 211.202, "source": "autotuned"}, {"m": 13, "n": 17, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 237.799, "source": "autotuned"}, {"m": 13, "n": 22, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 117.05, "source": "autotuned"}, {"m": 13, "n": 22, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 132.674, "source": "autotuned"}, {"m": 13, "n": 22, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 147.212, "source": "autotuned"}, {"m": 13, "n": 22, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 172.205, "source": "autotuned"}, {"m": 13, "n": 22, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 181.465, "source": "autotuned"}, {"m": 13, "n": 22, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 207.061, "source": "autotuned"}, {"m": 13, "n": 22, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 206.302, "source": "autotuned"}, {"m": 13, "n": 22, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 204.952, "source": "autotuned"}, {"m": 13, "n": 22, "k": 22, "tile_m": 3, "tile_n": 2, "w": 10, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 225.453, "source": "autotuned"}, {"m": 13, "n": 22, "k": 23, "tile_m": 2, "tile_n": 2, "w": 8, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 227.833, "source": "autotuned"}, {"m": 13, "n": 22, "k": 24, "tile_m": 3, "tile_n": 2, "w": 12, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 239.227, "source": "autotuned"}, {"m": 13, "n": 22, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 241.066, "source": "autotuned"}, {"m": 13, "n": 22, "k": 32, "tile_m": 3, "tile_n": 2, "w": 12, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 252.527, "source": "autotuned"}, {"m": 13, "n": 23, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 118.375, "source": "autotuned"}, {"m": 13, "n": 23, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 136.973, "source": "autotuned"}, {"m": 13, "n": 23, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 148.462, "source": "autotuned"}, {"m": 13, "n": 23, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 174.284, "source": "autotuned"}, {"m": 13, "n": 23, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 185.07, "source": "autotuned"}, {"m": 13, "n": 23, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 214.408, "source": "autotuned"}, {"m": 13, "n": 23, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 22, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 215.76, "source": "autotuned"}, {"m": 13, "n": 23, "k": 17, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 217.951, "source": "autotuned"}, {"m": 13, "n": 23, "k": 22, "tile_m": 2, "tile_n": 2, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 227.875, "source": "autotuned"}, {"m": 13, "n": 23, "k": 23, "tile_m": 2, "tile_n": 3, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 233.26, "source": "autotuned"}, {"m": 13, "n": 23, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 243.006, "source": "autotuned"}, {"m": 13, "n": 23, "k": 26, "tile_m": 2, "tile_n": 2, "w": 12, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 235.319, "source": "autotuned"}, {"m": 13, "n": 23, "k": 32, "tile_m": 3, "tile_n": 2, "w": 12, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 256.302, "source": "autotuned"}, {"m": 13, "n": 24, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 126.462, "source": "autotuned"}, {"m": 13, "n": 24, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 145.967, "source": "autotuned"}, {"m": 13, "n": 24, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 158.896, "source": "autotuned"}, {"m": 13, "n": 24, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 182.54, "source": "autotuned"}, {"m": 13, "n": 24, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 195.482, "source": "autotuned"}, {"m": 13, "n": 24, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 203.566, "source": "autotuned"}, {"m": 13, "n": 24, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 223.93, "source": "autotuned"}, {"m": 13, "n": 24, "k": 17, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 228.962, "source": "autotuned"}, {"m": 13, "n": 24, "k": 22, "tile_m": 2, "tile_n": 3, "w": 6, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 243.549, "source": "autotuned"}, {"m": 13, "n": 24, "k": 23, "tile_m": 2, "tile_n": 2, "w": 8, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 244.933, "source": "autotuned"}, {"m": 13, "n": 24, "k": 24, "tile_m": 3, "tile_n": 2, "w": 12, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 256.27, "source": "autotuned"}, {"m": 13, "n": 24, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 253.677, "source": "autotuned"}, {"m": 13, "n": 24, "k": 32, "tile_m": 3, "tile_n": 2, "w": 12, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 272.912, "source": "autotuned"}, {"m": 13, "n": 24, "k": 45, "tile_m": 2, "tile_n": 3, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 323.835, "source": "autotuned"}, {"m": 13, "n": 25, "k": 4, "tile_m": 2, "tile_n": 2, "w": 2, "v": 18, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 139.434, "source": "autotuned"}, {"m": 13, "n": 25, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 146.157, "source": "autotuned"}, {"m": 13, "n": 25, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 169.341, "source": "autotuned"}, {"m": 13, "n": 25, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 199.087, "source": "autotuned"}, {"m": 13, "n": 25, "k": 13, "tile_m": 2, "tile_n": 2, "w": 6, "v": 18, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 222.344, "source": "autotuned"}, {"m": 13, "n": 25, "k": 25, "tile_m": 2, "tile_n": 3, "w": 12, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 283.473, "source": "autotuned"}, {"m": 13, "n": 25, "k": 26, "tile_m": 2, "tile_n": 3, "w": 12, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 286.294, "source": "autotuned"}, {"m": 13, "n": 25, "k": 28, "tile_m": 2, "tile_n": 3, "w": 14, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 298.297, "source": "autotuned"}, {"m": 13, "n": 25, "k": 32, "tile_m": 2, "tile_n": 3, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 300.302, "source": "autotuned"}, {"m": 13, "n": 25, "k": 45, "tile_m": 2, "tile_n": 3, "w": 12, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 322.398, "source": "autotuned"}, {"m": 13, "n": 26, "k": 4, "tile_m": 2, "tile_n": 2, "w": 2, "v": 22, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 142.206, "source": "autotuned"}, {"m": 13, "n": 26, "k": 5, "tile_m": 2, "tile_n": 2, "w": 2, "v": 26, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 153.192, "source": "autotuned"}, {"m": 13, "n": 26, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 165.607, "source": "autotuned"}, {"m": 13, "n": 26, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 175.539, "source": "autotuned"}, {"m": 13, "n": 26, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 191.191, "source": "autotuned"}, {"m": 13, "n": 26, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 206.218, "source": "autotuned"}, {"m": 13, "n": 26, "k": 13, "tile_m": 2, "tile_n": 3, "w": 6, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 236.552, "source": "autotuned"}, {"m": 13, "n": 26, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 225.673, "source": "autotuned"}, {"m": 13, "n": 26, "k": 17, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 241.87, "source": "autotuned"}, {"m": 13, "n": 26, "k": 22, "tile_m": 2, "tile_n": 2, "w": 6, "v": 26, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 251.077, "source": "autotuned"}, {"m": 13, "n": 26, "k": 23, "tile_m": 2, "tile_n": 2, "w": 6, "v": 26, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 255.001, "source": "autotuned"}, {"m": 13, "n": 26, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 262.921, "source": "autotuned"}, {"m": 13, "n": 26, "k": 25, "tile_m": 2, "tile_n": 3, "w": 12, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 290.699, "source": "autotuned"}, {"m": 13, "n": 26, "k": 26, "tile_m": 2, "tile_n": 3, "w": 12, "v": 26, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 296.294, "source": "autotuned"}, {"m": 13, "n": 26, "k": 28, "tile_m": 2, "tile_n": 2, "w": 14, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 306.437, "source": "autotuned"}, {"m": 13, "n": 26, "k": 32, "tile_m": 2, "tile_n": 3, "w": 12, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 312.2, "source": "autotuned"}, {"m": 13, "n": 26, "k": 45, "tile_m": 2, "tile_n": 3, "w": 12, "v": 26, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 333.855, "source": "autotuned"}, {"m": 13, "n": 28, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 136.696, "source": "autotuned"}, {"m": 13, "n": 28, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 147.311, "source": "autotuned"}, {"m": 13, "n": 28, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 165.948, "source": "autotuned"}, {"m": 13, "n": 28, "k": 9, "tile_m": 2, "tile_n": 2, "w": 4, "v": 28, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 197.709, "source": "autotuned"}, {"m": 13, "n": 28, "k": 13, "tile_m": 4, "tile_n": 2, "w": 6, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 230.774, "source": "autotuned"}, {"m": 13, "n": 28, "k": 25, "tile_m": 1, "tile_n": 4, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 277.441, "source": "autotuned"}, {"m": 13, "n": 28, "k": 26, "tile_m": 1, "tile_n": 4, "w": 12, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 282.085, "source": "autotuned"}, {"m": 13, "n": 28, "k": 28, "tile_m": 1, "tile_n": 4, "w": 10, "v": 26, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 286.256, "source": "autotuned"}, {"m": 13, "n": 28, "k": 32, "tile_m": 1, "tile_n": 4, "w": 12, "v": 28, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 294.744, "source": "autotuned"}, {"m": 13, "n": 28, "k": 45, "tile_m": 4, "tile_n": 2, "w": 12, "v": 28, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 301.413, "source": "autotuned"}, {"m": 13, "n": 32, "k": 4, "tile_m": 4, "tile_n": 2, "w": 2, "v": 32, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 147.822, "source": "autotuned"}, {"m": 13, "n": 32, "k": 5, "tile_m": 3, "tile_n": 2, "w": 2, "v": 32, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 156.628, "source": "autotuned"}, {"m": 13, "n": 32, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 181.813, "source": "autotuned"}, {"m": 13, "n": 32, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 188.684, "source": "autotuned"}, {"m": 13, "n": 32, "k": 8, "tile_m": 2, "tile_n": 2, "w": 4, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 200.207, "source": "autotuned"}, {"m": 13, "n": 32, "k": 9, "tile_m": 2, "tile_n": 2, "w": 4, "v": 32, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 223.308, "source": "autotuned"}, {"m": 13, "n": 32, "k": 13, "tile_m": 4, "tile_n": 2, "w": 6, "v": 26, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 263.806, "source": "autotuned"}, {"m": 13, "n": 32, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 260.668, "source": "autotuned"}, {"m": 13, "n": 32, "k": 17, "tile_m": 2, "tile_n": 3, "w": 6, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 247.911, "source": "autotuned"}, {"m": 13, "n": 32, "k": 22, "tile_m": 2, "tile_n": 3, "w": 6, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 271.196, "source": "autotuned"}, {"m": 13, "n": 32, "k": 23, "tile_m": 2, "tile_n": 3, "w": 6, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 275.98, "source": "autotuned"}, {"m": 13, "n": 32, "k": 24, "tile_m": 2, "tile_n": 2, "w": 12, "v": 24, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 283.245, "source": "autotuned"}, {"m": 13, "n": 32, "k": 25, "tile_m": 2, "tile_n": 4, "w": 6, "v": 26, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 302.793, "source": "autotuned"}, {"m": 13, "n": 32, "k": 26, "tile_m": 2, "tile_n": 4, "w": 12, "v": 32, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 303.713, "source": "autotuned"}, {"m": 13, "n": 32, "k": 28, "tile_m": 2, "tile_n": 4, "w": 8, "v": 26, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 314.111, "source": "autotuned"}, {"m": 13, "n": 32, "k": 32, "tile_m": 2, "tile_n": 4, "w": 16, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 330.971, "source": "autotuned"}, {"m": 13, "n": 32, "k": 45, "tile_m": 2, "tile_n": 4, "w": 12, "v": 32, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 336.419, "source": "autotuned"}, {"m": 13, "n": 45, "k": 4, "tile_m": 4, "tile_n": 2, "w": 2, "v": 36, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 161.891, "source": "autotuned"}, {"m": 13, "n": 45, "k": 5, "tile_m": 3, "tile_n": 2, "w": 2, "v": 36, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 174.168, "source": "autotuned"}, {"m": 13, "n": 45, "k": 7, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 203.007, "source": "autotuned"}, {"m": 13, "n": 45, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 235.887, "source": "autotuned"}, {"m": 13, "n": 45, "k": 13, "tile_m": 2, "tile_n": 3, "w": 6, "v": 36, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 260.83, "source": "autotuned"}, {"m": 13, "n": 45, "k": 24, "tile_m": 2, "tile_n": 5, "w": 12, "v": 40, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 328.273, "source": "autotuned"}, {"m": 13, "n": 45, "k": 25, "tile_m": 2, "tile_n": 3, "w": 12, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 318.496, "source": "autotuned"}, {"m": 13, "n": 45, "k": 26, "tile_m": 2, "tile_n": 3, "w": 12, "v": 36, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 323.253, "source": "autotuned"}, {"m": 13, "n": 45, "k": 28, "tile_m": 2, "tile_n": 3, "w": 14, "v": 36, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 338.61, "source": "autotuned"}, {"m": 13, "n": 45, "k": 32, "tile_m": 2, "tile_n": 5, "w": 12, "v": 38, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 342.906, "source": "autotuned"}, {"m": 13, "n": 45, "k": 45, "tile_m": 2, "tile_n": 5, "w": 12, "v": 44, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 366.795, "source": "autotuned"}, {"m": 14, "n": 14, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 197.885, "source": "autotuned"}, {"m": 14, "n": 14, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 216.145, "source": "autotuned"}, {"m": 14, "n": 14, "k": 29, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 218.838, "source": "autotuned"}, {"m": 14, "n": 14, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 224.281, "source": "autotuned"}, {"m": 14, "n": 16, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 213.982, "source": "autotuned"}, {"m": 14, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 230.421, "source": "autotuned"}, {"m": 14, "n": 16, "k": 29, "tile_m": 2, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 232.968, "source": "autotuned"}, {"m": 14, "n": 29, "k": 14, "tile_m": 2, "tile_n": 2, "w": 4, "v": 20, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 231.308, "source": "autotuned"}, {"m": 14, "n": 29, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 267.108, "source": "autotuned"}, {"m": 14, "n": 29, "k": 29, "tile_m": 2, "tile_n": 2, "w": 10, "v": 20, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 272.491, "source": "autotuned"}, {"m": 14, "n": 29, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 20, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 292.149, "source": "autotuned"}, {"m": 14, "n": 32, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 258.209, "source": "autotuned"}, {"m": 14, "n": 32, "k": 29, "tile_m": 2, "tile_n": 2, "w": 10, "v": 32, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 311.422, "source": "autotuned"}, {"m": 14, "n": 32, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 32, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 326.197, "source": "autotuned"}, {"m": 15, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 41.0244, "source": "autotuned"}, {"m": 15, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 76.5643, "source": "autotuned"}, {"m": 15, "n": 4, "k": 15, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 101.102, "source": "autotuned"}, {"m": 15, "n": 10, "k": 4, "tile_m": 2, "tile_n": 1, "w": 2, "v": 10, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 85.363, "source": "autotuned"}, {"m": 15, "n": 10, "k": 10, "tile_m": 1, "tile_n": 2, "w": 4, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 138.924, "source": "autotuned"}, {"m": 15, "n": 10, "k": 15, "tile_m": 1, "tile_n": 2, "w": 6, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 168.55, "source": "autotuned"}, {"m": 15, "n": 15, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 119.369, "source": "autotuned"}, {"m": 15, "n": 15, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 184.444, "source": "autotuned"}, {"m": 15, "n": 15, "k": 15, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 226.439, "source": "autotuned"}, {"m": 16, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 43.2513, "source": "autotuned"}, {"m": 16, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 52.8509, "source": "autotuned"}, {"m": 16, "n": 4, "k": 6, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 56.0623, "source": "autotuned"}, {"m": 16, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 70.6265, "source": "autotuned"}, {"m": 16, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 76.3591, "source": "autotuned"}, {"m": 16, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 90.3877, "source": "autotuned"}, {"m": 16, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 104.947, "source": "autotuned"}, {"m": 16, "n": 4, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 108.128, "source": "autotuned"}, {"m": 16, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 117.022, "source": "autotuned"}, {"m": 16, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 118.619, "source": "autotuned"}, {"m": 16, "n": 4, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 118.972, "source": "autotuned"}, {"m": 16, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 116.617, "source": "autotuned"}, {"m": 16, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 119.202, "source": "autotuned"}, {"m": 16, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 53.2937, "source": "autotuned"}, {"m": 16, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 64.8851, "source": "autotuned"}, {"m": 16, "n": 5, "k": 6, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 68.9342, "source": "autotuned"}, {"m": 16, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 84.6639, "source": "autotuned"}, {"m": 16, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 91.9906, "source": "autotuned"}, {"m": 16, "n": 5, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 107.42, "source": "autotuned"}, {"m": 16, "n": 5, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 121.912, "source": "autotuned"}, {"m": 16, "n": 5, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 125.062, "source": "autotuned"}, {"m": 16, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 134.168, "source": "autotuned"}, {"m": 16, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 127.673, "source": "autotuned"}, {"m": 16, "n": 5, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 129.534, "source": "autotuned"}, {"m": 16, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 127.182, "source": "autotuned"}, {"m": 16, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 138.029, "source": "autotuned"}, {"m": 16, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 63.7826, "source": "autotuned"}, {"m": 16, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 77.3562, "source": "autotuned"}, {"m": 16, "n": 6, "k": 6, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 81.9641, "source": "autotuned"}, {"m": 16, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 99.2729, "source": "autotuned"}, {"m": 16, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 108.16, "source": "autotuned"}, {"m": 16, "n": 6, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 128.018, "source": "autotuned"}, {"m": 16, "n": 6, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 6, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 134.069, "source": "autotuned"}, {"m": 16, "n": 6, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 141.119, "source": "autotuned"}, {"m": 16, "n": 6, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 147.402, "source": "autotuned"}, {"m": 16, "n": 6, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 147.837, "source": "autotuned"}, {"m": 16, "n": 6, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 6, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 151.996, "source": "autotuned"}, {"m": 16, "n": 6, "k": 26, "tile_m": 1, "tile_n": 1, "w": 10, "v": 6, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 149.231, "source": "autotuned"}, {"m": 16, "n": 6, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 163.734, "source": "autotuned"}, {"m": 16, "n": 8, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 78.0533, "source": "autotuned"}, {"m": 16, "n": 8, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 91.3267, "source": "autotuned"}, {"m": 16, "n": 8, "k": 6, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 105.373, "source": "autotuned"}, {"m": 16, "n": 8, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 124.195, "source": "autotuned"}, {"m": 16, "n": 8, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 121.754, "source": "autotuned"}, {"m": 16, "n": 8, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 150.445, "source": "autotuned"}, {"m": 16, "n": 8, "k": 16, "tile_m": 1, "tile_n": 1, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 166.502, "source": "autotuned"}, {"m": 16, "n": 8, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 167.3, "source": "autotuned"}, {"m": 16, "n": 8, "k": 22, "tile_m": 1, "tile_n": 1, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 175.569, "source": "autotuned"}, {"m": 16, "n": 8, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 178.527, "source": "autotuned"}, {"m": 16, "n": 8, "k": 24, "tile_m": 2, "tile_n": 1, "w": 12, "v": 8, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 185.133, "source": "autotuned"}, {"m": 16, "n": 8, "k": 26, "tile_m": 1, "tile_n": 1, "w": 12, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 178.92, "source": "autotuned"}, {"m": 16, "n": 8, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 8, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 194.196, "source": "autotuned"}, {"m": 16, "n": 9, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 82.0886, "source": "autotuned"}, {"m": 16, "n": 9, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 98.1233, "source": "autotuned"}, {"m": 16, "n": 9, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 102.023, "source": "autotuned"}, {"m": 16, "n": 9, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 120.113, "source": "autotuned"}, {"m": 16, "n": 9, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 128.209, "source": "autotuned"}, {"m": 16, "n": 9, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 149.02, "source": "autotuned"}, {"m": 16, "n": 9, "k": 16, "tile_m": 2, "tile_n": 1, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 161.845, "source": "autotuned"}, {"m": 16, "n": 9, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 166.142, "source": "autotuned"}, {"m": 16, "n": 9, "k": 22, "tile_m": 2, "tile_n": 1, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 171.029, "source": "autotuned"}, {"m": 16, "n": 9, "k": 23, "tile_m": 2, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 173.179, "source": "autotuned"}, {"m": 16, "n": 9, "k": 24, "tile_m": 2, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 175.852, "source": "autotuned"}, {"m": 16, "n": 9, "k": 26, "tile_m": 2, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 180.319, "source": "autotuned"}, {"m": 16, "n": 9, "k": 32, "tile_m": 2, "tile_n": 1, "w": 6, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 179.384, "source": "autotuned"}, {"m": 16, "n": 9, "k": 64, "tile_m": 3, "tile_n": 2, "w": 16, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 213.459, "source": "autotuned"}, {"m": 16, "n": 13, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 101.905, "source": "autotuned"}, {"m": 16, "n": 13, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 116.398, "source": "autotuned"}, {"m": 16, "n": 13, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 127.421, "source": "autotuned"}, {"m": 16, "n": 13, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 146.46, "source": "autotuned"}, {"m": 16, "n": 13, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 156.829, "source": "autotuned"}, {"m": 16, "n": 13, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 189.636, "source": "autotuned"}, {"m": 16, "n": 13, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 214.841, "source": "autotuned"}, {"m": 16, "n": 13, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 191.644, "source": "autotuned"}, {"m": 16, "n": 13, "k": 22, "tile_m": 2, "tile_n": 2, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 210.521, "source": "autotuned"}, {"m": 16, "n": 13, "k": 23, "tile_m": 2, "tile_n": 2, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 214.991, "source": "autotuned"}, {"m": 16, "n": 13, "k": 24, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 212.921, "source": "autotuned"}, {"m": 16, "n": 13, "k": 26, "tile_m": 2, "tile_n": 1, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 210.224, "source": "autotuned"}, {"m": 16, "n": 13, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 234.974, "source": "autotuned"}, {"m": 16, "n": 14, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 215.62, "source": "autotuned"}, {"m": 16, "n": 14, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 230.5, "source": "autotuned"}, {"m": 16, "n": 14, "k": 29, "tile_m": 2, "tile_n": 1, "w": 8, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 231.585, "source": "autotuned"}, {"m": 16, "n": 16, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 142.372, "source": "autotuned"}, {"m": 16, "n": 16, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 161.476, "source": "autotuned"}, {"m": 16, "n": 16, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 180.677, "source": "autotuned"}, {"m": 16, "n": 16, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 205.549, "source": "autotuned"}, {"m": 16, "n": 16, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 205.186, "source": "autotuned"}, {"m": 16, "n": 16, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 240.903, "source": "autotuned"}, {"m": 16, "n": 16, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 253.252, "source": "autotuned"}, {"m": 16, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 267.825, "source": "autotuned"}, {"m": 16, "n": 16, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 247.453, "source": "autotuned"}, {"m": 16, "n": 16, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 268.121, "source": "autotuned"}, {"m": 16, "n": 16, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 272.615, "source": "autotuned"}, {"m": 16, "n": 16, "k": 24, "tile_m": 2, "tile_n": 2, "w": 12, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 265.276, "source": "autotuned"}, {"m": 16, "n": 16, "k": 26, "tile_m": 2, "tile_n": 2, "w": 10, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 263.235, "source": "autotuned"}, {"m": 16, "n": 16, "k": 29, "tile_m": 2, "tile_n": 2, "w": 14, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 270.638, "source": "autotuned"}, {"m": 16, "n": 16, "k": 32, "tile_m": 2, "tile_n": 2, "w": 14, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 276.949, "source": "autotuned"}, {"m": 16, "n": 16, "k": 55, "tile_m": 2, "tile_n": 2, "w": 14, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 303.184, "source": "autotuned"}, {"m": 16, "n": 16, "k": 64, "tile_m": 2, "tile_n": 2, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 312.221, "source": "autotuned"}, {"m": 16, "n": 17, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 113.047, "source": "autotuned"}, {"m": 16, "n": 17, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 135.825, "source": "autotuned"}, {"m": 16, "n": 17, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 152.914, "source": "autotuned"}, {"m": 16, "n": 17, "k": 8, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 165.821, "source": "autotuned"}, {"m": 16, "n": 17, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 179.436, "source": "autotuned"}, {"m": 16, "n": 17, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 215.752, "source": "autotuned"}, {"m": 16, "n": 17, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 202.68, "source": "autotuned"}, {"m": 16, "n": 17, "k": 17, "tile_m": 3, "tile_n": 2, "w": 6, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 210.423, "source": "autotuned"}, {"m": 16, "n": 17, "k": 22, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 234.804, "source": "autotuned"}, {"m": 16, "n": 17, "k": 23, "tile_m": 1, "tile_n": 3, "w": 6, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 235.716, "source": "autotuned"}, {"m": 16, "n": 17, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 241.704, "source": "autotuned"}, {"m": 16, "n": 17, "k": 26, "tile_m": 2, "tile_n": 3, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 235.825, "source": "autotuned"}, {"m": 16, "n": 17, "k": 32, "tile_m": 2, "tile_n": 3, "w": 12, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 255.137, "source": "autotuned"}, {"m": 16, "n": 22, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 138.141, "source": "autotuned"}, {"m": 16, "n": 22, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 161.969, "source": "autotuned"}, {"m": 16, "n": 22, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 169.805, "source": "autotuned"}, {"m": 16, "n": 22, "k": 8, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 205.457, "source": "autotuned"}, {"m": 16, "n": 22, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 217.014, "source": "autotuned"}, {"m": 16, "n": 22, "k": 13, "tile_m": 2, "tile_n": 2, "w": 4, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 223.224, "source": "autotuned"}, {"m": 16, "n": 22, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 253.21, "source": "autotuned"}, {"m": 16, "n": 22, "k": 17, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 260.436, "source": "autotuned"}, {"m": 16, "n": 22, "k": 22, "tile_m": 2, "tile_n": 3, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 273.938, "source": "autotuned"}, {"m": 16, "n": 22, "k": 23, "tile_m": 2, "tile_n": 3, "w": 10, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 277.81, "source": "autotuned"}, {"m": 16, "n": 22, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 291.318, "source": "autotuned"}, {"m": 16, "n": 22, "k": 26, "tile_m": 2, "tile_n": 3, "w": 10, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 289.631, "source": "autotuned"}, {"m": 16, "n": 22, "k": 32, "tile_m": 2, "tile_n": 3, "w": 12, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 305.311, "source": "autotuned"}, {"m": 16, "n": 22, "k": 64, "tile_m": 2, "tile_n": 2, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 349.601, "source": "autotuned"}, {"m": 16, "n": 23, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 143.468, "source": "autotuned"}, {"m": 16, "n": 23, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 167.762, "source": "autotuned"}, {"m": 16, "n": 23, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 176.832, "source": "autotuned"}, {"m": 16, "n": 23, "k": 8, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 213.06, "source": "autotuned"}, {"m": 16, "n": 23, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 226.28, "source": "autotuned"}, {"m": 16, "n": 23, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 230.437, "source": "autotuned"}, {"m": 16, "n": 23, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 263.178, "source": "autotuned"}, {"m": 16, "n": 23, "k": 17, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 264.544, "source": "autotuned"}, {"m": 16, "n": 23, "k": 22, "tile_m": 2, "tile_n": 3, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 279.549, "source": "autotuned"}, {"m": 16, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "w": 10, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 282.297, "source": "autotuned"}, {"m": 16, "n": 23, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 295.553, "source": "autotuned"}, {"m": 16, "n": 23, "k": 26, "tile_m": 2, "tile_n": 2, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 291.977, "source": "autotuned"}, {"m": 16, "n": 23, "k": 32, "tile_m": 2, "tile_n": 3, "w": 12, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 313.606, "source": "autotuned"}, {"m": 16, "n": 24, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 150.444, "source": "autotuned"}, {"m": 16, "n": 24, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 174.489, "source": "autotuned"}, {"m": 16, "n": 24, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 184.054, "source": "autotuned"}, {"m": 16, "n": 24, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 207.226, "source": "autotuned"}, {"m": 16, "n": 24, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 235.336, "source": "autotuned"}, {"m": 16, "n": 24, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 239.748, "source": "autotuned"}, {"m": 16, "n": 24, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 283.218, "source": "autotuned"}, {"m": 16, "n": 24, "k": 17, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 275.019, "source": "autotuned"}, {"m": 16, "n": 24, "k": 22, "tile_m": 2, "tile_n": 3, "w": 8, "v": 18, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 298.156, "source": "autotuned"}, {"m": 16, "n": 24, "k": 23, "tile_m": 2, "tile_n": 3, "w": 8, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 302.868, "source": "autotuned"}, {"m": 16, "n": 24, "k": 24, "tile_m": 2, "tile_n": 2, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 313.429, "source": "autotuned"}, {"m": 16, "n": 24, "k": 26, "tile_m": 2, "tile_n": 3, "w": 10, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 309.598, "source": "autotuned"}, {"m": 16, "n": 24, "k": 32, "tile_m": 2, "tile_n": 3, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 328.287, "source": "autotuned"}, {"m": 16, "n": 26, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 145.64, "source": "autotuned"}, {"m": 16, "n": 26, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 161.73, "source": "autotuned"}, {"m": 16, "n": 26, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 166.297, "source": "autotuned"}, {"m": 16, "n": 26, "k": 8, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 203.682, "source": "autotuned"}, {"m": 16, "n": 26, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 211.795, "source": "autotuned"}, {"m": 16, "n": 26, "k": 13, "tile_m": 2, "tile_n": 2, "w": 6, "v": 26, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 235.299, "source": "autotuned"}, {"m": 16, "n": 26, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 18, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 273.171, "source": "autotuned"}, {"m": 16, "n": 26, "k": 17, "tile_m": 2, "tile_n": 2, "w": 8, "v": 18, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 265.788, "source": "autotuned"}, {"m": 16, "n": 26, "k": 22, "tile_m": 2, "tile_n": 4, "w": 10, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 285.563, "source": "autotuned"}, {"m": 16, "n": 26, "k": 23, "tile_m": 2, "tile_n": 2, "w": 6, "v": 18, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 284.848, "source": "autotuned"}, {"m": 16, "n": 26, "k": 24, "tile_m": 2, "tile_n": 2, "w": 8, "v": 18, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 301.847, "source": "autotuned"}, {"m": 16, "n": 26, "k": 26, "tile_m": 2, "tile_n": 4, "w": 10, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 298.512, "source": "autotuned"}, {"m": 16, "n": 26, "k": 32, "tile_m": 2, "tile_n": 4, "w": 10, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 308.645, "source": "autotuned"}, {"m": 16, "n": 29, "k": 14, "tile_m": 2, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 264.624, "source": "autotuned"}, {"m": 16, "n": 29, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 294.66, "source": "autotuned"}, {"m": 16, "n": 29, "k": 29, "tile_m": 2, "tile_n": 2, "w": 6, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 312.556, "source": "autotuned"}, {"m": 16, "n": 29, "k": 55, "tile_m": 2, "tile_n": 4, "w": 6, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 360.672, "source": "autotuned"}, {"m": 16, "n": 32, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 149.795, "source": "autotuned"}, {"m": 16, "n": 32, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 166.138, "source": "autotuned"}, {"m": 16, "n": 32, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 189.982, "source": "autotuned"}, {"m": 16, "n": 32, "k": 8, "tile_m": 2, "tile_n": 2, "w": 4, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 234.188, "source": "autotuned"}, {"m": 16, "n": 32, "k": 9, "tile_m": 2, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 239.327, "source": "autotuned"}, {"m": 16, "n": 32, "k": 13, "tile_m": 2, "tile_n": 2, "w": 6, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 290.526, "source": "autotuned"}, {"m": 16, "n": 32, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 326.65, "source": "autotuned"}, {"m": 16, "n": 32, "k": 17, "tile_m": 2, "tile_n": 2, "w": 8, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 322.698, "source": "autotuned"}, {"m": 16, "n": 32, "k": 22, "tile_m": 2, "tile_n": 4, "w": 6, "v": 28, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 328.078, "source": "autotuned"}, {"m": 16, "n": 32, "k": 23, "tile_m": 2, "tile_n": 2, "w": 6, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 344.677, "source": "autotuned"}, {"m": 16, "n": 32, "k": 24, "tile_m": 2, "tile_n": 2, "w": 8, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 358.185, "source": "autotuned"}, {"m": 16, "n": 32, "k": 26, "tile_m": 2, "tile_n": 2, "w": 6, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 342.564, "source": "autotuned"}, {"m": 16, "n": 32, "k": 32, "tile_m": 2, "tile_n": 4, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 360.103, "source": "autotuned"}, {"m": 16, "n": 55, "k": 16, "tile_m": 2, "tile_n": 4, "w": 8, "v": 32, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 331.33, "source": "autotuned"}, {"m": 16, "n": 55, "k": 29, "tile_m": 2, "tile_n": 4, "w": 8, "v": 40, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 387.674, "source": "autotuned"}, {"m": 16, "n": 55, "k": 55, "tile_m": 2, "tile_n": 4, "w": 8, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 430.218, "source": "autotuned"}, {"m": 16, "n": 64, "k": 9, "tile_m": 2, "tile_n": 4, "w": 4, "v": 40, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 281.238, "source": "autotuned"}, {"m": 16, "n": 64, "k": 16, "tile_m": 2, "tile_n": 4, "w": 8, "v": 40, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 374.147, "source": "autotuned"}, {"m": 16, "n": 64, "k": 22, "tile_m": 2, "tile_n": 4, "w": 8, "v": 40, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 409.267, "source": "autotuned"}, {"m": 16, "n": 64, "k": 64, "tile_m": 2, "tile_n": 4, "w": 8, "v": 44, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 500.346, "source": "autotuned"}, {"m": 17, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 44.4021, "source": "autotuned"}, {"m": 17, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 54.1312, "source": "autotuned"}, {"m": 17, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 55.1151, "source": "autotuned"}, {"m": 17, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 64.4064, "source": "autotuned"}, {"m": 17, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 69.4042, "source": "autotuned"}, {"m": 17, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 86.341, "source": "autotuned"}, {"m": 17, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 99.1383, "source": "autotuned"}, {"m": 17, "n": 4, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 98.4389, "source": "autotuned"}, {"m": 17, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 113.713, "source": "autotuned"}, {"m": 17, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 109.504, "source": "autotuned"}, {"m": 17, "n": 4, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 109.247, "source": "autotuned"}, {"m": 17, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 112.934, "source": "autotuned"}, {"m": 17, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 116.496, "source": "autotuned"}, {"m": 17, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 55.1226, "source": "autotuned"}, {"m": 17, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 67.2537, "source": "autotuned"}, {"m": 17, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 67.5261, "source": "autotuned"}, {"m": 17, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 78.5404, "source": "autotuned"}, {"m": 17, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 86.2825, "source": "autotuned"}, {"m": 17, "n": 5, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 106.81, "source": "autotuned"}, {"m": 17, "n": 5, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 121.92, "source": "autotuned"}, {"m": 17, "n": 5, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 122.006, "source": "autotuned"}, {"m": 17, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 136.463, "source": "autotuned"}, {"m": 17, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 132.002, "source": "autotuned"}, {"m": 17, "n": 5, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 135.055, "source": "autotuned"}, {"m": 17, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 131.777, "source": "autotuned"}, {"m": 17, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 138.231, "source": "autotuned"}, {"m": 17, "n": 6, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 60.0659, "source": "autotuned"}, {"m": 17, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 69.3811, "source": "autotuned"}, {"m": 17, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 76.6485, "source": "autotuned"}, {"m": 17, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "w": 4, "v": 6, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 87.7851, "source": "autotuned"}, {"m": 17, "n": 6, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 93.856, "source": "autotuned"}, {"m": 17, "n": 6, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 121.148, "source": "autotuned"}, {"m": 17, "n": 6, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 129.192, "source": "autotuned"}, {"m": 17, "n": 6, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 129.614, "source": "autotuned"}, {"m": 17, "n": 6, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 140.116, "source": "autotuned"}, {"m": 17, "n": 6, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 138.103, "source": "autotuned"}, {"m": 17, "n": 6, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 142.037, "source": "autotuned"}, {"m": 17, "n": 6, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 145.376, "source": "autotuned"}, {"m": 17, "n": 6, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 150.065, "source": "autotuned"}, {"m": 17, "n": 8, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 73.5398, "source": "autotuned"}, {"m": 17, "n": 8, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 84.7969, "source": "autotuned"}, {"m": 17, "n": 8, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 90.287, "source": "autotuned"}, {"m": 17, "n": 8, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 110.66, "source": "autotuned"}, {"m": 17, "n": 8, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 117.865, "source": "autotuned"}, {"m": 17, "n": 8, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 136.931, "source": "autotuned"}, {"m": 17, "n": 8, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 151.999, "source": "autotuned"}, {"m": 17, "n": 8, "k": 17, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 153.384, "source": "autotuned"}, {"m": 17, "n": 8, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 157.352, "source": "autotuned"}, {"m": 17, "n": 8, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 157.04, "source": "autotuned"}, {"m": 17, "n": 8, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 158.743, "source": "autotuned"}, {"m": 17, "n": 8, "k": 26, "tile_m": 2, "tile_n": 3, "w": 12, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 158.262, "source": "autotuned"}, {"m": 17, "n": 8, "k": 32, "tile_m": 3, "tile_n": 2, "w": 16, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 178.979, "source": "autotuned"}, {"m": 17, "n": 9, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 77.9497, "source": "autotuned"}, {"m": 17, "n": 9, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 93.1439, "source": "autotuned"}, {"m": 17, "n": 9, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 98.5145, "source": "autotuned"}, {"m": 17, "n": 9, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 115.668, "source": "autotuned"}, {"m": 17, "n": 9, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 130.249, "source": "autotuned"}, {"m": 17, "n": 9, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 150.565, "source": "autotuned"}, {"m": 17, "n": 9, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 163.688, "source": "autotuned"}, {"m": 17, "n": 9, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 167.344, "source": "autotuned"}, {"m": 17, "n": 9, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 171.276, "source": "autotuned"}, {"m": 17, "n": 9, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 166.022, "source": "autotuned"}, {"m": 17, "n": 9, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 168.798, "source": "autotuned"}, {"m": 17, "n": 9, "k": 26, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 168.829, "source": "autotuned"}, {"m": 17, "n": 9, "k": 32, "tile_m": 2, "tile_n": 3, "w": 16, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 184.866, "source": "autotuned"}, {"m": 17, "n": 13, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 100.145, "source": "autotuned"}, {"m": 17, "n": 13, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 118.278, "source": "autotuned"}, {"m": 17, "n": 13, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 131.89, "source": "autotuned"}, {"m": 17, "n": 13, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 149.14, "source": "autotuned"}, {"m": 17, "n": 13, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 161.29, "source": "autotuned"}, {"m": 17, "n": 13, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 199.157, "source": "autotuned"}, {"m": 17, "n": 13, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 215.17, "source": "autotuned"}, {"m": 17, "n": 13, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 193.774, "source": "autotuned"}, {"m": 17, "n": 13, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 220.321, "source": "autotuned"}, {"m": 17, "n": 13, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 220.147, "source": "autotuned"}, {"m": 17, "n": 13, "k": 24, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 222.453, "source": "autotuned"}, {"m": 17, "n": 13, "k": 26, "tile_m": 2, "tile_n": 2, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 213.018, "source": "autotuned"}, {"m": 17, "n": 13, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 238.862, "source": "autotuned"}, {"m": 17, "n": 16, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 116.716, "source": "autotuned"}, {"m": 17, "n": 16, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 136.165, "source": "autotuned"}, {"m": 17, "n": 16, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 154.74, "source": "autotuned"}, {"m": 17, "n": 16, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 169.907, "source": "autotuned"}, {"m": 17, "n": 16, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 177.331, "source": "autotuned"}, {"m": 17, "n": 16, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 203.746, "source": "autotuned"}, {"m": 17, "n": 16, "k": 16, "tile_m": 3, "tile_n": 1, "w": 4, "v": 10, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 206.356, "source": "autotuned"}, {"m": 17, "n": 16, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 207.944, "source": "autotuned"}, {"m": 17, "n": 16, "k": 22, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 235.476, "source": "autotuned"}, {"m": 17, "n": 16, "k": 23, "tile_m": 3, "tile_n": 1, "w": 6, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 235.699, "source": "autotuned"}, {"m": 17, "n": 16, "k": 24, "tile_m": 3, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 245.438, "source": "autotuned"}, {"m": 17, "n": 16, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 240.279, "source": "autotuned"}, {"m": 17, "n": 16, "k": 32, "tile_m": 3, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 257.664, "source": "autotuned"}, {"m": 17, "n": 17, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 123.512, "source": "autotuned"}, {"m": 17, "n": 17, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 144.444, "source": "autotuned"}, {"m": 17, "n": 17, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 153.953, "source": "autotuned"}, {"m": 17, "n": 17, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 179.063, "source": "autotuned"}, {"m": 17, "n": 17, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 194.247, "source": "autotuned"}, {"m": 17, "n": 17, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 227.787, "source": "autotuned"}, {"m": 17, "n": 17, "k": 16, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 228.835, "source": "autotuned"}, {"m": 17, "n": 17, "k": 17, "tile_m": 2, "tile_n": 2, "w": 6, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 239.722, "source": "autotuned"}, {"m": 17, "n": 17, "k": 22, "tile_m": 2, "tile_n": 2, "w": 6, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 235.625, "source": "autotuned"}, {"m": 17, "n": 17, "k": 23, "tile_m": 2, "tile_n": 2, "w": 6, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 237.176, "source": "autotuned"}, {"m": 17, "n": 17, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 240.597, "source": "autotuned"}, {"m": 17, "n": 17, "k": 26, "tile_m": 3, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 240.047, "source": "autotuned"}, {"m": 17, "n": 17, "k": 32, "tile_m": 3, "tile_n": 2, "w": 14, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 260.215, "source": "autotuned"}, {"m": 17, "n": 22, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 138.391, "source": "autotuned"}, {"m": 17, "n": 22, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 148.4, "source": "autotuned"}, {"m": 17, "n": 22, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 150.275, "source": "autotuned"}, {"m": 17, "n": 22, "k": 8, "tile_m": 2, "tile_n": 2, "w": 4, "v": 22, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 182.307, "source": "autotuned"}, {"m": 17, "n": 22, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 187.291, "source": "autotuned"}, {"m": 17, "n": 22, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 214.624, "source": "autotuned"}, {"m": 17, "n": 22, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 246.559, "source": "autotuned"}, {"m": 17, "n": 22, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 251.891, "source": "autotuned"}, {"m": 17, "n": 22, "k": 22, "tile_m": 3, "tile_n": 2, "w": 10, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 245.288, "source": "autotuned"}, {"m": 17, "n": 22, "k": 23, "tile_m": 3, "tile_n": 2, "w": 8, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 245.432, "source": "autotuned"}, {"m": 17, "n": 22, "k": 24, "tile_m": 3, "tile_n": 2, "w": 12, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 262.797, "source": "autotuned"}, {"m": 17, "n": 22, "k": 26, "tile_m": 3, "tile_n": 2, "w": 12, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 257.52, "source": "autotuned"}, {"m": 17, "n": 22, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 22, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 279.426, "source": "autotuned"}, {"m": 17, "n": 23, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 131.562, "source": "autotuned"}, {"m": 17, "n": 23, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 153.614, "source": "autotuned"}, {"m": 17, "n": 23, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 153.311, "source": "autotuned"}, {"m": 17, "n": 23, "k": 8, "tile_m": 2, "tile_n": 2, "w": 4, "v": 22, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 183.993, "source": "autotuned"}, {"m": 17, "n": 23, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 192.159, "source": "autotuned"}, {"m": 17, "n": 23, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 227.532, "source": "autotuned"}, {"m": 17, "n": 23, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 253.516, "source": "autotuned"}, {"m": 17, "n": 23, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 253.057, "source": "autotuned"}, {"m": 17, "n": 23, "k": 22, "tile_m": 2, "tile_n": 2, "w": 10, "v": 22, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 263.902, "source": "autotuned"}, {"m": 17, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 257.187, "source": "autotuned"}, {"m": 17, "n": 23, "k": 24, "tile_m": 2, "tile_n": 2, "w": 10, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 274.723, "source": "autotuned"}, {"m": 17, "n": 23, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 264.933, "source": "autotuned"}, {"m": 17, "n": 23, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 16, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 282.093, "source": "autotuned"}, {"m": 17, "n": 24, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 149.438, "source": "autotuned"}, {"m": 17, "n": 24, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 160.205, "source": "autotuned"}, {"m": 17, "n": 24, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 165.872, "source": "autotuned"}, {"m": 17, "n": 24, "k": 8, "tile_m": 2, "tile_n": 2, "w": 4, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 196.795, "source": "autotuned"}, {"m": 17, "n": 24, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 203.363, "source": "autotuned"}, {"m": 17, "n": 24, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 236.192, "source": "autotuned"}, {"m": 17, "n": 24, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 24, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 260.019, "source": "autotuned"}, {"m": 17, "n": 24, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 260.23, "source": "autotuned"}, {"m": 17, "n": 24, "k": 22, "tile_m": 3, "tile_n": 2, "w": 10, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 265.399, "source": "autotuned"}, {"m": 17, "n": 24, "k": 23, "tile_m": 3, "tile_n": 2, "w": 8, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 267.658, "source": "autotuned"}, {"m": 17, "n": 24, "k": 24, "tile_m": 2, "tile_n": 2, "w": 12, "v": 24, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 276.151, "source": "autotuned"}, {"m": 17, "n": 24, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 280.206, "source": "autotuned"}, {"m": 17, "n": 24, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 301.526, "source": "autotuned"}, {"m": 17, "n": 26, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 155.546, "source": "autotuned"}, {"m": 17, "n": 26, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 155.547, "source": "autotuned"}, {"m": 17, "n": 26, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 174.528, "source": "autotuned"}, {"m": 17, "n": 26, "k": 8, "tile_m": 2, "tile_n": 2, "w": 4, "v": 26, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 205.713, "source": "autotuned"}, {"m": 17, "n": 26, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 205.14, "source": "autotuned"}, {"m": 17, "n": 26, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 243.482, "source": "autotuned"}, {"m": 17, "n": 26, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 272.907, "source": "autotuned"}, {"m": 17, "n": 26, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 275.819, "source": "autotuned"}, {"m": 17, "n": 26, "k": 22, "tile_m": 2, "tile_n": 3, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 277.137, "source": "autotuned"}, {"m": 17, "n": 26, "k": 23, "tile_m": 3, "tile_n": 2, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 285.309, "source": "autotuned"}, {"m": 17, "n": 26, "k": 24, "tile_m": 3, "tile_n": 2, "w": 8, "v": 26, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 292.828, "source": "autotuned"}, {"m": 17, "n": 26, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 288.933, "source": "autotuned"}, {"m": 17, "n": 26, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 18, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 317.652, "source": "autotuned"}, {"m": 17, "n": 32, "k": 4, "tile_m": 3, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 148.299, "source": "autotuned"}, {"m": 17, "n": 32, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 168.196, "source": "autotuned"}, {"m": 17, "n": 32, "k": 6, "tile_m": 3, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 182.522, "source": "autotuned"}, {"m": 17, "n": 32, "k": 8, "tile_m": 3, "tile_n": 2, "w": 4, "v": 28, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 230.442, "source": "autotuned"}, {"m": 17, "n": 32, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 233.382, "source": "autotuned"}, {"m": 17, "n": 32, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 261.656, "source": "autotuned"}, {"m": 17, "n": 32, "k": 16, "tile_m": 3, "tile_n": 2, "w": 4, "v": 26, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 304.612, "source": "autotuned"}, {"m": 17, "n": 32, "k": 17, "tile_m": 3, "tile_n": 2, "w": 8, "v": 28, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 292.771, "source": "autotuned"}, {"m": 17, "n": 32, "k": 22, "tile_m": 3, "tile_n": 2, "w": 6, "v": 32, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 305.08, "source": "autotuned"}, {"m": 17, "n": 32, "k": 23, "tile_m": 3, "tile_n": 2, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 328.197, "source": "autotuned"}, {"m": 17, "n": 32, "k": 24, "tile_m": 3, "tile_n": 2, "w": 8, "v": 28, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 335.43, "source": "autotuned"}, {"m": 17, "n": 32, "k": 26, "tile_m": 3, "tile_n": 2, "w": 8, "v": 28, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 337.328, "source": "autotuned"}, {"m": 17, "n": 32, "k": 32, "tile_m": 3, "tile_n": 2, "w": 8, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 356.942, "source": "autotuned"}, {"m": 22, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 57.5751, "source": "autotuned"}, {"m": 22, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 61.4088, "source": "autotuned"}, {"m": 22, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 66.0702, "source": "autotuned"}, {"m": 22, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 83.1265, "source": "autotuned"}, {"m": 22, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 90.0009, "source": "autotuned"}, {"m": 22, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 109.711, "source": "autotuned"}, {"m": 22, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 119.067, "source": "autotuned"}, {"m": 22, "n": 4, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 119.067, "source": "autotuned"}, {"m": 22, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 126.35, "source": "autotuned"}, {"m": 22, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 125.232, "source": "autotuned"}, {"m": 22, "n": 4, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 126.365, "source": "autotuned"}, {"m": 22, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 123.866, "source": "autotuned"}, {"m": 22, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 128.16, "source": "autotuned"}, {"m": 22, "n": 5, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 64.238, "source": "autotuned"}, {"m": 22, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 73.3009, "source": "autotuned"}, {"m": 22, "n": 5, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 74.4677, "source": "autotuned"}, {"m": 22, "n": 5, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 93.8793, "source": "autotuned"}, {"m": 22, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 97.9858, "source": "autotuned"}, {"m": 22, "n": 5, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 125.068, "source": "autotuned"}, {"m": 22, "n": 5, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 136.417, "source": "autotuned"}, {"m": 22, "n": 5, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 138.949, "source": "autotuned"}, {"m": 22, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 145.653, "source": "autotuned"}, {"m": 22, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 147.827, "source": "autotuned"}, {"m": 22, "n": 5, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 141.609, "source": "autotuned"}, {"m": 22, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 144.189, "source": "autotuned"}, {"m": 22, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 146.023, "source": "autotuned"}, {"m": 22, "n": 6, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 69.8662, "source": "autotuned"}, {"m": 22, "n": 6, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 77.9372, "source": "autotuned"}, {"m": 22, "n": 6, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 84.6147, "source": "autotuned"}, {"m": 22, "n": 6, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 106.018, "source": "autotuned"}, {"m": 22, "n": 6, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 109.232, "source": "autotuned"}, {"m": 22, "n": 6, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 137.639, "source": "autotuned"}, {"m": 22, "n": 6, "k": 16, "tile_m": 2, "tile_n": 1, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 143.963, "source": "autotuned"}, {"m": 22, "n": 6, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 147.12, "source": "autotuned"}, {"m": 22, "n": 6, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 147.34, "source": "autotuned"}, {"m": 22, "n": 6, "k": 23, "tile_m": 2, "tile_n": 1, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 144.445, "source": "autotuned"}, {"m": 22, "n": 6, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 152.082, "source": "autotuned"}, {"m": 22, "n": 6, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 150.145, "source": "autotuned"}, {"m": 22, "n": 6, "k": 32, "tile_m": 3, "tile_n": 2, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 163.029, "source": "autotuned"}, {"m": 22, "n": 8, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 94.6278, "source": "autotuned"}, {"m": 22, "n": 8, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 101.742, "source": "autotuned"}, {"m": 22, "n": 8, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 113.174, "source": "autotuned"}, {"m": 22, "n": 8, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 142.411, "source": "autotuned"}, {"m": 22, "n": 8, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 145.287, "source": "autotuned"}, {"m": 22, "n": 8, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 172.352, "source": "autotuned"}, {"m": 22, "n": 8, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 187.276, "source": "autotuned"}, {"m": 22, "n": 8, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 184.837, "source": "autotuned"}, {"m": 22, "n": 8, "k": 22, "tile_m": 2, "tile_n": 1, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 185.428, "source": "autotuned"}, {"m": 22, "n": 8, "k": 23, "tile_m": 1, "tile_n": 2, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 187.194, "source": "autotuned"}, {"m": 22, "n": 8, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 197.07, "source": "autotuned"}, {"m": 22, "n": 8, "k": 26, "tile_m": 1, "tile_n": 2, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 190.52, "source": "autotuned"}, {"m": 22, "n": 8, "k": 32, "tile_m": 3, "tile_n": 2, "w": 16, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 205.185, "source": "autotuned"}, {"m": 22, "n": 9, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 89.3747, "source": "autotuned"}, {"m": 22, "n": 9, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 106.787, "source": "autotuned"}, {"m": 22, "n": 9, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 112.692, "source": "autotuned"}, {"m": 22, "n": 9, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 139.231, "source": "autotuned"}, {"m": 22, "n": 9, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 150.647, "source": "autotuned"}, {"m": 22, "n": 9, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 176.971, "source": "autotuned"}, {"m": 22, "n": 9, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 172.625, "source": "autotuned"}, {"m": 22, "n": 9, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 179.675, "source": "autotuned"}, {"m": 22, "n": 9, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 198.116, "source": "autotuned"}, {"m": 22, "n": 9, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 201.354, "source": "autotuned"}, {"m": 22, "n": 9, "k": 24, "tile_m": 2, "tile_n": 2, "w": 12, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 200.245, "source": "autotuned"}, {"m": 22, "n": 9, "k": 26, "tile_m": 2, "tile_n": 2, "w": 10, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 197.52, "source": "autotuned"}, {"m": 22, "n": 9, "k": 32, "tile_m": 2, "tile_n": 2, "w": 10, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 207.544, "source": "autotuned"}, {"m": 22, "n": 9, "k": 64, "tile_m": 2, "tile_n": 2, "w": 12, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 239.452, "source": "autotuned"}, {"m": 22, "n": 13, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 116.442, "source": "autotuned"}, {"m": 22, "n": 13, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 133.637, "source": "autotuned"}, {"m": 22, "n": 13, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 146.616, "source": "autotuned"}, {"m": 22, "n": 13, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 171.063, "source": "autotuned"}, {"m": 22, "n": 13, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 183.073, "source": "autotuned"}, {"m": 22, "n": 13, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 223.261, "source": "autotuned"}, {"m": 22, "n": 13, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 214.711, "source": "autotuned"}, {"m": 22, "n": 13, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 224.809, "source": "autotuned"}, {"m": 22, "n": 13, "k": 22, "tile_m": 3, "tile_n": 2, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 221.172, "source": "autotuned"}, {"m": 22, "n": 13, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 228.978, "source": "autotuned"}, {"m": 22, "n": 13, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 233.378, "source": "autotuned"}, {"m": 22, "n": 13, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 236.465, "source": "autotuned"}, {"m": 22, "n": 13, "k": 32, "tile_m": 2, "tile_n": 3, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 250.128, "source": "autotuned"}, {"m": 22, "n": 16, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 141.362, "source": "autotuned"}, {"m": 22, "n": 16, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 165.072, "source": "autotuned"}, {"m": 22, "n": 16, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 168.045, "source": "autotuned"}, {"m": 22, "n": 16, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 208.282, "source": "autotuned"}, {"m": 22, "n": 16, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 221.618, "source": "autotuned"}, {"m": 22, "n": 16, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 242.184, "source": "autotuned"}, {"m": 22, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 254.265, "source": "autotuned"}, {"m": 22, "n": 16, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 270.21, "source": "autotuned"}, {"m": 22, "n": 16, "k": 22, "tile_m": 2, "tile_n": 2, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 275.664, "source": "autotuned"}, {"m": 22, "n": 16, "k": 23, "tile_m": 2, "tile_n": 2, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 279.173, "source": "autotuned"}, {"m": 22, "n": 16, "k": 24, "tile_m": 3, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 292.083, "source": "autotuned"}, {"m": 22, "n": 16, "k": 26, "tile_m": 2, "tile_n": 2, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 290.449, "source": "autotuned"}, {"m": 22, "n": 16, "k": 32, "tile_m": 2, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 308.173, "source": "autotuned"}, {"m": 22, "n": 16, "k": 64, "tile_m": 3, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 357.117, "source": "autotuned"}, {"m": 22, "n": 17, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 139.051, "source": "autotuned"}, {"m": 22, "n": 17, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 159.925, "source": "autotuned"}, {"m": 22, "n": 17, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 158.152, "source": "autotuned"}, {"m": 22, "n": 17, "k": 8, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 188.223, "source": "autotuned"}, {"m": 22, "n": 17, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 202.404, "source": "autotuned"}, {"m": 22, "n": 17, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 224.16, "source": "autotuned"}, {"m": 22, "n": 17, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 245.41, "source": "autotuned"}, {"m": 22, "n": 17, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 257.375, "source": "autotuned"}, {"m": 22, "n": 17, "k": 22, "tile_m": 2, "tile_n": 4, "w": 10, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 256.316, "source": "autotuned"}, {"m": 22, "n": 17, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 255.027, "source": "autotuned"}, {"m": 22, "n": 17, "k": 24, "tile_m": 2, "tile_n": 2, "w": 6, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 259.941, "source": "autotuned"}, {"m": 22, "n": 17, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 256.136, "source": "autotuned"}, {"m": 22, "n": 17, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 275.263, "source": "autotuned"}, {"m": 22, "n": 22, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 163.707, "source": "autotuned"}, {"m": 22, "n": 22, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 187.588, "source": "autotuned"}, {"m": 22, "n": 22, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 192.65, "source": "autotuned"}, {"m": 22, "n": 22, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 227.684, "source": "autotuned"}, {"m": 22, "n": 22, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 241.517, "source": "autotuned"}, {"m": 22, "n": 22, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 290.16, "source": "autotuned"}, {"m": 22, "n": 22, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 316.266, "source": "autotuned"}, {"m": 22, "n": 22, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 317.077, "source": "autotuned"}, {"m": 22, "n": 22, "k": 22, "tile_m": 3, "tile_n": 2, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 330.052, "source": "autotuned"}, {"m": 22, "n": 22, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 308.901, "source": "autotuned"}, {"m": 22, "n": 22, "k": 24, "tile_m": 2, "tile_n": 2, "w": 8, "v": 22, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 310.483, "source": "autotuned"}, {"m": 22, "n": 22, "k": 26, "tile_m": 2, "tile_n": 2, "w": 8, "v": 14, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 317.329, "source": "autotuned"}, {"m": 22, "n": 22, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 22, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 345.889, "source": "autotuned"}, {"m": 22, "n": 22, "k": 64, "tile_m": 3, "tile_n": 3, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 397.616, "source": "autotuned"}, {"m": 22, "n": 23, "k": 4, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 147.314, "source": "autotuned"}, {"m": 22, "n": 23, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 165.555, "source": "autotuned"}, {"m": 22, "n": 23, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 177.922, "source": "autotuned"}, {"m": 22, "n": 23, "k": 8, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 217.558, "source": "autotuned"}, {"m": 22, "n": 23, "k": 9, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 220.434, "source": "autotuned"}, {"m": 22, "n": 23, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 270.773, "source": "autotuned"}, {"m": 22, "n": 23, "k": 16, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 295.869, "source": "autotuned"}, {"m": 22, "n": 23, "k": 17, "tile_m": 3, "tile_n": 2, "w": 4, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 281.315, "source": "autotuned"}, {"m": 22, "n": 23, "k": 22, "tile_m": 3, "tile_n": 2, "w": 10, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 301.99, "source": "autotuned"}, {"m": 22, "n": 23, "k": 23, "tile_m": 2, "tile_n": 3, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 311.315, "source": "autotuned"}, {"m": 22, "n": 23, "k": 24, "tile_m": 2, "tile_n": 3, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 311.437, "source": "autotuned"}, {"m": 22, "n": 23, "k": 26, "tile_m": 2, "tile_n": 3, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 325.286, "source": "autotuned"}, {"m": 22, "n": 23, "k": 32, "tile_m": 2, "tile_n": 3, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 332.066, "source": "autotuned"}, {"m": 22, "n": 24, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 146.658, "source": "autotuned"}, {"m": 22, "n": 24, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 172.584, "source": "autotuned"}, {"m": 22, "n": 24, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 190.547, "source": "autotuned"}, {"m": 22, "n": 24, "k": 8, "tile_m": 3, "tile_n": 2, "w": 4, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 231.867, "source": "autotuned"}, {"m": 22, "n": 24, "k": 9, "tile_m": 2, "tile_n": 3, "w": 4, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 230.841, "source": "autotuned"}, {"m": 22, "n": 24, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 283.717, "source": "autotuned"}, {"m": 22, "n": 24, "k": 16, "tile_m": 2, "tile_n": 3, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 305.622, "source": "autotuned"}, {"m": 22, "n": 24, "k": 17, "tile_m": 2, "tile_n": 3, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 300.284, "source": "autotuned"}, {"m": 22, "n": 24, "k": 22, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 321.992, "source": "autotuned"}, {"m": 22, "n": 24, "k": 23, "tile_m": 2, "tile_n": 3, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 330.118, "source": "autotuned"}, {"m": 22, "n": 24, "k": 24, "tile_m": 2, "tile_n": 3, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 337.228, "source": "autotuned"}, {"m": 22, "n": 24, "k": 26, "tile_m": 2, "tile_n": 3, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 342.548, "source": "autotuned"}, {"m": 22, "n": 24, "k": 32, "tile_m": 3, "tile_n": 2, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 356.369, "source": "autotuned"}, {"m": 22, "n": 26, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 150.577, "source": "autotuned"}, {"m": 22, "n": 26, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 174.989, "source": "autotuned"}, {"m": 22, "n": 26, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 196.805, "source": "autotuned"}, {"m": 22, "n": 26, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 217.596, "source": "autotuned"}, {"m": 22, "n": 26, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 231.7, "source": "autotuned"}, {"m": 22, "n": 26, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 276.614, "source": "autotuned"}, {"m": 22, "n": 26, "k": 16, "tile_m": 3, "tile_n": 2, "w": 6, "v": 26, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 268.495, "source": "autotuned"}, {"m": 22, "n": 26, "k": 17, "tile_m": 2, "tile_n": 3, "w": 6, "v": 14, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 274.845, "source": "autotuned"}, {"m": 22, "n": 26, "k": 22, "tile_m": 2, "tile_n": 3, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 305.508, "source": "autotuned"}, {"m": 22, "n": 26, "k": 23, "tile_m": 2, "tile_n": 2, "w": 6, "v": 26, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 307.774, "source": "autotuned"}, {"m": 22, "n": 26, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 312.05, "source": "autotuned"}, {"m": 22, "n": 26, "k": 26, "tile_m": 2, "tile_n": 3, "w": 4, "v": 18, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 314.535, "source": "autotuned"}, {"m": 22, "n": 26, "k": 32, "tile_m": 2, "tile_n": 3, "w": 14, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 328.943, "source": "autotuned"}, {"m": 22, "n": 32, "k": 4, "tile_m": 3, "tile_n": 2, "w": 2, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 173.713, "source": "autotuned"}, {"m": 22, "n": 32, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 199.383, "source": "autotuned"}, {"m": 22, "n": 32, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 213.238, "source": "autotuned"}, {"m": 22, "n": 32, "k": 8, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 279.051, "source": "autotuned"}, {"m": 22, "n": 32, "k": 9, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 280.794, "source": "autotuned"}, {"m": 22, "n": 32, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 317.355, "source": "autotuned"}, {"m": 22, "n": 32, "k": 16, "tile_m": 3, "tile_n": 2, "w": 8, "v": 32, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 321.452, "source": "autotuned"}, {"m": 22, "n": 32, "k": 17, "tile_m": 3, "tile_n": 3, "w": 4, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 322.465, "source": "autotuned"}, {"m": 22, "n": 32, "k": 22, "tile_m": 2, "tile_n": 3, "w": 4, "v": 20, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 368.406, "source": "autotuned"}, {"m": 22, "n": 32, "k": 23, "tile_m": 2, "tile_n": 3, "w": 6, "v": 32, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 359.94, "source": "autotuned"}, {"m": 22, "n": 32, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 32, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 374.035, "source": "autotuned"}, {"m": 22, "n": 32, "k": 26, "tile_m": 2, "tile_n": 3, "w": 4, "v": 20, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 379.484, "source": "autotuned"}, {"m": 22, "n": 32, "k": 32, "tile_m": 2, "tile_n": 3, "w": 12, "v": 32, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 392.581, "source": "autotuned"}, {"m": 22, "n": 64, "k": 9, "tile_m": 3, "tile_n": 4, "w": 4, "v": 40, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 278.224, "source": "autotuned"}, {"m": 22, "n": 64, "k": 16, "tile_m": 3, "tile_n": 4, "w": 4, "v": 40, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 364.597, "source": "autotuned"}, {"m": 22, "n": 64, "k": 22, "tile_m": 6, "tile_n": 2, "w": 4, "v": 32, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 383.067, "source": "autotuned"}, {"m": 22, "n": 64, "k": 64, "tile_m": 3, "tile_n": 4, "w": 8, "v": 24, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 504.56, "source": "autotuned"}, {"m": 23, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 59.6814, "source": "autotuned"}, {"m": 23, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 63.3487, "source": "autotuned"}, {"m": 23, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 68.454, "source": "autotuned"}, {"m": 23, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 86.3208, "source": "autotuned"}, {"m": 23, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 93.3249, "source": "autotuned"}, {"m": 23, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 111.101, "source": "autotuned"}, {"m": 23, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 121.134, "source": "autotuned"}, {"m": 23, "n": 4, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 121.05, "source": "autotuned"}, {"m": 23, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 126.088, "source": "autotuned"}, {"m": 23, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 125.969, "source": "autotuned"}, {"m": 23, "n": 4, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 122.921, "source": "autotuned"}, {"m": 23, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 127.127, "source": "autotuned"}, {"m": 23, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 128.586, "source": "autotuned"}, {"m": 23, "n": 5, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 66.3956, "source": "autotuned"}, {"m": 23, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 76.0417, "source": "autotuned"}, {"m": 23, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 76.9185, "source": "autotuned"}, {"m": 23, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 94.7903, "source": "autotuned"}, {"m": 23, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 102.173, "source": "autotuned"}, {"m": 23, "n": 5, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 124.782, "source": "autotuned"}, {"m": 23, "n": 5, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 138.278, "source": "autotuned"}, {"m": 23, "n": 5, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 140.85, "source": "autotuned"}, {"m": 23, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 149.521, "source": "autotuned"}, {"m": 23, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 144.145, "source": "autotuned"}, {"m": 23, "n": 5, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 146.774, "source": "autotuned"}, {"m": 23, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 149.841, "source": "autotuned"}, {"m": 23, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 148.711, "source": "autotuned"}, {"m": 23, "n": 6, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 71.0708, "source": "autotuned"}, {"m": 23, "n": 6, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 79.8984, "source": "autotuned"}, {"m": 23, "n": 6, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 88.3131, "source": "autotuned"}, {"m": 23, "n": 6, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 109.787, "source": "autotuned"}, {"m": 23, "n": 6, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 112.176, "source": "autotuned"}, {"m": 23, "n": 6, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 137.164, "source": "autotuned"}, {"m": 23, "n": 6, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 149.132, "source": "autotuned"}, {"m": 23, "n": 6, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 136.359, "source": "autotuned"}, {"m": 23, "n": 6, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 153.003, "source": "autotuned"}, {"m": 23, "n": 6, "k": 23, "tile_m": 1, "tile_n": 2, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 148.475, "source": "autotuned"}, {"m": 23, "n": 6, "k": 24, "tile_m": 1, "tile_n": 2, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 154.711, "source": "autotuned"}, {"m": 23, "n": 6, "k": 26, "tile_m": 1, "tile_n": 2, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 151.108, "source": "autotuned"}, {"m": 23, "n": 6, "k": 32, "tile_m": 2, "tile_n": 3, "w": 16, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 164.982, "source": "autotuned"}, {"m": 23, "n": 8, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 96.1136, "source": "autotuned"}, {"m": 23, "n": 8, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 104.824, "source": "autotuned"}, {"m": 23, "n": 8, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 117.471, "source": "autotuned"}, {"m": 23, "n": 8, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 147.094, "source": "autotuned"}, {"m": 23, "n": 8, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 148.553, "source": "autotuned"}, {"m": 23, "n": 8, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 178.719, "source": "autotuned"}, {"m": 23, "n": 8, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 188.882, "source": "autotuned"}, {"m": 23, "n": 8, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 180.998, "source": "autotuned"}, {"m": 23, "n": 8, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 190.243, "source": "autotuned"}, {"m": 23, "n": 8, "k": 23, "tile_m": 1, "tile_n": 2, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 192.208, "source": "autotuned"}, {"m": 23, "n": 8, "k": 24, "tile_m": 1, "tile_n": 2, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 198.683, "source": "autotuned"}, {"m": 23, "n": 8, "k": 26, "tile_m": 1, "tile_n": 2, "w": 10, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 196.116, "source": "autotuned"}, {"m": 23, "n": 8, "k": 32, "tile_m": 1, "tile_n": 2, "w": 12, "v": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 208.86, "source": "autotuned"}, {"m": 23, "n": 9, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 94.4818, "source": "autotuned"}, {"m": 23, "n": 9, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 111.971, "source": "autotuned"}, {"m": 23, "n": 9, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 115.643, "source": "autotuned"}, {"m": 23, "n": 9, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 144.455, "source": "autotuned"}, {"m": 23, "n": 9, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 157.597, "source": "autotuned"}, {"m": 23, "n": 9, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 184.356, "source": "autotuned"}, {"m": 23, "n": 9, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 177.395, "source": "autotuned"}, {"m": 23, "n": 9, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 180.861, "source": "autotuned"}, {"m": 23, "n": 9, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 204.892, "source": "autotuned"}, {"m": 23, "n": 9, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 205.862, "source": "autotuned"}, {"m": 23, "n": 9, "k": 24, "tile_m": 2, "tile_n": 2, "w": 12, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 205.963, "source": "autotuned"}, {"m": 23, "n": 9, "k": 26, "tile_m": 2, "tile_n": 2, "w": 10, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 201.066, "source": "autotuned"}, {"m": 23, "n": 9, "k": 32, "tile_m": 2, "tile_n": 2, "w": 10, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 210.534, "source": "autotuned"}, {"m": 23, "n": 13, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 116.674, "source": "autotuned"}, {"m": 23, "n": 13, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 136.278, "source": "autotuned"}, {"m": 23, "n": 13, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 148.585, "source": "autotuned"}, {"m": 23, "n": 13, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 173.078, "source": "autotuned"}, {"m": 23, "n": 13, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 185.538, "source": "autotuned"}, {"m": 23, "n": 13, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 226.085, "source": "autotuned"}, {"m": 23, "n": 13, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 216.852, "source": "autotuned"}, {"m": 23, "n": 13, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 219.365, "source": "autotuned"}, {"m": 23, "n": 13, "k": 22, "tile_m": 2, "tile_n": 2, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 226.737, "source": "autotuned"}, {"m": 23, "n": 13, "k": 23, "tile_m": 3, "tile_n": 2, "w": 6, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 232.991, "source": "autotuned"}, {"m": 23, "n": 13, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 241.459, "source": "autotuned"}, {"m": 23, "n": 13, "k": 26, "tile_m": 3, "tile_n": 2, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 239.493, "source": "autotuned"}, {"m": 23, "n": 13, "k": 32, "tile_m": 3, "tile_n": 2, "w": 12, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 258.236, "source": "autotuned"}, {"m": 23, "n": 16, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 147.182, "source": "autotuned"}, {"m": 23, "n": 16, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 165.435, "source": "autotuned"}, {"m": 23, "n": 16, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 175.112, "source": "autotuned"}, {"m": 23, "n": 16, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 216.799, "source": "autotuned"}, {"m": 23, "n": 16, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 227.299, "source": "autotuned"}, {"m": 23, "n": 16, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 234.514, "source": "autotuned"}, {"m": 23, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 260.11, "source": "autotuned"}, {"m": 23, "n": 16, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 266.036, "source": "autotuned"}, {"m": 23, "n": 16, "k": 22, "tile_m": 3, "tile_n": 2, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 279.926, "source": "autotuned"}, {"m": 23, "n": 16, "k": 23, "tile_m": 3, "tile_n": 2, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 284.497, "source": "autotuned"}, {"m": 23, "n": 16, "k": 24, "tile_m": 2, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 297.891, "source": "autotuned"}, {"m": 23, "n": 16, "k": 26, "tile_m": 3, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 297.501, "source": "autotuned"}, {"m": 23, "n": 16, "k": 32, "tile_m": 3, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 317.92, "source": "autotuned"}, {"m": 23, "n": 17, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 133.402, "source": "autotuned"}, {"m": 23, "n": 17, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 155.289, "source": "autotuned"}, {"m": 23, "n": 17, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 160.956, "source": "autotuned"}, {"m": 23, "n": 17, "k": 8, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 192.178, "source": "autotuned"}, {"m": 23, "n": 17, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 207.496, "source": "autotuned"}, {"m": 23, "n": 17, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 228.053, "source": "autotuned"}, {"m": 23, "n": 17, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 253.335, "source": "autotuned"}, {"m": 23, "n": 17, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 255.563, "source": "autotuned"}, {"m": 23, "n": 17, "k": 22, "tile_m": 2, "tile_n": 2, "w": 10, "v": 10, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 265.383, "source": "autotuned"}, {"m": 23, "n": 17, "k": 23, "tile_m": 3, "tile_n": 2, "w": 10, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 252.781, "source": "autotuned"}, {"m": 23, "n": 17, "k": 24, "tile_m": 2, "tile_n": 2, "w": 10, "v": 10, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 274.855, "source": "autotuned"}, {"m": 23, "n": 17, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 264.804, "source": "autotuned"}, {"m": 23, "n": 17, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 14, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 281.666, "source": "autotuned"}, {"m": 23, "n": 22, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 146.324, "source": "autotuned"}, {"m": 23, "n": 22, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 165.527, "source": "autotuned"}, {"m": 23, "n": 22, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 177.939, "source": "autotuned"}, {"m": 23, "n": 22, "k": 8, "tile_m": 3, "tile_n": 2, "w": 4, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 218.859, "source": "autotuned"}, {"m": 23, "n": 22, "k": 9, "tile_m": 2, "tile_n": 3, "w": 4, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 222.676, "source": "autotuned"}, {"m": 23, "n": 22, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 270.777, "source": "autotuned"}, {"m": 23, "n": 22, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 286.218, "source": "autotuned"}, {"m": 23, "n": 22, "k": 17, "tile_m": 2, "tile_n": 3, "w": 4, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 282.016, "source": "autotuned"}, {"m": 23, "n": 22, "k": 22, "tile_m": 2, "tile_n": 3, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 307.973, "source": "autotuned"}, {"m": 23, "n": 22, "k": 23, "tile_m": 2, "tile_n": 3, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 314.138, "source": "autotuned"}, {"m": 23, "n": 22, "k": 24, "tile_m": 2, "tile_n": 3, "w": 4, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 321.113, "source": "autotuned"}, {"m": 23, "n": 22, "k": 26, "tile_m": 2, "tile_n": 3, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 323.835, "source": "autotuned"}, {"m": 23, "n": 22, "k": 32, "tile_m": 2, "tile_n": 3, "w": 4, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 340.251, "source": "autotuned"}, {"m": 23, "n": 23, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 160.698, "source": "autotuned"}, {"m": 23, "n": 23, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 179.196, "source": "autotuned"}, {"m": 23, "n": 23, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 200.307, "source": "autotuned"}, {"m": 23, "n": 23, "k": 8, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 225.962, "source": "autotuned"}, {"m": 23, "n": 23, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 239.666, "source": "autotuned"}, {"m": 23, "n": 23, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 286.552, "source": "autotuned"}, {"m": 23, "n": 23, "k": 16, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 319.963, "source": "autotuned"}, {"m": 23, "n": 23, "k": 17, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 292.211, "source": "autotuned"}, {"m": 23, "n": 23, "k": 22, "tile_m": 2, "tile_n": 3, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 317.15, "source": "autotuned"}, {"m": 23, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 362.853, "source": "autotuned"}, {"m": 23, "n": 23, "k": 24, "tile_m": 2, "tile_n": 3, "w": 4, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 331.615, "source": "autotuned"}, {"m": 23, "n": 23, "k": 26, "tile_m": 2, "tile_n": 3, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 333.812, "source": "autotuned"}, {"m": 23, "n": 23, "k": 32, "tile_m": 2, "tile_n": 3, "w": 4, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 352.432, "source": "autotuned"}, {"m": 23, "n": 24, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 151.249, "source": "autotuned"}, {"m": 23, "n": 24, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 176.59, "source": "autotuned"}, {"m": 23, "n": 24, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 196.262, "source": "autotuned"}, {"m": 23, "n": 24, "k": 8, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 239.385, "source": "autotuned"}, {"m": 23, "n": 24, "k": 9, "tile_m": 2, "tile_n": 3, "w": 4, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 239.724, "source": "autotuned"}, {"m": 23, "n": 24, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 291.1, "source": "autotuned"}, {"m": 23, "n": 24, "k": 16, "tile_m": 2, "tile_n": 3, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 312.142, "source": "autotuned"}, {"m": 23, "n": 24, "k": 17, "tile_m": 3, "tile_n": 3, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 309.544, "source": "autotuned"}, {"m": 23, "n": 24, "k": 22, "tile_m": 2, "tile_n": 3, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 332.21, "source": "autotuned"}, {"m": 23, "n": 24, "k": 23, "tile_m": 2, "tile_n": 3, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 337.924, "source": "autotuned"}, {"m": 23, "n": 24, "k": 24, "tile_m": 3, "tile_n": 2, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 345.783, "source": "autotuned"}, {"m": 23, "n": 24, "k": 26, "tile_m": 2, "tile_n": 3, "w": 10, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 348.405, "source": "autotuned"}, {"m": 23, "n": 24, "k": 32, "tile_m": 2, "tile_n": 3, "w": 8, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 366.046, "source": "autotuned"}, {"m": 23, "n": 26, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 153.591, "source": "autotuned"}, {"m": 23, "n": 26, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 177.384, "source": "autotuned"}, {"m": 23, "n": 26, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 202.501, "source": "autotuned"}, {"m": 23, "n": 26, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 223.371, "source": "autotuned"}, {"m": 23, "n": 26, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 239.736, "source": "autotuned"}, {"m": 23, "n": 26, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 286.414, "source": "autotuned"}, {"m": 23, "n": 26, "k": 16, "tile_m": 2, "tile_n": 3, "w": 6, "v": 20, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 278.305, "source": "autotuned"}, {"m": 23, "n": 26, "k": 17, "tile_m": 2, "tile_n": 3, "w": 6, "v": 20, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 285.804, "source": "autotuned"}, {"m": 23, "n": 26, "k": 22, "tile_m": 2, "tile_n": 3, "w": 6, "v": 20, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 308.631, "source": "autotuned"}, {"m": 23, "n": 26, "k": 23, "tile_m": 3, "tile_n": 2, "w": 6, "v": 26, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 313.656, "source": "autotuned"}, {"m": 23, "n": 26, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 321.263, "source": "autotuned"}, {"m": 23, "n": 26, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 317.704, "source": "autotuned"}, {"m": 23, "n": 26, "k": 32, "tile_m": 2, "tile_n": 3, "w": 14, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 340.048, "source": "autotuned"}, {"m": 23, "n": 32, "k": 4, "tile_m": 3, "tile_n": 2, "w": 2, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 180.711, "source": "autotuned"}, {"m": 23, "n": 32, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 200.317, "source": "autotuned"}, {"m": 23, "n": 32, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 221.286, "source": "autotuned"}, {"m": 23, "n": 32, "k": 8, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 289.124, "source": "autotuned"}, {"m": 23, "n": 32, "k": 9, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 290.689, "source": "autotuned"}, {"m": 23, "n": 32, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 327.89, "source": "autotuned"}, {"m": 23, "n": 32, "k": 16, "tile_m": 3, "tile_n": 2, "w": 8, "v": 32, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 332.643, "source": "autotuned"}, {"m": 23, "n": 32, "k": 17, "tile_m": 3, "tile_n": 3, "w": 4, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 334.409, "source": "autotuned"}, {"m": 23, "n": 32, "k": 22, "tile_m": 3, "tile_n": 2, "w": 10, "v": 32, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 360.996, "source": "autotuned"}, {"m": 23, "n": 32, "k": 23, "tile_m": 3, "tile_n": 2, "w": 10, "v": 32, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 369.126, "source": "autotuned"}, {"m": 23, "n": 32, "k": 24, "tile_m": 3, "tile_n": 2, "w": 12, "v": 32, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 384.75, "source": "autotuned"}, {"m": 23, "n": 32, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 32, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 381.494, "source": "autotuned"}, {"m": 23, "n": 32, "k": 32, "tile_m": 3, "tile_n": 2, "w": 12, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 398.604, "source": "autotuned"}, {"m": 24, "n": 4, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 58.8119, "source": "autotuned"}, {"m": 24, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 67.0164, "source": "autotuned"}, {"m": 24, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 72.194, "source": "autotuned"}, {"m": 24, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 89.6464, "source": "autotuned"}, {"m": 24, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 98.0009, "source": "autotuned"}, {"m": 24, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 115.513, "source": "autotuned"}, {"m": 24, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 123.069, "source": "autotuned"}, {"m": 24, "n": 4, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 124.559, "source": "autotuned"}, {"m": 24, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 128.978, "source": "autotuned"}, {"m": 24, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 125.42, "source": "autotuned"}, {"m": 24, "n": 4, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 128.156, "source": "autotuned"}, {"m": 24, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 131.844, "source": "autotuned"}, {"m": 24, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 132.646, "source": "autotuned"}, {"m": 24, "n": 5, "k": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 70.448, "source": "autotuned"}, {"m": 24, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 80.4972, "source": "autotuned"}, {"m": 24, "n": 5, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 81.0577, "source": "autotuned"}, {"m": 24, "n": 5, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 101.258, "source": "autotuned"}, {"m": 24, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 107.347, "source": "autotuned"}, {"m": 24, "n": 5, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 131.211, "source": "autotuned"}, {"m": 24, "n": 5, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 143.808, "source": "autotuned"}, {"m": 24, "n": 5, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 142.699, "source": "autotuned"}, {"m": 24, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 153.077, "source": "autotuned"}, {"m": 24, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 150.001, "source": "autotuned"}, {"m": 24, "n": 5, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 152.933, "source": "autotuned"}, {"m": 24, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 147.417, "source": "autotuned"}, {"m": 24, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 153.309, "source": "autotuned"}, {"m": 24, "n": 6, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 76.9814, "source": "autotuned"}, {"m": 24, "n": 6, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 85.2808, "source": "autotuned"}, {"m": 24, "n": 6, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 93.5526, "source": "autotuned"}, {"m": 24, "n": 6, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 115.359, "source": "autotuned"}, {"m": 24, "n": 6, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 120.439, "source": "autotuned"}, {"m": 24, "n": 6, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 144.87, "source": "autotuned"}, {"m": 24, "n": 6, "k": 16, "tile_m": 1, "tile_n": 2, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 155.633, "source": "autotuned"}, {"m": 24, "n": 6, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 148.725, "source": "autotuned"}, {"m": 24, "n": 6, "k": 22, "tile_m": 1, "tile_n": 2, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 154.487, "source": "autotuned"}, {"m": 24, "n": 6, "k": 23, "tile_m": 2, "tile_n": 1, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 156.025, "source": "autotuned"}, {"m": 24, "n": 6, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 163.99, "source": "autotuned"}, {"m": 24, "n": 6, "k": 26, "tile_m": 2, "tile_n": 1, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 159.791, "source": "autotuned"}, {"m": 24, "n": 6, "k": 32, "tile_m": 2, "tile_n": 1, "w": 16, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 171.985, "source": "autotuned"}, {"m": 24, "n": 8, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 102.382, "source": "autotuned"}, {"m": 24, "n": 8, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 110.447, "source": "autotuned"}, {"m": 24, "n": 8, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 123.269, "source": "autotuned"}, {"m": 24, "n": 8, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 152.162, "source": "autotuned"}, {"m": 24, "n": 8, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 157.455, "source": "autotuned"}, {"m": 24, "n": 8, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 185.221, "source": "autotuned"}, {"m": 24, "n": 8, "k": 16, "tile_m": 1, "tile_n": 2, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 196.938, "source": "autotuned"}, {"m": 24, "n": 8, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 189.416, "source": "autotuned"}, {"m": 24, "n": 8, "k": 22, "tile_m": 1, "tile_n": 2, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 199.914, "source": "autotuned"}, {"m": 24, "n": 8, "k": 23, "tile_m": 1, "tile_n": 2, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 200.887, "source": "autotuned"}, {"m": 24, "n": 8, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 209.127, "source": "autotuned"}, {"m": 24, "n": 8, "k": 26, "tile_m": 2, "tile_n": 1, "w": 10, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 205.917, "source": "autotuned"}, {"m": 24, "n": 8, "k": 32, "tile_m": 2, "tile_n": 1, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 218.41, "source": "autotuned"}, {"m": 24, "n": 9, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 98.6797, "source": "autotuned"}, {"m": 24, "n": 9, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 118.095, "source": "autotuned"}, {"m": 24, "n": 9, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 123.841, "source": "autotuned"}, {"m": 24, "n": 9, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 150.841, "source": "autotuned"}, {"m": 24, "n": 9, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 164.779, "source": "autotuned"}, {"m": 24, "n": 9, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 192.82, "source": "autotuned"}, {"m": 24, "n": 9, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 192.434, "source": "autotuned"}, {"m": 24, "n": 9, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 191.25, "source": "autotuned"}, {"m": 24, "n": 9, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 209.088, "source": "autotuned"}, {"m": 24, "n": 9, "k": 23, "tile_m": 2, "tile_n": 1, "w": 10, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 204.604, "source": "autotuned"}, {"m": 24, "n": 9, "k": 24, "tile_m": 2, "tile_n": 2, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 216.095, "source": "autotuned"}, {"m": 24, "n": 9, "k": 26, "tile_m": 2, "tile_n": 2, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 211.244, "source": "autotuned"}, {"m": 24, "n": 9, "k": 32, "tile_m": 2, "tile_n": 2, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 227.824, "source": "autotuned"}, {"m": 24, "n": 13, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 125.487, "source": "autotuned"}, {"m": 24, "n": 13, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 146.004, "source": "autotuned"}, {"m": 24, "n": 13, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 160.137, "source": "autotuned"}, {"m": 24, "n": 13, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 183.429, "source": "autotuned"}, {"m": 24, "n": 13, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 196.169, "source": "autotuned"}, {"m": 24, "n": 13, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 210.09, "source": "autotuned"}, {"m": 24, "n": 13, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 243.961, "source": "autotuned"}, {"m": 24, "n": 13, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 233.808, "source": "autotuned"}, {"m": 24, "n": 13, "k": 22, "tile_m": 2, "tile_n": 3, "w": 6, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 244.295, "source": "autotuned"}, {"m": 24, "n": 13, "k": 23, "tile_m": 2, "tile_n": 3, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 245.584, "source": "autotuned"}, {"m": 24, "n": 13, "k": 24, "tile_m": 3, "tile_n": 2, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 253.032, "source": "autotuned"}, {"m": 24, "n": 13, "k": 26, "tile_m": 3, "tile_n": 2, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 252.69, "source": "autotuned"}, {"m": 24, "n": 13, "k": 32, "tile_m": 2, "tile_n": 3, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 271.274, "source": "autotuned"}, {"m": 24, "n": 16, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 151.035, "source": "autotuned"}, {"m": 24, "n": 16, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 177.041, "source": "autotuned"}, {"m": 24, "n": 16, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 183.2, "source": "autotuned"}, {"m": 24, "n": 16, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 220.011, "source": "autotuned"}, {"m": 24, "n": 16, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 237.976, "source": "autotuned"}, {"m": 24, "n": 16, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 255.121, "source": "autotuned"}, {"m": 24, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 283.257, "source": "autotuned"}, {"m": 24, "n": 16, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 282.576, "source": "autotuned"}, {"m": 24, "n": 16, "k": 22, "tile_m": 2, "tile_n": 2, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 305.434, "source": "autotuned"}, {"m": 24, "n": 16, "k": 23, "tile_m": 2, "tile_n": 2, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 305.948, "source": "autotuned"}, {"m": 24, "n": 16, "k": 24, "tile_m": 2, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 312.346, "source": "autotuned"}, {"m": 24, "n": 16, "k": 26, "tile_m": 2, "tile_n": 2, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 311.766, "source": "autotuned"}, {"m": 24, "n": 16, "k": 32, "tile_m": 2, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 330.08, "source": "autotuned"}, {"m": 24, "n": 17, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 148.753, "source": "autotuned"}, {"m": 24, "n": 17, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 172.254, "source": "autotuned"}, {"m": 24, "n": 17, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 170.444, "source": "autotuned"}, {"m": 24, "n": 17, "k": 8, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 202.085, "source": "autotuned"}, {"m": 24, "n": 17, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 220.336, "source": "autotuned"}, {"m": 24, "n": 17, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 241.006, "source": "autotuned"}, {"m": 24, "n": 17, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 267.336, "source": "autotuned"}, {"m": 24, "n": 17, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 269.754, "source": "autotuned"}, {"m": 24, "n": 17, "k": 22, "tile_m": 2, "tile_n": 4, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 278.395, "source": "autotuned"}, {"m": 24, "n": 17, "k": 23, "tile_m": 2, "tile_n": 3, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 270.301, "source": "autotuned"}, {"m": 24, "n": 17, "k": 24, "tile_m": 2, "tile_n": 2, "w": 6, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 282.786, "source": "autotuned"}, {"m": 24, "n": 17, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 278.266, "source": "autotuned"}, {"m": 24, "n": 17, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 299.296, "source": "autotuned"}, {"m": 24, "n": 22, "k": 4, "tile_m": 3, "tile_n": 2, "w": 2, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 146.407, "source": "autotuned"}, {"m": 24, "n": 22, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 171.925, "source": "autotuned"}, {"m": 24, "n": 22, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 190.105, "source": "autotuned"}, {"m": 24, "n": 22, "k": 8, "tile_m": 3, "tile_n": 2, "w": 4, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 231.681, "source": "autotuned"}, {"m": 24, "n": 22, "k": 9, "tile_m": 3, "tile_n": 2, "w": 4, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 233.468, "source": "autotuned"}, {"m": 24, "n": 22, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 284.038, "source": "autotuned"}, {"m": 24, "n": 22, "k": 16, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 308.103, "source": "autotuned"}, {"m": 24, "n": 22, "k": 17, "tile_m": 2, "tile_n": 3, "w": 8, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 301.954, "source": "autotuned"}, {"m": 24, "n": 22, "k": 22, "tile_m": 2, "tile_n": 3, "w": 8, "v": 18, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 325.781, "source": "autotuned"}, {"m": 24, "n": 22, "k": 23, "tile_m": 2, "tile_n": 3, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 331.261, "source": "autotuned"}, {"m": 24, "n": 22, "k": 24, "tile_m": 2, "tile_n": 3, "w": 8, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 338.308, "source": "autotuned"}, {"m": 24, "n": 22, "k": 26, "tile_m": 2, "tile_n": 3, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 343.473, "source": "autotuned"}, {"m": 24, "n": 22, "k": 32, "tile_m": 2, "tile_n": 3, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 356.001, "source": "autotuned"}, {"m": 24, "n": 23, "k": 4, "tile_m": 3, "tile_n": 2, "w": 2, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 151.001, "source": "autotuned"}, {"m": 24, "n": 23, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 176.59, "source": "autotuned"}, {"m": 24, "n": 23, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 196.204, "source": "autotuned"}, {"m": 24, "n": 23, "k": 8, "tile_m": 3, "tile_n": 2, "w": 4, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 239.901, "source": "autotuned"}, {"m": 24, "n": 23, "k": 9, "tile_m": 2, "tile_n": 3, "w": 4, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 239.093, "source": "autotuned"}, {"m": 24, "n": 23, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 292.274, "source": "autotuned"}, {"m": 24, "n": 23, "k": 16, "tile_m": 2, "tile_n": 3, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 315.493, "source": "autotuned"}, {"m": 24, "n": 23, "k": 17, "tile_m": 2, "tile_n": 3, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 311.324, "source": "autotuned"}, {"m": 24, "n": 23, "k": 22, "tile_m": 2, "tile_n": 3, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 335.112, "source": "autotuned"}, {"m": 24, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 341.553, "source": "autotuned"}, {"m": 24, "n": 23, "k": 24, "tile_m": 3, "tile_n": 2, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 347.719, "source": "autotuned"}, {"m": 24, "n": 23, "k": 26, "tile_m": 2, "tile_n": 3, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 351.889, "source": "autotuned"}, {"m": 24, "n": 23, "k": 32, "tile_m": 3, "tile_n": 2, "w": 8, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 367.949, "source": "autotuned"}, {"m": 24, "n": 24, "k": 4, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 171.861, "source": "autotuned"}, {"m": 24, "n": 24, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 199.591, "source": "autotuned"}, {"m": 24, "n": 24, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 223.508, "source": "autotuned"}, {"m": 24, "n": 24, "k": 8, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 252.144, "source": "autotuned"}, {"m": 24, "n": 24, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 270.155, "source": "autotuned"}, {"m": 24, "n": 24, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 316.953, "source": "autotuned"}, {"m": 24, "n": 24, "k": 16, "tile_m": 3, "tile_n": 3, "w": 8, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 346.718, "source": "autotuned"}, {"m": 24, "n": 24, "k": 17, "tile_m": 2, "tile_n": 3, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 331.579, "source": "autotuned"}, {"m": 24, "n": 24, "k": 22, "tile_m": 2, "tile_n": 3, "w": 8, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 362.792, "source": "autotuned"}, {"m": 24, "n": 24, "k": 23, "tile_m": 2, "tile_n": 3, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 369.879, "source": "autotuned"}, {"m": 24, "n": 24, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 24, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 411.88, "source": "autotuned"}, {"m": 24, "n": 24, "k": 26, "tile_m": 3, "tile_n": 2, "w": 8, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 372.117, "source": "autotuned"}, {"m": 24, "n": 24, "k": 32, "tile_m": 3, "tile_n": 3, "w": 8, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 401.738, "source": "autotuned"}, {"m": 24, "n": 24, "k": 45, "tile_m": 3, "tile_n": 3, "w": 12, "v": 24, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 443.769, "source": "autotuned"}, {"m": 24, "n": 26, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 165.895, "source": "autotuned"}, {"m": 24, "n": 26, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 192.911, "source": "autotuned"}, {"m": 24, "n": 26, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 216.881, "source": "autotuned"}, {"m": 24, "n": 26, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 240.006, "source": "autotuned"}, {"m": 24, "n": 26, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 255.794, "source": "autotuned"}, {"m": 24, "n": 26, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 304.306, "source": "autotuned"}, {"m": 24, "n": 26, "k": 16, "tile_m": 3, "tile_n": 2, "w": 8, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 296.427, "source": "autotuned"}, {"m": 24, "n": 26, "k": 17, "tile_m": 2, "tile_n": 3, "w": 6, "v": 20, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 300.411, "source": "autotuned"}, {"m": 24, "n": 26, "k": 22, "tile_m": 2, "tile_n": 3, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 335.764, "source": "autotuned"}, {"m": 24, "n": 26, "k": 23, "tile_m": 2, "tile_n": 2, "w": 6, "v": 26, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 332.247, "source": "autotuned"}, {"m": 24, "n": 26, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 20, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 341.77, "source": "autotuned"}, {"m": 24, "n": 26, "k": 26, "tile_m": 2, "tile_n": 3, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 345.182, "source": "autotuned"}, {"m": 24, "n": 26, "k": 32, "tile_m": 2, "tile_n": 3, "w": 14, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 358.776, "source": "autotuned"}, {"m": 24, "n": 32, "k": 4, "tile_m": 3, "tile_n": 2, "w": 2, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 188.795, "source": "autotuned"}, {"m": 24, "n": 32, "k": 5, "tile_m": 3, "tile_n": 2, "w": 2, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 202.909, "source": "autotuned"}, {"m": 24, "n": 32, "k": 6, "tile_m": 4, "tile_n": 2, "w": 2, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 216.291, "source": "autotuned"}, {"m": 24, "n": 32, "k": 8, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 301.015, "source": "autotuned"}, {"m": 24, "n": 32, "k": 9, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 301.38, "source": "autotuned"}, {"m": 24, "n": 32, "k": 13, "tile_m": 3, "tile_n": 2, "w": 6, "v": 20, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 306.849, "source": "autotuned"}, {"m": 24, "n": 32, "k": 16, "tile_m": 3, "tile_n": 2, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 358.411, "source": "autotuned"}, {"m": 24, "n": 32, "k": 17, "tile_m": 3, "tile_n": 2, "w": 8, "v": 22, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 348.821, "source": "autotuned"}, {"m": 24, "n": 32, "k": 22, "tile_m": 3, "tile_n": 2, "w": 8, "v": 28, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 382.529, "source": "autotuned"}, {"m": 24, "n": 32, "k": 23, "tile_m": 3, "tile_n": 2, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 388.857, "source": "autotuned"}, {"m": 24, "n": 32, "k": 24, "tile_m": 3, "tile_n": 2, "w": 12, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 396.116, "source": "autotuned"}, {"m": 24, "n": 32, "k": 26, "tile_m": 3, "tile_n": 3, "w": 6, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 397.018, "source": "autotuned"}, {"m": 24, "n": 32, "k": 32, "tile_m": 3, "tile_n": 2, "w": 8, "v": 28, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 417.571, "source": "autotuned"}, {"m": 24, "n": 32, "k": 45, "tile_m": 2, "tile_n": 4, "w": 12, "v": 30, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 482.675, "source": "autotuned"}, {"m": 25, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "w": 2, "v": 4, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 61.5545, "source": "autotuned"}, {"m": 25, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 69.6079, "source": "autotuned"}, {"m": 25, "n": 4, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 75.6721, "source": "autotuned"}, {"m": 25, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "w": 4, "v": 4, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 91.7531, "source": "autotuned"}, {"m": 25, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 113.536, "source": "autotuned"}, {"m": 25, "n": 4, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 127.9, "source": "autotuned"}, {"m": 25, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "w": 10, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 127.537, "source": "autotuned"}, {"m": 25, "n": 4, "k": 28, "tile_m": 2, "tile_n": 1, "w": 14, "v": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 134.943, "source": "autotuned"}, {"m": 25, "n": 4, "k": 32, "tile_m": 1, "tile_n": 2, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 139.857, "source": "autotuned"}, {"m": 25, "n": 4, "k": 45, "tile_m": 2, "tile_n": 1, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 139.994, "source": "autotuned"}, {"m": 25, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 72.4794, "source": "autotuned"}, {"m": 25, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 84.872, "source": "autotuned"}, {"m": 25, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 92.8771, "source": "autotuned"}, {"m": 25, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 112.844, "source": "autotuned"}, {"m": 25, "n": 5, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 137.821, "source": "autotuned"}, {"m": 25, "n": 5, "k": 25, "tile_m": 1, "tile_n": 1, "w": 10, "v": 4, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 152.264, "source": "autotuned"}, {"m": 25, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "w": 10, "v": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 152.747, "source": "autotuned"}, {"m": 25, "n": 5, "k": 28, "tile_m": 2, "tile_n": 3, "w": 14, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 159.29, "source": "autotuned"}, {"m": 25, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 164.744, "source": "autotuned"}, {"m": 25, "n": 5, "k": 45, "tile_m": 1, "tile_n": 1, "w": 16, "v": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 167.914, "source": "autotuned"}, {"m": 25, "n": 7, "k": 4, "tile_m": 2, "tile_n": 1, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 90.9178, "source": "autotuned"}, {"m": 25, "n": 7, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 97.037, "source": "autotuned"}, {"m": 25, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 121.779, "source": "autotuned"}, {"m": 25, "n": 7, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 138.286, "source": "autotuned"}, {"m": 25, "n": 7, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 166.702, "source": "autotuned"}, {"m": 25, "n": 7, "k": 25, "tile_m": 2, "tile_n": 1, "w": 10, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 194.814, "source": "autotuned"}, {"m": 25, "n": 7, "k": 26, "tile_m": 2, "tile_n": 1, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 193.702, "source": "autotuned"}, {"m": 25, "n": 7, "k": 28, "tile_m": 3, "tile_n": 1, "w": 14, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 204.432, "source": "autotuned"}, {"m": 25, "n": 7, "k": 32, "tile_m": 2, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 210.429, "source": "autotuned"}, {"m": 25, "n": 7, "k": 45, "tile_m": 2, "tile_n": 1, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 212.74, "source": "autotuned"}, {"m": 25, "n": 9, "k": 4, "tile_m": 3, "tile_n": 1, "w": 2, "v": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 105.945, "source": "autotuned"}, {"m": 25, "n": 9, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 117.846, "source": "autotuned"}, {"m": 25, "n": 9, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 138.732, "source": "autotuned"}, {"m": 25, "n": 9, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 162.802, "source": "autotuned"}, {"m": 25, "n": 9, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 191.872, "source": "autotuned"}, {"m": 25, "n": 9, "k": 25, "tile_m": 2, "tile_n": 1, "w": 10, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 220.007, "source": "autotuned"}, {"m": 25, "n": 9, "k": 26, "tile_m": 2, "tile_n": 1, "w": 12, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 217.621, "source": "autotuned"}, {"m": 25, "n": 9, "k": 28, "tile_m": 1, "tile_n": 2, "w": 14, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 231.076, "source": "autotuned"}, {"m": 25, "n": 9, "k": 32, "tile_m": 2, "tile_n": 3, "w": 16, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 231.658, "source": "autotuned"}, {"m": 25, "n": 9, "k": 45, "tile_m": 3, "tile_n": 3, "w": 16, "v": 6, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 234.791, "source": "autotuned"}, {"m": 25, "n": 13, "k": 4, "tile_m": 2, "tile_n": 2, "w": 2, "v": 10, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 136.976, "source": "autotuned"}, {"m": 25, "n": 13, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 145.977, "source": "autotuned"}, {"m": 25, "n": 13, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 170.376, "source": "autotuned"}, {"m": 25, "n": 13, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 195.465, "source": "autotuned"}, {"m": 25, "n": 13, "k": 13, "tile_m": 2, "tile_n": 2, "w": 6, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 223.713, "source": "autotuned"}, {"m": 25, "n": 13, "k": 25, "tile_m": 3, "tile_n": 2, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 281.301, "source": "autotuned"}, {"m": 25, "n": 13, "k": 26, "tile_m": 3, "tile_n": 2, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 285.113, "source": "autotuned"}, {"m": 25, "n": 13, "k": 28, "tile_m": 3, "tile_n": 2, "w": 10, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 292.875, "source": "autotuned"}, {"m": 25, "n": 13, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 293.811, "source": "autotuned"}, {"m": 25, "n": 13, "k": 45, "tile_m": 3, "tile_n": 2, "w": 16, "v": 8, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 308.806, "source": "autotuned"}, {"m": 25, "n": 25, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 167.314, "source": "autotuned"}, {"m": 25, "n": 25, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 197.231, "source": "autotuned"}, {"m": 25, "n": 25, "k": 7, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 226.575, "source": "autotuned"}, {"m": 25, "n": 25, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 266.2, "source": "autotuned"}, {"m": 25, "n": 25, "k": 13, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 287.179, "source": "autotuned"}, {"m": 25, "n": 25, "k": 25, "tile_m": 3, "tile_n": 2, "w": 10, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 355.515, "source": "autotuned"}, {"m": 25, "n": 25, "k": 26, "tile_m": 2, "tile_n": 4, "w": 10, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 353.566, "source": "autotuned"}, {"m": 25, "n": 25, "k": 28, "tile_m": 3, "tile_n": 2, "w": 14, "v": 10, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 367.79, "source": "autotuned"}, {"m": 25, "n": 25, "k": 32, "tile_m": 2, "tile_n": 3, "w": 14, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 369.423, "source": "autotuned"}, {"m": 25, "n": 25, "k": 45, "tile_m": 2, "tile_n": 4, "w": 10, "v": 24, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 388.688, "source": "autotuned"}, {"m": 25, "n": 26, "k": 4, "tile_m": 4, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 167.072, "source": "autotuned"}, {"m": 25, "n": 26, "k": 5, "tile_m": 4, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 182.501, "source": "autotuned"}, {"m": 25, "n": 26, "k": 7, "tile_m": 3, "tile_n": 2, "w": 2, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 222.916, "source": "autotuned"}, {"m": 25, "n": 26, "k": 9, "tile_m": 3, "tile_n": 2, "w": 4, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 246.76, "source": "autotuned"}, {"m": 25, "n": 26, "k": 13, "tile_m": 3, "tile_n": 3, "w": 6, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 295.802, "source": "autotuned"}, {"m": 25, "n": 26, "k": 25, "tile_m": 2, "tile_n": 3, "w": 12, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 359.971, "source": "autotuned"}, {"m": 25, "n": 26, "k": 26, "tile_m": 2, "tile_n": 3, "w": 12, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 366.555, "source": "autotuned"}, {"m": 25, "n": 26, "k": 28, "tile_m": 3, "tile_n": 2, "w": 14, "v": 10, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 378.99, "source": "autotuned"}, {"m": 25, "n": 26, "k": 32, "tile_m": 2, "tile_n": 3, "w": 14, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 387.081, "source": "autotuned"}, {"m": 25, "n": 26, "k": 45, "tile_m": 3, "tile_n": 2, "w": 12, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 407.931, "source": "autotuned"}, {"m": 25, "n": 28, "k": 4, "tile_m": 3, "tile_n": 2, "w": 2, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 166.646, "source": "autotuned"}, {"m": 25, "n": 28, "k": 5, "tile_m": 3, "tile_n": 2, "w": 2, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 191.501, "source": "autotuned"}, {"m": 25, "n": 28, "k": 7, "tile_m": 3, "tile_n": 2, "w": 2, "v": 18, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 235.127, "source": "autotuned"}, {"m": 25, "n": 28, "k": 9, "tile_m": 3, "tile_n": 2, "w": 4, "v": 28, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 263.105, "source": "autotuned"}, {"m": 25, "n": 28, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 315.323, "source": "autotuned"}, {"m": 25, "n": 28, "k": 25, "tile_m": 2, "tile_n": 4, "w": 10, "v": 28, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 381.239, "source": "autotuned"}, {"m": 25, "n": 28, "k": 26, "tile_m": 2, "tile_n": 4, "w": 10, "v": 28, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 385.88, "source": "autotuned"}, {"m": 25, "n": 28, "k": 28, "tile_m": 3, "tile_n": 2, "w": 14, "v": 28, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 395.875, "source": "autotuned"}, {"m": 25, "n": 28, "k": 32, "tile_m": 3, "tile_n": 2, "w": 14, "v": 10, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 398.113, "source": "autotuned"}, {"m": 25, "n": 28, "k": 45, "tile_m": 3, "tile_n": 2, "w": 12, "v": 28, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 434.445, "source": "autotuned"}, {"m": 25, "n": 32, "k": 4, "tile_m": 5, "tile_n": 2, "w": 2, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 171.986, "source": "autotuned"}, {"m": 25, "n": 32, "k": 5, "tile_m": 5, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 206.566, "source": "autotuned"}, {"m": 25, "n": 32, "k": 7, "tile_m": 5, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 241.952, "source": "autotuned"}, {"m": 25, "n": 32, "k": 9, "tile_m": 2, "tile_n": 4, "w": 4, "v": 28, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 267.123, "source": "autotuned"}, {"m": 25, "n": 32, "k": 13, "tile_m": 2, "tile_n": 4, "w": 6, "v": 28, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 303.399, "source": "autotuned"}, {"m": 25, "n": 32, "k": 25, "tile_m": 2, "tile_n": 4, "w": 10, "v": 28, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 376.527, "source": "autotuned"}, {"m": 25, "n": 32, "k": 26, "tile_m": 4, "tile_n": 2, "w": 12, "v": 22, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 388.829, "source": "autotuned"}, {"m": 25, "n": 32, "k": 28, "tile_m": 4, "tile_n": 2, "w": 12, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 396.268, "source": "autotuned"}, {"m": 25, "n": 32, "k": 32, "tile_m": 2, "tile_n": 4, "w": 16, "v": 30, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 402.903, "source": "autotuned"}, {"m": 25, "n": 32, "k": 45, "tile_m": 5, "tile_n": 2, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 426.505, "source": "autotuned"}, {"m": 25, "n": 45, "k": 4, "tile_m": 5, "tile_n": 2, "w": 2, "v": 30, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 179.84, "source": "autotuned"}, {"m": 25, "n": 45, "k": 5, "tile_m": 5, "tile_n": 2, "w": 2, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 207.379, "source": "autotuned"}, {"m": 25, "n": 45, "k": 7, "tile_m": 5, "tile_n": 2, "w": 2, "v": 30, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 230.203, "source": "autotuned"}, {"m": 25, "n": 45, "k": 9, "tile_m": 5, "tile_n": 2, "w": 4, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 275.085, "source": "autotuned"}, {"m": 25, "n": 45, "k": 13, "tile_m": 2, "tile_n": 5, "w": 6, "v": 30, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 310.536, "source": "autotuned"}, {"m": 25, "n": 45, "k": 25, "tile_m": 3, "tile_n": 4, "w": 10, "v": 40, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 383.964, "source": "autotuned"}, {"m": 25, "n": 45, "k": 26, "tile_m": 2, "tile_n": 5, "w": 10, "v": 20, "threads": 256, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 382.733, "source": "autotuned"}, {"m": 25, "n": 45, "k": 28, "tile_m": 3, "tile_n": 4, "w": 14, "v": 44, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 405.725, "source": "autotuned"}, {"m": 25, "n": 45, "k": 32, "tile_m": 3, "tile_n": 4, "w": 16, "v": 44, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 416.094, "source": "autotuned"}, {"m": 25, "n": 45, "k": 45, "tile_m": 2, "tile_n": 5, "w": 20, "v": 30, "threads": 192, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 435.914, "source": "autotuned"}, {"m": 26, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "w": 2, "v": 4, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 64.5163, "source": "autotuned"}, {"m": 26, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 61.4003, "source": "autotuned"}, {"m": 26, "n": 4, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 71.0928, "source": "autotuned"}, {"m": 26, "n": 4, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 81.2663, "source": "autotuned"}, {"m": 26, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 87.9086, "source": "autotuned"}, {"m": 26, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "w": 4, "v": 4, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 95.039, "source": "autotuned"}, {"m": 26, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 117.469, "source": "autotuned"}, {"m": 26, "n": 4, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 125.593, "source": "autotuned"}, {"m": 26, "n": 4, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 123.868, "source": "autotuned"}, {"m": 26, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 126.451, "source": "autotuned"}, {"m": 26, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 128.35, "source": "autotuned"}, {"m": 26, "n": 4, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 131.294, "source": "autotuned"}, {"m": 26, "n": 4, "k": 25, "tile_m": 1, "tile_n": 2, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 128.096, "source": "autotuned"}, {"m": 26, "n": 4, "k": 26, "tile_m": 1, "tile_n": 2, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 130.166, "source": "autotuned"}, {"m": 26, "n": 4, "k": 28, "tile_m": 2, "tile_n": 1, "w": 14, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 136.84, "source": "autotuned"}, {"m": 26, "n": 4, "k": 32, "tile_m": 1, "tile_n": 2, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 140.687, "source": "autotuned"}, {"m": 26, "n": 4, "k": 45, "tile_m": 1, "tile_n": 2, "w": 16, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 141.608, "source": "autotuned"}, {"m": 26, "n": 5, "k": 4, "tile_m": 1, "tile_n": 2, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 69.7487, "source": "autotuned"}, {"m": 26, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 74.0129, "source": "autotuned"}, {"m": 26, "n": 5, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 83.8041, "source": "autotuned"}, {"m": 26, "n": 5, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 93.9083, "source": "autotuned"}, {"m": 26, "n": 5, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 98.7557, "source": "autotuned"}, {"m": 26, "n": 5, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 106.652, "source": "autotuned"}, {"m": 26, "n": 5, "k": 13, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 130.365, "source": "autotuned"}, {"m": 26, "n": 5, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 135.751, "source": "autotuned"}, {"m": 26, "n": 5, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 135.026, "source": "autotuned"}, {"m": 26, "n": 5, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 140.428, "source": "autotuned"}, {"m": 26, "n": 5, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 142.897, "source": "autotuned"}, {"m": 26, "n": 5, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 4, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 141.37, "source": "autotuned"}, {"m": 26, "n": 5, "k": 25, "tile_m": 3, "tile_n": 2, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 148.961, "source": "autotuned"}, {"m": 26, "n": 5, "k": 26, "tile_m": 3, "tile_n": 2, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 150.882, "source": "autotuned"}, {"m": 26, "n": 5, "k": 28, "tile_m": 3, "tile_n": 2, "w": 14, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 160.591, "source": "autotuned"}, {"m": 26, "n": 5, "k": 32, "tile_m": 2, "tile_n": 3, "w": 16, "v": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 163.472, "source": "autotuned"}, {"m": 26, "n": 5, "k": 45, "tile_m": 2, "tile_n": 1, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 163.834, "source": "autotuned"}, {"m": 26, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 72.6709, "source": "autotuned"}, {"m": 26, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 87.4288, "source": "autotuned"}, {"m": 26, "n": 6, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 99.3344, "source": "autotuned"}, {"m": 26, "n": 6, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 118.582, "source": "autotuned"}, {"m": 26, "n": 6, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 126.842, "source": "autotuned"}, {"m": 26, "n": 6, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 153.58, "source": "autotuned"}, {"m": 26, "n": 6, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 159.739, "source": "autotuned"}, {"m": 26, "n": 6, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 157.425, "source": "autotuned"}, {"m": 26, "n": 6, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 163.987, "source": "autotuned"}, {"m": 26, "n": 6, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 166.214, "source": "autotuned"}, {"m": 26, "n": 6, "k": 24, "tile_m": 1, "tile_n": 1, "w": 12, "v": 6, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 167.712, "source": "autotuned"}, {"m": 26, "n": 6, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 165.846, "source": "autotuned"}, {"m": 26, "n": 6, "k": 32, "tile_m": 1, "tile_n": 1, "w": 12, "v": 6, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 174.271, "source": "autotuned"}, {"m": 26, "n": 7, "k": 4, "tile_m": 2, "tile_n": 1, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 93.3904, "source": "autotuned"}, {"m": 26, "n": 7, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 98.4269, "source": "autotuned"}, {"m": 26, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 129.184, "source": "autotuned"}, {"m": 26, "n": 7, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 146.313, "source": "autotuned"}, {"m": 26, "n": 7, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 174.525, "source": "autotuned"}, {"m": 26, "n": 7, "k": 25, "tile_m": 2, "tile_n": 1, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 196.272, "source": "autotuned"}, {"m": 26, "n": 7, "k": 26, "tile_m": 2, "tile_n": 1, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 199.207, "source": "autotuned"}, {"m": 26, "n": 7, "k": 28, "tile_m": 3, "tile_n": 1, "w": 14, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 208.391, "source": "autotuned"}, {"m": 26, "n": 7, "k": 32, "tile_m": 2, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 213.658, "source": "autotuned"}, {"m": 26, "n": 7, "k": 45, "tile_m": 2, "tile_n": 1, "w": 12, "v": 6, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 218.996, "source": "autotuned"}, {"m": 26, "n": 8, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 94.6073, "source": "autotuned"}, {"m": 26, "n": 8, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 104.199, "source": "autotuned"}, {"m": 26, "n": 8, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 120.103, "source": "autotuned"}, {"m": 26, "n": 8, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 147.207, "source": "autotuned"}, {"m": 26, "n": 8, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 158.986, "source": "autotuned"}, {"m": 26, "n": 8, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 184.007, "source": "autotuned"}, {"m": 26, "n": 8, "k": 16, "tile_m": 2, "tile_n": 1, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 185.8, "source": "autotuned"}, {"m": 26, "n": 8, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 184.285, "source": "autotuned"}, {"m": 26, "n": 8, "k": 22, "tile_m": 2, "tile_n": 1, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 191.661, "source": "autotuned"}, {"m": 26, "n": 8, "k": 23, "tile_m": 2, "tile_n": 2, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 194.119, "source": "autotuned"}, {"m": 26, "n": 8, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 203.357, "source": "autotuned"}, {"m": 26, "n": 8, "k": 26, "tile_m": 2, "tile_n": 2, "w": 10, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 201.388, "source": "autotuned"}, {"m": 26, "n": 8, "k": 32, "tile_m": 2, "tile_n": 2, "w": 14, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 214.072, "source": "autotuned"}, {"m": 26, "n": 9, "k": 4, "tile_m": 3, "tile_n": 1, "w": 2, "v": 6, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 109.036, "source": "autotuned"}, {"m": 26, "n": 9, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 114.163, "source": "autotuned"}, {"m": 26, "n": 9, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 131.35, "source": "autotuned"}, {"m": 26, "n": 9, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 144.626, "source": "autotuned"}, {"m": 26, "n": 9, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 157.793, "source": "autotuned"}, {"m": 26, "n": 9, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 169.191, "source": "autotuned"}, {"m": 26, "n": 9, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 189.564, "source": "autotuned"}, {"m": 26, "n": 9, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 197.735, "source": "autotuned"}, {"m": 26, "n": 9, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 202.974, "source": "autotuned"}, {"m": 26, "n": 9, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 205.221, "source": "autotuned"}, {"m": 26, "n": 9, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 209.048, "source": "autotuned"}, {"m": 26, "n": 9, "k": 24, "tile_m": 2, "tile_n": 1, "w": 12, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 218.442, "source": "autotuned"}, {"m": 26, "n": 9, "k": 25, "tile_m": 2, "tile_n": 1, "w": 12, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 224.446, "source": "autotuned"}, {"m": 26, "n": 9, "k": 26, "tile_m": 2, "tile_n": 1, "w": 12, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 226.888, "source": "autotuned"}, {"m": 26, "n": 9, "k": 28, "tile_m": 2, "tile_n": 1, "w": 14, "v": 8, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 238.998, "source": "autotuned"}, {"m": 26, "n": 9, "k": 32, "tile_m": 2, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 238.306, "source": "autotuned"}, {"m": 26, "n": 9, "k": 45, "tile_m": 2, "tile_n": 1, "w": 18, "v": 8, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 247.183, "source": "autotuned"}, {"m": 26, "n": 13, "k": 4, "tile_m": 2, "tile_n": 2, "w": 2, "v": 10, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 141.329, "source": "autotuned"}, {"m": 26, "n": 13, "k": 5, "tile_m": 2, "tile_n": 2, "w": 2, "v": 10, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 147.765, "source": "autotuned"}, {"m": 26, "n": 13, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 164.444, "source": "autotuned"}, {"m": 26, "n": 13, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 180.199, "source": "autotuned"}, {"m": 26, "n": 13, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 189.61, "source": "autotuned"}, {"m": 26, "n": 13, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 206.587, "source": "autotuned"}, {"m": 26, "n": 13, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 243.394, "source": "autotuned"}, {"m": 26, "n": 13, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 244.889, "source": "autotuned"}, {"m": 26, "n": 13, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 248.672, "source": "autotuned"}, {"m": 26, "n": 13, "k": 22, "tile_m": 2, "tile_n": 2, "w": 6, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 250.837, "source": "autotuned"}, {"m": 26, "n": 13, "k": 23, "tile_m": 3, "tile_n": 2, "w": 10, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 251.925, "source": "autotuned"}, {"m": 26, "n": 13, "k": 24, "tile_m": 2, "tile_n": 2, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 262.097, "source": "autotuned"}, {"m": 26, "n": 13, "k": 25, "tile_m": 3, "tile_n": 2, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 287.926, "source": "autotuned"}, {"m": 26, "n": 13, "k": 26, "tile_m": 2, "tile_n": 2, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 292.748, "source": "autotuned"}, {"m": 26, "n": 13, "k": 28, "tile_m": 2, "tile_n": 2, "w": 14, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 305.399, "source": "autotuned"}, {"m": 26, "n": 13, "k": 32, "tile_m": 2, "tile_n": 2, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 307.713, "source": "autotuned"}, {"m": 26, "n": 13, "k": 45, "tile_m": 2, "tile_n": 2, "w": 10, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 321.334, "source": "autotuned"}, {"m": 26, "n": 16, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 152.877, "source": "autotuned"}, {"m": 26, "n": 16, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 155.57, "source": "autotuned"}, {"m": 26, "n": 16, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 170.247, "source": "autotuned"}, {"m": 26, "n": 16, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 201.911, "source": "autotuned"}, {"m": 26, "n": 16, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 223.126, "source": "autotuned"}, {"m": 26, "n": 16, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 248.219, "source": "autotuned"}, {"m": 26, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 272.563, "source": "autotuned"}, {"m": 26, "n": 16, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 278.933, "source": "autotuned"}, {"m": 26, "n": 16, "k": 22, "tile_m": 2, "tile_n": 4, "w": 10, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 283.175, "source": "autotuned"}, {"m": 26, "n": 16, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 283.731, "source": "autotuned"}, {"m": 26, "n": 16, "k": 24, "tile_m": 2, "tile_n": 2, "w": 12, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 283.395, "source": "autotuned"}, {"m": 26, "n": 16, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 289.704, "source": "autotuned"}, {"m": 26, "n": 16, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 312.21, "source": "autotuned"}, {"m": 26, "n": 17, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 155.536, "source": "autotuned"}, {"m": 26, "n": 17, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 152.251, "source": "autotuned"}, {"m": 26, "n": 17, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 174.981, "source": "autotuned"}, {"m": 26, "n": 17, "k": 8, "tile_m": 2, "tile_n": 2, "w": 4, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 203.653, "source": "autotuned"}, {"m": 26, "n": 17, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 229.052, "source": "autotuned"}, {"m": 26, "n": 17, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 254.23, "source": "autotuned"}, {"m": 26, "n": 17, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 281.091, "source": "autotuned"}, {"m": 26, "n": 17, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 285.713, "source": "autotuned"}, {"m": 26, "n": 17, "k": 22, "tile_m": 3, "tile_n": 2, "w": 8, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 275.4, "source": "autotuned"}, {"m": 26, "n": 17, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 284.987, "source": "autotuned"}, {"m": 26, "n": 17, "k": 24, "tile_m": 2, "tile_n": 2, "w": 6, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 298.462, "source": "autotuned"}, {"m": 26, "n": 17, "k": 26, "tile_m": 2, "tile_n": 2, "w": 6, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 287.445, "source": "autotuned"}, {"m": 26, "n": 17, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 12, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 314.433, "source": "autotuned"}, {"m": 26, "n": 22, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 149.972, "source": "autotuned"}, {"m": 26, "n": 22, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 176.08, "source": "autotuned"}, {"m": 26, "n": 22, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 196.809, "source": "autotuned"}, {"m": 26, "n": 22, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 217.745, "source": "autotuned"}, {"m": 26, "n": 22, "k": 9, "tile_m": 4, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 220.047, "source": "autotuned"}, {"m": 26, "n": 22, "k": 13, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 262.523, "source": "autotuned"}, {"m": 26, "n": 22, "k": 16, "tile_m": 3, "tile_n": 2, "w": 4, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 289.65, "source": "autotuned"}, {"m": 26, "n": 22, "k": 17, "tile_m": 2, "tile_n": 3, "w": 6, "v": 12, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 275.462, "source": "autotuned"}, {"m": 26, "n": 22, "k": 22, "tile_m": 2, "tile_n": 3, "w": 4, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 306.524, "source": "autotuned"}, {"m": 26, "n": 22, "k": 23, "tile_m": 2, "tile_n": 2, "w": 6, "v": 22, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 306.629, "source": "autotuned"}, {"m": 26, "n": 22, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 22, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 312.951, "source": "autotuned"}, {"m": 26, "n": 22, "k": 26, "tile_m": 2, "tile_n": 3, "w": 4, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 316.347, "source": "autotuned"}, {"m": 26, "n": 22, "k": 32, "tile_m": 3, "tile_n": 2, "w": 14, "v": 22, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 331.192, "source": "autotuned"}, {"m": 26, "n": 23, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 154.026, "source": "autotuned"}, {"m": 26, "n": 23, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 179.309, "source": "autotuned"}, {"m": 26, "n": 23, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 202.375, "source": "autotuned"}, {"m": 26, "n": 23, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 222.858, "source": "autotuned"}, {"m": 26, "n": 23, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 221.968, "source": "autotuned"}, {"m": 26, "n": 23, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 273.966, "source": "autotuned"}, {"m": 26, "n": 23, "k": 16, "tile_m": 3, "tile_n": 2, "w": 6, "v": 12, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 276.664, "source": "autotuned"}, {"m": 26, "n": 23, "k": 17, "tile_m": 2, "tile_n": 3, "w": 6, "v": 12, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 285.445, "source": "autotuned"}, {"m": 26, "n": 23, "k": 22, "tile_m": 2, "tile_n": 3, "w": 4, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 317.821, "source": "autotuned"}, {"m": 26, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "w": 6, "v": 12, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 307.93, "source": "autotuned"}, {"m": 26, "n": 23, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 12, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 320.822, "source": "autotuned"}, {"m": 26, "n": 23, "k": 26, "tile_m": 2, "tile_n": 3, "w": 4, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 327.373, "source": "autotuned"}, {"m": 26, "n": 23, "k": 32, "tile_m": 2, "tile_n": 3, "w": 14, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 341.076, "source": "autotuned"}, {"m": 26, "n": 24, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 166.334, "source": "autotuned"}, {"m": 26, "n": 24, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 194.858, "source": "autotuned"}, {"m": 26, "n": 24, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 217.359, "source": "autotuned"}, {"m": 26, "n": 24, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 240.36, "source": "autotuned"}, {"m": 26, "n": 24, "k": 9, "tile_m": 4, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 240.63, "source": "autotuned"}, {"m": 26, "n": 24, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 284.219, "source": "autotuned"}, {"m": 26, "n": 24, "k": 16, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 317.599, "source": "autotuned"}, {"m": 26, "n": 24, "k": 17, "tile_m": 3, "tile_n": 2, "w": 6, "v": 24, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 300.196, "source": "autotuned"}, {"m": 26, "n": 24, "k": 22, "tile_m": 2, "tile_n": 3, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 333.184, "source": "autotuned"}, {"m": 26, "n": 24, "k": 23, "tile_m": 2, "tile_n": 2, "w": 6, "v": 24, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 332.175, "source": "autotuned"}, {"m": 26, "n": 24, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 342.541, "source": "autotuned"}, {"m": 26, "n": 24, "k": 26, "tile_m": 2, "tile_n": 3, "w": 4, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 342.458, "source": "autotuned"}, {"m": 26, "n": 24, "k": 32, "tile_m": 3, "tile_n": 2, "w": 14, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 360.604, "source": "autotuned"}, {"m": 26, "n": 25, "k": 4, "tile_m": 4, "tile_n": 2, "w": 2, "v": 18, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 167.244, "source": "autotuned"}, {"m": 26, "n": 25, "k": 5, "tile_m": 3, "tile_n": 2, "w": 2, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 188.512, "source": "autotuned"}, {"m": 26, "n": 25, "k": 7, "tile_m": 3, "tile_n": 2, "w": 2, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 217.789, "source": "autotuned"}, {"m": 26, "n": 25, "k": 9, "tile_m": 2, "tile_n": 3, "w": 4, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 242.956, "source": "autotuned"}, {"m": 26, "n": 25, "k": 13, "tile_m": 2, "tile_n": 4, "w": 6, "v": 18, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 304.863, "source": "autotuned"}, {"m": 26, "n": 25, "k": 25, "tile_m": 2, "tile_n": 3, "w": 12, "v": 22, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 357.372, "source": "autotuned"}, {"m": 26, "n": 25, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 362.44, "source": "autotuned"}, {"m": 26, "n": 25, "k": 28, "tile_m": 2, "tile_n": 3, "w": 14, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 380.957, "source": "autotuned"}, {"m": 26, "n": 25, "k": 32, "tile_m": 2, "tile_n": 3, "w": 12, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 388.464, "source": "autotuned"}, {"m": 26, "n": 25, "k": 45, "tile_m": 2, "tile_n": 4, "w": 12, "v": 22, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 405.487, "source": "autotuned"}, {"m": 26, "n": 26, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 175.533, "source": "autotuned"}, {"m": 26, "n": 26, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 195.723, "source": "autotuned"}, {"m": 26, "n": 26, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 223.837, "source": "autotuned"}, {"m": 26, "n": 26, "k": 7, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 238.031, "source": "autotuned"}, {"m": 26, "n": 26, "k": 8, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 260.398, "source": "autotuned"}, {"m": 26, "n": 26, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 281.056, "source": "autotuned"}, {"m": 26, "n": 26, "k": 13, "tile_m": 2, "tile_n": 4, "w": 6, "v": 18, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 317.738, "source": "autotuned"}, {"m": 26, "n": 26, "k": 16, "tile_m": 3, "tile_n": 2, "w": 4, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 332.873, "source": "autotuned"}, {"m": 26, "n": 26, "k": 17, "tile_m": 2, "tile_n": 3, "w": 6, "v": 16, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 315.978, "source": "autotuned"}, {"m": 26, "n": 26, "k": 22, "tile_m": 2, "tile_n": 3, "w": 4, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 350.804, "source": "autotuned"}, {"m": 26, "n": 26, "k": 23, "tile_m": 2, "tile_n": 3, "w": 6, "v": 26, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 348.123, "source": "autotuned"}, {"m": 26, "n": 26, "k": 24, "tile_m": 2, "tile_n": 3, "w": 12, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 356.594, "source": "autotuned"}, {"m": 26, "n": 26, "k": 25, "tile_m": 2, "tile_n": 4, "w": 12, "v": 24, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 375.765, "source": "autotuned"}, {"m": 26, "n": 26, "k": 26, "tile_m": 2, "tile_n": 3, "w": 12, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 381.742, "source": "autotuned"}, {"m": 26, "n": 26, "k": 28, "tile_m": 2, "tile_n": 4, "w": 14, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 396.724, "source": "autotuned"}, {"m": 26, "n": 26, "k": 32, "tile_m": 2, "tile_n": 3, "w": 14, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 401.65, "source": "autotuned"}, {"m": 26, "n": 26, "k": 45, "tile_m": 2, "tile_n": 4, "w": 12, "v": 24, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 425.671, "source": "autotuned"}, {"m": 26, "n": 28, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 174.838, "source": "autotuned"}, {"m": 26, "n": 28, "k": 5, "tile_m": 3, "tile_n": 2, "w": 2, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 200.558, "source": "autotuned"}, {"m": 26, "n": 28, "k": 7, "tile_m": 3, "tile_n": 2, "w": 2, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 246.118, "source": "autotuned"}, {"m": 26, "n": 28, "k": 9, "tile_m": 3, "tile_n": 2, "w": 4, "v": 28, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 273.477, "source": "autotuned"}, {"m": 26, "n": 28, "k": 13, "tile_m": 2, "tile_n": 4, "w": 6, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 332.816, "source": "autotuned"}, {"m": 26, "n": 28, "k": 25, "tile_m": 2, "tile_n": 4, "w": 10, "v": 28, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 397.022, "source": "autotuned"}, {"m": 26, "n": 28, "k": 26, "tile_m": 2, "tile_n": 4, "w": 10, "v": 28, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 404.741, "source": "autotuned"}, {"m": 26, "n": 28, "k": 28, "tile_m": 3, "tile_n": 2, "w": 10, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 414.939, "source": "autotuned"}, {"m": 26, "n": 28, "k": 32, "tile_m": 3, "tile_n": 2, "w": 12, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 426.043, "source": "autotuned"}, {"m": 26, "n": 28, "k": 45, "tile_m": 2, "tile_n": 4, "w": 12, "v": 28, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 457.514, "source": "autotuned"}, {"m": 26, "n": 32, "k": 4, "tile_m": 5, "tile_n": 2, "w": 2, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 176.504, "source": "autotuned"}, {"m": 26, "n": 32, "k": 5, "tile_m": 5, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 212.767, "source": "autotuned"}, {"m": 26, "n": 32, "k": 6, "tile_m": 5, "tile_n": 2, "w": 2, "v": 18, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 222.341, "source": "autotuned"}, {"m": 26, "n": 32, "k": 7, "tile_m": 5, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 247.293, "source": "autotuned"}, {"m": 26, "n": 32, "k": 8, "tile_m": 3, "tile_n": 3, "w": 4, "v": 28, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 245.658, "source": "autotuned"}, {"m": 26, "n": 32, "k": 9, "tile_m": 2, "tile_n": 4, "w": 4, "v": 28, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 280.034, "source": "autotuned"}, {"m": 26, "n": 32, "k": 13, "tile_m": 2, "tile_n": 4, "w": 6, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 316.971, "source": "autotuned"}, {"m": 26, "n": 32, "k": 16, "tile_m": 2, "tile_n": 4, "w": 8, "v": 28, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 335.651, "source": "autotuned"}, {"m": 26, "n": 32, "k": 17, "tile_m": 2, "tile_n": 4, "w": 8, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 325.543, "source": "autotuned"}, {"m": 26, "n": 32, "k": 22, "tile_m": 2, "tile_n": 4, "w": 8, "v": 28, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 358.85, "source": "autotuned"}, {"m": 26, "n": 32, "k": 23, "tile_m": 2, "tile_n": 4, "w": 8, "v": 28, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 365.224, "source": "autotuned"}, {"m": 26, "n": 32, "k": 24, "tile_m": 2, "tile_n": 4, "w": 12, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 382.529, "source": "autotuned"}, {"m": 26, "n": 32, "k": 25, "tile_m": 2, "tile_n": 4, "w": 12, "v": 32, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 399.183, "source": "autotuned"}, {"m": 26, "n": 32, "k": 26, "tile_m": 2, "tile_n": 4, "w": 12, "v": 32, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 404.75, "source": "autotuned"}, {"m": 26, "n": 32, "k": 28, "tile_m": 2, "tile_n": 4, "w": 10, "v": 32, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 409.577, "source": "autotuned"}, {"m": 26, "n": 32, "k": 32, "tile_m": 4, "tile_n": 2, "w": 16, "v": 32, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 426.515, "source": "autotuned"}, {"m": 26, "n": 32, "k": 45, "tile_m": 5, "tile_n": 2, "w": 12, "v": 24, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 442.282, "source": "autotuned"}, {"m": 26, "n": 45, "k": 4, "tile_m": 3, "tile_n": 2, "w": 2, "v": 16, "threads": 224, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 155.312, "source": "autotuned"}, {"m": 26, "n": 45, "k": 5, "tile_m": 6, "tile_n": 2, "w": 2, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 204.843, "source": "autotuned"}, {"m": 26, "n": 45, "k": 7, "tile_m": 6, "tile_n": 2, "w": 2, "v": 18, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 233.548, "source": "autotuned"}, {"m": 26, "n": 45, "k": 9, "tile_m": 5, "tile_n": 3, "w": 4, "v": 24, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 262.492, "source": "autotuned"}, {"m": 26, "n": 45, "k": 13, "tile_m": 2, "tile_n": 5, "w": 6, "v": 36, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 318.4, "source": "autotuned"}, {"m": 26, "n": 45, "k": 25, "tile_m": 2, "tile_n": 5, "w": 10, "v": 44, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 393.097, "source": "autotuned"}, {"m": 26, "n": 45, "k": 26, "tile_m": 2, "tile_n": 5, "w": 10, "v": 44, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 399.976, "source": "autotuned"}, {"m": 26, "n": 45, "k": 28, "tile_m": 3, "tile_n": 4, "w": 14, "v": 44, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 422.791, "source": "autotuned"}, {"m": 26, "n": 45, "k": 32, "tile_m": 3, "tile_n": 4, "w": 16, "v": 44, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 436.141, "source": "autotuned"}, {"m": 26, "n": 45, "k": 45, "tile_m": 2, "tile_n": 5, "w": 16, "v": 44, "threads": 192, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 455.227, "source": "autotuned"}, {"m": 28, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "w": 2, "v": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 69.7132, "source": "autotuned"}, {"m": 28, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 66.2641, "source": "autotuned"}, {"m": 28, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 84.8842, "source": "autotuned"}, {"m": 28, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 102.249, "source": "autotuned"}, {"m": 28, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 122.511, "source": "autotuned"}, {"m": 28, "n": 4, "k": 25, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 131.812, "source": "autotuned"}, {"m": 28, "n": 4, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 133.779, "source": "autotuned"}, {"m": 28, "n": 4, "k": 28, "tile_m": 1, "tile_n": 2, "w": 14, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 139.798, "source": "autotuned"}, {"m": 28, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 141.831, "source": "autotuned"}, {"m": 28, "n": 4, "k": 45, "tile_m": 2, "tile_n": 1, "w": 18, "v": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 141.966, "source": "autotuned"}, {"m": 28, "n": 5, "k": 4, "tile_m": 1, "tile_n": 2, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 74.4649, "source": "autotuned"}, {"m": 28, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 79.7849, "source": "autotuned"}, {"m": 28, "n": 5, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 94.6668, "source": "autotuned"}, {"m": 28, "n": 5, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 113.375, "source": "autotuned"}, {"m": 28, "n": 5, "k": 13, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 137.689, "source": "autotuned"}, {"m": 28, "n": 5, "k": 25, "tile_m": 2, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 154.897, "source": "autotuned"}, {"m": 28, "n": 5, "k": 26, "tile_m": 2, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 157.88, "source": "autotuned"}, {"m": 28, "n": 5, "k": 28, "tile_m": 1, "tile_n": 2, "w": 14, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 163.76, "source": "autotuned"}, {"m": 28, "n": 5, "k": 32, "tile_m": 1, "tile_n": 2, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 166.725, "source": "autotuned"}, {"m": 28, "n": 5, "k": 45, "tile_m": 2, "tile_n": 1, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 170.449, "source": "autotuned"}, {"m": 28, "n": 7, "k": 4, "tile_m": 2, "tile_n": 2, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 96.7805, "source": "autotuned"}, {"m": 28, "n": 7, "k": 5, "tile_m": 2, "tile_n": 2, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 97.3331, "source": "autotuned"}, {"m": 28, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 123.661, "source": "autotuned"}, {"m": 28, "n": 7, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 145.578, "source": "autotuned"}, {"m": 28, "n": 7, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 178.204, "source": "autotuned"}, {"m": 28, "n": 7, "k": 25, "tile_m": 2, "tile_n": 2, "w": 12, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 199.125, "source": "autotuned"}, {"m": 28, "n": 7, "k": 26, "tile_m": 2, "tile_n": 2, "w": 12, "v": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 201.107, "source": "autotuned"}, {"m": 28, "n": 7, "k": 28, "tile_m": 2, "tile_n": 2, "w": 14, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 211.525, "source": "autotuned"}, {"m": 28, "n": 7, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 215.029, "source": "autotuned"}, {"m": 28, "n": 7, "k": 45, "tile_m": 2, "tile_n": 2, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 222.228, "source": "autotuned"}, {"m": 28, "n": 9, "k": 4, "tile_m": 3, "tile_n": 1, "w": 2, "v": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 117.282, "source": "autotuned"}, {"m": 28, "n": 9, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 122.678, "source": "autotuned"}, {"m": 28, "n": 9, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 156.349, "source": "autotuned"}, {"m": 28, "n": 9, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 183.005, "source": "autotuned"}, {"m": 28, "n": 9, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 200.618, "source": "autotuned"}, {"m": 28, "n": 9, "k": 25, "tile_m": 2, "tile_n": 1, "w": 12, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 238.125, "source": "autotuned"}, {"m": 28, "n": 9, "k": 26, "tile_m": 2, "tile_n": 1, "w": 12, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 240.037, "source": "autotuned"}, {"m": 28, "n": 9, "k": 28, "tile_m": 2, "tile_n": 1, "w": 14, "v": 8, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 249.198, "source": "autotuned"}, {"m": 28, "n": 9, "k": 32, "tile_m": 2, "tile_n": 1, "w": 16, "v": 8, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 254.885, "source": "autotuned"}, {"m": 28, "n": 9, "k": 45, "tile_m": 2, "tile_n": 1, "w": 16, "v": 8, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 260.931, "source": "autotuned"}, {"m": 28, "n": 13, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 135.514, "source": "autotuned"}, {"m": 28, "n": 13, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 148.634, "source": "autotuned"}, {"m": 28, "n": 13, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 181.031, "source": "autotuned"}, {"m": 28, "n": 13, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 204.184, "source": "autotuned"}, {"m": 28, "n": 13, "k": 13, "tile_m": 4, "tile_n": 2, "w": 6, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 231.477, "source": "autotuned"}, {"m": 28, "n": 13, "k": 25, "tile_m": 4, "tile_n": 1, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 276.693, "source": "autotuned"}, {"m": 28, "n": 13, "k": 26, "tile_m": 4, "tile_n": 1, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 280.226, "source": "autotuned"}, {"m": 28, "n": 13, "k": 28, "tile_m": 4, "tile_n": 1, "w": 14, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 287.948, "source": "autotuned"}, {"m": 28, "n": 13, "k": 32, "tile_m": 4, "tile_n": 1, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 293.103, "source": "autotuned"}, {"m": 28, "n": 13, "k": 45, "tile_m": 4, "tile_n": 1, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 304.228, "source": "autotuned"}, {"m": 28, "n": 25, "k": 4, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 168.069, "source": "autotuned"}, {"m": 28, "n": 25, "k": 5, "tile_m": 4, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 193.423, "source": "autotuned"}, {"m": 28, "n": 25, "k": 7, "tile_m": 4, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 225.794, "source": "autotuned"}, {"m": 28, "n": 25, "k": 9, "tile_m": 2, "tile_n": 3, "w": 4, "v": 22, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 258.556, "source": "autotuned"}, {"m": 28, "n": 25, "k": 13, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 320.669, "source": "autotuned"}, {"m": 28, "n": 25, "k": 25, "tile_m": 2, "tile_n": 3, "w": 12, "v": 18, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 381.261, "source": "autotuned"}, {"m": 28, "n": 25, "k": 26, "tile_m": 2, "tile_n": 3, "w": 10, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 384.478, "source": "autotuned"}, {"m": 28, "n": 25, "k": 28, "tile_m": 2, "tile_n": 3, "w": 10, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 396.377, "source": "autotuned"}, {"m": 28, "n": 25, "k": 32, "tile_m": 2, "tile_n": 3, "w": 12, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 412.267, "source": "autotuned"}, {"m": 28, "n": 25, "k": 45, "tile_m": 2, "tile_n": 3, "w": 12, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 427.011, "source": "autotuned"}, {"m": 28, "n": 26, "k": 4, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 176.915, "source": "autotuned"}, {"m": 28, "n": 26, "k": 5, "tile_m": 4, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 202.981, "source": "autotuned"}, {"m": 28, "n": 26, "k": 7, "tile_m": 4, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 237.458, "source": "autotuned"}, {"m": 28, "n": 26, "k": 9, "tile_m": 2, "tile_n": 3, "w": 4, "v": 26, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 271.994, "source": "autotuned"}, {"m": 28, "n": 26, "k": 13, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 334.498, "source": "autotuned"}, {"m": 28, "n": 26, "k": 25, "tile_m": 2, "tile_n": 3, "w": 12, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 400.225, "source": "autotuned"}, {"m": 28, "n": 26, "k": 26, "tile_m": 2, "tile_n": 3, "w": 12, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 410.723, "source": "autotuned"}, {"m": 28, "n": 26, "k": 28, "tile_m": 2, "tile_n": 3, "w": 14, "v": 18, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 417.684, "source": "autotuned"}, {"m": 28, "n": 26, "k": 32, "tile_m": 2, "tile_n": 3, "w": 12, "v": 22, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 431.942, "source": "autotuned"}, {"m": 28, "n": 26, "k": 45, "tile_m": 4, "tile_n": 2, "w": 12, "v": 26, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 456.463, "source": "autotuned"}, {"m": 28, "n": 28, "k": 4, "tile_m": 5, "tile_n": 2, "w": 2, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 179.862, "source": "autotuned"}, {"m": 28, "n": 28, "k": 5, "tile_m": 5, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 210.103, "source": "autotuned"}, {"m": 28, "n": 28, "k": 7, "tile_m": 5, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 242.486, "source": "autotuned"}, {"m": 28, "n": 28, "k": 9, "tile_m": 5, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 266.488, "source": "autotuned"}, {"m": 28, "n": 28, "k": 13, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 311.697, "source": "autotuned"}, {"m": 28, "n": 28, "k": 25, "tile_m": 2, "tile_n": 4, "w": 12, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 374.666, "source": "autotuned"}, {"m": 28, "n": 28, "k": 26, "tile_m": 2, "tile_n": 5, "w": 10, "v": 26, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 379.954, "source": "autotuned"}, {"m": 28, "n": 28, "k": 28, "tile_m": 2, "tile_n": 4, "w": 14, "v": 28, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 385.627, "source": "autotuned"}, {"m": 28, "n": 28, "k": 32, "tile_m": 2, "tile_n": 4, "w": 16, "v": 28, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 399.675, "source": "autotuned"}, {"m": 28, "n": 28, "k": 45, "tile_m": 2, "tile_n": 5, "w": 10, "v": 14, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 419.193, "source": "autotuned"}, {"m": 28, "n": 32, "k": 4, "tile_m": 5, "tile_n": 2, "w": 2, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 190.475, "source": "autotuned"}, {"m": 28, "n": 32, "k": 5, "tile_m": 5, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 226.849, "source": "autotuned"}, {"m": 28, "n": 32, "k": 7, "tile_m": 5, "tile_n": 2, "w": 2, "v": 16, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 265.598, "source": "autotuned"}, {"m": 28, "n": 32, "k": 9, "tile_m": 2, "tile_n": 4, "w": 4, "v": 24, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 294.248, "source": "autotuned"}, {"m": 28, "n": 32, "k": 13, "tile_m": 4, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 336.212, "source": "autotuned"}, {"m": 28, "n": 32, "k": 25, "tile_m": 2, "tile_n": 4, "w": 12, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 425.078, "source": "autotuned"}, {"m": 28, "n": 32, "k": 26, "tile_m": 2, "tile_n": 4, "w": 12, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 430.851, "source": "autotuned"}, {"m": 28, "n": 32, "k": 28, "tile_m": 2, "tile_n": 4, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 436.482, "source": "autotuned"}, {"m": 28, "n": 32, "k": 32, "tile_m": 2, "tile_n": 4, "w": 16, "v": 32, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 454.724, "source": "autotuned"}, {"m": 28, "n": 32, "k": 45, "tile_m": 5, "tile_n": 2, "w": 12, "v": 24, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 470.523, "source": "autotuned"}, {"m": 28, "n": 45, "k": 4, "tile_m": 6, "tile_n": 2, "w": 2, "v": 32, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 162.232, "source": "autotuned"}, {"m": 28, "n": 45, "k": 5, "tile_m": 6, "tile_n": 2, "w": 2, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 213.556, "source": "autotuned"}, {"m": 28, "n": 45, "k": 7, "tile_m": 6, "tile_n": 2, "w": 2, "v": 18, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 248.9, "source": "autotuned"}, {"m": 28, "n": 45, "k": 9, "tile_m": 3, "tile_n": 4, "w": 4, "v": 22, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 278.037, "source": "autotuned"}, {"m": 28, "n": 45, "k": 13, "tile_m": 2, "tile_n": 5, "w": 6, "v": 32, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 339.473, "source": "autotuned"}, {"m": 28, "n": 45, "k": 25, "tile_m": 2, "tile_n": 5, "w": 10, "v": 36, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 421.292, "source": "autotuned"}, {"m": 28, "n": 45, "k": 26, "tile_m": 2, "tile_n": 5, "w": 10, "v": 36, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 425.013, "source": "autotuned"}, {"m": 28, "n": 45, "k": 28, "tile_m": 3, "tile_n": 4, "w": 14, "v": 42, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 443.193, "source": "autotuned"}, {"m": 28, "n": 45, "k": 32, "tile_m": 2, "tile_n": 5, "w": 16, "v": 40, "threads": 224, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 462.217, "source": "autotuned"}, {"m": 28, "n": 45, "k": 45, "tile_m": 2, "tile_n": 5, "w": 16, "v": 40, "threads": 192, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 490.812, "source": "autotuned"}, {"m": 29, "n": 14, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 242.078, "source": "autotuned"}, {"m": 29, "n": 14, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 258.248, "source": "autotuned"}, {"m": 29, "n": 14, "k": 29, "tile_m": 2, "tile_n": 2, "w": 8, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 274.397, "source": "autotuned"}, {"m": 29, "n": 14, "k": 32, "tile_m": 2, "tile_n": 2, "w": 16, "v": 10, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 293.429, "source": "autotuned"}, {"m": 29, "n": 16, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 277.48, "source": "autotuned"}, {"m": 29, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 295.779, "source": "autotuned"}, {"m": 29, "n": 16, "k": 29, "tile_m": 2, "tile_n": 2, "w": 12, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 310.193, "source": "autotuned"}, {"m": 29, "n": 16, "k": 55, "tile_m": 2, "tile_n": 4, "w": 6, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 360.532, "source": "autotuned"}, {"m": 29, "n": 29, "k": 14, "tile_m": 2, "tile_n": 4, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 309.036, "source": "autotuned"}, {"m": 29, "n": 29, "k": 16, "tile_m": 4, "tile_n": 2, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 321.264, "source": "autotuned"}, {"m": 29, "n": 29, "k": 29, "tile_m": 2, "tile_n": 5, "w": 10, "v": 22, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 397.654, "source": "autotuned"}, {"m": 29, "n": 29, "k": 32, "tile_m": 2, "tile_n": 4, "w": 12, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 395.307, "source": "autotuned"}, {"m": 29, "n": 29, "k": 55, "tile_m": 2, "tile_n": 4, "w": 8, "v": 22, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 431.556, "source": "autotuned"}, {"m": 29, "n": 32, "k": 14, "tile_m": 3, "tile_n": 3, "w": 4, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 331.383, "source": "autotuned"}, {"m": 29, "n": 32, "k": 29, "tile_m": 4, "tile_n": 2, "w": 10, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 423.499, "source": "autotuned"}, {"m": 29, "n": 32, "k": 32, "tile_m": 2, "tile_n": 4, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 433.652, "source": "autotuned"}, {"m": 29, "n": 32, "k": 55, "tile_m": 2, "tile_n": 4, "w": 8, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 478.124, "source": "autotuned"}, {"m": 29, "n": 55, "k": 16, "tile_m": 4, "tile_n": 4, "w": 8, "v": 38, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 326.811, "source": "autotuned"}, {"m": 29, "n": 55, "k": 29, "tile_m": 5, "tile_n": 3, "w": 10, "v": 44, "threads": 160, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 384.341, "source": "autotuned"}, {"m": 29, "n": 55, "k": 32, "tile_m": 4, "tile_n": 4, "w": 8, "v": 34, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 424.502, "source": "autotuned"}, {"m": 29, "n": 55, "k": 55, "tile_m": 3, "tile_n": 5, "w": 6, "v": 30, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 465.271, "source": "autotuned"}, {"m": 32, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "w": 2, "v": 4, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 78.1605, "source": "autotuned"}, {"m": 32, "n": 4, "k": 5, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 75.2026, "source": "autotuned"}, {"m": 32, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 84.3077, "source": "autotuned"}, {"m": 32, "n": 4, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 95.6134, "source": "autotuned"}, {"m": 32, "n": 4, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 107.39, "source": "autotuned"}, {"m": 32, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 112.586, "source": "autotuned"}, {"m": 32, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 129.333, "source": "autotuned"}, {"m": 32, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 132.816, "source": "autotuned"}, {"m": 32, "n": 4, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 132.452, "source": "autotuned"}, {"m": 32, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 135.963, "source": "autotuned"}, {"m": 32, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 136.381, "source": "autotuned"}, {"m": 32, "n": 4, "k": 24, "tile_m": 1, "tile_n": 1, "w": 8, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 137.282, "source": "autotuned"}, {"m": 32, "n": 4, "k": 25, "tile_m": 1, "tile_n": 1, "w": 8, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 139.087, "source": "autotuned"}, {"m": 32, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "w": 12, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 140.533, "source": "autotuned"}, {"m": 32, "n": 4, "k": 28, "tile_m": 2, "tile_n": 1, "w": 14, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 143.079, "source": "autotuned"}, {"m": 32, "n": 4, "k": 32, "tile_m": 2, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 146.474, "source": "autotuned"}, {"m": 32, "n": 4, "k": 45, "tile_m": 2, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 148.211, "source": "autotuned"}, {"m": 32, "n": 5, "k": 4, "tile_m": 2, "tile_n": 1, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 86.8186, "source": "autotuned"}, {"m": 32, "n": 5, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 89.287, "source": "autotuned"}, {"m": 32, "n": 5, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 101.216, "source": "autotuned"}, {"m": 32, "n": 5, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 114.046, "source": "autotuned"}, {"m": 32, "n": 5, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 125.677, "source": "autotuned"}, {"m": 32, "n": 5, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 130.748, "source": "autotuned"}, {"m": 32, "n": 5, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 148.413, "source": "autotuned"}, {"m": 32, "n": 5, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 153.149, "source": "autotuned"}, {"m": 32, "n": 5, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 156.458, "source": "autotuned"}, {"m": 32, "n": 5, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 158.723, "source": "autotuned"}, {"m": 32, "n": 5, "k": 23, "tile_m": 2, "tile_n": 1, "w": 6, "v": 2, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 154.957, "source": "autotuned"}, {"m": 32, "n": 5, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 157.474, "source": "autotuned"}, {"m": 32, "n": 5, "k": 25, "tile_m": 2, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 164.898, "source": "autotuned"}, {"m": 32, "n": 5, "k": 26, "tile_m": 2, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 166.861, "source": "autotuned"}, {"m": 32, "n": 5, "k": 28, "tile_m": 2, "tile_n": 1, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 169.47, "source": "autotuned"}, {"m": 32, "n": 5, "k": 32, "tile_m": 2, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 174.113, "source": "autotuned"}, {"m": 32, "n": 5, "k": 45, "tile_m": 2, "tile_n": 1, "w": 16, "v": 4, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 177.946, "source": "autotuned"}, {"m": 32, "n": 6, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 97.4182, "source": "autotuned"}, {"m": 32, "n": 6, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 106.15, "source": "autotuned"}, {"m": 32, "n": 6, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 119.531, "source": "autotuned"}, {"m": 32, "n": 6, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 148.581, "source": "autotuned"}, {"m": 32, "n": 6, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 153.276, "source": "autotuned"}, {"m": 32, "n": 6, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 172.995, "source": "autotuned"}, {"m": 32, "n": 6, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 179.544, "source": "autotuned"}, {"m": 32, "n": 6, "k": 17, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 177.212, "source": "autotuned"}, {"m": 32, "n": 6, "k": 22, "tile_m": 2, "tile_n": 1, "w": 8, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 177.592, "source": "autotuned"}, {"m": 32, "n": 6, "k": 23, "tile_m": 2, "tile_n": 1, "w": 8, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 179.563, "source": "autotuned"}, {"m": 32, "n": 6, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 184.834, "source": "autotuned"}, {"m": 32, "n": 6, "k": 26, "tile_m": 2, "tile_n": 1, "w": 6, "v": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 181.915, "source": "autotuned"}, {"m": 32, "n": 6, "k": 32, "tile_m": 2, "tile_n": 1, "w": 8, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 191.164, "source": "autotuned"}, {"m": 32, "n": 7, "k": 4, "tile_m": 2, "tile_n": 2, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 113.424, "source": "autotuned"}, {"m": 32, "n": 7, "k": 5, "tile_m": 2, "tile_n": 2, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 112.889, "source": "autotuned"}, {"m": 32, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 139.831, "source": "autotuned"}, {"m": 32, "n": 7, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 162.492, "source": "autotuned"}, {"m": 32, "n": 7, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 191.194, "source": "autotuned"}, {"m": 32, "n": 7, "k": 25, "tile_m": 2, "tile_n": 2, "w": 12, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 216.084, "source": "autotuned"}, {"m": 32, "n": 7, "k": 26, "tile_m": 2, "tile_n": 2, "w": 10, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 218.187, "source": "autotuned"}, {"m": 32, "n": 7, "k": 28, "tile_m": 2, "tile_n": 2, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 222.478, "source": "autotuned"}, {"m": 32, "n": 7, "k": 32, "tile_m": 2, "tile_n": 2, "w": 12, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 228.388, "source": "autotuned"}, {"m": 32, "n": 7, "k": 45, "tile_m": 2, "tile_n": 2, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 233.435, "source": "autotuned"}, {"m": 32, "n": 8, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 125.786, "source": "autotuned"}, {"m": 32, "n": 8, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 129.29, "source": "autotuned"}, {"m": 32, "n": 8, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "small", "perf": 143.901, "source": "autotuned"}, {"m": 32, "n": 8, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 174.913, "source": "autotuned"}, {"m": 32, "n": 8, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 185.745, "source": "autotuned"}, {"m": 32, "n": 8, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 206.098, "source": "autotuned"}, {"m": 32, "n": 8, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 214.735, "source": "autotuned"}, {"m": 32, "n": 8, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 213.369, "source": "autotuned"}, {"m": 32, "n": 8, "k": 22, "tile_m": 2, "tile_n": 1, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 222.523, "source": "autotuned"}, {"m": 32, "n": 8, "k": 23, "tile_m": 2, "tile_n": 1, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 223.88, "source": "autotuned"}, {"m": 32, "n": 8, "k": 24, "tile_m": 2, "tile_n": 1, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 231.024, "source": "autotuned"}, {"m": 32, "n": 8, "k": 26, "tile_m": 2, "tile_n": 2, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 229.882, "source": "autotuned"}, {"m": 32, "n": 8, "k": 32, "tile_m": 2, "tile_n": 2, "w": 12, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 239.979, "source": "autotuned"}, {"m": 32, "n": 9, "k": 4, "tile_m": 2, "tile_n": 2, "w": 2, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 132.73, "source": "autotuned"}, {"m": 32, "n": 9, "k": 5, "tile_m": 2, "tile_n": 2, "w": 2, "v": 6, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 135.487, "source": "autotuned"}, {"m": 32, "n": 9, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 145.86, "source": "autotuned"}, {"m": 32, "n": 9, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 164.668, "source": "autotuned"}, {"m": 32, "n": 9, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 182.062, "source": "autotuned"}, {"m": 32, "n": 9, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 189.732, "source": "autotuned"}, {"m": 32, "n": 9, "k": 13, "tile_m": 1, "tile_n": 3, "w": 6, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 213.509, "source": "autotuned"}, {"m": 32, "n": 9, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 219.794, "source": "autotuned"}, {"m": 32, "n": 9, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 215.226, "source": "autotuned"}, {"m": 32, "n": 9, "k": 22, "tile_m": 1, "tile_n": 3, "w": 6, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 226.772, "source": "autotuned"}, {"m": 32, "n": 9, "k": 23, "tile_m": 2, "tile_n": 3, "w": 6, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 230.82, "source": "autotuned"}, {"m": 32, "n": 9, "k": 24, "tile_m": 1, "tile_n": 3, "w": 8, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 239.49, "source": "autotuned"}, {"m": 32, "n": 9, "k": 25, "tile_m": 2, "tile_n": 2, "w": 10, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 252.716, "source": "autotuned"}, {"m": 32, "n": 9, "k": 26, "tile_m": 2, "tile_n": 3, "w": 10, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 257.379, "source": "autotuned"}, {"m": 32, "n": 9, "k": 28, "tile_m": 1, "tile_n": 3, "w": 14, "v": 6, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 260.597, "source": "autotuned"}, {"m": 32, "n": 9, "k": 32, "tile_m": 2, "tile_n": 3, "w": 16, "v": 8, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 267.55, "source": "autotuned"}, {"m": 32, "n": 9, "k": 45, "tile_m": 1, "tile_n": 3, "w": 10, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 273.232, "source": "autotuned"}, {"m": 32, "n": 13, "k": 4, "tile_m": 2, "tile_n": 2, "w": 2, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 150.16, "source": "autotuned"}, {"m": 32, "n": 13, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 162.28, "source": "autotuned"}, {"m": 32, "n": 13, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 181.421, "source": "autotuned"}, {"m": 32, "n": 13, "k": 7, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 200.411, "source": "autotuned"}, {"m": 32, "n": 13, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 218.093, "source": "autotuned"}, {"m": 32, "n": 13, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 222.138, "source": "autotuned"}, {"m": 32, "n": 13, "k": 13, "tile_m": 2, "tile_n": 4, "w": 6, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 265.867, "source": "autotuned"}, {"m": 32, "n": 13, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 281.835, "source": "autotuned"}, {"m": 32, "n": 13, "k": 17, "tile_m": 2, "tile_n": 4, "w": 6, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 263.517, "source": "autotuned"}, {"m": 32, "n": 13, "k": 22, "tile_m": 2, "tile_n": 2, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 273.854, "source": "autotuned"}, {"m": 32, "n": 13, "k": 23, "tile_m": 2, "tile_n": 2, "w": 6, "v": 10, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 288.889, "source": "autotuned"}, {"m": 32, "n": 13, "k": 24, "tile_m": 2, "tile_n": 2, "w": 6, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 292.866, "source": "autotuned"}, {"m": 32, "n": 13, "k": 25, "tile_m": 4, "tile_n": 2, "w": 12, "v": 6, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 299.633, "source": "autotuned"}, {"m": 32, "n": 13, "k": 26, "tile_m": 2, "tile_n": 2, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 305.955, "source": "autotuned"}, {"m": 32, "n": 13, "k": 28, "tile_m": 2, "tile_n": 4, "w": 14, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 315.29, "source": "autotuned"}, {"m": 32, "n": 13, "k": 32, "tile_m": 4, "tile_n": 2, "w": 16, "v": 10, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 339.092, "source": "autotuned"}, {"m": 32, "n": 13, "k": 45, "tile_m": 2, "tile_n": 4, "w": 16, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 341.117, "source": "autotuned"}, {"m": 32, "n": 14, "k": 14, "tile_m": 2, "tile_n": 2, "w": 6, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 271.737, "source": "autotuned"}, {"m": 32, "n": 14, "k": 29, "tile_m": 2, "tile_n": 2, "w": 6, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 313.057, "source": "autotuned"}, {"m": 32, "n": 14, "k": 32, "tile_m": 2, "tile_n": 2, "w": 8, "v": 10, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 340.64, "source": "autotuned"}, {"m": 32, "n": 16, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 151.321, "source": "autotuned"}, {"m": 32, "n": 16, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 166.987, "source": "autotuned"}, {"m": 32, "n": 16, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 189.814, "source": "autotuned"}, {"m": 32, "n": 16, "k": 8, "tile_m": 2, "tile_n": 2, "w": 4, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 237.248, "source": "autotuned"}, {"m": 32, "n": 16, "k": 9, "tile_m": 2, "tile_n": 2, "w": 4, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 241.881, "source": "autotuned"}, {"m": 32, "n": 16, "k": 13, "tile_m": 2, "tile_n": 2, "w": 6, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 292.252, "source": "autotuned"}, {"m": 32, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 329.973, "source": "autotuned"}, {"m": 32, "n": 16, "k": 17, "tile_m": 2, "tile_n": 2, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 324.51, "source": "autotuned"}, {"m": 32, "n": 16, "k": 22, "tile_m": 2, "tile_n": 4, "w": 6, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 333.461, "source": "autotuned"}, {"m": 32, "n": 16, "k": 23, "tile_m": 2, "tile_n": 2, "w": 6, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 344.66, "source": "autotuned"}, {"m": 32, "n": 16, "k": 24, "tile_m": 2, "tile_n": 2, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 358.655, "source": "autotuned"}, {"m": 32, "n": 16, "k": 26, "tile_m": 2, "tile_n": 2, "w": 6, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 347.137, "source": "autotuned"}, {"m": 32, "n": 16, "k": 32, "tile_m": 2, "tile_n": 4, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 362.722, "source": "autotuned"}, {"m": 32, "n": 17, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 144.864, "source": "autotuned"}, {"m": 32, "n": 17, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 169.7, "source": "autotuned"}, {"m": 32, "n": 17, "k": 6, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 186.207, "source": "autotuned"}, {"m": 32, "n": 17, "k": 8, "tile_m": 2, "tile_n": 3, "w": 4, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 231.895, "source": "autotuned"}, {"m": 32, "n": 17, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 237.103, "source": "autotuned"}, {"m": 32, "n": 17, "k": 13, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 285.362, "source": "autotuned"}, {"m": 32, "n": 17, "k": 16, "tile_m": 2, "tile_n": 3, "w": 4, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 298.281, "source": "autotuned"}, {"m": 32, "n": 17, "k": 17, "tile_m": 2, "tile_n": 3, "w": 8, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 294.427, "source": "autotuned"}, {"m": 32, "n": 17, "k": 22, "tile_m": 2, "tile_n": 3, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 321.363, "source": "autotuned"}, {"m": 32, "n": 17, "k": 23, "tile_m": 2, "tile_n": 3, "w": 4, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 314.354, "source": "autotuned"}, {"m": 32, "n": 17, "k": 24, "tile_m": 2, "tile_n": 3, "w": 6, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 333.041, "source": "autotuned"}, {"m": 32, "n": 17, "k": 26, "tile_m": 2, "tile_n": 3, "w": 6, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 323.24, "source": "autotuned"}, {"m": 32, "n": 17, "k": 32, "tile_m": 2, "tile_n": 3, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 351.318, "source": "autotuned"}, {"m": 32, "n": 22, "k": 4, "tile_m": 3, "tile_n": 2, "w": 2, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 174.057, "source": "autotuned"}, {"m": 32, "n": 22, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 195.309, "source": "autotuned"}, {"m": 32, "n": 22, "k": 6, "tile_m": 3, "tile_n": 2, "w": 2, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 213.72, "source": "autotuned"}, {"m": 32, "n": 22, "k": 8, "tile_m": 4, "tile_n": 2, "w": 4, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 264.277, "source": "autotuned"}, {"m": 32, "n": 22, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 280.289, "source": "autotuned"}, {"m": 32, "n": 22, "k": 13, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 325.002, "source": "autotuned"}, {"m": 32, "n": 22, "k": 16, "tile_m": 3, "tile_n": 2, "w": 4, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 348.283, "source": "autotuned"}, {"m": 32, "n": 22, "k": 17, "tile_m": 2, "tile_n": 4, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 337.15, "source": "autotuned"}, {"m": 32, "n": 22, "k": 22, "tile_m": 3, "tile_n": 2, "w": 10, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 351.551, "source": "autotuned"}, {"m": 32, "n": 22, "k": 23, "tile_m": 4, "tile_n": 2, "w": 4, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 363.288, "source": "autotuned"}, {"m": 32, "n": 22, "k": 24, "tile_m": 2, "tile_n": 4, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 385.833, "source": "autotuned"}, {"m": 32, "n": 22, "k": 26, "tile_m": 2, "tile_n": 4, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 378.454, "source": "autotuned"}, {"m": 32, "n": 22, "k": 32, "tile_m": 2, "tile_n": 4, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 407.594, "source": "autotuned"}, {"m": 32, "n": 23, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 170.118, "source": "autotuned"}, {"m": 32, "n": 23, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 202.087, "source": "autotuned"}, {"m": 32, "n": 23, "k": 6, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 219.29, "source": "autotuned"}, {"m": 32, "n": 23, "k": 8, "tile_m": 4, "tile_n": 2, "w": 4, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 272.379, "source": "autotuned"}, {"m": 32, "n": 23, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 291.61, "source": "autotuned"}, {"m": 32, "n": 23, "k": 13, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 337.911, "source": "autotuned"}, {"m": 32, "n": 23, "k": 16, "tile_m": 2, "tile_n": 4, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 358.681, "source": "autotuned"}, {"m": 32, "n": 23, "k": 17, "tile_m": 2, "tile_n": 4, "w": 8, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 349.834, "source": "autotuned"}, {"m": 32, "n": 23, "k": 22, "tile_m": 2, "tile_n": 3, "w": 10, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 361.851, "source": "autotuned"}, {"m": 32, "n": 23, "k": 23, "tile_m": 4, "tile_n": 2, "w": 4, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 374.412, "source": "autotuned"}, {"m": 32, "n": 23, "k": 24, "tile_m": 2, "tile_n": 4, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 395.474, "source": "autotuned"}, {"m": 32, "n": 23, "k": 26, "tile_m": 2, "tile_n": 4, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 392.455, "source": "autotuned"}, {"m": 32, "n": 23, "k": 32, "tile_m": 2, "tile_n": 4, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 419.821, "source": "autotuned"}, {"m": 32, "n": 24, "k": 4, "tile_m": 4, "tile_n": 2, "w": 2, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 168.649, "source": "autotuned"}, {"m": 32, "n": 24, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 192.606, "source": "autotuned"}, {"m": 32, "n": 24, "k": 6, "tile_m": 4, "tile_n": 2, "w": 2, "v": 12, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 218.903, "source": "autotuned"}, {"m": 32, "n": 24, "k": 8, "tile_m": 2, "tile_n": 4, "w": 4, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 279.775, "source": "autotuned"}, {"m": 32, "n": 24, "k": 9, "tile_m": 3, "tile_n": 3, "w": 4, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 275.596, "source": "autotuned"}, {"m": 32, "n": 24, "k": 13, "tile_m": 2, "tile_n": 4, "w": 6, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 328.765, "source": "autotuned"}, {"m": 32, "n": 24, "k": 16, "tile_m": 2, "tile_n": 4, "w": 8, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 373.707, "source": "autotuned"}, {"m": 32, "n": 24, "k": 17, "tile_m": 2, "tile_n": 4, "w": 8, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 364.783, "source": "autotuned"}, {"m": 32, "n": 24, "k": 22, "tile_m": 2, "tile_n": 3, "w": 8, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 383.032, "source": "autotuned"}, {"m": 32, "n": 24, "k": 23, "tile_m": 2, "tile_n": 3, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 390.4, "source": "autotuned"}, {"m": 32, "n": 24, "k": 24, "tile_m": 2, "tile_n": 4, "w": 8, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 411.108, "source": "autotuned"}, {"m": 32, "n": 24, "k": 26, "tile_m": 2, "tile_n": 4, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 409.018, "source": "autotuned"}, {"m": 32, "n": 24, "k": 32, "tile_m": 2, "tile_n": 4, "w": 8, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 438.697, "source": "autotuned"}, {"m": 32, "n": 24, "k": 45, "tile_m": 2, "tile_n": 4, "w": 12, "v": 18, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 478.687, "source": "autotuned"}, {"m": 32, "n": 25, "k": 4, "tile_m": 4, "tile_n": 2, "w": 2, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 184.135, "source": "autotuned"}, {"m": 32, "n": 25, "k": 5, "tile_m": 5, "tile_n": 2, "w": 2, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 204.72, "source": "autotuned"}, {"m": 32, "n": 25, "k": 7, "tile_m": 5, "tile_n": 2, "w": 2, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 239.808, "source": "autotuned"}, {"m": 32, "n": 25, "k": 9, "tile_m": 2, "tile_n": 4, "w": 4, "v": 22, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 271.023, "source": "autotuned"}, {"m": 32, "n": 25, "k": 13, "tile_m": 2, "tile_n": 5, "w": 6, "v": 22, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 313.779, "source": "autotuned"}, {"m": 32, "n": 25, "k": 25, "tile_m": 4, "tile_n": 2, "w": 12, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 386.311, "source": "autotuned"}, {"m": 32, "n": 25, "k": 26, "tile_m": 2, "tile_n": 4, "w": 10, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 389.664, "source": "autotuned"}, {"m": 32, "n": 25, "k": 28, "tile_m": 2, "tile_n": 5, "w": 14, "v": 24, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 397.586, "source": "autotuned"}, {"m": 32, "n": 25, "k": 32, "tile_m": 4, "tile_n": 2, "w": 16, "v": 24, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 409.68, "source": "autotuned"}, {"m": 32, "n": 25, "k": 45, "tile_m": 2, "tile_n": 5, "w": 12, "v": 10, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 426.761, "source": "autotuned"}, {"m": 32, "n": 26, "k": 4, "tile_m": 4, "tile_n": 2, "w": 2, "v": 18, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 190.663, "source": "autotuned"}, {"m": 32, "n": 26, "k": 5, "tile_m": 5, "tile_n": 2, "w": 2, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 211.617, "source": "autotuned"}, {"m": 32, "n": 26, "k": 6, "tile_m": 5, "tile_n": 2, "w": 2, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 220.557, "source": "autotuned"}, {"m": 32, "n": 26, "k": 7, "tile_m": 5, "tile_n": 2, "w": 2, "v": 14, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 246.023, "source": "autotuned"}, {"m": 32, "n": 26, "k": 8, "tile_m": 3, "tile_n": 3, "w": 4, "v": 22, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 246.38, "source": "autotuned"}, {"m": 32, "n": 26, "k": 9, "tile_m": 2, "tile_n": 4, "w": 4, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 280.415, "source": "autotuned"}, {"m": 32, "n": 26, "k": 13, "tile_m": 2, "tile_n": 4, "w": 4, "v": 22, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 323.047, "source": "autotuned"}, {"m": 32, "n": 26, "k": 16, "tile_m": 2, "tile_n": 4, "w": 8, "v": 22, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 336.964, "source": "autotuned"}, {"m": 32, "n": 26, "k": 17, "tile_m": 4, "tile_n": 2, "w": 6, "v": 22, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 335.578, "source": "autotuned"}, {"m": 32, "n": 26, "k": 22, "tile_m": 2, "tile_n": 4, "w": 8, "v": 22, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 363.449, "source": "autotuned"}, {"m": 32, "n": 26, "k": 23, "tile_m": 2, "tile_n": 4, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 370.605, "source": "autotuned"}, {"m": 32, "n": 26, "k": 24, "tile_m": 4, "tile_n": 2, "w": 12, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 386.132, "source": "autotuned"}, {"m": 32, "n": 26, "k": 25, "tile_m": 2, "tile_n": 4, "w": 12, "v": 18, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 398.053, "source": "autotuned"}, {"m": 32, "n": 26, "k": 26, "tile_m": 4, "tile_n": 2, "w": 12, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 399.369, "source": "autotuned"}, {"m": 32, "n": 26, "k": 28, "tile_m": 4, "tile_n": 2, "w": 12, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 407.816, "source": "autotuned"}, {"m": 32, "n": 26, "k": 32, "tile_m": 4, "tile_n": 2, "w": 16, "v": 26, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 425.774, "source": "autotuned"}, {"m": 32, "n": 26, "k": 45, "tile_m": 2, "tile_n": 5, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 446.509, "source": "autotuned"}, {"m": 32, "n": 28, "k": 4, "tile_m": 4, "tile_n": 2, "w": 2, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 201.528, "source": "autotuned"}, {"m": 32, "n": 28, "k": 5, "tile_m": 4, "tile_n": 2, "w": 2, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 209.83, "source": "autotuned"}, {"m": 32, "n": 28, "k": 7, "tile_m": 4, "tile_n": 2, "w": 2, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 243.583, "source": "autotuned"}, {"m": 32, "n": 28, "k": 9, "tile_m": 2, "tile_n": 4, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 296.73, "source": "autotuned"}, {"m": 32, "n": 28, "k": 13, "tile_m": 2, "tile_n": 4, "w": 4, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 340.313, "source": "autotuned"}, {"m": 32, "n": 28, "k": 25, "tile_m": 2, "tile_n": 4, "w": 12, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 425.713, "source": "autotuned"}, {"m": 32, "n": 28, "k": 26, "tile_m": 4, "tile_n": 2, "w": 12, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 426.391, "source": "autotuned"}, {"m": 32, "n": 28, "k": 28, "tile_m": 4, "tile_n": 2, "w": 12, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 434.061, "source": "autotuned"}, {"m": 32, "n": 28, "k": 32, "tile_m": 4, "tile_n": 2, "w": 16, "v": 28, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 453.918, "source": "autotuned"}, {"m": 32, "n": 28, "k": 45, "tile_m": 2, "tile_n": 5, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 474.442, "source": "autotuned"}, {"m": 32, "n": 29, "k": 14, "tile_m": 2, "tile_n": 4, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 343.714, "source": "autotuned"}, {"m": 32, "n": 29, "k": 29, "tile_m": 2, "tile_n": 4, "w": 10, "v": 18, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 425.393, "source": "autotuned"}, {"m": 32, "n": 29, "k": 32, "tile_m": 2, "tile_n": 4, "w": 12, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 439.946, "source": "autotuned"}, {"m": 32, "n": 29, "k": 55, "tile_m": 2, "tile_n": 4, "w": 12, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 487.985, "source": "autotuned"}, {"m": 32, "n": 32, "k": 4, "tile_m": 4, "tile_n": 2, "w": 2, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 220.256, "source": "autotuned"}, {"m": 32, "n": 32, "k": 5, "tile_m": 4, "tile_n": 2, "w": 2, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 233.012, "source": "autotuned"}, {"m": 32, "n": 32, "k": 6, "tile_m": 4, "tile_n": 2, "w": 2, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 233.277, "source": "autotuned"}, {"m": 32, "n": 32, "k": 7, "tile_m": 4, "tile_n": 2, "w": 2, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 269.642, "source": "autotuned"}, {"m": 32, "n": 32, "k": 8, "tile_m": 3, "tile_n": 3, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 288.605, "source": "autotuned"}, {"m": 32, "n": 32, "k": 9, "tile_m": 2, "tile_n": 4, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 330.576, "source": "autotuned"}, {"m": 32, "n": 32, "k": 13, "tile_m": 2, "tile_n": 4, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 378.511, "source": "autotuned"}, {"m": 32, "n": 32, "k": 14, "tile_m": 2, "tile_n": 4, "w": 6, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 370.201, "source": "autotuned"}, {"m": 32, "n": 32, "k": 16, "tile_m": 2, "tile_n": 4, "w": 8, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 415.932, "source": "autotuned"}, {"m": 32, "n": 32, "k": 17, "tile_m": 2, "tile_n": 4, "w": 8, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 408.083, "source": "autotuned"}, {"m": 32, "n": 32, "k": 22, "tile_m": 2, "tile_n": 4, "w": 8, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 439.077, "source": "autotuned"}, {"m": 32, "n": 32, "k": 23, "tile_m": 2, "tile_n": 4, "w": 8, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 450.644, "source": "autotuned"}, {"m": 32, "n": 32, "k": 24, "tile_m": 2, "tile_n": 4, "w": 8, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 457.257, "source": "autotuned"}, {"m": 32, "n": 32, "k": 25, "tile_m": 4, "tile_n": 2, "w": 12, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 471.97, "source": "autotuned"}, {"m": 32, "n": 32, "k": 26, "tile_m": 2, "tile_n": 4, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 482.604, "source": "autotuned"}, {"m": 32, "n": 32, "k": 28, "tile_m": 2, "tile_n": 4, "w": 10, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 485.43, "source": "autotuned"}, {"m": 32, "n": 32, "k": 29, "tile_m": 2, "tile_n": 4, "w": 10, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 470.358, "source": "autotuned"}, {"m": 32, "n": 32, "k": 32, "tile_m": 2, "tile_n": 4, "w": 12, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 509.322, "source": "autotuned"}, {"m": 32, "n": 32, "k": 45, "tile_m": 2, "tile_n": 4, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 526.52, "source": "autotuned"}, {"m": 32, "n": 32, "k": 55, "tile_m": 2, "tile_n": 4, "w": 8, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 531.47, "source": "autotuned"}, {"m": 32, "n": 45, "k": 4, "tile_m": 4, "tile_n": 2, "w": 2, "v": 34, "threads": 192, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 193.676, "source": "autotuned"}, {"m": 32, "n": 45, "k": 5, "tile_m": 4, "tile_n": 2, "w": 2, "v": 24, "threads": 192, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 201.497, "source": "autotuned"}, {"m": 32, "n": 45, "k": 7, "tile_m": 2, "tile_n": 3, "threads": 256, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 238.295, "source": "autotuned"}, {"m": 32, "n": 45, "k": 9, "tile_m": 4, "tile_n": 3, "w": 4, "v": 28, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 315.514, "source": "autotuned"}, {"m": 32, "n": 45, "k": 13, "tile_m": 4, "tile_n": 3, "w": 6, "v": 24, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 372.936, "source": "autotuned"}, {"m": 32, "n": 45, "k": 25, "tile_m": 4, "tile_n": 3, "w": 8, "v": 20, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 481.689, "source": "autotuned"}, {"m": 32, "n": 45, "k": 26, "tile_m": 4, "tile_n": 3, "w": 12, "v": 24, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 483.916, "source": "autotuned"}, {"m": 32, "n": 45, "k": 28, "tile_m": 4, "tile_n": 3, "w": 14, "v": 28, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 503.765, "source": "autotuned"}, {"m": 32, "n": 45, "k": 32, "tile_m": 4, "tile_n": 3, "w": 8, "v": 28, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 523.025, "source": "autotuned"}, {"m": 32, "n": 45, "k": 45, "tile_m": 4, "tile_n": 3, "w": 12, "v": 32, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 536.898, "source": "autotuned"}, {"m": 32, "n": 55, "k": 29, "tile_m": 4, "tile_n": 4, "w": 8, "v": 36, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 447.064, "source": "autotuned"}, {"m": 32, "n": 55, "k": 32, "tile_m": 4, "tile_n": 4, "w": 4, "v": 26, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 477.495, "source": "autotuned"}, {"m": 32, "n": 55, "k": 55, "tile_m": 3, "tile_n": 5, "w": 6, "v": 24, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 518.157, "source": "autotuned"}, {"m": 36, "n": 6, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 113.312, "source": "autotuned"}, {"m": 45, "n": 4, "k": 4, "tile_m": 1, "tile_n": 2, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 90.7503, "source": "autotuned"}, {"m": 45, "n": 4, "k": 5, "tile_m": 1, "tile_n": 2, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 88.8845, "source": "autotuned"}, {"m": 45, "n": 4, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 109.043, "source": "autotuned"}, {"m": 45, "n": 4, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 119.668, "source": "autotuned"}, {"m": 45, "n": 4, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 126.187, "source": "autotuned"}, {"m": 45, "n": 4, "k": 25, "tile_m": 1, "tile_n": 2, "w": 10, "v": 2, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 142.394, "source": "autotuned"}, {"m": 45, "n": 4, "k": 26, "tile_m": 1, "tile_n": 2, "w": 10, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 143.612, "source": "autotuned"}, {"m": 45, "n": 4, "k": 28, "tile_m": 3, "tile_n": 1, "w": 14, "v": 4, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 147.113, "source": "autotuned"}, {"m": 45, "n": 4, "k": 32, "tile_m": 1, "tile_n": 2, "w": 8, "v": 4, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 149.4, "source": "autotuned"}, {"m": 45, "n": 4, "k": 45, "tile_m": 1, "tile_n": 2, "w": 12, "v": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 150.684, "source": "autotuned"}, {"m": 45, "n": 5, "k": 4, "tile_m": 3, "tile_n": 1, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 101.474, "source": "autotuned"}, {"m": 45, "n": 5, "k": 5, "tile_m": 3, "tile_n": 1, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 101.829, "source": "autotuned"}, {"m": 45, "n": 5, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 124.597, "source": "autotuned"}, {"m": 45, "n": 5, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 138.834, "source": "autotuned"}, {"m": 45, "n": 5, "k": 13, "tile_m": 3, "tile_n": 1, "w": 6, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 148.846, "source": "autotuned"}, {"m": 45, "n": 5, "k": 25, "tile_m": 3, "tile_n": 1, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 168.184, "source": "autotuned"}, {"m": 45, "n": 5, "k": 26, "tile_m": 3, "tile_n": 1, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 171.306, "source": "autotuned"}, {"m": 45, "n": 5, "k": 28, "tile_m": 3, "tile_n": 2, "w": 14, "v": 4, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 173.248, "source": "autotuned"}, {"m": 45, "n": 5, "k": 32, "tile_m": 1, "tile_n": 3, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 179.706, "source": "autotuned"}, {"m": 45, "n": 5, "k": 45, "tile_m": 3, "tile_n": 1, "w": 12, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 180.372, "source": "autotuned"}, {"m": 45, "n": 7, "k": 4, "tile_m": 2, "tile_n": 2, "w": 2, "v": 4, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 120.397, "source": "autotuned"}, {"m": 45, "n": 7, "k": 5, "tile_m": 2, "tile_n": 2, "w": 2, "v": 6, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 130.96, "source": "autotuned"}, {"m": 45, "n": 7, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 150.737, "source": "autotuned"}, {"m": 45, "n": 7, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 173.029, "source": "autotuned"}, {"m": 45, "n": 7, "k": 13, "tile_m": 3, "tile_n": 2, "w": 6, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 191.272, "source": "autotuned"}, {"m": 45, "n": 7, "k": 25, "tile_m": 3, "tile_n": 2, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 222.433, "source": "autotuned"}, {"m": 45, "n": 7, "k": 26, "tile_m": 3, "tile_n": 2, "w": 8, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 220.248, "source": "autotuned"}, {"m": 45, "n": 7, "k": 28, "tile_m": 3, "tile_n": 2, "w": 14, "v": 6, "threads": 160, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 229.232, "source": "autotuned"}, {"m": 45, "n": 7, "k": 32, "tile_m": 3, "tile_n": 2, "w": 16, "v": 6, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 232.684, "source": "autotuned"}, {"m": 45, "n": 7, "k": 45, "tile_m": 5, "tile_n": 1, "w": 8, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 240.56, "source": "autotuned"}, {"m": 45, "n": 9, "k": 4, "tile_m": 3, "tile_n": 2, "w": 2, "v": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 130.378, "source": "autotuned"}, {"m": 45, "n": 9, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 142.506, "source": "autotuned"}, {"m": 45, "n": 9, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 167.682, "source": "autotuned"}, {"m": 45, "n": 9, "k": 9, "tile_m": 3, "tile_n": 2, "w": 4, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 190.947, "source": "autotuned"}, {"m": 45, "n": 9, "k": 13, "tile_m": 3, "tile_n": 2, "w": 6, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 223.144, "source": "autotuned"}, {"m": 45, "n": 9, "k": 25, "tile_m": 3, "tile_n": 2, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 258.374, "source": "autotuned"}, {"m": 45, "n": 9, "k": 26, "tile_m": 3, "tile_n": 2, "w": 10, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 260.559, "source": "autotuned"}, {"m": 45, "n": 9, "k": 28, "tile_m": 3, "tile_n": 2, "w": 10, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 266.255, "source": "autotuned"}, {"m": 45, "n": 9, "k": 32, "tile_m": 3, "tile_n": 2, "w": 12, "v": 6, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 271.239, "source": "autotuned"}, {"m": 45, "n": 9, "k": 45, "tile_m": 3, "tile_n": 2, "w": 8, "v": 8, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 288.261, "source": "autotuned"}, {"m": 45, "n": 13, "k": 4, "tile_m": 5, "tile_n": 1, "w": 2, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 161.582, "source": "autotuned"}, {"m": 45, "n": 13, "k": 5, "tile_m": 3, "tile_n": 2, "w": 2, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 174.113, "source": "autotuned"}, {"m": 45, "n": 13, "k": 7, "tile_m": 5, "tile_n": 2, "w": 2, "v": 10, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 201.625, "source": "autotuned"}, {"m": 45, "n": 13, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 234.915, "source": "autotuned"}, {"m": 45, "n": 13, "k": 13, "tile_m": 3, "tile_n": 2, "w": 6, "v": 8, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 255.57, "source": "autotuned"}, {"m": 45, "n": 13, "k": 24, "tile_m": 5, "tile_n": 2, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 327.987, "source": "autotuned"}, {"m": 45, "n": 13, "k": 25, "tile_m": 3, "tile_n": 2, "w": 12, "v": 6, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 314.759, "source": "autotuned"}, {"m": 45, "n": 13, "k": 26, "tile_m": 3, "tile_n": 2, "w": 12, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 320.527, "source": "autotuned"}, {"m": 45, "n": 13, "k": 28, "tile_m": 5, "tile_n": 2, "w": 10, "v": 10, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 333.834, "source": "autotuned"}, {"m": 45, "n": 13, "k": 32, "tile_m": 5, "tile_n": 2, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 346.121, "source": "autotuned"}, {"m": 45, "n": 13, "k": 45, "tile_m": 5, "tile_n": 2, "w": 12, "v": 12, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 371.646, "source": "autotuned"}, {"m": 45, "n": 24, "k": 13, "tile_m": 3, "tile_n": 3, "w": 6, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 369.651, "source": "autotuned"}, {"m": 45, "n": 24, "k": 24, "tile_m": 3, "tile_n": 3, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 456.36, "source": "autotuned"}, {"m": 45, "n": 24, "k": 32, "tile_m": 3, "tile_n": 3, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 476.863, "source": "autotuned"}, {"m": 45, "n": 24, "k": 45, "tile_m": 3, "tile_n": 4, "w": 8, "v": 16, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 507.03, "source": "autotuned"}, {"m": 45, "n": 25, "k": 4, "tile_m": 6, "tile_n": 2, "w": 2, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 181.279, "source": "autotuned"}, {"m": 45, "n": 25, "k": 5, "tile_m": 5, "tile_n": 2, "w": 2, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 210.509, "source": "autotuned"}, {"m": 45, "n": 25, "k": 7, "tile_m": 5, "tile_n": 2, "w": 2, "v": 14, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 229.999, "source": "autotuned"}, {"m": 45, "n": 25, "k": 9, "tile_m": 5, "tile_n": 2, "w": 4, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 293.374, "source": "autotuned"}, {"m": 45, "n": 25, "k": 13, "tile_m": 5, "tile_n": 2, "w": 4, "v": 14, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 304.438, "source": "autotuned"}, {"m": 45, "n": 25, "k": 25, "tile_m": 3, "tile_n": 4, "w": 10, "v": 22, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 377.937, "source": "autotuned"}, {"m": 45, "n": 25, "k": 26, "tile_m": 3, "tile_n": 4, "w": 10, "v": 24, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 376.764, "source": "autotuned"}, {"m": 45, "n": 25, "k": 28, "tile_m": 5, "tile_n": 2, "w": 14, "v": 24, "threads": 192, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 394.568, "source": "autotuned"}, {"m": 45, "n": 25, "k": 32, "tile_m": 3, "tile_n": 4, "w": 16, "v": 24, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 419.218, "source": "autotuned"}, {"m": 45, "n": 25, "k": 45, "tile_m": 5, "tile_n": 2, "w": 16, "v": 24, "threads": 192, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 435.39, "source": "autotuned"}, {"m": 45, "n": 26, "k": 4, "tile_m": 6, "tile_n": 2, "w": 2, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 184.281, "source": "autotuned"}, {"m": 45, "n": 26, "k": 5, "tile_m": 5, "tile_n": 2, "w": 2, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 211.405, "source": "autotuned"}, {"m": 45, "n": 26, "k": 7, "tile_m": 5, "tile_n": 2, "w": 2, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 242.135, "source": "autotuned"}, {"m": 45, "n": 26, "k": 9, "tile_m": 5, "tile_n": 2, "w": 2, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 277.095, "source": "autotuned"}, {"m": 45, "n": 26, "k": 13, "tile_m": 5, "tile_n": 2, "w": 4, "v": 22, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 322.208, "source": "autotuned"}, {"m": 45, "n": 26, "k": 25, "tile_m": 5, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 394.731, "source": "autotuned"}, {"m": 45, "n": 26, "k": 26, "tile_m": 5, "tile_n": 2, "w": 4, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 401.24, "source": "autotuned"}, {"m": 45, "n": 26, "k": 28, "tile_m": 5, "tile_n": 2, "w": 4, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 436.355, "source": "autotuned"}, {"m": 45, "n": 26, "k": 32, "tile_m": 5, "tile_n": 2, "w": 4, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 444.707, "source": "autotuned"}, {"m": 45, "n": 26, "k": 45, "tile_m": 5, "tile_n": 2, "w": 4, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 470.147, "source": "autotuned"}, {"m": 45, "n": 28, "k": 4, "tile_m": 6, "tile_n": 2, "w": 2, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 196.839, "source": "autotuned"}, {"m": 45, "n": 28, "k": 5, "tile_m": 5, "tile_n": 2, "w": 2, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 224.568, "source": "autotuned"}, {"m": 45, "n": 28, "k": 7, "tile_m": 5, "tile_n": 2, "w": 2, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 263.736, "source": "autotuned"}, {"m": 45, "n": 28, "k": 9, "tile_m": 5, "tile_n": 2, "w": 2, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 293.355, "source": "autotuned"}, {"m": 45, "n": 28, "k": 13, "tile_m": 5, "tile_n": 2, "w": 4, "v": 14, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 340.659, "source": "autotuned"}, {"m": 45, "n": 28, "k": 25, "tile_m": 5, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 422.701, "source": "autotuned"}, {"m": 45, "n": 28, "k": 26, "tile_m": 5, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 427.927, "source": "autotuned"}, {"m": 45, "n": 28, "k": 28, "tile_m": 5, "tile_n": 2, "w": 4, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 465.948, "source": "autotuned"}, {"m": 45, "n": 28, "k": 32, "tile_m": 5, "tile_n": 2, "w": 4, "v": 10, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 474.663, "source": "autotuned"}, {"m": 45, "n": 28, "k": 45, "tile_m": 5, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 500.869, "source": "autotuned"}, {"m": 45, "n": 32, "k": 4, "tile_m": 6, "tile_n": 2, "w": 2, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 218.515, "source": "autotuned"}, {"m": 45, "n": 32, "k": 5, "tile_m": 6, "tile_n": 2, "w": 2, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 224.185, "source": "autotuned"}, {"m": 45, "n": 32, "k": 7, "tile_m": 6, "tile_n": 2, "w": 2, "v": 10, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 257.346, "source": "autotuned"}, {"m": 45, "n": 32, "k": 9, "tile_m": 6, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 300.997, "source": "autotuned"}, {"m": 45, "n": 32, "k": 13, "tile_m": 3, "tile_n": 4, "w": 6, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 370.865, "source": "autotuned"}, {"m": 45, "n": 32, "k": 24, "tile_m": 3, "tile_n": 4, "w": 12, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 474.921, "source": "autotuned"}, {"m": 45, "n": 32, "k": 25, "tile_m": 3, "tile_n": 4, "w": 12, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 459.048, "source": "autotuned"}, {"m": 45, "n": 32, "k": 26, "tile_m": 3, "tile_n": 4, "w": 12, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 472.758, "source": "autotuned"}, {"m": 45, "n": 32, "k": 28, "tile_m": 3, "tile_n": 4, "w": 14, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 494.885, "source": "autotuned"}, {"m": 45, "n": 32, "k": 32, "tile_m": 3, "tile_n": 4, "w": 12, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 504.584, "source": "autotuned"}, {"m": 45, "n": 32, "k": 45, "tile_m": 3, "tile_n": 4, "w": 12, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 536.655, "source": "autotuned"}, {"m": 45, "n": 45, "k": 4, "tile_m": 6, "tile_n": 2, "w": 2, "v": 28, "threads": 256, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 178.318, "source": "autotuned"}, {"m": 45, "n": 45, "k": 5, "tile_m": 5, "tile_n": 2, "w": 2, "v": 28, "threads": 256, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 199.013, "source": "autotuned"}, {"m": 45, "n": 45, "k": 7, "tile_m": 3, "tile_n": 2, "w": 2, "v": 30, "threads": 352, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 229.112, "source": "autotuned"}, {"m": 45, "n": 45, "k": 9, "tile_m": 3, "tile_n": 3, "w": 4, "v": 28, "threads": 256, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 291.982, "source": "autotuned"}, {"m": 45, "n": 45, "k": 13, "tile_m": 3, "tile_n": 6, "w": 6, "v": 24, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 360.044, "source": "autotuned"}, {"m": 45, "n": 45, "k": 24, "tile_m": 6, "tile_n": 3, "w": 12, "v": 28, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 456.144, "source": "autotuned"}, {"m": 45, "n": 45, "k": 25, "tile_m": 6, "tile_n": 3, "w": 10, "v": 28, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 450.391, "source": "autotuned"}, {"m": 45, "n": 45, "k": 26, "tile_m": 3, "tile_n": 6, "w": 10, "v": 28, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 457.692, "source": "autotuned"}, {"m": 45, "n": 45, "k": 28, "tile_m": 3, "tile_n": 6, "w": 14, "v": 22, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 480.917, "source": "autotuned"}, {"m": 45, "n": 45, "k": 32, "tile_m": 3, "tile_n": 6, "w": 16, "v": 28, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 511.25, "source": "autotuned"}, {"m": 45, "n": 45, "k": 45, "tile_m": 3, "tile_n": 6, "w": 16, "v": 28, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 534.417, "source": "autotuned"}, {"m": 49, "n": 7, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 145.44, "source": "autotuned"}, {"m": 55, "n": 16, "k": 16, "tile_m": 3, "tile_n": 3, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 322.352, "source": "autotuned"}, {"m": 55, "n": 16, "k": 29, "tile_m": 3, "tile_n": 3, "w": 6, "v": 8, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 369.726, "source": "autotuned"}, {"m": 55, "n": 16, "k": 55, "tile_m": 5, "tile_n": 2, "w": 6, "v": 12, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 426.451, "source": "autotuned"}, {"m": 55, "n": 29, "k": 16, "tile_m": 3, "tile_n": 5, "w": 8, "v": 20, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 339.155, "source": "autotuned"}, {"m": 55, "n": 29, "k": 29, "tile_m": 3, "tile_n": 5, "w": 10, "v": 26, "threads": 160, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 383.513, "source": "autotuned"}, {"m": 55, "n": 29, "k": 32, "tile_m": 3, "tile_n": 5, "w": 8, "v": 20, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 427.971, "source": "autotuned"}, {"m": 55, "n": 29, "k": 55, "tile_m": 3, "tile_n": 5, "w": 6, "v": 20, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 466.603, "source": "autotuned"}, {"m": 55, "n": 32, "k": 29, "tile_m": 5, "tile_n": 3, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 421.352, "source": "autotuned"}, {"m": 55, "n": 32, "k": 32, "tile_m": 5, "tile_n": 3, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 461.927, "source": "autotuned"}, {"m": 55, "n": 32, "k": 55, "tile_m": 5, "tile_n": 3, "w": 6, "v": 20, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 500.36, "source": "autotuned"}, {"m": 55, "n": 55, "k": 16, "tile_m": 5, "tile_n": 5, "w": 6, "v": 26, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 361.626, "source": "autotuned"}, {"m": 55, "n": 55, "k": 29, "tile_m": 5, "tile_n": 5, "w": 10, "v": 30, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 408.729, "source": "autotuned"}, {"m": 55, "n": 55, "k": 32, "tile_m": 5, "tile_n": 5, "w": 6, "v": 26, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 501.123, "source": "autotuned"}, {"m": 55, "n": 55, "k": 55, "tile_m": 5, "tile_n": 5, "w": 6, "v": 26, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 588.05, "source": "autotuned"}, {"m": 64, "n": 8, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 213.145, "source": "autotuned"}, {"m": 64, "n": 9, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 240.201, "source": "autotuned"}, {"m": 64, "n": 9, "k": 16, "tile_m": 2, "tile_n": 3, "w": 4, "v": 6, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 263.151, "source": "autotuned"}, {"m": 64, "n": 9, "k": 22, "tile_m": 2, "tile_n": 3, "w": 6, "v": 4, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB1", "perf": 286.988, "source": "autotuned"}, {"m": 64, "n": 9, "k": 64, "tile_m": 2, "tile_n": 3, "w": 10, "v": 8, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 319.492, "source": "autotuned"}, {"m": 64, "n": 16, "k": 9, "tile_m": 2, "tile_n": 4, "w": 4, "v": 10, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 283.571, "source": "autotuned"}, {"m": 64, "n": 16, "k": 16, "tile_m": 2, "tile_n": 4, "w": 8, "v": 10, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 379.404, "source": "autotuned"}, {"m": 64, "n": 16, "k": 22, "tile_m": 2, "tile_n": 4, "w": 8, "v": 8, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 408.89, "source": "autotuned"}, {"m": 64, "n": 16, "k": 64, "tile_m": 2, "tile_n": 4, "w": 8, "v": 10, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 501.245, "source": "autotuned"}, {"m": 64, "n": 22, "k": 9, "tile_m": 6, "tile_n": 2, "w": 4, "v": 12, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 271.107, "source": "autotuned"}, {"m": 64, "n": 22, "k": 16, "tile_m": 2, "tile_n": 6, "w": 8, "v": 14, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 369.789, "source": "autotuned"}, {"m": 64, "n": 22, "k": 22, "tile_m": 6, "tile_n": 2, "w": 4, "v": 12, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 383.088, "source": "autotuned"}, {"m": 64, "n": 22, "k": 64, "tile_m": 2, "tile_n": 6, "w": 8, "v": 2, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 507.361, "source": "autotuned"}, {"m": 64, "n": 64, "k": 9, "tile_m": 4, "tile_n": 4, "w": 4, "v": 16, "threads": 256, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 271.502, "source": "autotuned"}, {"m": 64, "n": 64, "k": 16, "tile_m": 4, "tile_n": 4, "w": 6, "v": 16, "threads": 256, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 363.539, "source": "autotuned"}, {"m": 64, "n": 64, "k": 22, "tile_m": 4, "tile_n": 4, "w": 8, "v": 16, "threads": 256, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 410.791, "source": "autotuned"}, {"m": 64, "n": 64, "k": 64, "tile_m": 3, "tile_n": 6, "w": 16, "v": 32, "threads": 256, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 563.614, "source": "autotuned"}, {"m": 78, "n": 78, "k": 78, "tile_m": 5, "tile_n": 5, "w": 8, "v": 26, "threads": 256, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 589.26, "source": "autotuned"} ] ================================================ FILE: src/acc/libsmm_acc/parameters/parameters_K40.json ================================================ [ {"m": 5, "n": 5, "k": 5, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 30.4899, "source": "autotuned"}, {"m": 6, "n": 6, "k": 6, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 44.1711, "source": "autotuned"}, {"m": 7, "n": 7, "k": 7, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 64.2483, "source": "autotuned"}, {"m": 8, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 95.1028, "source": "autotuned"}, {"m": 9, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 111.384, "source": "autotuned"}, {"m": 10, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 132.089, "source": "autotuned"}, {"m": 11, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 162.566, "source": "autotuned"}, {"m": 12, "n": 12, "k": 12, "tile_m": 1, "tile_n": 2, "w": 6, "v": 8, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 174.853, "source": "autotuned"}, {"m": 13, "n": 13, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "small", "perf": 184.195, "source": "autotuned"}, {"m": 14, "n": 14, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 205.751, "source": "autotuned"}, {"m": 15, "n": 15, "k": 15, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 221.72, "source": "autotuned"}, {"m": 16, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 279.888, "source": "autotuned"}, {"m": 17, "n": 17, "k": 17, "tile_m": 2, "tile_n": 2, "w": 6, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 248.155, "source": "autotuned"}, {"m": 22, "n": 22, "k": 22, "tile_m": 3, "tile_n": 2, "w": 8, "v": 22, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 354.045, "source": "autotuned"}, {"m": 23, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "w": 8, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 384.495, "source": "autotuned"}, {"m": 24, "n": 24, "k": 24, "tile_m": 3, "tile_n": 2, "w": 8, "v": 20, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 439.977, "source": "autotuned"}, {"m": 26, "n": 26, "k": 26, "tile_m": 2, "tile_n": 3, "w": 12, "v": 26, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 405.2, "source": "autotuned"}, {"m": 29, "n": 29, "k": 29, "tile_m": 2, "tile_n": 5, "w": 10, "v": 16, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 426.072, "source": "autotuned"}, {"m": 32, "n": 32, "k": 32, "tile_m": 2, "tile_n": 4, "w": 12, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 530.707, "source": "autotuned"} ] ================================================ FILE: src/acc/libsmm_acc/parameters/parameters_K80.json ================================================ [ {"m": 5, "n": 5, "k": 5, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 33.4544, "source": "autotuned"}, {"m": 6, "n": 6, "k": 6, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 47.3645, "source": "autotuned"}, {"m": 7, "n": 7, "k": 7, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 70.7194, "source": "autotuned"}, {"m": 8, "n": 8, "k": 8, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "tiny", "perf": 103.662, "source": "autotuned"}, {"m": 9, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "small", "perf": 117.001, "source": "autotuned"}, {"m": 10, "n": 10, "k": 10, "tile_m": 2, "tile_n": 1, "w": 4, "v": 10, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 115.19, "source": "autotuned"}, {"m": 11, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "small", "perf": 168.009, "source": "autotuned"}, {"m": 12, "n": 12, "k": 12, "tile_m": 3, "tile_n": 2, "w": 6, "v": 12, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 193.79, "source": "autotuned"}, {"m": 13, "n": 13, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 204.17, "source": "autotuned"}, {"m": 14, "n": 14, "k": 14, "tile_m": 4, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 239.224, "source": "autotuned"}, {"m": 15, "n": 15, "k": 15, "tile_m": 4, "tile_n": 2, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 275.724, "source": "autotuned"}, {"m": 16, "n": 16, "k": 16, "tile_m": 4, "tile_n": 2, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 322.824, "source": "autotuned"}, {"m": 17, "n": 17, "k": 17, "tile_m": 2, "tile_n": 3, "w": 6, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 279.903, "source": "autotuned"}, {"m": 22, "n": 22, "k": 22, "tile_m": 3, "tile_n": 3, "w": 8, "v": 22, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 405.672, "source": "autotuned"}, {"m": 23, "n": 23, "k": 23, "tile_m": 3, "tile_n": 3, "w": 8, "v": 12, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 439.289, "source": "autotuned"}, {"m": 24, "n": 24, "k": 24, "tile_m": 6, "tile_n": 3, "w": 12, "v": 24, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 506.39, "source": "autotuned"}, {"m": 26, "n": 26, "k": 26, "tile_m": 3, "tile_n": 4, "w": 10, "v": 26, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 464.067, "source": "autotuned"}, {"m": 29, "n": 29, "k": 29, "tile_m": 3, "tile_n": 5, "w": 12, "v": 28, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 491.026, "source": "autotuned"}, {"m": 32, "n": 32, "k": 32, "tile_m": 4, "tile_n": 4, "w": 8, "v": 26, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 594.053, "source": "autotuned"} ] ================================================ FILE: src/acc/libsmm_acc/parameters/parameters_Mi100.json ================================================ [ {"m": 3, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 2, "algorithm": "medium", "perf": 78.5689, "source": "autotuned"}, {"m": 3, "n": 3, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 12, "algorithm": "medium", "perf": 107.279, "source": "autotuned"}, {"m": 3, "n": 3, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 17, "algorithm": "medium", "perf": 100.095, "source": "autotuned"}, {"m": 3, "n": 3, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 25, "algorithm": "medium", "perf": 129.566, "source": "autotuned"}, {"m": 3, "n": 3, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 3, "algorithm": "medium", "perf": 143.375, "source": "autotuned"}, {"m": 3, "n": 3, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 171.506, "source": "autotuned"}, {"m": 3, "n": 3, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 17, "algorithm": "medium", "perf": 151.772, "source": "autotuned"}, {"m": 3, "n": 3, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 13, "algorithm": "medium", "perf": 189.693, "source": "autotuned"}, {"m": 3, "n": 3, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 14, "algorithm": "medium", "perf": 190.111, "source": "autotuned"}, {"m": 3, "n": 3, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 9, "algorithm": "small", "perf": 203.871, "source": "autotuned"}, {"m": 3, "n": 3, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 9, "algorithm": "small", "perf": 220.995, "source": "autotuned"}, {"m": 3, "n": 3, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 232.418, "source": "autotuned"}, {"m": 3, "n": 4, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 84.0854, "source": "autotuned"}, {"m": 3, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 13, "algorithm": "medium", "perf": 126.304, "source": "autotuned"}, {"m": 3, "n": 5, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 5, "algorithm": "medium", "perf": 111.924, "source": "autotuned"}, {"m": 3, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 6, "algorithm": "medium", "perf": 158.699, "source": "autotuned"}, {"m": 3, "n": 6, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 15, "algorithm": "medium", "perf": 150.192, "source": "autotuned"}, {"m": 3, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 18, "algorithm": "medium", "perf": 268.451, "source": "autotuned"}, {"m": 3, "n": 7, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 7, "algorithm": "small", "perf": 145.6, "source": "autotuned"}, {"m": 3, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 325.535, "source": "autotuned"}, {"m": 3, "n": 8, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 26, "algorithm": "medium", "perf": 200.804, "source": "autotuned"}, {"m": 3, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 14, "algorithm": "medium", "perf": 449.789, "source": "autotuned"}, {"m": 3, "n": 9, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 23, "algorithm": "medium", "perf": 222.621, "source": "autotuned"}, {"m": 3, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 23, "algorithm": "medium", "perf": 451.863, "source": "autotuned"}, {"m": 3, "n": 10, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 16, "algorithm": "small", "perf": 238.256, "source": "autotuned"}, {"m": 3, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 575.889, "source": "autotuned"}, {"m": 3, "n": 11, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 11, "algorithm": "medium", "perf": 207.878, "source": "autotuned"}, {"m": 3, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 8, "algorithm": "medium", "perf": 644.357, "source": "autotuned"}, {"m": 3, "n": 12, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 24, "algorithm": "medium", "perf": 280.101, "source": "autotuned"}, {"m": 3, "n": 12, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 712.171, "source": "autotuned"}, {"m": 3, "n": 16, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 5, "algorithm": "small", "perf": 369.512, "source": "autotuned"}, {"m": 3, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 19, "minblocks": 18, "algorithm": "medium", "perf": 731.657, "source": "autotuned"}, {"m": 3, "n": 23, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 9, "minblocks": 11, "algorithm": "medium", "perf": 465.75, "source": "autotuned"}, {"m": 3, "n": 23, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 662.442, "source": "autotuned"}, {"m": 4, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 2, "algorithm": "medium", "perf": 100.224, "source": "autotuned"}, {"m": 4, "n": 3, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 24, "algorithm": "medium", "perf": 130.564, "source": "autotuned"}, {"m": 4, "n": 4, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 7, "algorithm": "small", "perf": 132.652, "source": "autotuned"}, {"m": 4, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 17, "minblocks": 13, "algorithm": "medium", "perf": 69.425, "source": "autotuned"}, {"m": 4, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 12, "algorithm": "medium", "perf": 179.709, "source": "autotuned"}, {"m": 4, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 10, "algorithm": "small", "perf": 211.43, "source": "autotuned"}, {"m": 4, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 285.949, "source": "autotuned"}, {"m": 4, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "small", "perf": 294.24, "source": "autotuned"}, {"m": 4, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 8, "algorithm": "medium", "perf": 294.459, "source": "autotuned"}, {"m": 4, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 2, "algorithm": "medium", "perf": 332.859, "source": "autotuned"}, {"m": 4, "n": 4, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 13, "algorithm": "medium", "perf": 326.923, "source": "autotuned"}, {"m": 4, "n": 4, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 7, "algorithm": "small", "perf": 365.723, "source": "autotuned"}, {"m": 4, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 421.675, "source": "autotuned"}, {"m": 4, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 17, "algorithm": "medium", "perf": 437.68, "source": "autotuned"}, {"m": 4, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 25, "algorithm": "medium", "perf": 215.779, "source": "autotuned"}, {"m": 4, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 2, "algorithm": "small", "perf": 163.825, "source": "autotuned"}, {"m": 4, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 13, "algorithm": "small", "perf": 248.436, "source": "autotuned"}, {"m": 4, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 27, "algorithm": "medium", "perf": 351.031, "source": "autotuned"}, {"m": 4, "n": 7, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 17, "algorithm": "medium", "perf": 283.86, "source": "autotuned"}, {"m": 4, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 376.295, "source": "autotuned"}, {"m": 4, "n": 8, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 329.527, "source": "autotuned"}, {"m": 4, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 604.468, "source": "autotuned"}, {"m": 4, "n": 9, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 5, "algorithm": "small", "perf": 367.756, "source": "autotuned"}, {"m": 4, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 22, "algorithm": "medium", "perf": 641.619, "source": "autotuned"}, {"m": 4, "n": 10, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 21, "algorithm": "medium", "perf": 422.754, "source": "autotuned"}, {"m": 4, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 14, "algorithm": "medium", "perf": 757.028, "source": "autotuned"}, {"m": 4, "n": 11, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 11, "algorithm": "medium", "perf": 457.62, "source": "autotuned"}, {"m": 4, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 5, "algorithm": "medium", "perf": 827.607, "source": "autotuned"}, {"m": 4, "n": 12, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 4, "algorithm": "medium", "perf": 468.703, "source": "autotuned"}, {"m": 4, "n": 12, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 15, "algorithm": "medium", "perf": 907.032, "source": "autotuned"}, {"m": 4, "n": 16, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 14, "algorithm": "medium", "perf": 701.789, "source": "autotuned"}, {"m": 4, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 23, "minblocks": 6, "algorithm": "medium", "perf": 905.478, "source": "autotuned"}, {"m": 4, "n": 23, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 7, "algorithm": "medium", "perf": 727.631, "source": "autotuned"}, {"m": 4, "n": 23, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 27, "minblocks": 6, "algorithm": "medium", "perf": 839.61, "source": "autotuned"}, {"m": 5, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 5, "algorithm": "medium", "perf": 125.923, "source": "autotuned"}, {"m": 5, "n": 3, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 10, "algorithm": "medium", "perf": 172.039, "source": "autotuned"}, {"m": 5, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 12, "algorithm": "medium", "perf": 216.547, "source": "autotuned"}, {"m": 5, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 15, "minblocks": 17, "algorithm": "medium", "perf": 196.433, "source": "autotuned"}, {"m": 5, "n": 5, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 22, "algorithm": "medium", "perf": 218.203, "source": "autotuned"}, {"m": 5, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 12, "algorithm": "medium", "perf": 296.794, "source": "autotuned"}, {"m": 5, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 5, "algorithm": "small", "perf": 330.311, "source": "autotuned"}, {"m": 5, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 11, "algorithm": "small", "perf": 372.481, "source": "autotuned"}, {"m": 5, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 436.714, "source": "autotuned"}, {"m": 5, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 26, "algorithm": "medium", "perf": 475.7, "source": "autotuned"}, {"m": 5, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 15, "algorithm": "medium", "perf": 457.207, "source": "autotuned"}, {"m": 5, "n": 5, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 10, "algorithm": "small", "perf": 499.856, "source": "autotuned"}, {"m": 5, "n": 5, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 552.752, "source": "autotuned"}, {"m": 5, "n": 5, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 572.939, "source": "autotuned"}, {"m": 5, "n": 5, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 592.354, "source": "autotuned"}, {"m": 5, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 22, "algorithm": "medium", "perf": 627.143, "source": "autotuned"}, {"m": 5, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 4, "algorithm": "small", "perf": 362.348, "source": "autotuned"}, {"m": 5, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 27, "algorithm": "medium", "perf": 422.653, "source": "autotuned"}, {"m": 5, "n": 7, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 4, "algorithm": "medium", "perf": 408.442, "source": "autotuned"}, {"m": 5, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 515.846, "source": "autotuned"}, {"m": 5, "n": 8, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 474.608, "source": "autotuned"}, {"m": 5, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 5, "algorithm": "medium", "perf": 715.408, "source": "autotuned"}, {"m": 5, "n": 9, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 456.87, "source": "autotuned"}, {"m": 5, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 715.561, "source": "autotuned"}, {"m": 5, "n": 10, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 21, "algorithm": "medium", "perf": 596.847, "source": "autotuned"}, {"m": 5, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 8, "algorithm": "medium", "perf": 918.729, "source": "autotuned"}, {"m": 5, "n": 11, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 3, "algorithm": "medium", "perf": 601.355, "source": "autotuned"}, {"m": 5, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 18, "algorithm": "medium", "perf": 957.58, "source": "autotuned"}, {"m": 5, "n": 12, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 672.342, "source": "autotuned"}, {"m": 5, "n": 12, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 6, "algorithm": "medium", "perf": 1028.9, "source": "autotuned"}, {"m": 5, "n": 16, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 6, "minblocks": 3, "algorithm": "medium", "perf": 727.285, "source": "autotuned"}, {"m": 5, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 17, "minblocks": 1, "algorithm": "medium", "perf": 1017.09, "source": "autotuned"}, {"m": 5, "n": 23, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 906.135, "source": "autotuned"}, {"m": 5, "n": 23, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 28, "minblocks": 2, "algorithm": "medium", "perf": 994.204, "source": "autotuned"}, {"m": 6, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 13, "algorithm": "small", "perf": 145.219, "source": "autotuned"}, {"m": 6, "n": 3, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 7, "algorithm": "medium", "perf": 259.751, "source": "autotuned"}, {"m": 6, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 5, "algorithm": "small", "perf": 251.261, "source": "autotuned"}, {"m": 6, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 26, "algorithm": "medium", "perf": 348.219, "source": "autotuned"}, {"m": 6, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 20, "algorithm": "medium", "perf": 365.753, "source": "autotuned"}, {"m": 6, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 14, "algorithm": "medium", "perf": 404.292, "source": "autotuned"}, {"m": 6, "n": 6, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 22, "algorithm": "medium", "perf": 312.826, "source": "autotuned"}, {"m": 6, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 25, "algorithm": "medium", "perf": 416.048, "source": "autotuned"}, {"m": 6, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 12, "algorithm": "medium", "perf": 489.515, "source": "autotuned"}, {"m": 6, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 25, "algorithm": "medium", "perf": 520.425, "source": "autotuned"}, {"m": 6, "n": 6, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 5, "algorithm": "small", "perf": 560.301, "source": "autotuned"}, {"m": 6, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 25, "algorithm": "medium", "perf": 677.861, "source": "autotuned"}, {"m": 6, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 23, "algorithm": "medium", "perf": 706.792, "source": "autotuned"}, {"m": 6, "n": 6, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 751.616, "source": "autotuned"}, {"m": 6, "n": 6, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 4, "algorithm": "medium", "perf": 692.799, "source": "autotuned"}, {"m": 6, "n": 6, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 17, "algorithm": "medium", "perf": 692.802, "source": "autotuned"}, {"m": 6, "n": 6, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 23, "algorithm": "medium", "perf": 801.841, "source": "autotuned"}, {"m": 6, "n": 6, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 16, "algorithm": "medium", "perf": 789.321, "source": "autotuned"}, {"m": 6, "n": 7, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 10, "algorithm": "medium", "perf": 580.172, "source": "autotuned"}, {"m": 6, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 15, "algorithm": "medium", "perf": 643.16, "source": "autotuned"}, {"m": 6, "n": 8, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 9, "algorithm": "small", "perf": 627.876, "source": "autotuned"}, {"m": 6, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 863.494, "source": "autotuned"}, {"m": 6, "n": 9, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 8, "algorithm": "medium", "perf": 686.311, "source": "autotuned"}, {"m": 6, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 8, "algorithm": "medium", "perf": 900.947, "source": "autotuned"}, {"m": 6, "n": 10, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 26, "algorithm": "medium", "perf": 776.398, "source": "autotuned"}, {"m": 6, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 4, "algorithm": "medium", "perf": 1017.7, "source": "autotuned"}, {"m": 6, "n": 11, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 724.477, "source": "autotuned"}, {"m": 6, "n": 11, "k": 11, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 13, "algorithm": "medium", "perf": 938.489, "source": "autotuned"}, {"m": 6, "n": 12, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 11, "algorithm": "medium", "perf": 761.713, "source": "autotuned"}, {"m": 6, "n": 12, "k": 12, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 17, "minblocks": 9, "algorithm": "medium", "perf": 974.612, "source": "autotuned"}, {"m": 6, "n": 16, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 19, "algorithm": "medium", "perf": 943.453, "source": "autotuned"}, {"m": 6, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 19, "minblocks": 4, "algorithm": "medium", "perf": 1176.82, "source": "autotuned"}, {"m": 6, "n": 23, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 8, "minblocks": 26, "algorithm": "medium", "perf": 1052.43, "source": "autotuned"}, {"m": 6, "n": 23, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 27, "minblocks": 7, "algorithm": "medium", "perf": 1111.44, "source": "autotuned"}, {"m": 7, "n": 3, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 12, "algorithm": "medium", "perf": 152.123, "source": "autotuned"}, {"m": 7, "n": 3, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 315.151, "source": "autotuned"}, {"m": 7, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 282.41, "source": "autotuned"}, {"m": 7, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 13, "algorithm": "small", "perf": 377.56, "source": "autotuned"}, {"m": 7, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 1, "algorithm": "medium", "perf": 420.179, "source": "autotuned"}, {"m": 7, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 11, "algorithm": "medium", "perf": 544.38, "source": "autotuned"}, {"m": 7, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 564.013, "source": "autotuned"}, {"m": 7, "n": 6, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 26, "algorithm": "medium", "perf": 573.971, "source": "autotuned"}, {"m": 7, "n": 7, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 15, "algorithm": "small", "perf": 406.999, "source": "autotuned"}, {"m": 7, "n": 7, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 13, "algorithm": "small", "perf": 511.252, "source": "autotuned"}, {"m": 7, "n": 7, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 656.8, "source": "autotuned"}, {"m": 7, "n": 7, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 751.558, "source": "autotuned"}, {"m": 7, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 24, "algorithm": "medium", "perf": 783.998, "source": "autotuned"}, {"m": 7, "n": 7, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 886.637, "source": "autotuned"}, {"m": 7, "n": 7, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 919.377, "source": "autotuned"}, {"m": 7, "n": 7, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 19, "algorithm": "medium", "perf": 831.615, "source": "autotuned"}, {"m": 7, "n": 7, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 919.946, "source": "autotuned"}, {"m": 7, "n": 7, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 969.153, "source": "autotuned"}, {"m": 7, "n": 7, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 1000.31, "source": "autotuned"}, {"m": 7, "n": 7, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 17, "minblocks": 5, "algorithm": "medium", "perf": 910.49, "source": "autotuned"}, {"m": 7, "n": 8, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 27, "algorithm": "medium", "perf": 819.953, "source": "autotuned"}, {"m": 7, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 990.167, "source": "autotuned"}, {"m": 7, "n": 9, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 25, "algorithm": "medium", "perf": 847.471, "source": "autotuned"}, {"m": 7, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 11, "algorithm": "medium", "perf": 1033.8, "source": "autotuned"}, {"m": 7, "n": 10, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 1, "algorithm": "medium", "perf": 832.461, "source": "autotuned"}, {"m": 7, "n": 10, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 937.67, "source": "autotuned"}, {"m": 7, "n": 11, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 27, "algorithm": "medium", "perf": 906.165, "source": "autotuned"}, {"m": 7, "n": 11, "k": 11, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 8, "algorithm": "medium", "perf": 1040.96, "source": "autotuned"}, {"m": 7, "n": 12, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 7, "algorithm": "medium", "perf": 970.295, "source": "autotuned"}, {"m": 7, "n": 12, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 15, "minblocks": 1, "algorithm": "medium", "perf": 1116.73, "source": "autotuned"}, {"m": 7, "n": 16, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 15, "algorithm": "medium", "perf": 1165.88, "source": "autotuned"}, {"m": 7, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 27, "minblocks": 6, "algorithm": "medium", "perf": 1277.36, "source": "autotuned"}, {"m": 7, "n": 23, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 14, "minblocks": 8, "algorithm": "medium", "perf": 1216.97, "source": "autotuned"}, {"m": 7, "n": 23, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 27, "minblocks": 3, "algorithm": "medium", "perf": 1240.93, "source": "autotuned"}, {"m": 8, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 15, "algorithm": "small", "perf": 159.262, "source": "autotuned"}, {"m": 8, "n": 3, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 18, "algorithm": "medium", "perf": 387.939, "source": "autotuned"}, {"m": 8, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 295.644, "source": "autotuned"}, {"m": 8, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 7, "algorithm": "medium", "perf": 581.174, "source": "autotuned"}, {"m": 8, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 24, "algorithm": "medium", "perf": 405.688, "source": "autotuned"}, {"m": 8, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 19, "algorithm": "medium", "perf": 731.98, "source": "autotuned"}, {"m": 8, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 7, "algorithm": "medium", "perf": 659.632, "source": "autotuned"}, {"m": 8, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 863.496, "source": "autotuned"}, {"m": 8, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 11, "algorithm": "medium", "perf": 812.825, "source": "autotuned"}, {"m": 8, "n": 7, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 15, "algorithm": "medium", "perf": 973.042, "source": "autotuned"}, {"m": 8, "n": 8, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 5, "algorithm": "medium", "perf": 568.097, "source": "autotuned"}, {"m": 8, "n": 8, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 24, "algorithm": "medium", "perf": 725.612, "source": "autotuned"}, {"m": 8, "n": 8, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 21, "algorithm": "medium", "perf": 790.621, "source": "autotuned"}, {"m": 8, "n": 8, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 15, "algorithm": "medium", "perf": 963.313, "source": "autotuned"}, {"m": 8, "n": 8, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 21, "algorithm": "medium", "perf": 1033.73, "source": "autotuned"}, {"m": 8, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 1099.94, "source": "autotuned"}, {"m": 8, "n": 8, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 15, "minblocks": 9, "algorithm": "medium", "perf": 1142.36, "source": "autotuned"}, {"m": 8, "n": 8, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 15, "minblocks": 4, "algorithm": "medium", "perf": 1049.41, "source": "autotuned"}, {"m": 8, "n": 16, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 14, "minblocks": 1, "algorithm": "medium", "perf": 1374.93, "source": "autotuned"}, {"m": 8, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 28, "minblocks": 4, "algorithm": "medium", "perf": 1388.91, "source": "autotuned"}, {"m": 8, "n": 23, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 19, "minblocks": 5, "algorithm": "medium", "perf": 1436.55, "source": "autotuned"}, {"m": 8, "n": 23, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 1370.75, "source": "autotuned"}, {"m": 9, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 14, "algorithm": "small", "perf": 215.434, "source": "autotuned"}, {"m": 9, "n": 3, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 8, "algorithm": "medium", "perf": 493.605, "source": "autotuned"}, {"m": 9, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 1, "algorithm": "small", "perf": 328.852, "source": "autotuned"}, {"m": 9, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 643.801, "source": "autotuned"}, {"m": 9, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 529.804, "source": "autotuned"}, {"m": 9, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 9, "algorithm": "medium", "perf": 742.897, "source": "autotuned"}, {"m": 9, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 22, "algorithm": "medium", "perf": 684.404, "source": "autotuned"}, {"m": 9, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 3, "algorithm": "medium", "perf": 894.321, "source": "autotuned"}, {"m": 9, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 19, "algorithm": "medium", "perf": 872.306, "source": "autotuned"}, {"m": 9, "n": 7, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 1061.49, "source": "autotuned"}, {"m": 9, "n": 9, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 560.057, "source": "autotuned"}, {"m": 9, "n": 9, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 9, "algorithm": "medium", "perf": 727.028, "source": "autotuned"}, {"m": 9, "n": 9, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 5, "algorithm": "medium", "perf": 780.091, "source": "autotuned"}, {"m": 9, "n": 9, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 13, "algorithm": "medium", "perf": 907.002, "source": "autotuned"}, {"m": 9, "n": 9, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 959.107, "source": "autotuned"}, {"m": 9, "n": 9, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 17, "minblocks": 2, "algorithm": "medium", "perf": 479.296, "source": "autotuned"}, {"m": 9, "n": 9, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 17, "minblocks": 5, "algorithm": "medium", "perf": 1169.07, "source": "autotuned"}, {"m": 9, "n": 9, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 23, "minblocks": 5, "algorithm": "medium", "perf": 1097.3, "source": "autotuned"}, {"m": 9, "n": 16, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 15, "minblocks": 1, "algorithm": "medium", "perf": 1338.03, "source": "autotuned"}, {"m": 9, "n": 16, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 23, "minblocks": 7, "algorithm": "medium", "perf": 1401.05, "source": "autotuned"}, {"m": 9, "n": 23, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 27, "minblocks": 2, "algorithm": "medium", "perf": 1472.7, "source": "autotuned"}, {"m": 9, "n": 23, "k": 23, "tile_m": 1, "tile_n": 2, "w": 6, "v": 12, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 1473.69, "source": "autotuned"}, {"m": 10, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 233.094, "source": "autotuned"}, {"m": 10, "n": 3, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 26, "algorithm": "medium", "perf": 557.492, "source": "autotuned"}, {"m": 10, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 2, "algorithm": "medium", "perf": 421.968, "source": "autotuned"}, {"m": 10, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 2, "algorithm": "medium", "perf": 749.252, "source": "autotuned"}, {"m": 10, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 9, "algorithm": "small", "perf": 560.463, "source": "autotuned"}, {"m": 10, "n": 5, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 923.14, "source": "autotuned"}, {"m": 10, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 2, "algorithm": "medium", "perf": 787.636, "source": "autotuned"}, {"m": 10, "n": 6, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 14, "algorithm": "medium", "perf": 1063.7, "source": "autotuned"}, {"m": 10, "n": 7, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 7, "minblocks": 27, "algorithm": "medium", "perf": 842.767, "source": "autotuned"}, {"m": 10, "n": 7, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 26, "algorithm": "medium", "perf": 941.764, "source": "autotuned"}, {"m": 10, "n": 10, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 21, "algorithm": "medium", "perf": 675.109, "source": "autotuned"}, {"m": 10, "n": 10, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 19, "algorithm": "medium", "perf": 836.688, "source": "autotuned"}, {"m": 10, "n": 10, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 987.67, "source": "autotuned"}, {"m": 10, "n": 10, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 8, "minblocks": 11, "algorithm": "medium", "perf": 1115.08, "source": "autotuned"}, {"m": 10, "n": 10, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 11, "algorithm": "medium", "perf": 1129.39, "source": "autotuned"}, {"m": 10, "n": 10, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 8, "algorithm": "medium", "perf": 1233.05, "source": "autotuned"}, {"m": 10, "n": 10, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 17, "minblocks": 11, "algorithm": "medium", "perf": 1287.76, "source": "autotuned"}, {"m": 10, "n": 10, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 27, "minblocks": 5, "algorithm": "medium", "perf": 1224.44, "source": "autotuned"}, {"m": 10, "n": 16, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 17, "minblocks": 7, "algorithm": "medium", "perf": 1490.82, "source": "autotuned"}, {"m": 10, "n": 16, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 27, "minblocks": 6, "algorithm": "medium", "perf": 1486.68, "source": "autotuned"}, {"m": 10, "n": 23, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 28, "minblocks": 1, "algorithm": "medium", "perf": 1551.4, "source": "autotuned"}, {"m": 10, "n": 23, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "perf": 1591.47, "source": "autotuned"}, {"m": 11, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 4, "algorithm": "medium", "perf": 221.534, "source": "autotuned"}, {"m": 11, "n": 3, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 1, "algorithm": "medium", "perf": 595.556, "source": "autotuned"}, {"m": 11, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 443.417, "source": "autotuned"}, {"m": 11, "n": 4, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 12, "algorithm": "medium", "perf": 762.441, "source": "autotuned"}, {"m": 11, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 13, "algorithm": "small", "perf": 594.138, "source": "autotuned"}, {"m": 11, "n": 5, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 12, "algorithm": "medium", "perf": 990.084, "source": "autotuned"}, {"m": 11, "n": 6, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 11, "algorithm": "medium", "perf": 720.225, "source": "autotuned"}, {"m": 11, "n": 6, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 926.173, "source": "autotuned"}, {"m": 11, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 25, "algorithm": "medium", "perf": 881.997, "source": "autotuned"}, {"m": 11, "n": 7, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 8, "minblocks": 12, "algorithm": "medium", "perf": 1005.66, "source": "autotuned"}, {"m": 11, "n": 11, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 15, "algorithm": "medium", "perf": 745.298, "source": "autotuned"}, {"m": 11, "n": 11, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 15, "minblocks": 5, "algorithm": "medium", "perf": 931.779, "source": "autotuned"}, {"m": 11, "n": 11, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 10, "algorithm": "medium", "perf": 1078.77, "source": "autotuned"}, {"m": 11, "n": 11, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 15, "minblocks": 3, "algorithm": "medium", "perf": 1178.24, "source": "autotuned"}, {"m": 11, "n": 11, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 1219.72, "source": "autotuned"}, {"m": 11, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 17, "minblocks": 10, "algorithm": "medium", "perf": 1410.56, "source": "autotuned"}, {"m": 11, "n": 11, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 23, "minblocks": 4, "algorithm": "medium", "perf": 1391.57, "source": "autotuned"}, {"m": 11, "n": 11, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 28, "minblocks": 4, "algorithm": "medium", "perf": 1313.93, "source": "autotuned"}, {"m": 11, "n": 16, "k": 11, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 19, "minblocks": 6, "algorithm": "medium", "perf": 1507.09, "source": "autotuned"}, {"m": 11, "n": 16, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 256, "grouping": 27, "minblocks": 7, "algorithm": "medium", "perf": 1546.67, "source": "autotuned"}, {"m": 11, "n": 23, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 27, "minblocks": 3, "algorithm": "medium", "perf": 1618.53, "source": "autotuned"}, {"m": 11, "n": 23, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 1644.3, "source": "autotuned"}, {"m": 12, "n": 3, "k": 3, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 21, "minblocks": 10, "algorithm": "medium", "perf": 704.989, "source": "autotuned"}, {"m": 12, "n": 3, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 20, "algorithm": "medium", "perf": 643.778, "source": "autotuned"}, {"m": 12, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 7, "algorithm": "medium", "perf": 486.135, "source": "autotuned"}, {"m": 12, "n": 4, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 6, "algorithm": "medium", "perf": 908.392, "source": "autotuned"}, {"m": 12, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 25, "algorithm": "medium", "perf": 691.423, "source": "autotuned"}, {"m": 12, "n": 5, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 1, "algorithm": "medium", "perf": 1022.02, "source": "autotuned"}, {"m": 12, "n": 6, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 4, "algorithm": "medium", "perf": 766.077, "source": "autotuned"}, {"m": 12, "n": 6, "k": 12, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 5, "algorithm": "medium", "perf": 985.725, "source": "autotuned"}, {"m": 12, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 14, "algorithm": "medium", "perf": 956.029, "source": "autotuned"}, {"m": 12, "n": 7, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 17, "minblocks": 1, "algorithm": "medium", "perf": 1110.58, "source": "autotuned"}, {"m": 12, "n": 12, "k": 3, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 14, "minblocks": 5, "algorithm": "medium", "perf": 797.35, "source": "autotuned"}, {"m": 12, "n": 12, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 8, "minblocks": 11, "algorithm": "medium", "perf": 1027.58, "source": "autotuned"}, {"m": 12, "n": 12, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 17, "minblocks": 3, "algorithm": "medium", "perf": 1082.57, "source": "autotuned"}, {"m": 12, "n": 12, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 17, "minblocks": 3, "algorithm": "medium", "perf": 1205.76, "source": "autotuned"}, {"m": 12, "n": 12, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 10, "minblocks": 3, "algorithm": "medium", "perf": 1261.71, "source": "autotuned"}, {"m": 12, "n": 12, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 17, "minblocks": 6, "algorithm": "medium", "perf": 1471.99, "source": "autotuned"}, {"m": 12, "n": 12, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 24, "minblocks": 6, "algorithm": "medium", "perf": 1466.11, "source": "autotuned"}, {"m": 12, "n": 12, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 17, "minblocks": 6, "algorithm": "medium", "perf": 1371.86, "source": "autotuned"}, {"m": 12, "n": 16, "k": 12, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 24, "minblocks": 5, "algorithm": "medium", "perf": 1631.08, "source": "autotuned"}, {"m": 12, "n": 16, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 27, "minblocks": 5, "algorithm": "medium", "perf": 1644.39, "source": "autotuned"}, {"m": 12, "n": 23, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 27, "minblocks": 2, "algorithm": "medium", "perf": 1691.75, "source": "autotuned"}, {"m": 12, "n": 23, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 320, "grouping": 27, "minblocks": 4, "algorithm": "medium", "perf": 1688.82, "source": "autotuned"}, {"m": 13, "n": 13, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 24, "minblocks": 3, "algorithm": "medium", "perf": 1139.41, "source": "autotuned"}, {"m": 13, "n": 13, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 27, "minblocks": 8, "algorithm": "medium", "perf": 1485.0, "source": "autotuned"}, {"m": 13, "n": 23, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 320, "grouping": 27, "minblocks": 6, "algorithm": "medium", "perf": 1695.45, "source": "autotuned"}, {"m": 13, "n": 23, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 320, "grouping": 5, "minblocks": 2, "algorithm": "medium", "perf": 1780.63, "source": "autotuned"}, {"m": 14, "n": 14, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 28, "minblocks": 1, "algorithm": "medium", "perf": 1584.33, "source": "autotuned"}, {"m": 14, "n": 14, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 384, "grouping": 27, "minblocks": 3, "algorithm": "medium", "perf": 1570.32, "source": "autotuned"}, {"m": 14, "n": 14, "k": 32, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 1630.31, "source": "autotuned"}, {"m": 14, "n": 23, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 27, "minblocks": 5, "algorithm": "medium", "perf": 1804.97, "source": "autotuned"}, {"m": 14, "n": 23, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1892.29, "source": "autotuned"}, {"m": 14, "n": 29, "k": 32, "tile_m": 2, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 2, "algorithm": "medium", "perf": 2134, "source": "autotuned"}, {"m": 14, "n": 32, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 448, "grouping": 7, "minblocks": 2, "algorithm": "medium", "perf": 1966.76, "source": "autotuned"}, {"m": 14, "n": 32, "k": 29, "tile_m": 2, "tile_n": 2, "w": 4, "v": 32, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 2095.2, "source": "autotuned"}, {"m": 14, "n": 32, "k": 32, "tile_m": 2, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 2, "algorithm": "medium", "perf": 2215.32, "source": "autotuned"}, {"m": 15, "n": 15, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 256, "grouping": 27, "minblocks": 1, "algorithm": "medium", "perf": 1633.57, "source": "autotuned"}, {"m": 15, "n": 15, "k": 23, "tile_m": 2, "tile_n": 1, "w": 6, "v": 8, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 1665.4, "source": "autotuned"}, {"m": 15, "n": 23, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 1837.85, "source": "autotuned"}, {"m": 15, "n": 23, "k": 23, "tile_m": 1, "tile_n": 3, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 1892.88, "source": "autotuned"}, {"m": 16, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 12, "algorithm": "medium", "perf": 353.838, "source": "autotuned"}, {"m": 16, "n": 3, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 19, "minblocks": 4, "algorithm": "medium", "perf": 725.825, "source": "autotuned"}, {"m": 16, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 12, "algorithm": "medium", "perf": 666.586, "source": "autotuned"}, {"m": 16, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 19, "minblocks": 21, "algorithm": "medium", "perf": 903.482, "source": "autotuned"}, {"m": 16, "n": 5, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 7, "minblocks": 4, "algorithm": "medium", "perf": 776.943, "source": "autotuned"}, {"m": 16, "n": 5, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 19, "minblocks": 1, "algorithm": "medium", "perf": 1020.69, "source": "autotuned"}, {"m": 16, "n": 6, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 26, "algorithm": "medium", "perf": 1014.66, "source": "autotuned"}, {"m": 16, "n": 6, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 23, "minblocks": 10, "algorithm": "medium", "perf": 1160.16, "source": "autotuned"}, {"m": 16, "n": 7, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 1171.68, "source": "autotuned"}, {"m": 16, "n": 7, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 28, "minblocks": 3, "algorithm": "medium", "perf": 1260.89, "source": "autotuned"}, {"m": 16, "n": 8, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 12, "minblocks": 4, "algorithm": "medium", "perf": 1382.66, "source": "autotuned"}, {"m": 16, "n": 8, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 27, "minblocks": 5, "algorithm": "medium", "perf": 1393.63, "source": "autotuned"}, {"m": 16, "n": 9, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 17, "minblocks": 3, "algorithm": "medium", "perf": 1319.87, "source": "autotuned"}, {"m": 16, "n": 9, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 23, "minblocks": 3, "algorithm": "medium", "perf": 1395.11, "source": "autotuned"}, {"m": 16, "n": 10, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 15, "minblocks": 4, "algorithm": "medium", "perf": 1480.96, "source": "autotuned"}, {"m": 16, "n": 10, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 24, "minblocks": 4, "algorithm": "medium", "perf": 1492.09, "source": "autotuned"}, {"m": 16, "n": 11, "k": 11, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 17, "minblocks": 6, "algorithm": "medium", "perf": 1491.61, "source": "autotuned"}, {"m": 16, "n": 11, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 256, "grouping": 27, "minblocks": 4, "algorithm": "medium", "perf": 1531.95, "source": "autotuned"}, {"m": 16, "n": 12, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 23, "minblocks": 5, "algorithm": "medium", "perf": 1610.57, "source": "autotuned"}, {"m": 16, "n": 12, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 256, "grouping": 27, "minblocks": 7, "algorithm": "medium", "perf": 1644.39, "source": "autotuned"}, {"m": 16, "n": 16, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 14, "minblocks": 1, "algorithm": "medium", "perf": 1177.38, "source": "autotuned"}, {"m": 16, "n": 16, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 13, "minblocks": 8, "algorithm": "medium", "perf": 1443.55, "source": "autotuned"}, {"m": 16, "n": 16, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 12, "minblocks": 9, "algorithm": "medium", "perf": 1567.84, "source": "autotuned"}, {"m": 16, "n": 16, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 11, "algorithm": "medium", "perf": 1680.36, "source": "autotuned"}, {"m": 16, "n": 16, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 1740.35, "source": "autotuned"}, {"m": 16, "n": 16, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 19, "minblocks": 6, "algorithm": "medium", "perf": 1826.42, "source": "autotuned"}, {"m": 16, "n": 16, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 256, "grouping": 23, "minblocks": 8, "algorithm": "medium", "perf": 1786.6, "source": "autotuned"}, {"m": 16, "n": 16, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 256, "grouping": 27, "minblocks": 3, "algorithm": "medium", "perf": 1859.02, "source": "autotuned"}, {"m": 16, "n": 16, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 27, "minblocks": 8, "algorithm": "medium", "perf": 1799.92, "source": "autotuned"}, {"m": 16, "n": 16, "k": 12, "tile_m": 2, "tile_n": 1, "threads": 256, "grouping": 27, "minblocks": 5, "algorithm": "medium", "perf": 1865.23, "source": "autotuned"}, {"m": 16, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 23, "minblocks": 3, "algorithm": "medium", "perf": 1650.28, "source": "autotuned"}, {"m": 16, "n": 16, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 1808.55, "source": "autotuned"}, {"m": 16, "n": 23, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 6, "minblocks": 5, "algorithm": "medium", "perf": 1992.05, "source": "autotuned"}, {"m": 16, "n": 23, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 28, "minblocks": 7, "algorithm": "medium", "perf": 1992.93, "source": "autotuned"}, {"m": 17, "n": 17, "k": 17, "tile_m": 3, "tile_n": 1, "threads": 320, "grouping": 14, "minblocks": 3, "algorithm": "medium", "perf": 1146.99, "source": "autotuned"}, {"m": 17, "n": 17, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "perf": 1793.01, "source": "autotuned"}, {"m": 17, "n": 23, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "perf": 1930.99, "source": "autotuned"}, {"m": 17, "n": 23, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 2010.24, "source": "autotuned"}, {"m": 18, "n": 18, "k": 18, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 27, "minblocks": 4, "algorithm": "medium", "perf": 1880.87, "source": "autotuned"}, {"m": 18, "n": 18, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 5, "minblocks": 3, "algorithm": "medium", "perf": 1918.75, "source": "autotuned"}, {"m": 18, "n": 23, "k": 18, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 7, "minblocks": 6, "algorithm": "medium", "perf": 2029.31, "source": "autotuned"}, {"m": 18, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 5, "minblocks": 3, "algorithm": "medium", "perf": 2098.78, "source": "autotuned"}, {"m": 19, "n": 19, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 27, "minblocks": 8, "algorithm": "medium", "perf": 1945.5, "source": "autotuned"}, {"m": 19, "n": 19, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 23, "minblocks": 7, "algorithm": "medium", "perf": 1948.91, "source": "autotuned"}, {"m": 19, "n": 23, "k": 19, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 5, "minblocks": 3, "algorithm": "medium", "perf": 2088.58, "source": "autotuned"}, {"m": 19, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 29, "minblocks": 5, "algorithm": "medium", "perf": 2103.37, "source": "autotuned"}, {"m": 20, "n": 20, "k": 20, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 27, "minblocks": 8, "algorithm": "medium", "perf": 2075.88, "source": "autotuned"}, {"m": 20, "n": 20, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 512, "grouping": 23, "minblocks": 3, "algorithm": "medium", "perf": 2098.72, "source": "autotuned"}, {"m": 20, "n": 23, "k": 20, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "perf": 2245.52, "source": "autotuned"}, {"m": 20, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 27, "minblocks": 6, "algorithm": "medium", "perf": 2194.19, "source": "autotuned"}, {"m": 22, "n": 22, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 2085.32, "source": "autotuned"}, {"m": 23, "n": 3, "k": 3, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 10, "minblocks": 16, "algorithm": "medium", "perf": 399.032, "source": "autotuned"}, {"m": 23, "n": 3, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 27, "minblocks": 2, "algorithm": "medium", "perf": 656.377, "source": "autotuned"}, {"m": 23, "n": 4, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 7, "minblocks": 26, "algorithm": "medium", "perf": 712.481, "source": "autotuned"}, {"m": 23, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 27, "minblocks": 1, "algorithm": "medium", "perf": 841.282, "source": "autotuned"}, {"m": 23, "n": 5, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 14, "minblocks": 8, "algorithm": "medium", "perf": 943.656, "source": "autotuned"}, {"m": 23, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 27, "minblocks": 4, "algorithm": "medium", "perf": 999.371, "source": "autotuned"}, {"m": 23, "n": 6, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 17, "minblocks": 4, "algorithm": "medium", "perf": 1067.35, "source": "autotuned"}, {"m": 23, "n": 6, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 1103.71, "source": "autotuned"}, {"m": 23, "n": 7, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 17, "minblocks": 7, "algorithm": "medium", "perf": 1246.95, "source": "autotuned"}, {"m": 23, "n": 7, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 27, "minblocks": 3, "algorithm": "medium", "perf": 1221.83, "source": "autotuned"}, {"m": 23, "n": 8, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 6, "algorithm": "medium", "perf": 1420.96, "source": "autotuned"}, {"m": 23, "n": 8, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "perf": 1377.44, "source": "autotuned"}, {"m": 23, "n": 9, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 6, "algorithm": "medium", "perf": 1406.48, "source": "autotuned"}, {"m": 23, "n": 9, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 320, "grouping": 27, "minblocks": 4, "algorithm": "medium", "perf": 1446.1, "source": "autotuned"}, {"m": 23, "n": 10, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 23, "minblocks": 3, "algorithm": "medium", "perf": 1532.79, "source": "autotuned"}, {"m": 23, "n": 10, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 5, "minblocks": 2, "algorithm": "medium", "perf": 1542.76, "source": "autotuned"}, {"m": 23, "n": 11, "k": 11, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 27, "minblocks": 1, "algorithm": "medium", "perf": 1571.7, "source": "autotuned"}, {"m": 23, "n": 11, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 1653.64, "source": "autotuned"}, {"m": 23, "n": 12, "k": 12, "tile_m": 3, "tile_n": 1, "threads": 320, "grouping": 27, "minblocks": 2, "algorithm": "medium", "perf": 1674.66, "source": "autotuned"}, {"m": 23, "n": 12, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 27, "minblocks": 4, "algorithm": "medium", "perf": 1685.09, "source": "autotuned"}, {"m": 23, "n": 13, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 27, "minblocks": 2, "algorithm": "medium", "perf": 1702.87, "source": "autotuned"}, {"m": 23, "n": 13, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 1782.93, "source": "autotuned"}, {"m": 23, "n": 14, "k": 14, "tile_m": 3, "tile_n": 1, "threads": 384, "grouping": 27, "minblocks": 3, "algorithm": "medium", "perf": 1813.44, "source": "autotuned"}, {"m": 23, "n": 14, "k": 23, "tile_m": 3, "tile_n": 1, "w": 8, "v": 14, "threads": 128, "grouping": 16, "minblocks": 12, "algorithm": "largeDB2", "perf": 1855.17, "source": "autotuned"}, {"m": 23, "n": 15, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 27, "minblocks": 3, "algorithm": "medium", "perf": 1847.69, "source": "autotuned"}, {"m": 23, "n": 15, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 1932.88, "source": "autotuned"}, {"m": 23, "n": 16, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 5, "minblocks": 4, "algorithm": "medium", "perf": 2042.72, "source": "autotuned"}, {"m": 23, "n": 16, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 2029.55, "source": "autotuned"}, {"m": 23, "n": 17, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 1988.76, "source": "autotuned"}, {"m": 23, "n": 17, "k": 23, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 27, "minblocks": 2, "algorithm": "medium", "perf": 1978.55, "source": "autotuned"}, {"m": 23, "n": 18, "k": 18, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 2027.47, "source": "autotuned"}, {"m": 23, "n": 18, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 5, "minblocks": 2, "algorithm": "medium", "perf": 2063.18, "source": "autotuned"}, {"m": 23, "n": 19, "k": 19, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 2100.91, "source": "autotuned"}, {"m": 23, "n": 19, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 7, "minblocks": 3, "algorithm": "medium", "perf": 2101.92, "source": "autotuned"}, {"m": 23, "n": 20, "k": 20, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "perf": 2184.23, "source": "autotuned"}, {"m": 23, "n": 20, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 23, "minblocks": 6, "algorithm": "medium", "perf": 2173.16, "source": "autotuned"}, {"m": 23, "n": 23, "k": 3, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 1419.22, "source": "autotuned"}, {"m": 23, "n": 23, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 17, "minblocks": 8, "algorithm": "medium", "perf": 1605.96, "source": "autotuned"}, {"m": 23, "n": 23, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 15, "minblocks": 1, "algorithm": "medium", "perf": 1752.18, "source": "autotuned"}, {"m": 23, "n": 23, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 17, "minblocks": 2, "algorithm": "medium", "perf": 1845.93, "source": "autotuned"}, {"m": 23, "n": 23, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 320, "grouping": 27, "minblocks": 6, "algorithm": "medium", "perf": 1944.44, "source": "autotuned"}, {"m": 23, "n": 23, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 320, "grouping": 27, "minblocks": 2, "algorithm": "medium", "perf": 2046.73, "source": "autotuned"}, {"m": 23, "n": 23, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 24, "minblocks": 6, "algorithm": "medium", "perf": 2042.53, "source": "autotuned"}, {"m": 23, "n": 23, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 320, "grouping": 27, "minblocks": 1, "algorithm": "medium", "perf": 2109.63, "source": "autotuned"}, {"m": 23, "n": 23, "k": 11, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 27, "minblocks": 5, "algorithm": "medium", "perf": 2112.83, "source": "autotuned"}, {"m": 23, "n": 23, "k": 12, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 6, "minblocks": 5, "algorithm": "medium", "perf": 2177.15, "source": "autotuned"}, {"m": 23, "n": 23, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 27, "minblocks": 3, "algorithm": "medium", "perf": 2147.5, "source": "autotuned"}, {"m": 23, "n": 23, "k": 14, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 1, "algorithm": "medium", "perf": 2272.49, "source": "autotuned"}, {"m": 23, "n": 23, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 6, "minblocks": 5, "algorithm": "medium", "perf": 2208.95, "source": "autotuned"}, {"m": 23, "n": 23, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 6, "minblocks": 1, "algorithm": "medium", "perf": 2280.07, "source": "autotuned"}, {"m": 23, "n": 23, "k": 17, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 2256.47, "source": "autotuned"}, {"m": 23, "n": 23, "k": 18, "tile_m": 3, "tile_n": 1, "threads": 512, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 2255.32, "source": "autotuned"}, {"m": 23, "n": 23, "k": 19, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 6, "minblocks": 3, "algorithm": "medium", "perf": 2293.72, "source": "autotuned"}, {"m": 23, "n": 23, "k": 20, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 2277.62, "source": "autotuned"}, {"m": 23, "n": 23, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 6, "minblocks": 4, "algorithm": "medium", "perf": 2364.81, "source": "autotuned"}, {"m": 24, "n": 24, "k": 24, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 7, "minblocks": 5, "algorithm": "medium", "perf": 2206.75, "source": "autotuned"}, {"m": 24, "n": 24, "k": 32, "tile_m": 5, "tile_n": 1, "w": 4, "v": 24, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 2601.14, "source": "autotuned"}, {"m": 24, "n": 32, "k": 24, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "perf": 2911.99, "source": "autotuned"}, {"m": 24, "n": 32, "k": 32, "tile_m": 2, "tile_n": 2, "w": 8, "v": 32, "threads": 192, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 2922.57, "source": "autotuned"}, {"m": 29, "n": 14, "k": 32, "tile_m": 1, "tile_n": 4, "w": 4, "v": 14, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "perf": 2023.79, "source": "autotuned"}, {"m": 29, "n": 29, "k": 29, "tile_m": 4, "tile_n": 5, "w": 12, "v": 22, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 1645.23, "source": "autotuned"}, {"m": 29, "n": 29, "k": 32, "tile_m": 4, "tile_n": 5, "w": 8, "v": 20, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 1645.23, "source": "autotuned"}, {"m": 29, "n": 32, "k": 14, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 29, "minblocks": 3, "algorithm": "medium", "perf": 2654.97, "source": "autotuned"}, {"m": 29, "n": 32, "k": 29, "tile_m": 1, "tile_n": 4, "w": 8, "v": 26, "threads": 256, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 2651.39, "source": "autotuned"}, {"m": 29, "n": 32, "k": 32, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 1, "algorithm": "medium", "perf": 2928.56, "source": "autotuned"}, {"m": 32, "n": 24, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "perf": 2938.29, "source": "autotuned"}, {"m": 32, "n": 24, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 512, "grouping": 4, "minblocks": 3, "algorithm": "medium", "perf": 3074.24, "source": "autotuned"}, {"m": 32, "n": 32, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 512, "grouping": 24, "minblocks": 3, "algorithm": "medium", "perf": 2921.67, "source": "autotuned"}, {"m": 32, "n": 32, "k": 24, "tile_m": 2, "tile_n": 2, "threads": 768, "grouping": 24, "minblocks": 1, "algorithm": "medium", "perf": 3163.92, "source": "autotuned"}, {"m": 32, "n": 32, "k": 29, "tile_m": 2, "tile_n": 2, "threads": 512, "grouping": 24, "minblocks": 1, "algorithm": "medium", "perf": 3227.09, "source": "autotuned"}, {"m": 32, "n": 32, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 24, "minblocks": 1, "algorithm": "medium", "perf": 3209.37, "source": "autotuned"}, {"m": 72, "n": 72, "k": 72, "tile_m": 4, "tile_n": 8, "w": 8, "v": 48, "threads": 192, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4434.41, "source": "autotuned"}, {"m": 80, "n": 80, "k": 80, "tile_m": 2, "tile_n": 4, "w": 8, "v": 18, "threads": 832, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 4440.8, "source": "autotuned"} ] ================================================ FILE: src/acc/libsmm_acc/parameters/parameters_Mi250.json ================================================ [ {"m": 3, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 48.6087, "source": "autotuned"}, {"m": 3, "n": 3, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 4, "algorithm": "medium", "perf": 84.8962, "source": "autotuned"}, {"m": 3, "n": 3, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 73.5997, "source": "autotuned"}, {"m": 3, "n": 3, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 21, "algorithm": "medium", "perf": 107.41, "source": "autotuned"}, {"m": 3, "n": 3, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 5, "algorithm": "medium", "perf": 128.314, "source": "autotuned"}, {"m": 3, "n": 3, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 14, "algorithm": "medium", "perf": 116.311, "source": "autotuned"}, {"m": 3, "n": 3, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 2, "algorithm": "medium", "perf": 141.009, "source": "autotuned"}, {"m": 3, "n": 3, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 3, "algorithm": "medium", "perf": 160.153, "source": "autotuned"}, {"m": 3, "n": 3, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 22, "algorithm": "medium", "perf": 165.478, "source": "autotuned"}, {"m": 3, "n": 3, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 22, "algorithm": "medium", "perf": 158.175, "source": "autotuned"}, {"m": 3, "n": 3, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 15, "algorithm": "small", "perf": 170.362, "source": "autotuned"}, {"m": 3, "n": 3, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 12, "algorithm": "medium", "perf": 200.418, "source": "autotuned"}, {"m": 3, "n": 4, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 12, "algorithm": "medium", "perf": 60.2617, "source": "autotuned"}, {"m": 3, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 5, "algorithm": "medium", "perf": 84.0512, "source": "autotuned"}, {"m": 3, "n": 5, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 7, "algorithm": "medium", "perf": 82.3408, "source": "autotuned"}, {"m": 3, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 12, "algorithm": "medium", "perf": 122.632, "source": "autotuned"}, {"m": 3, "n": 6, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 26, "algorithm": "medium", "perf": 149.966, "source": "autotuned"}, {"m": 3, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 7, "algorithm": "small", "perf": 202.623, "source": "autotuned"}, {"m": 3, "n": 7, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 12, "algorithm": "small", "perf": 104.887, "source": "autotuned"}, {"m": 3, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 8, "algorithm": "small", "perf": 265.285, "source": "autotuned"}, {"m": 3, "n": 8, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 20, "algorithm": "medium", "perf": 142.651, "source": "autotuned"}, {"m": 3, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 6, "algorithm": "medium", "perf": 279.469, "source": "autotuned"}, {"m": 3, "n": 9, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 22, "algorithm": "medium", "perf": 157.818, "source": "autotuned"}, {"m": 3, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 6, "algorithm": "medium", "perf": 389.226, "source": "autotuned"}, {"m": 3, "n": 10, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 153.817, "source": "autotuned"}, {"m": 3, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 450.936, "source": "autotuned"}, {"m": 3, "n": 11, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 18, "algorithm": "medium", "perf": 172.335, "source": "autotuned"}, {"m": 3, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 487.302, "source": "autotuned"}, {"m": 3, "n": 12, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 272.932, "source": "autotuned"}, {"m": 3, "n": 12, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 7, "algorithm": "medium", "perf": 646.875, "source": "autotuned"}, {"m": 3, "n": 16, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 366.395, "source": "autotuned"}, {"m": 3, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 826.618, "source": "autotuned"}, {"m": 3, "n": 23, "k": 3, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 1, "algorithm": "medium", "perf": 346.986, "source": "autotuned"}, {"m": 3, "n": 23, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 29, "minblocks": 2, "algorithm": "medium", "perf": 807.591, "source": "autotuned"}, {"m": 4, "n": 3, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 59.588, "source": "autotuned"}, {"m": 4, "n": 3, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 91.0536, "source": "autotuned"}, {"m": 4, "n": 4, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 111.908, "source": "autotuned"}, {"m": 4, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 20, "algorithm": "medium", "perf": 123.061, "source": "autotuned"}, {"m": 4, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 16, "algorithm": "medium", "perf": 151.283, "source": "autotuned"}, {"m": 4, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 13, "algorithm": "medium", "perf": 158.124, "source": "autotuned"}, {"m": 4, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 16, "algorithm": "medium", "perf": 183.758, "source": "autotuned"}, {"m": 4, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 226.413, "source": "autotuned"}, {"m": 4, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "small", "perf": 289.266, "source": "autotuned"}, {"m": 4, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 2, "algorithm": "small", "perf": 234.219, "source": "autotuned"}, {"m": 4, "n": 4, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 9, "algorithm": "medium", "perf": 234.747, "source": "autotuned"}, {"m": 4, "n": 4, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 14, "algorithm": "medium", "perf": 282.632, "source": "autotuned"}, {"m": 4, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 11, "algorithm": "small", "perf": 299.18, "source": "autotuned"}, {"m": 4, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 10, "algorithm": "medium", "perf": 377.083, "source": "autotuned"}, {"m": 4, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 4, "algorithm": "small", "perf": 203.089, "source": "autotuned"}, {"m": 4, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 25, "algorithm": "medium", "perf": 202.459, "source": "autotuned"}, {"m": 4, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 8, "algorithm": "medium", "perf": 169.162, "source": "autotuned"}, {"m": 4, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 7, "algorithm": "medium", "perf": 217.578, "source": "autotuned"}, {"m": 4, "n": 7, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 26, "algorithm": "medium", "perf": 174.636, "source": "autotuned"}, {"m": 4, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 6, "algorithm": "medium", "perf": 262.665, "source": "autotuned"}, {"m": 4, "n": 8, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 4, "algorithm": "medium", "perf": 222.977, "source": "autotuned"}, {"m": 4, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 447.137, "source": "autotuned"}, {"m": 4, "n": 9, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 21, "algorithm": "medium", "perf": 249.88, "source": "autotuned"}, {"m": 4, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 6, "algorithm": "medium", "perf": 449.647, "source": "autotuned"}, {"m": 4, "n": 10, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 8, "algorithm": "medium", "perf": 270.477, "source": "autotuned"}, {"m": 4, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 3, "algorithm": "medium", "perf": 575.986, "source": "autotuned"}, {"m": 4, "n": 11, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 25, "algorithm": "medium", "perf": 266.977, "source": "autotuned"}, {"m": 4, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 741.426, "source": "autotuned"}, {"m": 4, "n": 12, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 25, "algorithm": "medium", "perf": 476.482, "source": "autotuned"}, {"m": 4, "n": 12, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 11, "algorithm": "medium", "perf": 825.924, "source": "autotuned"}, {"m": 4, "n": 16, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 1, "algorithm": "medium", "perf": 505.524, "source": "autotuned"}, {"m": 4, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 4, "algorithm": "medium", "perf": 1067.92, "source": "autotuned"}, {"m": 4, "n": 23, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 563.703, "source": "autotuned"}, {"m": 4, "n": 23, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 29, "minblocks": 6, "algorithm": "medium", "perf": 1029.0, "source": "autotuned"}, {"m": 5, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 14, "algorithm": "medium", "perf": 78.5437, "source": "autotuned"}, {"m": 5, "n": 3, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 8, "algorithm": "small", "perf": 140.412, "source": "autotuned"}, {"m": 5, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 119.486, "source": "autotuned"}, {"m": 5, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 211.411, "source": "autotuned"}, {"m": 5, "n": 5, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 149.112, "source": "autotuned"}, {"m": 5, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 11, "algorithm": "small", "perf": 197.036, "source": "autotuned"}, {"m": 5, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 222.291, "source": "autotuned"}, {"m": 5, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 267.939, "source": "autotuned"}, {"m": 5, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 12, "algorithm": "medium", "perf": 302.075, "source": "autotuned"}, {"m": 5, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 423.773, "source": "autotuned"}, {"m": 5, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 299.693, "source": "autotuned"}, {"m": 5, "n": 5, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 434.313, "source": "autotuned"}, {"m": 5, "n": 5, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 26, "algorithm": "medium", "perf": 503.922, "source": "autotuned"}, {"m": 5, "n": 5, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 14, "algorithm": "medium", "perf": 511.274, "source": "autotuned"}, {"m": 5, "n": 5, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 6, "algorithm": "medium", "perf": 518.448, "source": "autotuned"}, {"m": 5, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 14, "algorithm": "medium", "perf": 573.268, "source": "autotuned"}, {"m": 5, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 300.709, "source": "autotuned"}, {"m": 5, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 8, "algorithm": "small", "perf": 386.735, "source": "autotuned"}, {"m": 5, "n": 7, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 5, "algorithm": "medium", "perf": 281.674, "source": "autotuned"}, {"m": 5, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 7, "algorithm": "medium", "perf": 328.184, "source": "autotuned"}, {"m": 5, "n": 8, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 296.814, "source": "autotuned"}, {"m": 5, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 483.122, "source": "autotuned"}, {"m": 5, "n": 9, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 384.674, "source": "autotuned"}, {"m": 5, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 706.199, "source": "autotuned"}, {"m": 5, "n": 10, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 414.447, "source": "autotuned"}, {"m": 5, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 12, "algorithm": "medium", "perf": 745.609, "source": "autotuned"}, {"m": 5, "n": 11, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 8, "algorithm": "medium", "perf": 601.937, "source": "autotuned"}, {"m": 5, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 11, "algorithm": "medium", "perf": 945.236, "source": "autotuned"}, {"m": 5, "n": 12, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 24, "algorithm": "medium", "perf": 472.861, "source": "autotuned"}, {"m": 5, "n": 12, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 22, "algorithm": "medium", "perf": 1016.93, "source": "autotuned"}, {"m": 5, "n": 16, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 694.503, "source": "autotuned"}, {"m": 5, "n": 16, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 20, "minblocks": 16, "algorithm": "medium", "perf": 1120.43, "source": "autotuned"}, {"m": 5, "n": 23, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 14, "minblocks": 2, "algorithm": "medium", "perf": 925.576, "source": "autotuned"}, {"m": 5, "n": 23, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 31, "minblocks": 3, "algorithm": "medium", "perf": 1227.76, "source": "autotuned"}, {"m": 6, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 7, "algorithm": "medium", "perf": 94.2544, "source": "autotuned"}, {"m": 6, "n": 3, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 156.363, "source": "autotuned"}, {"m": 6, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 8, "algorithm": "medium", "perf": 165.788, "source": "autotuned"}, {"m": 6, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 12, "algorithm": "small", "perf": 230.366, "source": "autotuned"}, {"m": 6, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 242.931, "source": "autotuned"}, {"m": 6, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 5, "algorithm": "medium", "perf": 269.907, "source": "autotuned"}, {"m": 6, "n": 6, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 285.082, "source": "autotuned"}, {"m": 6, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 2, "algorithm": "medium", "perf": 274.249, "source": "autotuned"}, {"m": 6, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 442.052, "source": "autotuned"}, {"m": 6, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 3, "algorithm": "medium", "perf": 369.733, "source": "autotuned"}, {"m": 6, "n": 6, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 13, "algorithm": "medium", "perf": 470.905, "source": "autotuned"}, {"m": 6, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 11, "algorithm": "medium", "perf": 575.643, "source": "autotuned"}, {"m": 6, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 22, "algorithm": "medium", "perf": 524.301, "source": "autotuned"}, {"m": 6, "n": 6, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 541.641, "source": "autotuned"}, {"m": 6, "n": 6, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 24, "algorithm": "medium", "perf": 538.35, "source": "autotuned"}, {"m": 6, "n": 6, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 2, "algorithm": "medium", "perf": 566.47, "source": "autotuned"}, {"m": 6, "n": 6, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 14, "algorithm": "medium", "perf": 727.804, "source": "autotuned"}, {"m": 6, "n": 6, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 8, "algorithm": "medium", "perf": 799.476, "source": "autotuned"}, {"m": 6, "n": 7, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 342.394, "source": "autotuned"}, {"m": 6, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 23, "algorithm": "medium", "perf": 393.183, "source": "autotuned"}, {"m": 6, "n": 8, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 493.64, "source": "autotuned"}, {"m": 6, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 9, "algorithm": "medium", "perf": 699.393, "source": "autotuned"}, {"m": 6, "n": 9, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 556.646, "source": "autotuned"}, {"m": 6, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 23, "algorithm": "medium", "perf": 864.42, "source": "autotuned"}, {"m": 6, "n": 10, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 1, "algorithm": "medium", "perf": 471.286, "source": "autotuned"}, {"m": 6, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 22, "algorithm": "medium", "perf": 943.323, "source": "autotuned"}, {"m": 6, "n": 11, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 7, "algorithm": "medium", "perf": 674.902, "source": "autotuned"}, {"m": 6, "n": 11, "k": 11, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 11, "algorithm": "medium", "perf": 758.811, "source": "autotuned"}, {"m": 6, "n": 12, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 6, "minblocks": 3, "algorithm": "medium", "perf": 729.121, "source": "autotuned"}, {"m": 6, "n": 12, "k": 12, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 915.954, "source": "autotuned"}, {"m": 6, "n": 16, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 4, "algorithm": "medium", "perf": 899.944, "source": "autotuned"}, {"m": 6, "n": 16, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 16, "algorithm": "medium", "perf": 1304.86, "source": "autotuned"}, {"m": 6, "n": 23, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 16, "algorithm": "medium", "perf": 925.427, "source": "autotuned"}, {"m": 6, "n": 23, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 25, "minblocks": 4, "algorithm": "medium", "perf": 1349.15, "source": "autotuned"}, {"m": 7, "n": 3, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 8, "algorithm": "medium", "perf": 119.395, "source": "autotuned"}, {"m": 7, "n": 3, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 17, "algorithm": "medium", "perf": 209.607, "source": "autotuned"}, {"m": 7, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 211.854, "source": "autotuned"}, {"m": 7, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 320.618, "source": "autotuned"}, {"m": 7, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 337.009, "source": "autotuned"}, {"m": 7, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 24, "algorithm": "medium", "perf": 410.337, "source": "autotuned"}, {"m": 7, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 469.564, "source": "autotuned"}, {"m": 7, "n": 6, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 367.395, "source": "autotuned"}, {"m": 7, "n": 7, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 26, "algorithm": "medium", "perf": 328.442, "source": "autotuned"}, {"m": 7, "n": 7, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 1, "algorithm": "medium", "perf": 355.5, "source": "autotuned"}, {"m": 7, "n": 7, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 478.243, "source": "autotuned"}, {"m": 7, "n": 7, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 538.794, "source": "autotuned"}, {"m": 7, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 632.94, "source": "autotuned"}, {"m": 7, "n": 7, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 15, "algorithm": "medium", "perf": 759.257, "source": "autotuned"}, {"m": 7, "n": 7, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 761.05, "source": "autotuned"}, {"m": 7, "n": 7, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 16, "algorithm": "medium", "perf": 778.019, "source": "autotuned"}, {"m": 7, "n": 7, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 706.199, "source": "autotuned"}, {"m": 7, "n": 7, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 27, "algorithm": "medium", "perf": 793.057, "source": "autotuned"}, {"m": 7, "n": 7, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 6, "algorithm": "medium", "perf": 1008.46, "source": "autotuned"}, {"m": 7, "n": 7, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 1, "algorithm": "medium", "perf": 969.576, "source": "autotuned"}, {"m": 7, "n": 8, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 568.161, "source": "autotuned"}, {"m": 7, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 1, "algorithm": "medium", "perf": 902.969, "source": "autotuned"}, {"m": 7, "n": 9, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 23, "algorithm": "medium", "perf": 517.355, "source": "autotuned"}, {"m": 7, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 2, "algorithm": "medium", "perf": 793.253, "source": "autotuned"}, {"m": 7, "n": 10, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 13, "minblocks": 14, "algorithm": "medium", "perf": 718.91, "source": "autotuned"}, {"m": 7, "n": 10, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 10, "minblocks": 23, "algorithm": "medium", "perf": 900.092, "source": "autotuned"}, {"m": 7, "n": 11, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 7, "algorithm": "medium", "perf": 848.213, "source": "autotuned"}, {"m": 7, "n": 11, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 963.974, "source": "autotuned"}, {"m": 7, "n": 12, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 10, "algorithm": "medium", "perf": 901.596, "source": "autotuned"}, {"m": 7, "n": 12, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 14, "minblocks": 10, "algorithm": "medium", "perf": 1120.87, "source": "autotuned"}, {"m": 7, "n": 16, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 1149.36, "source": "autotuned"}, {"m": 7, "n": 16, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 10, "algorithm": "medium", "perf": 1466.3, "source": "autotuned"}, {"m": 7, "n": 23, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 16, "minblocks": 6, "algorithm": "medium", "perf": 1193.54, "source": "autotuned"}, {"m": 7, "n": 23, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 1522.25, "source": "autotuned"}, {"m": 8, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 4, "algorithm": "medium", "perf": 132.835, "source": "autotuned"}, {"m": 8, "n": 3, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 330.918, "source": "autotuned"}, {"m": 8, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 22, "algorithm": "medium", "perf": 245.039, "source": "autotuned"}, {"m": 8, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 516.246, "source": "autotuned"}, {"m": 8, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 5, "algorithm": "medium", "perf": 297.418, "source": "autotuned"}, {"m": 8, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 10, "algorithm": "medium", "perf": 516.822, "source": "autotuned"}, {"m": 8, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 1, "algorithm": "medium", "perf": 559.016, "source": "autotuned"}, {"m": 8, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 15, "algorithm": "medium", "perf": 598.724, "source": "autotuned"}, {"m": 8, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 561.082, "source": "autotuned"}, {"m": 8, "n": 7, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 763.392, "source": "autotuned"}, {"m": 8, "n": 8, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 19, "algorithm": "medium", "perf": 393.813, "source": "autotuned"}, {"m": 8, "n": 8, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 537.112, "source": "autotuned"}, {"m": 8, "n": 8, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 644.83, "source": "autotuned"}, {"m": 8, "n": 8, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 623.792, "source": "autotuned"}, {"m": 8, "n": 8, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 747.128, "source": "autotuned"}, {"m": 8, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 839.605, "source": "autotuned"}, {"m": 8, "n": 8, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 10, "algorithm": "medium", "perf": 1183.61, "source": "autotuned"}, {"m": 8, "n": 8, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 1200.78, "source": "autotuned"}, {"m": 8, "n": 16, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 1425.14, "source": "autotuned"}, {"m": 8, "n": 16, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 17, "minblocks": 16, "algorithm": "medium", "perf": 1671.22, "source": "autotuned"}, {"m": 8, "n": 23, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 20, "minblocks": 10, "algorithm": "medium", "perf": 1412.43, "source": "autotuned"}, {"m": 8, "n": 23, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 31, "minblocks": 8, "algorithm": "medium", "perf": 1682.11, "source": "autotuned"}, {"m": 9, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 129.559, "source": "autotuned"}, {"m": 9, "n": 3, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 12, "algorithm": "medium", "perf": 427.699, "source": "autotuned"}, {"m": 9, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 283.085, "source": "autotuned"}, {"m": 9, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 4, "algorithm": "small", "perf": 442.617, "source": "autotuned"}, {"m": 9, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 6, "algorithm": "medium", "perf": 391.489, "source": "autotuned"}, {"m": 9, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 13, "algorithm": "medium", "perf": 590.993, "source": "autotuned"}, {"m": 9, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 8, "algorithm": "small", "perf": 558.289, "source": "autotuned"}, {"m": 9, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 16, "algorithm": "medium", "perf": 748.385, "source": "autotuned"}, {"m": 9, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 8, "algorithm": "medium", "perf": 855.688, "source": "autotuned"}, {"m": 9, "n": 7, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 15, "algorithm": "medium", "perf": 960.205, "source": "autotuned"}, {"m": 9, "n": 9, "k": 3, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 9, "algorithm": "medium", "perf": 472.711, "source": "autotuned"}, {"m": 9, "n": 9, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 9, "algorithm": "medium", "perf": 526.767, "source": "autotuned"}, {"m": 9, "n": 9, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 6, "algorithm": "medium", "perf": 643.738, "source": "autotuned"}, {"m": 9, "n": 9, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 13, "minblocks": 12, "algorithm": "medium", "perf": 832.733, "source": "autotuned"}, {"m": 9, "n": 9, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 14, "minblocks": 4, "algorithm": "medium", "perf": 917.151, "source": "autotuned"}, {"m": 9, "n": 9, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 13, "algorithm": "small", "perf": 953.237, "source": "autotuned"}, {"m": 9, "n": 9, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 19, "minblocks": 16, "algorithm": "medium", "perf": 1169.1, "source": "autotuned"}, {"m": 9, "n": 9, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 19, "minblocks": 3, "algorithm": "medium", "perf": 1250.03, "source": "autotuned"}, {"m": 9, "n": 16, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 25, "algorithm": "medium", "perf": 1259.32, "source": "autotuned"}, {"m": 9, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 19, "minblocks": 7, "algorithm": "medium", "perf": 1604.95, "source": "autotuned"}, {"m": 9, "n": 23, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 19, "minblocks": 1, "algorithm": "medium", "perf": 1484.93, "source": "autotuned"}, {"m": 9, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 6, "algorithm": "medium", "perf": 1808.53, "source": "autotuned"}, {"m": 10, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 8, "algorithm": "medium", "perf": 172.47, "source": "autotuned"}, {"m": 10, "n": 3, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 2, "algorithm": "medium", "perf": 423.394, "source": "autotuned"}, {"m": 10, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 7, "algorithm": "medium", "perf": 253.505, "source": "autotuned"}, {"m": 10, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 12, "algorithm": "medium", "perf": 687.576, "source": "autotuned"}, {"m": 10, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 453.449, "source": "autotuned"}, {"m": 10, "n": 5, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 13, "algorithm": "medium", "perf": 836.378, "source": "autotuned"}, {"m": 10, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 12, "algorithm": "medium", "perf": 649.71, "source": "autotuned"}, {"m": 10, "n": 6, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 18, "algorithm": "medium", "perf": 1008.29, "source": "autotuned"}, {"m": 10, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 9, "algorithm": "medium", "perf": 663.084, "source": "autotuned"}, {"m": 10, "n": 7, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 3, "algorithm": "medium", "perf": 860.717, "source": "autotuned"}, {"m": 10, "n": 10, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 14, "algorithm": "medium", "perf": 514.267, "source": "autotuned"}, {"m": 10, "n": 10, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 12, "minblocks": 9, "algorithm": "small", "perf": 689.868, "source": "autotuned"}, {"m": 10, "n": 10, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 5, "algorithm": "medium", "perf": 957.051, "source": "autotuned"}, {"m": 10, "n": 10, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 14, "algorithm": "medium", "perf": 853.143, "source": "autotuned"}, {"m": 10, "n": 10, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 12, "algorithm": "small", "perf": 863.212, "source": "autotuned"}, {"m": 10, "n": 10, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 20, "minblocks": 2, "algorithm": "medium", "perf": 1115.59, "source": "autotuned"}, {"m": 10, "n": 10, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 5, "algorithm": "medium", "perf": 1434.5, "source": "autotuned"}, {"m": 10, "n": 10, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 24, "minblocks": 2, "algorithm": "medium", "perf": 1432.58, "source": "autotuned"}, {"m": 10, "n": 16, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 19, "minblocks": 3, "algorithm": "medium", "perf": 1513.98, "source": "autotuned"}, {"m": 10, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 14, "algorithm": "medium", "perf": 1714.34, "source": "autotuned"}, {"m": 10, "n": 23, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 23, "minblocks": 2, "algorithm": "medium", "perf": 1622.51, "source": "autotuned"}, {"m": 10, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 1944.26, "source": "autotuned"}, {"m": 11, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 176.216, "source": "autotuned"}, {"m": 11, "n": 3, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 9, "algorithm": "medium", "perf": 496.753, "source": "autotuned"}, {"m": 11, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 5, "algorithm": "medium", "perf": 329.247, "source": "autotuned"}, {"m": 11, "n": 4, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 694.62, "source": "autotuned"}, {"m": 11, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 4, "algorithm": "medium", "perf": 412.56, "source": "autotuned"}, {"m": 11, "n": 5, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 12, "algorithm": "medium", "perf": 777.126, "source": "autotuned"}, {"m": 11, "n": 6, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 623.818, "source": "autotuned"}, {"m": 11, "n": 6, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 20, "minblocks": 1, "algorithm": "medium", "perf": 800.38, "source": "autotuned"}, {"m": 11, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 13, "algorithm": "medium", "perf": 838.182, "source": "autotuned"}, {"m": 11, "n": 7, "k": 11, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 15, "algorithm": "medium", "perf": 988.882, "source": "autotuned"}, {"m": 11, "n": 11, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 724.31, "source": "autotuned"}, {"m": 11, "n": 11, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 835.893, "source": "autotuned"}, {"m": 11, "n": 11, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 15, "algorithm": "medium", "perf": 1030.54, "source": "autotuned"}, {"m": 11, "n": 11, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 10, "algorithm": "medium", "perf": 1067.98, "source": "autotuned"}, {"m": 11, "n": 11, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 16, "algorithm": "medium", "perf": 1052.5, "source": "autotuned"}, {"m": 11, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 1357.04, "source": "autotuned"}, {"m": 11, "n": 11, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 14, "algorithm": "medium", "perf": 1482.09, "source": "autotuned"}, {"m": 11, "n": 11, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 3, "algorithm": "medium", "perf": 1558.5, "source": "autotuned"}, {"m": 11, "n": 16, "k": 11, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 17, "minblocks": 3, "algorithm": "medium", "perf": 1618.33, "source": "autotuned"}, {"m": 11, "n": 16, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 1814.42, "source": "autotuned"}, {"m": 11, "n": 23, "k": 11, "tile_m": 2, "tile_n": 3, "threads": 256, "grouping": 22, "minblocks": 5, "algorithm": "medium", "perf": 1773.17, "source": "autotuned"}, {"m": 11, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 31, "minblocks": 2, "algorithm": "medium", "perf": 1969.81, "source": "autotuned"}, {"m": 12, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 3, "algorithm": "medium", "perf": 192.663, "source": "autotuned"}, {"m": 12, "n": 3, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 11, "algorithm": "medium", "perf": 641.726, "source": "autotuned"}, {"m": 12, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 7, "algorithm": "medium", "perf": 309.312, "source": "autotuned"}, {"m": 12, "n": 4, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 17, "algorithm": "medium", "perf": 743.23, "source": "autotuned"}, {"m": 12, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 542.139, "source": "autotuned"}, {"m": 12, "n": 5, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 11, "algorithm": "medium", "perf": 1027.16, "source": "autotuned"}, {"m": 12, "n": 6, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 13, "algorithm": "medium", "perf": 643.773, "source": "autotuned"}, {"m": 12, "n": 6, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 20, "minblocks": 10, "algorithm": "medium", "perf": 906.348, "source": "autotuned"}, {"m": 12, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 16, "algorithm": "medium", "perf": 809.689, "source": "autotuned"}, {"m": 12, "n": 7, "k": 12, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 3, "algorithm": "medium", "perf": 1090.56, "source": "autotuned"}, {"m": 12, "n": 12, "k": 3, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 10, "minblocks": 2, "algorithm": "medium", "perf": 798.931, "source": "autotuned"}, {"m": 12, "n": 12, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 18, "minblocks": 9, "algorithm": "medium", "perf": 917.343, "source": "autotuned"}, {"m": 12, "n": 12, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 16, "minblocks": 5, "algorithm": "medium", "perf": 1084.48, "source": "autotuned"}, {"m": 12, "n": 12, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 12, "algorithm": "medium", "perf": 1147.44, "source": "autotuned"}, {"m": 12, "n": 12, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 1182.77, "source": "autotuned"}, {"m": 12, "n": 12, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 19, "minblocks": 10, "algorithm": "medium", "perf": 1484.64, "source": "autotuned"}, {"m": 12, "n": 12, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 20, "minblocks": 10, "algorithm": "medium", "perf": 1631.09, "source": "autotuned"}, {"m": 12, "n": 12, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 25, "minblocks": 5, "algorithm": "medium", "perf": 1629.36, "source": "autotuned"}, {"m": 12, "n": 16, "k": 12, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 1804.78, "source": "autotuned"}, {"m": 12, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 26, "minblocks": 3, "algorithm": "medium", "perf": 2003.56, "source": "autotuned"}, {"m": 12, "n": 23, "k": 12, "tile_m": 2, "tile_n": 3, "threads": 256, "grouping": 21, "minblocks": 7, "algorithm": "medium", "perf": 1787.6, "source": "autotuned"}, {"m": 12, "n": 23, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 320, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2065.04, "source": "autotuned"}, {"m": 13, "n": 13, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 15, "minblocks": 9, "algorithm": "medium", "perf": 1671.24, "source": "autotuned"}, {"m": 13, "n": 13, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 26, "minblocks": 6, "algorithm": "medium", "perf": 1771.39, "source": "autotuned"}, {"m": 13, "n": 23, "k": 13, "tile_m": 2, "tile_n": 3, "threads": 320, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 1923.26, "source": "autotuned"}, {"m": 13, "n": 23, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 2135.27, "source": "autotuned"}, {"m": 14, "n": 14, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 4, "algorithm": "medium", "perf": 1768.02, "source": "autotuned"}, {"m": 14, "n": 14, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 31, "minblocks": 7, "algorithm": "medium", "perf": 1873.71, "source": "autotuned"}, {"m": 14, "n": 14, "k": 29, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 6, "algorithm": "medium", "perf": 1930.65, "source": "autotuned"}, {"m": 14, "n": 14, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 31, "minblocks": 3, "algorithm": "medium", "perf": 2050.32, "source": "autotuned"}, {"m": 14, "n": 23, "k": 14, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2028.22, "source": "autotuned"}, {"m": 14, "n": 23, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2191.81, "source": "autotuned"}, {"m": 14, "n": 29, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 19, "minblocks": 1, "algorithm": "medium", "perf": 2174.29, "source": "autotuned"}, {"m": 14, "n": 29, "k": 29, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 2415.93, "source": "autotuned"}, {"m": 14, "n": 29, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 4, "minblocks": 3, "algorithm": "medium", "perf": 2627.22, "source": "autotuned"}, {"m": 14, "n": 32, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 29, "minblocks": 1, "algorithm": "medium", "perf": 2394.63, "source": "autotuned"}, {"m": 14, "n": 32, "k": 29, "tile_m": 2, "tile_n": 2, "threads": 512, "grouping": 6, "minblocks": 1, "algorithm": "medium", "perf": 2657.66, "source": "autotuned"}, {"m": 14, "n": 32, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 6, "minblocks": 2, "algorithm": "medium", "perf": 2734.11, "source": "autotuned"}, {"m": 15, "n": 15, "k": 15, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 22, "minblocks": 1, "algorithm": "medium", "perf": 1891.35, "source": "autotuned"}, {"m": 15, "n": 15, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2019.48, "source": "autotuned"}, {"m": 15, "n": 23, "k": 15, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2140.57, "source": "autotuned"}, {"m": 15, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2301.82, "source": "autotuned"}, {"m": 16, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 6, "algorithm": "small", "perf": 271.01, "source": "autotuned"}, {"m": 16, "n": 3, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 16, "algorithm": "medium", "perf": 831.372, "source": "autotuned"}, {"m": 16, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 554.061, "source": "autotuned"}, {"m": 16, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 19, "minblocks": 1, "algorithm": "medium", "perf": 1081.08, "source": "autotuned"}, {"m": 16, "n": 5, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 644.356, "source": "autotuned"}, {"m": 16, "n": 5, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 19, "minblocks": 9, "algorithm": "medium", "perf": 1136.45, "source": "autotuned"}, {"m": 16, "n": 6, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 1, "algorithm": "medium", "perf": 749.443, "source": "autotuned"}, {"m": 16, "n": 6, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 19, "minblocks": 3, "algorithm": "medium", "perf": 1346.31, "source": "autotuned"}, {"m": 16, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 1107.69, "source": "autotuned"}, {"m": 16, "n": 7, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 19, "minblocks": 10, "algorithm": "medium", "perf": 1474.34, "source": "autotuned"}, {"m": 16, "n": 8, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 11, "algorithm": "medium", "perf": 1406.39, "source": "autotuned"}, {"m": 16, "n": 8, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 26, "minblocks": 11, "algorithm": "medium", "perf": 1698.93, "source": "autotuned"}, {"m": 16, "n": 9, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 18, "minblocks": 6, "algorithm": "medium", "perf": 1310.24, "source": "autotuned"}, {"m": 16, "n": 9, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 19, "minblocks": 1, "algorithm": "medium", "perf": 1602.73, "source": "autotuned"}, {"m": 16, "n": 10, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 20, "minblocks": 6, "algorithm": "medium", "perf": 1460.69, "source": "autotuned"}, {"m": 16, "n": 10, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 19, "minblocks": 8, "algorithm": "medium", "perf": 1717.21, "source": "autotuned"}, {"m": 16, "n": 11, "k": 11, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 19, "minblocks": 4, "algorithm": "medium", "perf": 1622.85, "source": "autotuned"}, {"m": 16, "n": 11, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 19, "minblocks": 9, "algorithm": "medium", "perf": 1807.14, "source": "autotuned"}, {"m": 16, "n": 12, "k": 12, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 1846.72, "source": "autotuned"}, {"m": 16, "n": 12, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 1984.15, "source": "autotuned"}, {"m": 16, "n": 16, "k": 3, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 1177.38, "source": "autotuned"}, {"m": 16, "n": 16, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 10, "minblocks": 4, "algorithm": "medium", "perf": 1558.89, "source": "autotuned"}, {"m": 16, "n": 16, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 1415.67, "source": "autotuned"}, {"m": 16, "n": 16, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 1, "algorithm": "medium", "perf": 1847.01, "source": "autotuned"}, {"m": 16, "n": 16, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 6, "algorithm": "medium", "perf": 1712.64, "source": "autotuned"}, {"m": 16, "n": 16, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 19, "minblocks": 5, "algorithm": "medium", "perf": 2026.67, "source": "autotuned"}, {"m": 16, "n": 16, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 19, "minblocks": 4, "algorithm": "medium", "perf": 1843.78, "source": "autotuned"}, {"m": 16, "n": 16, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 19, "minblocks": 5, "algorithm": "medium", "perf": 2161.01, "source": "autotuned"}, {"m": 16, "n": 16, "k": 11, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 22, "minblocks": 6, "algorithm": "medium", "perf": 1990.73, "source": "autotuned"}, {"m": 16, "n": 16, "k": 12, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 2, "algorithm": "medium", "perf": 2230.82, "source": "autotuned"}, {"m": 16, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 27, "minblocks": 4, "algorithm": "medium", "perf": 2299.66, "source": "autotuned"}, {"m": 16, "n": 16, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2240.89, "source": "autotuned"}, {"m": 16, "n": 23, "k": 16, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 32, "minblocks": 3, "algorithm": "medium", "perf": 2338.78, "source": "autotuned"}, {"m": 16, "n": 23, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2403.01, "source": "autotuned"}, {"m": 17, "n": 17, "k": 17, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2037.81, "source": "autotuned"}, {"m": 17, "n": 17, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 192, "grouping": 25, "minblocks": 5, "algorithm": "medium", "perf": 2136.81, "source": "autotuned"}, {"m": 17, "n": 23, "k": 17, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 29, "minblocks": 3, "algorithm": "medium", "perf": 2226.25, "source": "autotuned"}, {"m": 17, "n": 23, "k": 23, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2312.55, "source": "autotuned"}, {"m": 18, "n": 18, "k": 18, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2226.65, "source": "autotuned"}, {"m": 18, "n": 18, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 31, "minblocks": 1, "algorithm": "medium", "perf": 2262.32, "source": "autotuned"}, {"m": 18, "n": 23, "k": 18, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2325.84, "source": "autotuned"}, {"m": 18, "n": 23, "k": 23, "tile_m": 6, "tile_n": 2, "threads": 256, "grouping": 25, "minblocks": 3, "algorithm": "medium", "perf": 2424.69, "source": "autotuned"}, {"m": 19, "n": 19, "k": 19, "tile_m": 2, "tile_n": 4, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2263.16, "source": "autotuned"}, {"m": 19, "n": 19, "k": 23, "tile_m": 2, "tile_n": 4, "threads": 192, "grouping": 29, "minblocks": 2, "algorithm": "medium", "perf": 2327.58, "source": "autotuned"}, {"m": 19, "n": 23, "k": 19, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 2406.26, "source": "autotuned"}, {"m": 19, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 7, "algorithm": "medium", "perf": 2470.3, "source": "autotuned"}, {"m": 20, "n": 20, "k": 20, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2398.36, "source": "autotuned"}, {"m": 20, "n": 20, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 512, "grouping": 19, "minblocks": 2, "algorithm": "medium", "perf": 2424.99, "source": "autotuned"}, {"m": 20, "n": 23, "k": 20, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 6, "algorithm": "medium", "perf": 2544.57, "source": "autotuned"}, {"m": 20, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 576, "grouping": 25, "minblocks": 2, "algorithm": "medium", "perf": 2581.28, "source": "autotuned"}, {"m": 22, "n": 22, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 512, "grouping": 19, "minblocks": 4, "algorithm": "medium", "perf": 2627.8, "source": "autotuned"}, {"m": 23, "n": 3, "k": 3, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 6, "minblocks": 1, "algorithm": "medium", "perf": 416.91, "source": "autotuned"}, {"m": 23, "n": 3, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 803.507, "source": "autotuned"}, {"m": 23, "n": 4, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 20, "minblocks": 15, "algorithm": "medium", "perf": 504.685, "source": "autotuned"}, {"m": 23, "n": 4, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 29, "minblocks": 1, "algorithm": "medium", "perf": 1032.52, "source": "autotuned"}, {"m": 23, "n": 5, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 4, "algorithm": "small", "perf": 768.368, "source": "autotuned"}, {"m": 23, "n": 5, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 31, "minblocks": 3, "algorithm": "medium", "perf": 1208.14, "source": "autotuned"}, {"m": 23, "n": 6, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 16, "algorithm": "medium", "perf": 1008.43, "source": "autotuned"}, {"m": 23, "n": 6, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 29, "minblocks": 4, "algorithm": "medium", "perf": 1354.9, "source": "autotuned"}, {"m": 23, "n": 7, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 20, "minblocks": 4, "algorithm": "medium", "perf": 1156.79, "source": "autotuned"}, {"m": 23, "n": 7, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 30, "minblocks": 6, "algorithm": "medium", "perf": 1518.1, "source": "autotuned"}, {"m": 23, "n": 8, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 18, "minblocks": 1, "algorithm": "medium", "perf": 1409.05, "source": "autotuned"}, {"m": 23, "n": 8, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 1673.24, "source": "autotuned"}, {"m": 23, "n": 9, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 1467.38, "source": "autotuned"}, {"m": 23, "n": 9, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 1770.44, "source": "autotuned"}, {"m": 23, "n": 10, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 1674.46, "source": "autotuned"}, {"m": 23, "n": 10, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 1923.06, "source": "autotuned"}, {"m": 23, "n": 11, "k": 11, "tile_m": 3, "tile_n": 2, "threads": 256, "grouping": 22, "minblocks": 2, "algorithm": "medium", "perf": 1759.15, "source": "autotuned"}, {"m": 23, "n": 11, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 1963.18, "source": "autotuned"}, {"m": 23, "n": 12, "k": 12, "tile_m": 2, "tile_n": 3, "threads": 192, "grouping": 25, "minblocks": 10, "algorithm": "medium", "perf": 1778.02, "source": "autotuned"}, {"m": 23, "n": 12, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2084.23, "source": "autotuned"}, {"m": 23, "n": 13, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 1928.04, "source": "autotuned"}, {"m": 23, "n": 13, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 2135.28, "source": "autotuned"}, {"m": 23, "n": 14, "k": 14, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2031.27, "source": "autotuned"}, {"m": 23, "n": 14, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2192.88, "source": "autotuned"}, {"m": 23, "n": 15, "k": 15, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2165.94, "source": "autotuned"}, {"m": 23, "n": 15, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2304.05, "source": "autotuned"}, {"m": 23, "n": 16, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2334.13, "source": "autotuned"}, {"m": 23, "n": 16, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 384, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2403.02, "source": "autotuned"}, {"m": 23, "n": 17, "k": 17, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 26, "minblocks": 4, "algorithm": "medium", "perf": 2218.82, "source": "autotuned"}, {"m": 23, "n": 17, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 21, "minblocks": 8, "algorithm": "medium", "perf": 2332.53, "source": "autotuned"}, {"m": 23, "n": 18, "k": 18, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2330.69, "source": "autotuned"}, {"m": 23, "n": 18, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2432.94, "source": "autotuned"}, {"m": 23, "n": 19, "k": 19, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 31, "minblocks": 8, "algorithm": "medium", "perf": 2403.93, "source": "autotuned"}, {"m": 23, "n": 19, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2478.42, "source": "autotuned"}, {"m": 23, "n": 20, "k": 20, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2534.06, "source": "autotuned"}, {"m": 23, "n": 20, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2559.43, "source": "autotuned"}, {"m": 23, "n": 23, "k": 3, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 3, "algorithm": "medium", "perf": 1254.94, "source": "autotuned"}, {"m": 23, "n": 23, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 15, "minblocks": 6, "algorithm": "medium", "perf": 1523.87, "source": "autotuned"}, {"m": 23, "n": 23, "k": 5, "tile_m": 2, "tile_n": 5, "threads": 192, "grouping": 17, "minblocks": 10, "algorithm": "medium", "perf": 1697.4, "source": "autotuned"}, {"m": 23, "n": 23, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 17, "minblocks": 1, "algorithm": "medium", "perf": 1810.83, "source": "autotuned"}, {"m": 23, "n": 23, "k": 7, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 1935.98, "source": "autotuned"}, {"m": 23, "n": 23, "k": 8, "tile_m": 3, "tile_n": 3, "threads": 192, "grouping": 22, "minblocks": 2, "algorithm": "medium", "perf": 2075.16, "source": "autotuned"}, {"m": 23, "n": 23, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 32, "minblocks": 3, "algorithm": "medium", "perf": 2137.24, "source": "autotuned"}, {"m": 23, "n": 23, "k": 10, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 31, "minblocks": 1, "algorithm": "medium", "perf": 2221.82, "source": "autotuned"}, {"m": 23, "n": 23, "k": 11, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 31, "minblocks": 3, "algorithm": "medium", "perf": 2291.66, "source": "autotuned"}, {"m": 23, "n": 23, "k": 12, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 32, "minblocks": 5, "algorithm": "medium", "perf": 2340.29, "source": "autotuned"}, {"m": 23, "n": 23, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2403.89, "source": "autotuned"}, {"m": 23, "n": 23, "k": 14, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 2403.99, "source": "autotuned"}, {"m": 23, "n": 23, "k": 15, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2457.42, "source": "autotuned"}, {"m": 23, "n": 23, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 2523.59, "source": "autotuned"}, {"m": 23, "n": 23, "k": 17, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2516.3, "source": "autotuned"}, {"m": 23, "n": 23, "k": 18, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 29, "minblocks": 1, "algorithm": "medium", "perf": 2508.77, "source": "autotuned"}, {"m": 23, "n": 23, "k": 19, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2543.19, "source": "autotuned"}, {"m": 23, "n": 23, "k": 20, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2558.41, "source": "autotuned"}, {"m": 23, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2633.42, "source": "autotuned"}, {"m": 24, "n": 24, "k": 24, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 3079.79, "source": "autotuned"}, {"m": 24, "n": 24, "k": 32, "tile_m": 2, "tile_n": 3, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 3179.83, "source": "autotuned"}, {"m": 24, "n": 32, "k": 24, "tile_m": 2, "tile_n": 4, "threads": 384, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 3430.27, "source": "autotuned"}, {"m": 24, "n": 32, "k": 32, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 3544.87, "source": "autotuned"}, {"m": 29, "n": 14, "k": 14, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 26, "minblocks": 1, "algorithm": "medium", "perf": 2113.67, "source": "autotuned"}, {"m": 29, "n": 14, "k": 29, "tile_m": 4, "tile_n": 2, "w": 10, "v": 8, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2313.13, "source": "autotuned"}, {"m": 29, "n": 14, "k": 32, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 1, "algorithm": "medium", "perf": 2426.9, "source": "autotuned"}, {"m": 29, "n": 29, "k": 14, "tile_m": 3, "tile_n": 3, "threads": 256, "grouping": 32, "minblocks": 8, "algorithm": "medium", "perf": 2762.54, "source": "autotuned"}, {"m": 29, "n": 29, "k": 29, "tile_m": 3, "tile_n": 3, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 3268.86, "source": "autotuned"}, {"m": 29, "n": 29, "k": 32, "tile_m": 3, "tile_n": 3, "w": 12, "v": 22, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 3430.8, "source": "autotuned"}, {"m": 29, "n": 32, "k": 14, "tile_m": 2, "tile_n": 4, "threads": 320, "grouping": 32, "minblocks": 2, "algorithm": "medium", "perf": 3099.21, "source": "autotuned"}, {"m": 29, "n": 32, "k": 29, "tile_m": 3, "tile_n": 3, "w": 4, "v": 20, "threads": 128, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3632.97, "source": "autotuned"}, {"m": 29, "n": 32, "k": 32, "tile_m": 3, "tile_n": 3, "w": 12, "v": 20, "threads": 128, "grouping": 16, "minblocks": 2, "algorithm": "largeDB1", "perf": 3755.41, "source": "autotuned"}, {"m": 32, "n": 14, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 29, "minblocks": 5, "algorithm": "medium", "perf": 2364.55, "source": "autotuned"}, {"m": 32, "n": 14, "k": 29, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 5, "minblocks": 2, "algorithm": "medium", "perf": 2643.28, "source": "autotuned"}, {"m": 32, "n": 14, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 576, "grouping": 26, "minblocks": 1, "algorithm": "medium", "perf": 2768.43, "source": "autotuned"}, {"m": 32, "n": 24, "k": 24, "tile_m": 2, "tile_n": 4, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3394.48, "source": "autotuned"}, {"m": 32, "n": 24, "k": 32, "tile_m": 2, "tile_n": 4, "w": 8, "v": 20, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3594.98, "source": "autotuned"}, {"m": 32, "n": 29, "k": 14, "tile_m": 2, "tile_n": 4, "threads": 320, "grouping": 32, "minblocks": 2, "algorithm": "medium", "perf": 3173.65, "source": "autotuned"}, {"m": 32, "n": 29, "k": 29, "tile_m": 2, "tile_n": 4, "threads": 512, "grouping": 26, "minblocks": 4, "algorithm": "medium", "perf": 3673.46, "source": "autotuned"}, {"m": 32, "n": 29, "k": 32, "tile_m": 2, "tile_n": 4, "threads": 512, "grouping": 26, "minblocks": 3, "algorithm": "medium", "perf": 3801.04, "source": "autotuned"}, {"m": 32, "n": 32, "k": 14, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 29, "minblocks": 1, "algorithm": "medium", "perf": 3570.23, "source": "autotuned"}, {"m": 32, "n": 32, "k": 24, "tile_m": 3, "tile_n": 3, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 3907.32, "source": "autotuned"}, {"m": 32, "n": 32, "k": 29, "tile_m": 3, "tile_n": 3, "w": 4, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4075.72, "source": "autotuned"}, {"m": 32, "n": 32, "k": 32, "tile_m": 3, "tile_n": 3, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4179.99, "source": "autotuned"}, {"m": 72, "n": 72, "k": 72, "tile_m": 5, "tile_n": 6, "w": 8, "v": 28, "threads": 192, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8144.64, "source": "autotuned"} ] ================================================ FILE: src/acc/libsmm_acc/parameters/parameters_Mi300.json ================================================ [ {"m": 3, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 48.6087, "source": "autotuned"}, {"m": 3, "n": 3, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 4, "algorithm": "medium", "perf": 84.8962, "source": "autotuned"}, {"m": 3, "n": 3, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 73.5997, "source": "autotuned"}, {"m": 3, "n": 3, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 21, "algorithm": "medium", "perf": 107.41, "source": "autotuned"}, {"m": 3, "n": 3, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 5, "algorithm": "medium", "perf": 128.314, "source": "autotuned"}, {"m": 3, "n": 3, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 14, "algorithm": "medium", "perf": 116.311, "source": "autotuned"}, {"m": 3, "n": 3, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 2, "algorithm": "medium", "perf": 141.009, "source": "autotuned"}, {"m": 3, "n": 3, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 3, "algorithm": "medium", "perf": 160.153, "source": "autotuned"}, {"m": 3, "n": 3, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 22, "algorithm": "medium", "perf": 165.478, "source": "autotuned"}, {"m": 3, "n": 3, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 22, "algorithm": "medium", "perf": 158.175, "source": "autotuned"}, {"m": 3, "n": 3, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 15, "algorithm": "small", "perf": 170.362, "source": "autotuned"}, {"m": 3, "n": 3, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 12, "algorithm": "medium", "perf": 200.418, "source": "autotuned"}, {"m": 3, "n": 4, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 12, "algorithm": "medium", "perf": 60.2617, "source": "autotuned"}, {"m": 3, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 5, "algorithm": "medium", "perf": 84.0512, "source": "autotuned"}, {"m": 3, "n": 5, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 7, "algorithm": "medium", "perf": 82.3408, "source": "autotuned"}, {"m": 3, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 12, "algorithm": "medium", "perf": 122.632, "source": "autotuned"}, {"m": 3, "n": 6, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 26, "algorithm": "medium", "perf": 149.966, "source": "autotuned"}, {"m": 3, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 7, "algorithm": "small", "perf": 202.623, "source": "autotuned"}, {"m": 3, "n": 7, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 12, "algorithm": "small", "perf": 104.887, "source": "autotuned"}, {"m": 3, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 8, "algorithm": "small", "perf": 265.285, "source": "autotuned"}, {"m": 3, "n": 8, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 20, "algorithm": "medium", "perf": 142.651, "source": "autotuned"}, {"m": 3, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 6, "algorithm": "medium", "perf": 279.469, "source": "autotuned"}, {"m": 3, "n": 9, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 22, "algorithm": "medium", "perf": 157.818, "source": "autotuned"}, {"m": 3, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 6, "algorithm": "medium", "perf": 389.226, "source": "autotuned"}, {"m": 3, "n": 10, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 153.817, "source": "autotuned"}, {"m": 3, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 450.936, "source": "autotuned"}, {"m": 3, "n": 11, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 18, "algorithm": "medium", "perf": 172.335, "source": "autotuned"}, {"m": 3, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 487.302, "source": "autotuned"}, {"m": 3, "n": 12, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 272.932, "source": "autotuned"}, {"m": 3, "n": 12, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 7, "algorithm": "medium", "perf": 646.875, "source": "autotuned"}, {"m": 3, "n": 16, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 366.395, "source": "autotuned"}, {"m": 3, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 826.618, "source": "autotuned"}, {"m": 3, "n": 23, "k": 3, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 1, "algorithm": "medium", "perf": 346.986, "source": "autotuned"}, {"m": 3, "n": 23, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 29, "minblocks": 2, "algorithm": "medium", "perf": 807.591, "source": "autotuned"}, {"m": 4, "n": 3, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 59.588, "source": "autotuned"}, {"m": 4, "n": 3, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 91.0536, "source": "autotuned"}, {"m": 4, "n": 4, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 111.908, "source": "autotuned"}, {"m": 4, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 20, "algorithm": "medium", "perf": 123.061, "source": "autotuned"}, {"m": 4, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 16, "algorithm": "medium", "perf": 151.283, "source": "autotuned"}, {"m": 4, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 13, "algorithm": "medium", "perf": 158.124, "source": "autotuned"}, {"m": 4, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 16, "algorithm": "medium", "perf": 183.758, "source": "autotuned"}, {"m": 4, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 226.413, "source": "autotuned"}, {"m": 4, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "small", "perf": 289.266, "source": "autotuned"}, {"m": 4, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 2, "algorithm": "small", "perf": 234.219, "source": "autotuned"}, {"m": 4, "n": 4, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 9, "algorithm": "medium", "perf": 234.747, "source": "autotuned"}, {"m": 4, "n": 4, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 14, "algorithm": "medium", "perf": 282.632, "source": "autotuned"}, {"m": 4, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 11, "algorithm": "small", "perf": 299.18, "source": "autotuned"}, {"m": 4, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 10, "algorithm": "medium", "perf": 377.083, "source": "autotuned"}, {"m": 4, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 4, "algorithm": "small", "perf": 203.089, "source": "autotuned"}, {"m": 4, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 25, "algorithm": "medium", "perf": 202.459, "source": "autotuned"}, {"m": 4, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 8, "algorithm": "medium", "perf": 169.162, "source": "autotuned"}, {"m": 4, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 7, "algorithm": "medium", "perf": 217.578, "source": "autotuned"}, {"m": 4, "n": 7, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 26, "algorithm": "medium", "perf": 174.636, "source": "autotuned"}, {"m": 4, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 6, "algorithm": "medium", "perf": 262.665, "source": "autotuned"}, {"m": 4, "n": 8, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 4, "algorithm": "medium", "perf": 222.977, "source": "autotuned"}, {"m": 4, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 447.137, "source": "autotuned"}, {"m": 4, "n": 9, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 21, "algorithm": "medium", "perf": 249.88, "source": "autotuned"}, {"m": 4, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 6, "algorithm": "medium", "perf": 449.647, "source": "autotuned"}, {"m": 4, "n": 10, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 8, "algorithm": "medium", "perf": 270.477, "source": "autotuned"}, {"m": 4, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 3, "algorithm": "medium", "perf": 575.986, "source": "autotuned"}, {"m": 4, "n": 11, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 25, "algorithm": "medium", "perf": 266.977, "source": "autotuned"}, {"m": 4, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 741.426, "source": "autotuned"}, {"m": 4, "n": 12, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 25, "algorithm": "medium", "perf": 476.482, "source": "autotuned"}, {"m": 4, "n": 12, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 11, "algorithm": "medium", "perf": 825.924, "source": "autotuned"}, {"m": 4, "n": 16, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 1, "algorithm": "medium", "perf": 505.524, "source": "autotuned"}, {"m": 4, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 4, "algorithm": "medium", "perf": 1067.92, "source": "autotuned"}, {"m": 4, "n": 23, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 563.703, "source": "autotuned"}, {"m": 4, "n": 23, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 29, "minblocks": 6, "algorithm": "medium", "perf": 1029.0, "source": "autotuned"}, {"m": 5, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 14, "algorithm": "medium", "perf": 78.5437, "source": "autotuned"}, {"m": 5, "n": 3, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 8, "algorithm": "small", "perf": 140.412, "source": "autotuned"}, {"m": 5, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 119.486, "source": "autotuned"}, {"m": 5, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 211.411, "source": "autotuned"}, {"m": 5, "n": 5, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 149.112, "source": "autotuned"}, {"m": 5, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 11, "algorithm": "small", "perf": 197.036, "source": "autotuned"}, {"m": 5, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 222.291, "source": "autotuned"}, {"m": 5, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 267.939, "source": "autotuned"}, {"m": 5, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 12, "algorithm": "medium", "perf": 302.075, "source": "autotuned"}, {"m": 5, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 423.773, "source": "autotuned"}, {"m": 5, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 299.693, "source": "autotuned"}, {"m": 5, "n": 5, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 434.313, "source": "autotuned"}, {"m": 5, "n": 5, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 26, "algorithm": "medium", "perf": 503.922, "source": "autotuned"}, {"m": 5, "n": 5, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 14, "algorithm": "medium", "perf": 511.274, "source": "autotuned"}, {"m": 5, "n": 5, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 6, "algorithm": "medium", "perf": 518.448, "source": "autotuned"}, {"m": 5, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 14, "algorithm": "medium", "perf": 573.268, "source": "autotuned"}, {"m": 5, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 300.709, "source": "autotuned"}, {"m": 5, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 8, "algorithm": "small", "perf": 386.735, "source": "autotuned"}, {"m": 5, "n": 7, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 5, "algorithm": "medium", "perf": 281.674, "source": "autotuned"}, {"m": 5, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 7, "algorithm": "medium", "perf": 328.184, "source": "autotuned"}, {"m": 5, "n": 8, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 296.814, "source": "autotuned"}, {"m": 5, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 483.122, "source": "autotuned"}, {"m": 5, "n": 9, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 384.674, "source": "autotuned"}, {"m": 5, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 706.199, "source": "autotuned"}, {"m": 5, "n": 10, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 414.447, "source": "autotuned"}, {"m": 5, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 12, "algorithm": "medium", "perf": 745.609, "source": "autotuned"}, {"m": 5, "n": 11, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 8, "algorithm": "medium", "perf": 601.937, "source": "autotuned"}, {"m": 5, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 11, "algorithm": "medium", "perf": 945.236, "source": "autotuned"}, {"m": 5, "n": 12, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 24, "algorithm": "medium", "perf": 472.861, "source": "autotuned"}, {"m": 5, "n": 12, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 22, "algorithm": "medium", "perf": 1016.93, "source": "autotuned"}, {"m": 5, "n": 16, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 694.503, "source": "autotuned"}, {"m": 5, "n": 16, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 20, "minblocks": 16, "algorithm": "medium", "perf": 1120.43, "source": "autotuned"}, {"m": 5, "n": 23, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 14, "minblocks": 2, "algorithm": "medium", "perf": 925.576, "source": "autotuned"}, {"m": 5, "n": 23, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 31, "minblocks": 3, "algorithm": "medium", "perf": 1227.76, "source": "autotuned"}, {"m": 6, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 7, "algorithm": "medium", "perf": 94.2544, "source": "autotuned"}, {"m": 6, "n": 3, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 156.363, "source": "autotuned"}, {"m": 6, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 8, "algorithm": "medium", "perf": 165.788, "source": "autotuned"}, {"m": 6, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 12, "algorithm": "small", "perf": 230.366, "source": "autotuned"}, {"m": 6, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 242.931, "source": "autotuned"}, {"m": 6, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 5, "algorithm": "medium", "perf": 269.907, "source": "autotuned"}, {"m": 6, "n": 6, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 285.082, "source": "autotuned"}, {"m": 6, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 2, "algorithm": "medium", "perf": 274.249, "source": "autotuned"}, {"m": 6, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 442.052, "source": "autotuned"}, {"m": 6, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 3, "algorithm": "medium", "perf": 369.733, "source": "autotuned"}, {"m": 6, "n": 6, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 13, "algorithm": "medium", "perf": 470.905, "source": "autotuned"}, {"m": 6, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 11, "algorithm": "medium", "perf": 575.643, "source": "autotuned"}, {"m": 6, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 22, "algorithm": "medium", "perf": 524.301, "source": "autotuned"}, {"m": 6, "n": 6, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 541.641, "source": "autotuned"}, {"m": 6, "n": 6, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 24, "algorithm": "medium", "perf": 538.35, "source": "autotuned"}, {"m": 6, "n": 6, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 2, "algorithm": "medium", "perf": 566.47, "source": "autotuned"}, {"m": 6, "n": 6, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 14, "algorithm": "medium", "perf": 727.804, "source": "autotuned"}, {"m": 6, "n": 6, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 8, "algorithm": "medium", "perf": 799.476, "source": "autotuned"}, {"m": 6, "n": 7, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 342.394, "source": "autotuned"}, {"m": 6, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 23, "algorithm": "medium", "perf": 393.183, "source": "autotuned"}, {"m": 6, "n": 8, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 493.64, "source": "autotuned"}, {"m": 6, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 9, "algorithm": "medium", "perf": 699.393, "source": "autotuned"}, {"m": 6, "n": 9, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 556.646, "source": "autotuned"}, {"m": 6, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 23, "algorithm": "medium", "perf": 864.42, "source": "autotuned"}, {"m": 6, "n": 10, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 1, "algorithm": "medium", "perf": 471.286, "source": "autotuned"}, {"m": 6, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 22, "algorithm": "medium", "perf": 943.323, "source": "autotuned"}, {"m": 6, "n": 11, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 7, "algorithm": "medium", "perf": 674.902, "source": "autotuned"}, {"m": 6, "n": 11, "k": 11, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 11, "algorithm": "medium", "perf": 758.811, "source": "autotuned"}, {"m": 6, "n": 12, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 6, "minblocks": 3, "algorithm": "medium", "perf": 729.121, "source": "autotuned"}, {"m": 6, "n": 12, "k": 12, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 915.954, "source": "autotuned"}, {"m": 6, "n": 16, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 4, "algorithm": "medium", "perf": 899.944, "source": "autotuned"}, {"m": 6, "n": 16, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 16, "algorithm": "medium", "perf": 1304.86, "source": "autotuned"}, {"m": 6, "n": 23, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 16, "algorithm": "medium", "perf": 925.427, "source": "autotuned"}, {"m": 6, "n": 23, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 25, "minblocks": 4, "algorithm": "medium", "perf": 1349.15, "source": "autotuned"}, {"m": 7, "n": 3, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 8, "algorithm": "medium", "perf": 119.395, "source": "autotuned"}, {"m": 7, "n": 3, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 17, "algorithm": "medium", "perf": 209.607, "source": "autotuned"}, {"m": 7, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 211.854, "source": "autotuned"}, {"m": 7, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 320.618, "source": "autotuned"}, {"m": 7, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 337.009, "source": "autotuned"}, {"m": 7, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 24, "algorithm": "medium", "perf": 410.337, "source": "autotuned"}, {"m": 7, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 469.564, "source": "autotuned"}, {"m": 7, "n": 6, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 367.395, "source": "autotuned"}, {"m": 7, "n": 7, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 26, "algorithm": "medium", "perf": 328.442, "source": "autotuned"}, {"m": 7, "n": 7, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 1, "algorithm": "medium", "perf": 355.5, "source": "autotuned"}, {"m": 7, "n": 7, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 478.243, "source": "autotuned"}, {"m": 7, "n": 7, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 538.794, "source": "autotuned"}, {"m": 7, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 632.94, "source": "autotuned"}, {"m": 7, "n": 7, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 15, "algorithm": "medium", "perf": 759.257, "source": "autotuned"}, {"m": 7, "n": 7, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 761.05, "source": "autotuned"}, {"m": 7, "n": 7, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 16, "algorithm": "medium", "perf": 778.019, "source": "autotuned"}, {"m": 7, "n": 7, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 706.199, "source": "autotuned"}, {"m": 7, "n": 7, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 27, "algorithm": "medium", "perf": 793.057, "source": "autotuned"}, {"m": 7, "n": 7, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 6, "algorithm": "medium", "perf": 1008.46, "source": "autotuned"}, {"m": 7, "n": 7, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 1, "algorithm": "medium", "perf": 969.576, "source": "autotuned"}, {"m": 7, "n": 8, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 568.161, "source": "autotuned"}, {"m": 7, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 1, "algorithm": "medium", "perf": 902.969, "source": "autotuned"}, {"m": 7, "n": 9, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 23, "algorithm": "medium", "perf": 517.355, "source": "autotuned"}, {"m": 7, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 2, "algorithm": "medium", "perf": 793.253, "source": "autotuned"}, {"m": 7, "n": 10, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 13, "minblocks": 14, "algorithm": "medium", "perf": 718.91, "source": "autotuned"}, {"m": 7, "n": 10, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 10, "minblocks": 23, "algorithm": "medium", "perf": 900.092, "source": "autotuned"}, {"m": 7, "n": 11, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 7, "algorithm": "medium", "perf": 848.213, "source": "autotuned"}, {"m": 7, "n": 11, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 963.974, "source": "autotuned"}, {"m": 7, "n": 12, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 10, "algorithm": "medium", "perf": 901.596, "source": "autotuned"}, {"m": 7, "n": 12, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 14, "minblocks": 10, "algorithm": "medium", "perf": 1120.87, "source": "autotuned"}, {"m": 7, "n": 16, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 1149.36, "source": "autotuned"}, {"m": 7, "n": 16, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 10, "algorithm": "medium", "perf": 1466.3, "source": "autotuned"}, {"m": 7, "n": 23, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 16, "minblocks": 6, "algorithm": "medium", "perf": 1193.54, "source": "autotuned"}, {"m": 7, "n": 23, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 1522.25, "source": "autotuned"}, {"m": 8, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 4, "algorithm": "medium", "perf": 132.835, "source": "autotuned"}, {"m": 8, "n": 3, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 330.918, "source": "autotuned"}, {"m": 8, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 22, "algorithm": "medium", "perf": 245.039, "source": "autotuned"}, {"m": 8, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 516.246, "source": "autotuned"}, {"m": 8, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 5, "algorithm": "medium", "perf": 297.418, "source": "autotuned"}, {"m": 8, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 10, "algorithm": "medium", "perf": 516.822, "source": "autotuned"}, {"m": 8, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 1, "algorithm": "medium", "perf": 559.016, "source": "autotuned"}, {"m": 8, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 15, "algorithm": "medium", "perf": 598.724, "source": "autotuned"}, {"m": 8, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 561.082, "source": "autotuned"}, {"m": 8, "n": 7, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 763.392, "source": "autotuned"}, {"m": 8, "n": 8, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 19, "algorithm": "medium", "perf": 393.813, "source": "autotuned"}, {"m": 8, "n": 8, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 537.112, "source": "autotuned"}, {"m": 8, "n": 8, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 644.83, "source": "autotuned"}, {"m": 8, "n": 8, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 623.792, "source": "autotuned"}, {"m": 8, "n": 8, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 747.128, "source": "autotuned"}, {"m": 8, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 839.605, "source": "autotuned"}, {"m": 8, "n": 8, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 10, "algorithm": "medium", "perf": 1183.61, "source": "autotuned"}, {"m": 8, "n": 8, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 1200.78, "source": "autotuned"}, {"m": 8, "n": 16, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 1425.14, "source": "autotuned"}, {"m": 8, "n": 16, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 17, "minblocks": 16, "algorithm": "medium", "perf": 1671.22, "source": "autotuned"}, {"m": 8, "n": 23, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 20, "minblocks": 10, "algorithm": "medium", "perf": 1412.43, "source": "autotuned"}, {"m": 8, "n": 23, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 31, "minblocks": 8, "algorithm": "medium", "perf": 1682.11, "source": "autotuned"}, {"m": 9, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 129.559, "source": "autotuned"}, {"m": 9, "n": 3, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 12, "algorithm": "medium", "perf": 427.699, "source": "autotuned"}, {"m": 9, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 283.085, "source": "autotuned"}, {"m": 9, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 4, "algorithm": "small", "perf": 442.617, "source": "autotuned"}, {"m": 9, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 6, "algorithm": "medium", "perf": 391.489, "source": "autotuned"}, {"m": 9, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 13, "algorithm": "medium", "perf": 590.993, "source": "autotuned"}, {"m": 9, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 8, "algorithm": "small", "perf": 558.289, "source": "autotuned"}, {"m": 9, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 16, "algorithm": "medium", "perf": 748.385, "source": "autotuned"}, {"m": 9, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 8, "algorithm": "medium", "perf": 855.688, "source": "autotuned"}, {"m": 9, "n": 7, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 15, "algorithm": "medium", "perf": 960.205, "source": "autotuned"}, {"m": 9, "n": 9, "k": 3, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 9, "algorithm": "medium", "perf": 472.711, "source": "autotuned"}, {"m": 9, "n": 9, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 9, "algorithm": "medium", "perf": 526.767, "source": "autotuned"}, {"m": 9, "n": 9, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 6, "algorithm": "medium", "perf": 643.738, "source": "autotuned"}, {"m": 9, "n": 9, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 13, "minblocks": 12, "algorithm": "medium", "perf": 832.733, "source": "autotuned"}, {"m": 9, "n": 9, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 14, "minblocks": 4, "algorithm": "medium", "perf": 917.151, "source": "autotuned"}, {"m": 9, "n": 9, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 13, "algorithm": "small", "perf": 953.237, "source": "autotuned"}, {"m": 9, "n": 9, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 19, "minblocks": 16, "algorithm": "medium", "perf": 1169.1, "source": "autotuned"}, {"m": 9, "n": 9, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 19, "minblocks": 3, "algorithm": "medium", "perf": 1250.03, "source": "autotuned"}, {"m": 9, "n": 16, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 25, "algorithm": "medium", "perf": 1259.32, "source": "autotuned"}, {"m": 9, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 19, "minblocks": 7, "algorithm": "medium", "perf": 1604.95, "source": "autotuned"}, {"m": 9, "n": 23, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 19, "minblocks": 1, "algorithm": "medium", "perf": 1484.93, "source": "autotuned"}, {"m": 9, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 6, "algorithm": "medium", "perf": 1808.53, "source": "autotuned"}, {"m": 10, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 8, "algorithm": "medium", "perf": 172.47, "source": "autotuned"}, {"m": 10, "n": 3, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 2, "algorithm": "medium", "perf": 423.394, "source": "autotuned"}, {"m": 10, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 7, "algorithm": "medium", "perf": 253.505, "source": "autotuned"}, {"m": 10, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 12, "algorithm": "medium", "perf": 687.576, "source": "autotuned"}, {"m": 10, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 453.449, "source": "autotuned"}, {"m": 10, "n": 5, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 13, "algorithm": "medium", "perf": 836.378, "source": "autotuned"}, {"m": 10, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 12, "algorithm": "medium", "perf": 649.71, "source": "autotuned"}, {"m": 10, "n": 6, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 18, "algorithm": "medium", "perf": 1008.29, "source": "autotuned"}, {"m": 10, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 9, "algorithm": "medium", "perf": 663.084, "source": "autotuned"}, {"m": 10, "n": 7, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 3, "algorithm": "medium", "perf": 860.717, "source": "autotuned"}, {"m": 10, "n": 10, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 14, "algorithm": "medium", "perf": 514.267, "source": "autotuned"}, {"m": 10, "n": 10, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 12, "minblocks": 9, "algorithm": "small", "perf": 689.868, "source": "autotuned"}, {"m": 10, "n": 10, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 5, "algorithm": "medium", "perf": 957.051, "source": "autotuned"}, {"m": 10, "n": 10, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 14, "algorithm": "medium", "perf": 853.143, "source": "autotuned"}, {"m": 10, "n": 10, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 12, "algorithm": "small", "perf": 863.212, "source": "autotuned"}, {"m": 10, "n": 10, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 20, "minblocks": 2, "algorithm": "medium", "perf": 1115.59, "source": "autotuned"}, {"m": 10, "n": 10, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 5, "algorithm": "medium", "perf": 1434.5, "source": "autotuned"}, {"m": 10, "n": 10, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 24, "minblocks": 2, "algorithm": "medium", "perf": 1432.58, "source": "autotuned"}, {"m": 10, "n": 16, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 19, "minblocks": 3, "algorithm": "medium", "perf": 1513.98, "source": "autotuned"}, {"m": 10, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 14, "algorithm": "medium", "perf": 1714.34, "source": "autotuned"}, {"m": 10, "n": 23, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 23, "minblocks": 2, "algorithm": "medium", "perf": 1622.51, "source": "autotuned"}, {"m": 10, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 1944.26, "source": "autotuned"}, {"m": 11, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 176.216, "source": "autotuned"}, {"m": 11, "n": 3, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 9, "algorithm": "medium", "perf": 496.753, "source": "autotuned"}, {"m": 11, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 5, "algorithm": "medium", "perf": 329.247, "source": "autotuned"}, {"m": 11, "n": 4, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 694.62, "source": "autotuned"}, {"m": 11, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 4, "algorithm": "medium", "perf": 412.56, "source": "autotuned"}, {"m": 11, "n": 5, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 12, "algorithm": "medium", "perf": 777.126, "source": "autotuned"}, {"m": 11, "n": 6, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 623.818, "source": "autotuned"}, {"m": 11, "n": 6, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 20, "minblocks": 1, "algorithm": "medium", "perf": 800.38, "source": "autotuned"}, {"m": 11, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 13, "algorithm": "medium", "perf": 838.182, "source": "autotuned"}, {"m": 11, "n": 7, "k": 11, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 15, "algorithm": "medium", "perf": 988.882, "source": "autotuned"}, {"m": 11, "n": 11, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 724.31, "source": "autotuned"}, {"m": 11, "n": 11, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 835.893, "source": "autotuned"}, {"m": 11, "n": 11, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 15, "algorithm": "medium", "perf": 1030.54, "source": "autotuned"}, {"m": 11, "n": 11, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 10, "algorithm": "medium", "perf": 1067.98, "source": "autotuned"}, {"m": 11, "n": 11, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 16, "algorithm": "medium", "perf": 1052.5, "source": "autotuned"}, {"m": 11, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 1357.04, "source": "autotuned"}, {"m": 11, "n": 11, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 14, "algorithm": "medium", "perf": 1482.09, "source": "autotuned"}, {"m": 11, "n": 11, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 3, "algorithm": "medium", "perf": 1558.5, "source": "autotuned"}, {"m": 11, "n": 16, "k": 11, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 17, "minblocks": 3, "algorithm": "medium", "perf": 1618.33, "source": "autotuned"}, {"m": 11, "n": 16, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 1814.42, "source": "autotuned"}, {"m": 11, "n": 23, "k": 11, "tile_m": 2, "tile_n": 3, "threads": 256, "grouping": 22, "minblocks": 5, "algorithm": "medium", "perf": 1773.17, "source": "autotuned"}, {"m": 11, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 31, "minblocks": 2, "algorithm": "medium", "perf": 1969.81, "source": "autotuned"}, {"m": 12, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 3, "algorithm": "medium", "perf": 192.663, "source": "autotuned"}, {"m": 12, "n": 3, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 11, "algorithm": "medium", "perf": 641.726, "source": "autotuned"}, {"m": 12, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 7, "algorithm": "medium", "perf": 309.312, "source": "autotuned"}, {"m": 12, "n": 4, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 17, "algorithm": "medium", "perf": 743.23, "source": "autotuned"}, {"m": 12, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 542.139, "source": "autotuned"}, {"m": 12, "n": 5, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 11, "algorithm": "medium", "perf": 1027.16, "source": "autotuned"}, {"m": 12, "n": 6, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 13, "algorithm": "medium", "perf": 643.773, "source": "autotuned"}, {"m": 12, "n": 6, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 20, "minblocks": 10, "algorithm": "medium", "perf": 906.348, "source": "autotuned"}, {"m": 12, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 16, "algorithm": "medium", "perf": 809.689, "source": "autotuned"}, {"m": 12, "n": 7, "k": 12, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 3, "algorithm": "medium", "perf": 1090.56, "source": "autotuned"}, {"m": 12, "n": 12, "k": 3, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 10, "minblocks": 2, "algorithm": "medium", "perf": 798.931, "source": "autotuned"}, {"m": 12, "n": 12, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 18, "minblocks": 9, "algorithm": "medium", "perf": 917.343, "source": "autotuned"}, {"m": 12, "n": 12, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 16, "minblocks": 5, "algorithm": "medium", "perf": 1084.48, "source": "autotuned"}, {"m": 12, "n": 12, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 12, "algorithm": "medium", "perf": 1147.44, "source": "autotuned"}, {"m": 12, "n": 12, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 1182.77, "source": "autotuned"}, {"m": 12, "n": 12, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 19, "minblocks": 10, "algorithm": "medium", "perf": 1484.64, "source": "autotuned"}, {"m": 12, "n": 12, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 20, "minblocks": 10, "algorithm": "medium", "perf": 1631.09, "source": "autotuned"}, {"m": 12, "n": 12, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 25, "minblocks": 5, "algorithm": "medium", "perf": 1629.36, "source": "autotuned"}, {"m": 12, "n": 16, "k": 12, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 1804.78, "source": "autotuned"}, {"m": 12, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 26, "minblocks": 3, "algorithm": "medium", "perf": 2003.56, "source": "autotuned"}, {"m": 12, "n": 23, "k": 12, "tile_m": 2, "tile_n": 3, "threads": 256, "grouping": 21, "minblocks": 7, "algorithm": "medium", "perf": 1787.6, "source": "autotuned"}, {"m": 12, "n": 23, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 320, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2065.04, "source": "autotuned"}, {"m": 13, "n": 13, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 15, "minblocks": 9, "algorithm": "medium", "perf": 1671.24, "source": "autotuned"}, {"m": 13, "n": 13, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 26, "minblocks": 6, "algorithm": "medium", "perf": 1771.39, "source": "autotuned"}, {"m": 13, "n": 23, "k": 13, "tile_m": 2, "tile_n": 3, "threads": 320, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 1923.26, "source": "autotuned"}, {"m": 13, "n": 23, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 2135.27, "source": "autotuned"}, {"m": 14, "n": 14, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 4, "algorithm": "medium", "perf": 1768.02, "source": "autotuned"}, {"m": 14, "n": 14, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 31, "minblocks": 7, "algorithm": "medium", "perf": 1873.71, "source": "autotuned"}, {"m": 14, "n": 14, "k": 29, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 6, "algorithm": "medium", "perf": 1930.65, "source": "autotuned"}, {"m": 14, "n": 14, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 31, "minblocks": 3, "algorithm": "medium", "perf": 2050.32, "source": "autotuned"}, {"m": 14, "n": 23, "k": 14, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2028.22, "source": "autotuned"}, {"m": 14, "n": 23, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2191.81, "source": "autotuned"}, {"m": 14, "n": 29, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 19, "minblocks": 1, "algorithm": "medium", "perf": 2174.29, "source": "autotuned"}, {"m": 14, "n": 29, "k": 29, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 2415.93, "source": "autotuned"}, {"m": 14, "n": 29, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 4, "minblocks": 3, "algorithm": "medium", "perf": 2627.22, "source": "autotuned"}, {"m": 14, "n": 32, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 29, "minblocks": 1, "algorithm": "medium", "perf": 2394.63, "source": "autotuned"}, {"m": 14, "n": 32, "k": 29, "tile_m": 2, "tile_n": 2, "threads": 512, "grouping": 6, "minblocks": 1, "algorithm": "medium", "perf": 2657.66, "source": "autotuned"}, {"m": 14, "n": 32, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 6, "minblocks": 2, "algorithm": "medium", "perf": 2734.11, "source": "autotuned"}, {"m": 15, "n": 15, "k": 15, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 22, "minblocks": 1, "algorithm": "medium", "perf": 1891.35, "source": "autotuned"}, {"m": 15, "n": 15, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2019.48, "source": "autotuned"}, {"m": 15, "n": 23, "k": 15, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2140.57, "source": "autotuned"}, {"m": 15, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2301.82, "source": "autotuned"}, {"m": 16, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 6, "algorithm": "small", "perf": 271.01, "source": "autotuned"}, {"m": 16, "n": 3, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 16, "algorithm": "medium", "perf": 831.372, "source": "autotuned"}, {"m": 16, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 554.061, "source": "autotuned"}, {"m": 16, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 19, "minblocks": 1, "algorithm": "medium", "perf": 1081.08, "source": "autotuned"}, {"m": 16, "n": 5, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 644.356, "source": "autotuned"}, {"m": 16, "n": 5, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 19, "minblocks": 9, "algorithm": "medium", "perf": 1136.45, "source": "autotuned"}, {"m": 16, "n": 6, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 1, "algorithm": "medium", "perf": 749.443, "source": "autotuned"}, {"m": 16, "n": 6, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 19, "minblocks": 3, "algorithm": "medium", "perf": 1346.31, "source": "autotuned"}, {"m": 16, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 1107.69, "source": "autotuned"}, {"m": 16, "n": 7, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 19, "minblocks": 10, "algorithm": "medium", "perf": 1474.34, "source": "autotuned"}, {"m": 16, "n": 8, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 11, "algorithm": "medium", "perf": 1406.39, "source": "autotuned"}, {"m": 16, "n": 8, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 26, "minblocks": 11, "algorithm": "medium", "perf": 1698.93, "source": "autotuned"}, {"m": 16, "n": 9, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 18, "minblocks": 6, "algorithm": "medium", "perf": 1310.24, "source": "autotuned"}, {"m": 16, "n": 9, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 19, "minblocks": 1, "algorithm": "medium", "perf": 1602.73, "source": "autotuned"}, {"m": 16, "n": 10, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 20, "minblocks": 6, "algorithm": "medium", "perf": 1460.69, "source": "autotuned"}, {"m": 16, "n": 10, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 19, "minblocks": 8, "algorithm": "medium", "perf": 1717.21, "source": "autotuned"}, {"m": 16, "n": 11, "k": 11, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 19, "minblocks": 4, "algorithm": "medium", "perf": 1622.85, "source": "autotuned"}, {"m": 16, "n": 11, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 19, "minblocks": 9, "algorithm": "medium", "perf": 1807.14, "source": "autotuned"}, {"m": 16, "n": 12, "k": 12, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 1846.72, "source": "autotuned"}, {"m": 16, "n": 12, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 1984.15, "source": "autotuned"}, {"m": 16, "n": 16, "k": 3, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 1177.38, "source": "autotuned"}, {"m": 16, "n": 16, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 10, "minblocks": 4, "algorithm": "medium", "perf": 1558.89, "source": "autotuned"}, {"m": 16, "n": 16, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 1415.67, "source": "autotuned"}, {"m": 16, "n": 16, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 1, "algorithm": "medium", "perf": 1847.01, "source": "autotuned"}, {"m": 16, "n": 16, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 6, "algorithm": "medium", "perf": 1712.64, "source": "autotuned"}, {"m": 16, "n": 16, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 19, "minblocks": 5, "algorithm": "medium", "perf": 2026.67, "source": "autotuned"}, {"m": 16, "n": 16, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 19, "minblocks": 4, "algorithm": "medium", "perf": 1843.78, "source": "autotuned"}, {"m": 16, "n": 16, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 19, "minblocks": 5, "algorithm": "medium", "perf": 2161.01, "source": "autotuned"}, {"m": 16, "n": 16, "k": 11, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 22, "minblocks": 6, "algorithm": "medium", "perf": 1990.73, "source": "autotuned"}, {"m": 16, "n": 16, "k": 12, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 2, "algorithm": "medium", "perf": 2230.82, "source": "autotuned"}, {"m": 16, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 27, "minblocks": 4, "algorithm": "medium", "perf": 2299.66, "source": "autotuned"}, {"m": 16, "n": 16, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2240.89, "source": "autotuned"}, {"m": 16, "n": 23, "k": 16, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 32, "minblocks": 3, "algorithm": "medium", "perf": 2338.78, "source": "autotuned"}, {"m": 16, "n": 23, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2403.01, "source": "autotuned"}, {"m": 17, "n": 17, "k": 17, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2037.81, "source": "autotuned"}, {"m": 17, "n": 17, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 192, "grouping": 25, "minblocks": 5, "algorithm": "medium", "perf": 2136.81, "source": "autotuned"}, {"m": 17, "n": 23, "k": 17, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 29, "minblocks": 3, "algorithm": "medium", "perf": 2226.25, "source": "autotuned"}, {"m": 17, "n": 23, "k": 23, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2312.55, "source": "autotuned"}, {"m": 18, "n": 18, "k": 18, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2226.65, "source": "autotuned"}, {"m": 18, "n": 18, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 31, "minblocks": 1, "algorithm": "medium", "perf": 2262.32, "source": "autotuned"}, {"m": 18, "n": 23, "k": 18, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2325.84, "source": "autotuned"}, {"m": 18, "n": 23, "k": 23, "tile_m": 6, "tile_n": 2, "threads": 256, "grouping": 25, "minblocks": 3, "algorithm": "medium", "perf": 2424.69, "source": "autotuned"}, {"m": 19, "n": 19, "k": 19, "tile_m": 2, "tile_n": 4, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2263.16, "source": "autotuned"}, {"m": 19, "n": 19, "k": 23, "tile_m": 2, "tile_n": 4, "threads": 192, "grouping": 29, "minblocks": 2, "algorithm": "medium", "perf": 2327.58, "source": "autotuned"}, {"m": 19, "n": 23, "k": 19, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 2406.26, "source": "autotuned"}, {"m": 19, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 7, "algorithm": "medium", "perf": 2470.3, "source": "autotuned"}, {"m": 20, "n": 20, "k": 20, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2398.36, "source": "autotuned"}, {"m": 20, "n": 20, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 512, "grouping": 19, "minblocks": 2, "algorithm": "medium", "perf": 2424.99, "source": "autotuned"}, {"m": 20, "n": 23, "k": 20, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 6, "algorithm": "medium", "perf": 2544.57, "source": "autotuned"}, {"m": 20, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 576, "grouping": 25, "minblocks": 2, "algorithm": "medium", "perf": 2581.28, "source": "autotuned"}, {"m": 22, "n": 22, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 512, "grouping": 19, "minblocks": 4, "algorithm": "medium", "perf": 2627.8, "source": "autotuned"}, {"m": 23, "n": 3, "k": 3, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 6, "minblocks": 1, "algorithm": "medium", "perf": 416.91, "source": "autotuned"}, {"m": 23, "n": 3, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 803.507, "source": "autotuned"}, {"m": 23, "n": 4, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 20, "minblocks": 15, "algorithm": "medium", "perf": 504.685, "source": "autotuned"}, {"m": 23, "n": 4, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 29, "minblocks": 1, "algorithm": "medium", "perf": 1032.52, "source": "autotuned"}, {"m": 23, "n": 5, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 4, "algorithm": "small", "perf": 768.368, "source": "autotuned"}, {"m": 23, "n": 5, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 31, "minblocks": 3, "algorithm": "medium", "perf": 1208.14, "source": "autotuned"}, {"m": 23, "n": 6, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 16, "algorithm": "medium", "perf": 1008.43, "source": "autotuned"}, {"m": 23, "n": 6, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 29, "minblocks": 4, "algorithm": "medium", "perf": 1354.9, "source": "autotuned"}, {"m": 23, "n": 7, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 20, "minblocks": 4, "algorithm": "medium", "perf": 1156.79, "source": "autotuned"}, {"m": 23, "n": 7, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 30, "minblocks": 6, "algorithm": "medium", "perf": 1518.1, "source": "autotuned"}, {"m": 23, "n": 8, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 18, "minblocks": 1, "algorithm": "medium", "perf": 1409.05, "source": "autotuned"}, {"m": 23, "n": 8, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 1673.24, "source": "autotuned"}, {"m": 23, "n": 9, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 1467.38, "source": "autotuned"}, {"m": 23, "n": 9, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 1770.44, "source": "autotuned"}, {"m": 23, "n": 10, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 1674.46, "source": "autotuned"}, {"m": 23, "n": 10, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 1923.06, "source": "autotuned"}, {"m": 23, "n": 11, "k": 11, "tile_m": 3, "tile_n": 2, "threads": 256, "grouping": 22, "minblocks": 2, "algorithm": "medium", "perf": 1759.15, "source": "autotuned"}, {"m": 23, "n": 11, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 1963.18, "source": "autotuned"}, {"m": 23, "n": 12, "k": 12, "tile_m": 2, "tile_n": 3, "threads": 192, "grouping": 25, "minblocks": 10, "algorithm": "medium", "perf": 1778.02, "source": "autotuned"}, {"m": 23, "n": 12, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2084.23, "source": "autotuned"}, {"m": 23, "n": 13, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 1928.04, "source": "autotuned"}, {"m": 23, "n": 13, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 2135.28, "source": "autotuned"}, {"m": 23, "n": 14, "k": 14, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2031.27, "source": "autotuned"}, {"m": 23, "n": 14, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2192.88, "source": "autotuned"}, {"m": 23, "n": 15, "k": 15, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2165.94, "source": "autotuned"}, {"m": 23, "n": 15, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2304.05, "source": "autotuned"}, {"m": 23, "n": 16, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2334.13, "source": "autotuned"}, {"m": 23, "n": 16, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 384, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2403.02, "source": "autotuned"}, {"m": 23, "n": 17, "k": 17, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 26, "minblocks": 4, "algorithm": "medium", "perf": 2218.82, "source": "autotuned"}, {"m": 23, "n": 17, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 21, "minblocks": 8, "algorithm": "medium", "perf": 2332.53, "source": "autotuned"}, {"m": 23, "n": 18, "k": 18, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2330.69, "source": "autotuned"}, {"m": 23, "n": 18, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2432.94, "source": "autotuned"}, {"m": 23, "n": 19, "k": 19, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 31, "minblocks": 8, "algorithm": "medium", "perf": 2403.93, "source": "autotuned"}, {"m": 23, "n": 19, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2478.42, "source": "autotuned"}, {"m": 23, "n": 20, "k": 20, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2534.06, "source": "autotuned"}, {"m": 23, "n": 20, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2559.43, "source": "autotuned"}, {"m": 23, "n": 23, "k": 3, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 3, "algorithm": "medium", "perf": 1254.94, "source": "autotuned"}, {"m": 23, "n": 23, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 15, "minblocks": 6, "algorithm": "medium", "perf": 1523.87, "source": "autotuned"}, {"m": 23, "n": 23, "k": 5, "tile_m": 2, "tile_n": 5, "threads": 192, "grouping": 17, "minblocks": 10, "algorithm": "medium", "perf": 1697.4, "source": "autotuned"}, {"m": 23, "n": 23, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 17, "minblocks": 1, "algorithm": "medium", "perf": 1810.83, "source": "autotuned"}, {"m": 23, "n": 23, "k": 7, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 1935.98, "source": "autotuned"}, {"m": 23, "n": 23, "k": 8, "tile_m": 3, "tile_n": 3, "threads": 192, "grouping": 22, "minblocks": 2, "algorithm": "medium", "perf": 2075.16, "source": "autotuned"}, {"m": 23, "n": 23, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 32, "minblocks": 3, "algorithm": "medium", "perf": 2137.24, "source": "autotuned"}, {"m": 23, "n": 23, "k": 10, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 31, "minblocks": 1, "algorithm": "medium", "perf": 2221.82, "source": "autotuned"}, {"m": 23, "n": 23, "k": 11, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 31, "minblocks": 3, "algorithm": "medium", "perf": 2291.66, "source": "autotuned"}, {"m": 23, "n": 23, "k": 12, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 32, "minblocks": 5, "algorithm": "medium", "perf": 2340.29, "source": "autotuned"}, {"m": 23, "n": 23, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2403.89, "source": "autotuned"}, {"m": 23, "n": 23, "k": 14, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 2403.99, "source": "autotuned"}, {"m": 23, "n": 23, "k": 15, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2457.42, "source": "autotuned"}, {"m": 23, "n": 23, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 2523.59, "source": "autotuned"}, {"m": 23, "n": 23, "k": 17, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2516.3, "source": "autotuned"}, {"m": 23, "n": 23, "k": 18, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 29, "minblocks": 1, "algorithm": "medium", "perf": 2508.77, "source": "autotuned"}, {"m": 23, "n": 23, "k": 19, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2543.19, "source": "autotuned"}, {"m": 23, "n": 23, "k": 20, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2558.41, "source": "autotuned"}, {"m": 23, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2633.42, "source": "autotuned"}, {"m": 24, "n": 24, "k": 24, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 3079.79, "source": "autotuned"}, {"m": 24, "n": 24, "k": 32, "tile_m": 2, "tile_n": 3, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 3179.83, "source": "autotuned"}, {"m": 24, "n": 32, "k": 24, "tile_m": 2, "tile_n": 4, "threads": 384, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 3430.27, "source": "autotuned"}, {"m": 24, "n": 32, "k": 32, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 3544.87, "source": "autotuned"}, {"m": 29, "n": 14, "k": 14, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 26, "minblocks": 1, "algorithm": "medium", "perf": 2113.67, "source": "autotuned"}, {"m": 29, "n": 14, "k": 29, "tile_m": 4, "tile_n": 2, "w": 10, "v": 8, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2313.13, "source": "autotuned"}, {"m": 29, "n": 14, "k": 32, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 1, "algorithm": "medium", "perf": 2426.9, "source": "autotuned"}, {"m": 29, "n": 29, "k": 14, "tile_m": 3, "tile_n": 3, "threads": 256, "grouping": 32, "minblocks": 8, "algorithm": "medium", "perf": 2762.54, "source": "autotuned"}, {"m": 29, "n": 29, "k": 29, "tile_m": 3, "tile_n": 3, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 3268.86, "source": "autotuned"}, {"m": 29, "n": 29, "k": 32, "tile_m": 3, "tile_n": 3, "w": 12, "v": 22, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 3430.8, "source": "autotuned"}, {"m": 29, "n": 32, "k": 14, "tile_m": 2, "tile_n": 4, "threads": 320, "grouping": 32, "minblocks": 2, "algorithm": "medium", "perf": 3099.21, "source": "autotuned"}, {"m": 29, "n": 32, "k": 29, "tile_m": 3, "tile_n": 3, "w": 4, "v": 20, "threads": 128, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3632.97, "source": "autotuned"}, {"m": 29, "n": 32, "k": 32, "tile_m": 3, "tile_n": 3, "w": 12, "v": 20, "threads": 128, "grouping": 16, "minblocks": 2, "algorithm": "largeDB1", "perf": 3755.41, "source": "autotuned"}, {"m": 32, "n": 14, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 29, "minblocks": 5, "algorithm": "medium", "perf": 2364.55, "source": "autotuned"}, {"m": 32, "n": 14, "k": 29, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 5, "minblocks": 2, "algorithm": "medium", "perf": 2643.28, "source": "autotuned"}, {"m": 32, "n": 14, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 576, "grouping": 26, "minblocks": 1, "algorithm": "medium", "perf": 2768.43, "source": "autotuned"}, {"m": 32, "n": 24, "k": 24, "tile_m": 2, "tile_n": 4, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3394.48, "source": "autotuned"}, {"m": 32, "n": 24, "k": 32, "tile_m": 2, "tile_n": 4, "w": 8, "v": 20, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3594.98, "source": "autotuned"}, {"m": 32, "n": 29, "k": 14, "tile_m": 2, "tile_n": 4, "threads": 320, "grouping": 32, "minblocks": 2, "algorithm": "medium", "perf": 3173.65, "source": "autotuned"}, {"m": 32, "n": 29, "k": 29, "tile_m": 2, "tile_n": 4, "threads": 512, "grouping": 26, "minblocks": 4, "algorithm": "medium", "perf": 3673.46, "source": "autotuned"}, {"m": 32, "n": 29, "k": 32, "tile_m": 2, "tile_n": 4, "threads": 512, "grouping": 26, "minblocks": 3, "algorithm": "medium", "perf": 3801.04, "source": "autotuned"}, {"m": 32, "n": 32, "k": 14, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 29, "minblocks": 1, "algorithm": "medium", "perf": 3570.23, "source": "autotuned"}, {"m": 32, "n": 32, "k": 24, "tile_m": 3, "tile_n": 3, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 3907.32, "source": "autotuned"}, {"m": 32, "n": 32, "k": 29, "tile_m": 3, "tile_n": 3, "w": 4, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4075.72, "source": "autotuned"}, {"m": 32, "n": 32, "k": 32, "tile_m": 3, "tile_n": 3, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4179.99, "source": "autotuned"}, {"m": 72, "n": 72, "k": 72, "tile_m": 5, "tile_n": 6, "w": 8, "v": 28, "threads": 192, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8144.64, "source": "autotuned"} ] ================================================ FILE: src/acc/libsmm_acc/parameters/parameters_Mi350.json ================================================ [ {"m": 3, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 48.6087, "source": "autotuned"}, {"m": 3, "n": 3, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 4, "algorithm": "medium", "perf": 84.8962, "source": "autotuned"}, {"m": 3, "n": 3, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 73.5997, "source": "autotuned"}, {"m": 3, "n": 3, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 21, "algorithm": "medium", "perf": 107.41, "source": "autotuned"}, {"m": 3, "n": 3, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 5, "algorithm": "medium", "perf": 128.314, "source": "autotuned"}, {"m": 3, "n": 3, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 14, "algorithm": "medium", "perf": 116.311, "source": "autotuned"}, {"m": 3, "n": 3, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 2, "algorithm": "medium", "perf": 141.009, "source": "autotuned"}, {"m": 3, "n": 3, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 3, "algorithm": "medium", "perf": 160.153, "source": "autotuned"}, {"m": 3, "n": 3, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 22, "algorithm": "medium", "perf": 165.478, "source": "autotuned"}, {"m": 3, "n": 3, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 22, "algorithm": "medium", "perf": 158.175, "source": "autotuned"}, {"m": 3, "n": 3, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 15, "algorithm": "small", "perf": 170.362, "source": "autotuned"}, {"m": 3, "n": 3, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 12, "algorithm": "medium", "perf": 200.418, "source": "autotuned"}, {"m": 3, "n": 4, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 12, "algorithm": "medium", "perf": 60.2617, "source": "autotuned"}, {"m": 3, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 5, "algorithm": "medium", "perf": 84.0512, "source": "autotuned"}, {"m": 3, "n": 5, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 7, "algorithm": "medium", "perf": 82.3408, "source": "autotuned"}, {"m": 3, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 12, "algorithm": "medium", "perf": 122.632, "source": "autotuned"}, {"m": 3, "n": 6, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 26, "algorithm": "medium", "perf": 149.966, "source": "autotuned"}, {"m": 3, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 7, "minblocks": 7, "algorithm": "small", "perf": 202.623, "source": "autotuned"}, {"m": 3, "n": 7, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 12, "algorithm": "small", "perf": 104.887, "source": "autotuned"}, {"m": 3, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 8, "algorithm": "small", "perf": 265.285, "source": "autotuned"}, {"m": 3, "n": 8, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 20, "algorithm": "medium", "perf": 142.651, "source": "autotuned"}, {"m": 3, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 6, "algorithm": "medium", "perf": 279.469, "source": "autotuned"}, {"m": 3, "n": 9, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 22, "algorithm": "medium", "perf": 157.818, "source": "autotuned"}, {"m": 3, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 6, "algorithm": "medium", "perf": 389.226, "source": "autotuned"}, {"m": 3, "n": 10, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "medium", "perf": 153.817, "source": "autotuned"}, {"m": 3, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 450.936, "source": "autotuned"}, {"m": 3, "n": 11, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 18, "algorithm": "medium", "perf": 172.335, "source": "autotuned"}, {"m": 3, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 487.302, "source": "autotuned"}, {"m": 3, "n": 12, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 272.932, "source": "autotuned"}, {"m": 3, "n": 12, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 7, "algorithm": "medium", "perf": 646.875, "source": "autotuned"}, {"m": 3, "n": 16, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 366.395, "source": "autotuned"}, {"m": 3, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 826.618, "source": "autotuned"}, {"m": 3, "n": 23, "k": 3, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 1, "algorithm": "medium", "perf": 346.986, "source": "autotuned"}, {"m": 3, "n": 23, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 29, "minblocks": 2, "algorithm": "medium", "perf": 807.591, "source": "autotuned"}, {"m": 4, "n": 3, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 59.588, "source": "autotuned"}, {"m": 4, "n": 3, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 91.0536, "source": "autotuned"}, {"m": 4, "n": 4, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 111.908, "source": "autotuned"}, {"m": 4, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 20, "algorithm": "medium", "perf": 123.061, "source": "autotuned"}, {"m": 4, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 16, "algorithm": "medium", "perf": 151.283, "source": "autotuned"}, {"m": 4, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 13, "algorithm": "medium", "perf": 158.124, "source": "autotuned"}, {"m": 4, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 16, "algorithm": "medium", "perf": 183.758, "source": "autotuned"}, {"m": 4, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 226.413, "source": "autotuned"}, {"m": 4, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "small", "perf": 289.266, "source": "autotuned"}, {"m": 4, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 2, "algorithm": "small", "perf": 234.219, "source": "autotuned"}, {"m": 4, "n": 4, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 9, "algorithm": "medium", "perf": 234.747, "source": "autotuned"}, {"m": 4, "n": 4, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 14, "algorithm": "medium", "perf": 282.632, "source": "autotuned"}, {"m": 4, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 11, "algorithm": "small", "perf": 299.18, "source": "autotuned"}, {"m": 4, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 10, "algorithm": "medium", "perf": 377.083, "source": "autotuned"}, {"m": 4, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 4, "algorithm": "small", "perf": 203.089, "source": "autotuned"}, {"m": 4, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 25, "algorithm": "medium", "perf": 202.459, "source": "autotuned"}, {"m": 4, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 8, "algorithm": "medium", "perf": 169.162, "source": "autotuned"}, {"m": 4, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 7, "algorithm": "medium", "perf": 217.578, "source": "autotuned"}, {"m": 4, "n": 7, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 26, "algorithm": "medium", "perf": 174.636, "source": "autotuned"}, {"m": 4, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 6, "algorithm": "medium", "perf": 262.665, "source": "autotuned"}, {"m": 4, "n": 8, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 4, "algorithm": "medium", "perf": 222.977, "source": "autotuned"}, {"m": 4, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 18, "algorithm": "medium", "perf": 447.137, "source": "autotuned"}, {"m": 4, "n": 9, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 21, "algorithm": "medium", "perf": 249.88, "source": "autotuned"}, {"m": 4, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 6, "algorithm": "medium", "perf": 449.647, "source": "autotuned"}, {"m": 4, "n": 10, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 8, "algorithm": "medium", "perf": 270.477, "source": "autotuned"}, {"m": 4, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 3, "algorithm": "medium", "perf": 575.986, "source": "autotuned"}, {"m": 4, "n": 11, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 25, "algorithm": "medium", "perf": 266.977, "source": "autotuned"}, {"m": 4, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 741.426, "source": "autotuned"}, {"m": 4, "n": 12, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 25, "algorithm": "medium", "perf": 476.482, "source": "autotuned"}, {"m": 4, "n": 12, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 11, "algorithm": "medium", "perf": 825.924, "source": "autotuned"}, {"m": 4, "n": 16, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 1, "algorithm": "medium", "perf": 505.524, "source": "autotuned"}, {"m": 4, "n": 16, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 4, "algorithm": "medium", "perf": 1067.92, "source": "autotuned"}, {"m": 4, "n": 23, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 16, "minblocks": 9, "algorithm": "medium", "perf": 563.703, "source": "autotuned"}, {"m": 4, "n": 23, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 29, "minblocks": 6, "algorithm": "medium", "perf": 1029.0, "source": "autotuned"}, {"m": 5, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 14, "algorithm": "medium", "perf": 78.5437, "source": "autotuned"}, {"m": 5, "n": 3, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 8, "algorithm": "small", "perf": 140.412, "source": "autotuned"}, {"m": 5, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 119.486, "source": "autotuned"}, {"m": 5, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 211.411, "source": "autotuned"}, {"m": 5, "n": 5, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 149.112, "source": "autotuned"}, {"m": 5, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 11, "algorithm": "small", "perf": 197.036, "source": "autotuned"}, {"m": 5, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 222.291, "source": "autotuned"}, {"m": 5, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 267.939, "source": "autotuned"}, {"m": 5, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 12, "algorithm": "medium", "perf": 302.075, "source": "autotuned"}, {"m": 5, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 423.773, "source": "autotuned"}, {"m": 5, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 299.693, "source": "autotuned"}, {"m": 5, "n": 5, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 434.313, "source": "autotuned"}, {"m": 5, "n": 5, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 26, "algorithm": "medium", "perf": 503.922, "source": "autotuned"}, {"m": 5, "n": 5, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 14, "algorithm": "medium", "perf": 511.274, "source": "autotuned"}, {"m": 5, "n": 5, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 6, "algorithm": "medium", "perf": 518.448, "source": "autotuned"}, {"m": 5, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 14, "algorithm": "medium", "perf": 573.268, "source": "autotuned"}, {"m": 5, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 300.709, "source": "autotuned"}, {"m": 5, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 8, "algorithm": "small", "perf": 386.735, "source": "autotuned"}, {"m": 5, "n": 7, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 5, "algorithm": "medium", "perf": 281.674, "source": "autotuned"}, {"m": 5, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 7, "algorithm": "medium", "perf": 328.184, "source": "autotuned"}, {"m": 5, "n": 8, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 296.814, "source": "autotuned"}, {"m": 5, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 483.122, "source": "autotuned"}, {"m": 5, "n": 9, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 384.674, "source": "autotuned"}, {"m": 5, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 706.199, "source": "autotuned"}, {"m": 5, "n": 10, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 8, "algorithm": "medium", "perf": 414.447, "source": "autotuned"}, {"m": 5, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 12, "algorithm": "medium", "perf": 745.609, "source": "autotuned"}, {"m": 5, "n": 11, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 8, "algorithm": "medium", "perf": 601.937, "source": "autotuned"}, {"m": 5, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 11, "algorithm": "medium", "perf": 945.236, "source": "autotuned"}, {"m": 5, "n": 12, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 24, "algorithm": "medium", "perf": 472.861, "source": "autotuned"}, {"m": 5, "n": 12, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 22, "algorithm": "medium", "perf": 1016.93, "source": "autotuned"}, {"m": 5, "n": 16, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 694.503, "source": "autotuned"}, {"m": 5, "n": 16, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 20, "minblocks": 16, "algorithm": "medium", "perf": 1120.43, "source": "autotuned"}, {"m": 5, "n": 23, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 14, "minblocks": 2, "algorithm": "medium", "perf": 925.576, "source": "autotuned"}, {"m": 5, "n": 23, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 31, "minblocks": 3, "algorithm": "medium", "perf": 1227.76, "source": "autotuned"}, {"m": 6, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 7, "algorithm": "medium", "perf": 94.2544, "source": "autotuned"}, {"m": 6, "n": 3, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 156.363, "source": "autotuned"}, {"m": 6, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 8, "algorithm": "medium", "perf": 165.788, "source": "autotuned"}, {"m": 6, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 12, "algorithm": "small", "perf": 230.366, "source": "autotuned"}, {"m": 6, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 242.931, "source": "autotuned"}, {"m": 6, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 5, "algorithm": "medium", "perf": 269.907, "source": "autotuned"}, {"m": 6, "n": 6, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 285.082, "source": "autotuned"}, {"m": 6, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 2, "algorithm": "medium", "perf": 274.249, "source": "autotuned"}, {"m": 6, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 442.052, "source": "autotuned"}, {"m": 6, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 3, "algorithm": "medium", "perf": 369.733, "source": "autotuned"}, {"m": 6, "n": 6, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 13, "algorithm": "medium", "perf": 470.905, "source": "autotuned"}, {"m": 6, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 11, "algorithm": "medium", "perf": 575.643, "source": "autotuned"}, {"m": 6, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 22, "algorithm": "medium", "perf": 524.301, "source": "autotuned"}, {"m": 6, "n": 6, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 541.641, "source": "autotuned"}, {"m": 6, "n": 6, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 24, "algorithm": "medium", "perf": 538.35, "source": "autotuned"}, {"m": 6, "n": 6, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 2, "algorithm": "medium", "perf": 566.47, "source": "autotuned"}, {"m": 6, "n": 6, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 14, "algorithm": "medium", "perf": 727.804, "source": "autotuned"}, {"m": 6, "n": 6, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 8, "algorithm": "medium", "perf": 799.476, "source": "autotuned"}, {"m": 6, "n": 7, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 342.394, "source": "autotuned"}, {"m": 6, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 23, "algorithm": "medium", "perf": 393.183, "source": "autotuned"}, {"m": 6, "n": 8, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 493.64, "source": "autotuned"}, {"m": 6, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 9, "algorithm": "medium", "perf": 699.393, "source": "autotuned"}, {"m": 6, "n": 9, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 23, "algorithm": "medium", "perf": 556.646, "source": "autotuned"}, {"m": 6, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 23, "algorithm": "medium", "perf": 864.42, "source": "autotuned"}, {"m": 6, "n": 10, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 1, "algorithm": "medium", "perf": 471.286, "source": "autotuned"}, {"m": 6, "n": 10, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 22, "algorithm": "medium", "perf": 943.323, "source": "autotuned"}, {"m": 6, "n": 11, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 7, "algorithm": "medium", "perf": 674.902, "source": "autotuned"}, {"m": 6, "n": 11, "k": 11, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 11, "algorithm": "medium", "perf": 758.811, "source": "autotuned"}, {"m": 6, "n": 12, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 6, "minblocks": 3, "algorithm": "medium", "perf": 729.121, "source": "autotuned"}, {"m": 6, "n": 12, "k": 12, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 915.954, "source": "autotuned"}, {"m": 6, "n": 16, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 4, "algorithm": "medium", "perf": 899.944, "source": "autotuned"}, {"m": 6, "n": 16, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 16, "algorithm": "medium", "perf": 1304.86, "source": "autotuned"}, {"m": 6, "n": 23, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 16, "algorithm": "medium", "perf": 925.427, "source": "autotuned"}, {"m": 6, "n": 23, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 25, "minblocks": 4, "algorithm": "medium", "perf": 1349.15, "source": "autotuned"}, {"m": 7, "n": 3, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 8, "algorithm": "medium", "perf": 119.395, "source": "autotuned"}, {"m": 7, "n": 3, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 17, "algorithm": "medium", "perf": 209.607, "source": "autotuned"}, {"m": 7, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 211.854, "source": "autotuned"}, {"m": 7, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 320.618, "source": "autotuned"}, {"m": 7, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 16, "algorithm": "medium", "perf": 337.009, "source": "autotuned"}, {"m": 7, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 24, "algorithm": "medium", "perf": 410.337, "source": "autotuned"}, {"m": 7, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 469.564, "source": "autotuned"}, {"m": 7, "n": 6, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 367.395, "source": "autotuned"}, {"m": 7, "n": 7, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 26, "algorithm": "medium", "perf": 328.442, "source": "autotuned"}, {"m": 7, "n": 7, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 1, "algorithm": "medium", "perf": 355.5, "source": "autotuned"}, {"m": 7, "n": 7, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 478.243, "source": "autotuned"}, {"m": 7, "n": 7, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 538.794, "source": "autotuned"}, {"m": 7, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 1, "algorithm": "medium", "perf": 632.94, "source": "autotuned"}, {"m": 7, "n": 7, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 15, "algorithm": "medium", "perf": 759.257, "source": "autotuned"}, {"m": 7, "n": 7, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 761.05, "source": "autotuned"}, {"m": 7, "n": 7, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 16, "algorithm": "medium", "perf": 778.019, "source": "autotuned"}, {"m": 7, "n": 7, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 706.199, "source": "autotuned"}, {"m": 7, "n": 7, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 27, "algorithm": "medium", "perf": 793.057, "source": "autotuned"}, {"m": 7, "n": 7, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 6, "algorithm": "medium", "perf": 1008.46, "source": "autotuned"}, {"m": 7, "n": 7, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 1, "algorithm": "medium", "perf": 969.576, "source": "autotuned"}, {"m": 7, "n": 8, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 19, "algorithm": "medium", "perf": 568.161, "source": "autotuned"}, {"m": 7, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 1, "algorithm": "medium", "perf": 902.969, "source": "autotuned"}, {"m": 7, "n": 9, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 23, "algorithm": "medium", "perf": 517.355, "source": "autotuned"}, {"m": 7, "n": 9, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 2, "algorithm": "medium", "perf": 793.253, "source": "autotuned"}, {"m": 7, "n": 10, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 13, "minblocks": 14, "algorithm": "medium", "perf": 718.91, "source": "autotuned"}, {"m": 7, "n": 10, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 10, "minblocks": 23, "algorithm": "medium", "perf": 900.092, "source": "autotuned"}, {"m": 7, "n": 11, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 7, "algorithm": "medium", "perf": 848.213, "source": "autotuned"}, {"m": 7, "n": 11, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 963.974, "source": "autotuned"}, {"m": 7, "n": 12, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 10, "algorithm": "medium", "perf": 901.596, "source": "autotuned"}, {"m": 7, "n": 12, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 14, "minblocks": 10, "algorithm": "medium", "perf": 1120.87, "source": "autotuned"}, {"m": 7, "n": 16, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 1149.36, "source": "autotuned"}, {"m": 7, "n": 16, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 10, "algorithm": "medium", "perf": 1466.3, "source": "autotuned"}, {"m": 7, "n": 23, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 16, "minblocks": 6, "algorithm": "medium", "perf": 1193.54, "source": "autotuned"}, {"m": 7, "n": 23, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 1522.25, "source": "autotuned"}, {"m": 8, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 4, "algorithm": "medium", "perf": 132.835, "source": "autotuned"}, {"m": 8, "n": 3, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 330.918, "source": "autotuned"}, {"m": 8, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 22, "algorithm": "medium", "perf": 245.039, "source": "autotuned"}, {"m": 8, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 516.246, "source": "autotuned"}, {"m": 8, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 5, "algorithm": "medium", "perf": 297.418, "source": "autotuned"}, {"m": 8, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 10, "algorithm": "medium", "perf": 516.822, "source": "autotuned"}, {"m": 8, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 1, "algorithm": "medium", "perf": 559.016, "source": "autotuned"}, {"m": 8, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 15, "algorithm": "medium", "perf": 598.724, "source": "autotuned"}, {"m": 8, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 561.082, "source": "autotuned"}, {"m": 8, "n": 7, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 12, "algorithm": "medium", "perf": 763.392, "source": "autotuned"}, {"m": 8, "n": 8, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 19, "algorithm": "medium", "perf": 393.813, "source": "autotuned"}, {"m": 8, "n": 8, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 537.112, "source": "autotuned"}, {"m": 8, "n": 8, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 644.83, "source": "autotuned"}, {"m": 8, "n": 8, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 623.792, "source": "autotuned"}, {"m": 8, "n": 8, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 747.128, "source": "autotuned"}, {"m": 8, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 839.605, "source": "autotuned"}, {"m": 8, "n": 8, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 10, "algorithm": "medium", "perf": 1183.61, "source": "autotuned"}, {"m": 8, "n": 8, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 1200.78, "source": "autotuned"}, {"m": 8, "n": 16, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 1425.14, "source": "autotuned"}, {"m": 8, "n": 16, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 17, "minblocks": 16, "algorithm": "medium", "perf": 1671.22, "source": "autotuned"}, {"m": 8, "n": 23, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 20, "minblocks": 10, "algorithm": "medium", "perf": 1412.43, "source": "autotuned"}, {"m": 8, "n": 23, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 31, "minblocks": 8, "algorithm": "medium", "perf": 1682.11, "source": "autotuned"}, {"m": 9, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 129.559, "source": "autotuned"}, {"m": 9, "n": 3, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 12, "algorithm": "medium", "perf": 427.699, "source": "autotuned"}, {"m": 9, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 283.085, "source": "autotuned"}, {"m": 9, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 4, "algorithm": "small", "perf": 442.617, "source": "autotuned"}, {"m": 9, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 6, "algorithm": "medium", "perf": 391.489, "source": "autotuned"}, {"m": 9, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 13, "algorithm": "medium", "perf": 590.993, "source": "autotuned"}, {"m": 9, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 8, "algorithm": "small", "perf": 558.289, "source": "autotuned"}, {"m": 9, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 16, "algorithm": "medium", "perf": 748.385, "source": "autotuned"}, {"m": 9, "n": 7, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 8, "algorithm": "medium", "perf": 855.688, "source": "autotuned"}, {"m": 9, "n": 7, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 15, "algorithm": "medium", "perf": 960.205, "source": "autotuned"}, {"m": 9, "n": 9, "k": 3, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 9, "algorithm": "medium", "perf": 472.711, "source": "autotuned"}, {"m": 9, "n": 9, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 9, "algorithm": "medium", "perf": 526.767, "source": "autotuned"}, {"m": 9, "n": 9, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 6, "algorithm": "medium", "perf": 643.738, "source": "autotuned"}, {"m": 9, "n": 9, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 13, "minblocks": 12, "algorithm": "medium", "perf": 832.733, "source": "autotuned"}, {"m": 9, "n": 9, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 14, "minblocks": 4, "algorithm": "medium", "perf": 917.151, "source": "autotuned"}, {"m": 9, "n": 9, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 13, "algorithm": "small", "perf": 953.237, "source": "autotuned"}, {"m": 9, "n": 9, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 19, "minblocks": 16, "algorithm": "medium", "perf": 1169.1, "source": "autotuned"}, {"m": 9, "n": 9, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 19, "minblocks": 3, "algorithm": "medium", "perf": 1250.03, "source": "autotuned"}, {"m": 9, "n": 16, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 25, "algorithm": "medium", "perf": 1259.32, "source": "autotuned"}, {"m": 9, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 19, "minblocks": 7, "algorithm": "medium", "perf": 1604.95, "source": "autotuned"}, {"m": 9, "n": 23, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 19, "minblocks": 1, "algorithm": "medium", "perf": 1484.93, "source": "autotuned"}, {"m": 9, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 6, "algorithm": "medium", "perf": 1808.53, "source": "autotuned"}, {"m": 10, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 8, "algorithm": "medium", "perf": 172.47, "source": "autotuned"}, {"m": 10, "n": 3, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 2, "algorithm": "medium", "perf": 423.394, "source": "autotuned"}, {"m": 10, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 7, "algorithm": "medium", "perf": 253.505, "source": "autotuned"}, {"m": 10, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 12, "algorithm": "medium", "perf": 687.576, "source": "autotuned"}, {"m": 10, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 453.449, "source": "autotuned"}, {"m": 10, "n": 5, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 13, "algorithm": "medium", "perf": 836.378, "source": "autotuned"}, {"m": 10, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 12, "algorithm": "medium", "perf": 649.71, "source": "autotuned"}, {"m": 10, "n": 6, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 18, "algorithm": "medium", "perf": 1008.29, "source": "autotuned"}, {"m": 10, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 9, "algorithm": "medium", "perf": 663.084, "source": "autotuned"}, {"m": 10, "n": 7, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 3, "algorithm": "medium", "perf": 860.717, "source": "autotuned"}, {"m": 10, "n": 10, "k": 3, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 14, "algorithm": "medium", "perf": 514.267, "source": "autotuned"}, {"m": 10, "n": 10, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 12, "minblocks": 9, "algorithm": "small", "perf": 689.868, "source": "autotuned"}, {"m": 10, "n": 10, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 5, "algorithm": "medium", "perf": 957.051, "source": "autotuned"}, {"m": 10, "n": 10, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 14, "algorithm": "medium", "perf": 853.143, "source": "autotuned"}, {"m": 10, "n": 10, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 12, "algorithm": "small", "perf": 863.212, "source": "autotuned"}, {"m": 10, "n": 10, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 20, "minblocks": 2, "algorithm": "medium", "perf": 1115.59, "source": "autotuned"}, {"m": 10, "n": 10, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 5, "algorithm": "medium", "perf": 1434.5, "source": "autotuned"}, {"m": 10, "n": 10, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 24, "minblocks": 2, "algorithm": "medium", "perf": 1432.58, "source": "autotuned"}, {"m": 10, "n": 16, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 19, "minblocks": 3, "algorithm": "medium", "perf": 1513.98, "source": "autotuned"}, {"m": 10, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 14, "algorithm": "medium", "perf": 1714.34, "source": "autotuned"}, {"m": 10, "n": 23, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 23, "minblocks": 2, "algorithm": "medium", "perf": 1622.51, "source": "autotuned"}, {"m": 10, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 1944.26, "source": "autotuned"}, {"m": 11, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 176.216, "source": "autotuned"}, {"m": 11, "n": 3, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 9, "algorithm": "medium", "perf": 496.753, "source": "autotuned"}, {"m": 11, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 5, "algorithm": "medium", "perf": 329.247, "source": "autotuned"}, {"m": 11, "n": 4, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 694.62, "source": "autotuned"}, {"m": 11, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 18, "minblocks": 4, "algorithm": "medium", "perf": 412.56, "source": "autotuned"}, {"m": 11, "n": 5, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 12, "algorithm": "medium", "perf": 777.126, "source": "autotuned"}, {"m": 11, "n": 6, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 13, "minblocks": 5, "algorithm": "medium", "perf": 623.818, "source": "autotuned"}, {"m": 11, "n": 6, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 20, "minblocks": 1, "algorithm": "medium", "perf": 800.38, "source": "autotuned"}, {"m": 11, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 13, "algorithm": "medium", "perf": 838.182, "source": "autotuned"}, {"m": 11, "n": 7, "k": 11, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 15, "algorithm": "medium", "perf": 988.882, "source": "autotuned"}, {"m": 11, "n": 11, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 1, "algorithm": "medium", "perf": 724.31, "source": "autotuned"}, {"m": 11, "n": 11, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "medium", "perf": 835.893, "source": "autotuned"}, {"m": 11, "n": 11, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 15, "algorithm": "medium", "perf": 1030.54, "source": "autotuned"}, {"m": 11, "n": 11, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 10, "algorithm": "medium", "perf": 1067.98, "source": "autotuned"}, {"m": 11, "n": 11, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 16, "algorithm": "medium", "perf": 1052.5, "source": "autotuned"}, {"m": 11, "n": 11, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 1357.04, "source": "autotuned"}, {"m": 11, "n": 11, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 14, "algorithm": "medium", "perf": 1482.09, "source": "autotuned"}, {"m": 11, "n": 11, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 3, "algorithm": "medium", "perf": 1558.5, "source": "autotuned"}, {"m": 11, "n": 16, "k": 11, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 17, "minblocks": 3, "algorithm": "medium", "perf": 1618.33, "source": "autotuned"}, {"m": 11, "n": 16, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 1814.42, "source": "autotuned"}, {"m": 11, "n": 23, "k": 11, "tile_m": 2, "tile_n": 3, "threads": 256, "grouping": 22, "minblocks": 5, "algorithm": "medium", "perf": 1773.17, "source": "autotuned"}, {"m": 11, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 31, "minblocks": 2, "algorithm": "medium", "perf": 1969.81, "source": "autotuned"}, {"m": 12, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 3, "algorithm": "medium", "perf": 192.663, "source": "autotuned"}, {"m": 12, "n": 3, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 11, "algorithm": "medium", "perf": 641.726, "source": "autotuned"}, {"m": 12, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 7, "algorithm": "medium", "perf": 309.312, "source": "autotuned"}, {"m": 12, "n": 4, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 17, "algorithm": "medium", "perf": 743.23, "source": "autotuned"}, {"m": 12, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 542.139, "source": "autotuned"}, {"m": 12, "n": 5, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 11, "algorithm": "medium", "perf": 1027.16, "source": "autotuned"}, {"m": 12, "n": 6, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 13, "algorithm": "medium", "perf": 643.773, "source": "autotuned"}, {"m": 12, "n": 6, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 20, "minblocks": 10, "algorithm": "medium", "perf": 906.348, "source": "autotuned"}, {"m": 12, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 20, "minblocks": 16, "algorithm": "medium", "perf": 809.689, "source": "autotuned"}, {"m": 12, "n": 7, "k": 12, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 13, "minblocks": 3, "algorithm": "medium", "perf": 1090.56, "source": "autotuned"}, {"m": 12, "n": 12, "k": 3, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 10, "minblocks": 2, "algorithm": "medium", "perf": 798.931, "source": "autotuned"}, {"m": 12, "n": 12, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 18, "minblocks": 9, "algorithm": "medium", "perf": 917.343, "source": "autotuned"}, {"m": 12, "n": 12, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 16, "minblocks": 5, "algorithm": "medium", "perf": 1084.48, "source": "autotuned"}, {"m": 12, "n": 12, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 12, "algorithm": "medium", "perf": 1147.44, "source": "autotuned"}, {"m": 12, "n": 12, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 1182.77, "source": "autotuned"}, {"m": 12, "n": 12, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 19, "minblocks": 10, "algorithm": "medium", "perf": 1484.64, "source": "autotuned"}, {"m": 12, "n": 12, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 20, "minblocks": 10, "algorithm": "medium", "perf": 1631.09, "source": "autotuned"}, {"m": 12, "n": 12, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 25, "minblocks": 5, "algorithm": "medium", "perf": 1629.36, "source": "autotuned"}, {"m": 12, "n": 16, "k": 12, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 1804.78, "source": "autotuned"}, {"m": 12, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 26, "minblocks": 3, "algorithm": "medium", "perf": 2003.56, "source": "autotuned"}, {"m": 12, "n": 23, "k": 12, "tile_m": 2, "tile_n": 3, "threads": 256, "grouping": 21, "minblocks": 7, "algorithm": "medium", "perf": 1787.6, "source": "autotuned"}, {"m": 12, "n": 23, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 320, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2065.04, "source": "autotuned"}, {"m": 13, "n": 13, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 15, "minblocks": 9, "algorithm": "medium", "perf": 1671.24, "source": "autotuned"}, {"m": 13, "n": 13, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 26, "minblocks": 6, "algorithm": "medium", "perf": 1771.39, "source": "autotuned"}, {"m": 13, "n": 23, "k": 13, "tile_m": 2, "tile_n": 3, "threads": 320, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 1923.26, "source": "autotuned"}, {"m": 13, "n": 23, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 2135.27, "source": "autotuned"}, {"m": 14, "n": 14, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 4, "algorithm": "medium", "perf": 1768.02, "source": "autotuned"}, {"m": 14, "n": 14, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 31, "minblocks": 7, "algorithm": "medium", "perf": 1873.71, "source": "autotuned"}, {"m": 14, "n": 14, "k": 29, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 6, "algorithm": "medium", "perf": 1930.65, "source": "autotuned"}, {"m": 14, "n": 14, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 31, "minblocks": 3, "algorithm": "medium", "perf": 2050.32, "source": "autotuned"}, {"m": 14, "n": 23, "k": 14, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2028.22, "source": "autotuned"}, {"m": 14, "n": 23, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2191.81, "source": "autotuned"}, {"m": 14, "n": 29, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 19, "minblocks": 1, "algorithm": "medium", "perf": 2174.29, "source": "autotuned"}, {"m": 14, "n": 29, "k": 29, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 2415.93, "source": "autotuned"}, {"m": 14, "n": 29, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 4, "minblocks": 3, "algorithm": "medium", "perf": 2627.22, "source": "autotuned"}, {"m": 14, "n": 32, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 29, "minblocks": 1, "algorithm": "medium", "perf": 2394.63, "source": "autotuned"}, {"m": 14, "n": 32, "k": 29, "tile_m": 2, "tile_n": 2, "threads": 512, "grouping": 6, "minblocks": 1, "algorithm": "medium", "perf": 2657.66, "source": "autotuned"}, {"m": 14, "n": 32, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 6, "minblocks": 2, "algorithm": "medium", "perf": 2734.11, "source": "autotuned"}, {"m": 15, "n": 15, "k": 15, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 22, "minblocks": 1, "algorithm": "medium", "perf": 1891.35, "source": "autotuned"}, {"m": 15, "n": 15, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2019.48, "source": "autotuned"}, {"m": 15, "n": 23, "k": 15, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2140.57, "source": "autotuned"}, {"m": 15, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2301.82, "source": "autotuned"}, {"m": 16, "n": 3, "k": 3, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 6, "algorithm": "small", "perf": 271.01, "source": "autotuned"}, {"m": 16, "n": 3, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 16, "algorithm": "medium", "perf": 831.372, "source": "autotuned"}, {"m": 16, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "medium", "perf": 554.061, "source": "autotuned"}, {"m": 16, "n": 4, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 19, "minblocks": 1, "algorithm": "medium", "perf": 1081.08, "source": "autotuned"}, {"m": 16, "n": 5, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 644.356, "source": "autotuned"}, {"m": 16, "n": 5, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 19, "minblocks": 9, "algorithm": "medium", "perf": 1136.45, "source": "autotuned"}, {"m": 16, "n": 6, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 18, "minblocks": 1, "algorithm": "medium", "perf": 749.443, "source": "autotuned"}, {"m": 16, "n": 6, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 19, "minblocks": 3, "algorithm": "medium", "perf": 1346.31, "source": "autotuned"}, {"m": 16, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 3, "algorithm": "medium", "perf": 1107.69, "source": "autotuned"}, {"m": 16, "n": 7, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 19, "minblocks": 10, "algorithm": "medium", "perf": 1474.34, "source": "autotuned"}, {"m": 16, "n": 8, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 18, "minblocks": 11, "algorithm": "medium", "perf": 1406.39, "source": "autotuned"}, {"m": 16, "n": 8, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 26, "minblocks": 11, "algorithm": "medium", "perf": 1698.93, "source": "autotuned"}, {"m": 16, "n": 9, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 18, "minblocks": 6, "algorithm": "medium", "perf": 1310.24, "source": "autotuned"}, {"m": 16, "n": 9, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 19, "minblocks": 1, "algorithm": "medium", "perf": 1602.73, "source": "autotuned"}, {"m": 16, "n": 10, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 20, "minblocks": 6, "algorithm": "medium", "perf": 1460.69, "source": "autotuned"}, {"m": 16, "n": 10, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 19, "minblocks": 8, "algorithm": "medium", "perf": 1717.21, "source": "autotuned"}, {"m": 16, "n": 11, "k": 11, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 19, "minblocks": 4, "algorithm": "medium", "perf": 1622.85, "source": "autotuned"}, {"m": 16, "n": 11, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 19, "minblocks": 9, "algorithm": "medium", "perf": 1807.14, "source": "autotuned"}, {"m": 16, "n": 12, "k": 12, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 18, "minblocks": 8, "algorithm": "medium", "perf": 1846.72, "source": "autotuned"}, {"m": 16, "n": 12, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 20, "minblocks": 5, "algorithm": "medium", "perf": 1984.15, "source": "autotuned"}, {"m": 16, "n": 16, "k": 3, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 11, "minblocks": 13, "algorithm": "medium", "perf": 1177.38, "source": "autotuned"}, {"m": 16, "n": 16, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 10, "minblocks": 4, "algorithm": "medium", "perf": 1558.89, "source": "autotuned"}, {"m": 16, "n": 16, "k": 5, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 1415.67, "source": "autotuned"}, {"m": 16, "n": 16, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 1, "algorithm": "medium", "perf": 1847.01, "source": "autotuned"}, {"m": 16, "n": 16, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 6, "algorithm": "medium", "perf": 1712.64, "source": "autotuned"}, {"m": 16, "n": 16, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 19, "minblocks": 5, "algorithm": "medium", "perf": 2026.67, "source": "autotuned"}, {"m": 16, "n": 16, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 19, "minblocks": 4, "algorithm": "medium", "perf": 1843.78, "source": "autotuned"}, {"m": 16, "n": 16, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 19, "minblocks": 5, "algorithm": "medium", "perf": 2161.01, "source": "autotuned"}, {"m": 16, "n": 16, "k": 11, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 22, "minblocks": 6, "algorithm": "medium", "perf": 1990.73, "source": "autotuned"}, {"m": 16, "n": 16, "k": 12, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 2, "algorithm": "medium", "perf": 2230.82, "source": "autotuned"}, {"m": 16, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 27, "minblocks": 4, "algorithm": "medium", "perf": 2299.66, "source": "autotuned"}, {"m": 16, "n": 16, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2240.89, "source": "autotuned"}, {"m": 16, "n": 23, "k": 16, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 32, "minblocks": 3, "algorithm": "medium", "perf": 2338.78, "source": "autotuned"}, {"m": 16, "n": 23, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2403.01, "source": "autotuned"}, {"m": 17, "n": 17, "k": 17, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2037.81, "source": "autotuned"}, {"m": 17, "n": 17, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 192, "grouping": 25, "minblocks": 5, "algorithm": "medium", "perf": 2136.81, "source": "autotuned"}, {"m": 17, "n": 23, "k": 17, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 29, "minblocks": 3, "algorithm": "medium", "perf": 2226.25, "source": "autotuned"}, {"m": 17, "n": 23, "k": 23, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2312.55, "source": "autotuned"}, {"m": 18, "n": 18, "k": 18, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2226.65, "source": "autotuned"}, {"m": 18, "n": 18, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 31, "minblocks": 1, "algorithm": "medium", "perf": 2262.32, "source": "autotuned"}, {"m": 18, "n": 23, "k": 18, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2325.84, "source": "autotuned"}, {"m": 18, "n": 23, "k": 23, "tile_m": 6, "tile_n": 2, "threads": 256, "grouping": 25, "minblocks": 3, "algorithm": "medium", "perf": 2424.69, "source": "autotuned"}, {"m": 19, "n": 19, "k": 19, "tile_m": 2, "tile_n": 4, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2263.16, "source": "autotuned"}, {"m": 19, "n": 19, "k": 23, "tile_m": 2, "tile_n": 4, "threads": 192, "grouping": 29, "minblocks": 2, "algorithm": "medium", "perf": 2327.58, "source": "autotuned"}, {"m": 19, "n": 23, "k": 19, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 2406.26, "source": "autotuned"}, {"m": 19, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 7, "algorithm": "medium", "perf": 2470.3, "source": "autotuned"}, {"m": 20, "n": 20, "k": 20, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2398.36, "source": "autotuned"}, {"m": 20, "n": 20, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 512, "grouping": 19, "minblocks": 2, "algorithm": "medium", "perf": 2424.99, "source": "autotuned"}, {"m": 20, "n": 23, "k": 20, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 6, "algorithm": "medium", "perf": 2544.57, "source": "autotuned"}, {"m": 20, "n": 23, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 576, "grouping": 25, "minblocks": 2, "algorithm": "medium", "perf": 2581.28, "source": "autotuned"}, {"m": 22, "n": 22, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 512, "grouping": 19, "minblocks": 4, "algorithm": "medium", "perf": 2627.8, "source": "autotuned"}, {"m": 23, "n": 3, "k": 3, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 6, "minblocks": 1, "algorithm": "medium", "perf": 416.91, "source": "autotuned"}, {"m": 23, "n": 3, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 803.507, "source": "autotuned"}, {"m": 23, "n": 4, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 20, "minblocks": 15, "algorithm": "medium", "perf": 504.685, "source": "autotuned"}, {"m": 23, "n": 4, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 29, "minblocks": 1, "algorithm": "medium", "perf": 1032.52, "source": "autotuned"}, {"m": 23, "n": 5, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 10, "minblocks": 4, "algorithm": "small", "perf": 768.368, "source": "autotuned"}, {"m": 23, "n": 5, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 31, "minblocks": 3, "algorithm": "medium", "perf": 1208.14, "source": "autotuned"}, {"m": 23, "n": 6, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 11, "minblocks": 16, "algorithm": "medium", "perf": 1008.43, "source": "autotuned"}, {"m": 23, "n": 6, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 29, "minblocks": 4, "algorithm": "medium", "perf": 1354.9, "source": "autotuned"}, {"m": 23, "n": 7, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 20, "minblocks": 4, "algorithm": "medium", "perf": 1156.79, "source": "autotuned"}, {"m": 23, "n": 7, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 30, "minblocks": 6, "algorithm": "medium", "perf": 1518.1, "source": "autotuned"}, {"m": 23, "n": 8, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 18, "minblocks": 1, "algorithm": "medium", "perf": 1409.05, "source": "autotuned"}, {"m": 23, "n": 8, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 1673.24, "source": "autotuned"}, {"m": 23, "n": 9, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 8, "algorithm": "medium", "perf": 1467.38, "source": "autotuned"}, {"m": 23, "n": 9, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 1770.44, "source": "autotuned"}, {"m": 23, "n": 10, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 20, "minblocks": 7, "algorithm": "medium", "perf": 1674.46, "source": "autotuned"}, {"m": 23, "n": 10, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 1923.06, "source": "autotuned"}, {"m": 23, "n": 11, "k": 11, "tile_m": 3, "tile_n": 2, "threads": 256, "grouping": 22, "minblocks": 2, "algorithm": "medium", "perf": 1759.15, "source": "autotuned"}, {"m": 23, "n": 11, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 1963.18, "source": "autotuned"}, {"m": 23, "n": 12, "k": 12, "tile_m": 2, "tile_n": 3, "threads": 192, "grouping": 25, "minblocks": 10, "algorithm": "medium", "perf": 1778.02, "source": "autotuned"}, {"m": 23, "n": 12, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2084.23, "source": "autotuned"}, {"m": 23, "n": 13, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 1928.04, "source": "autotuned"}, {"m": 23, "n": 13, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 2135.28, "source": "autotuned"}, {"m": 23, "n": 14, "k": 14, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2031.27, "source": "autotuned"}, {"m": 23, "n": 14, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2192.88, "source": "autotuned"}, {"m": 23, "n": 15, "k": 15, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2165.94, "source": "autotuned"}, {"m": 23, "n": 15, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2304.05, "source": "autotuned"}, {"m": 23, "n": 16, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2334.13, "source": "autotuned"}, {"m": 23, "n": 16, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 384, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2403.02, "source": "autotuned"}, {"m": 23, "n": 17, "k": 17, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 26, "minblocks": 4, "algorithm": "medium", "perf": 2218.82, "source": "autotuned"}, {"m": 23, "n": 17, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 21, "minblocks": 8, "algorithm": "medium", "perf": 2332.53, "source": "autotuned"}, {"m": 23, "n": 18, "k": 18, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2330.69, "source": "autotuned"}, {"m": 23, "n": 18, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2432.94, "source": "autotuned"}, {"m": 23, "n": 19, "k": 19, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 31, "minblocks": 8, "algorithm": "medium", "perf": 2403.93, "source": "autotuned"}, {"m": 23, "n": 19, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2478.42, "source": "autotuned"}, {"m": 23, "n": 20, "k": 20, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2534.06, "source": "autotuned"}, {"m": 23, "n": 20, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 2559.43, "source": "autotuned"}, {"m": 23, "n": 23, "k": 3, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 16, "minblocks": 3, "algorithm": "medium", "perf": 1254.94, "source": "autotuned"}, {"m": 23, "n": 23, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 15, "minblocks": 6, "algorithm": "medium", "perf": 1523.87, "source": "autotuned"}, {"m": 23, "n": 23, "k": 5, "tile_m": 2, "tile_n": 5, "threads": 192, "grouping": 17, "minblocks": 10, "algorithm": "medium", "perf": 1697.4, "source": "autotuned"}, {"m": 23, "n": 23, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 17, "minblocks": 1, "algorithm": "medium", "perf": 1810.83, "source": "autotuned"}, {"m": 23, "n": 23, "k": 7, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 16, "minblocks": 2, "algorithm": "medium", "perf": 1935.98, "source": "autotuned"}, {"m": 23, "n": 23, "k": 8, "tile_m": 3, "tile_n": 3, "threads": 192, "grouping": 22, "minblocks": 2, "algorithm": "medium", "perf": 2075.16, "source": "autotuned"}, {"m": 23, "n": 23, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 32, "minblocks": 3, "algorithm": "medium", "perf": 2137.24, "source": "autotuned"}, {"m": 23, "n": 23, "k": 10, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 31, "minblocks": 1, "algorithm": "medium", "perf": 2221.82, "source": "autotuned"}, {"m": 23, "n": 23, "k": 11, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 31, "minblocks": 3, "algorithm": "medium", "perf": 2291.66, "source": "autotuned"}, {"m": 23, "n": 23, "k": 12, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 32, "minblocks": 5, "algorithm": "medium", "perf": 2340.29, "source": "autotuned"}, {"m": 23, "n": 23, "k": 13, "tile_m": 3, "tile_n": 2, "threads": 384, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2403.89, "source": "autotuned"}, {"m": 23, "n": 23, "k": 14, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 2403.99, "source": "autotuned"}, {"m": 23, "n": 23, "k": 15, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2457.42, "source": "autotuned"}, {"m": 23, "n": 23, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 2523.59, "source": "autotuned"}, {"m": 23, "n": 23, "k": 17, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 30, "minblocks": 4, "algorithm": "medium", "perf": 2516.3, "source": "autotuned"}, {"m": 23, "n": 23, "k": 18, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 29, "minblocks": 1, "algorithm": "medium", "perf": 2508.77, "source": "autotuned"}, {"m": 23, "n": 23, "k": 19, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 30, "minblocks": 1, "algorithm": "medium", "perf": 2543.19, "source": "autotuned"}, {"m": 23, "n": 23, "k": 20, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2558.41, "source": "autotuned"}, {"m": 23, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 30, "minblocks": 3, "algorithm": "medium", "perf": 2633.42, "source": "autotuned"}, {"m": 24, "n": 24, "k": 24, "tile_m": 2, "tile_n": 3, "threads": 384, "grouping": 30, "minblocks": 5, "algorithm": "medium", "perf": 3079.79, "source": "autotuned"}, {"m": 24, "n": 24, "k": 32, "tile_m": 2, "tile_n": 3, "threads": 320, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 3179.83, "source": "autotuned"}, {"m": 24, "n": 32, "k": 24, "tile_m": 2, "tile_n": 4, "threads": 384, "grouping": 30, "minblocks": 2, "algorithm": "medium", "perf": 3430.27, "source": "autotuned"}, {"m": 24, "n": 32, "k": 32, "tile_m": 3, "tile_n": 2, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 3544.87, "source": "autotuned"}, {"m": 29, "n": 14, "k": 14, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 26, "minblocks": 1, "algorithm": "medium", "perf": 2113.67, "source": "autotuned"}, {"m": 29, "n": 14, "k": 29, "tile_m": 4, "tile_n": 2, "w": 10, "v": 8, "threads": 64, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 2313.13, "source": "autotuned"}, {"m": 29, "n": 14, "k": 32, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 1, "algorithm": "medium", "perf": 2426.9, "source": "autotuned"}, {"m": 29, "n": 29, "k": 14, "tile_m": 3, "tile_n": 3, "threads": 256, "grouping": 32, "minblocks": 8, "algorithm": "medium", "perf": 2762.54, "source": "autotuned"}, {"m": 29, "n": 29, "k": 29, "tile_m": 3, "tile_n": 3, "w": 8, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 3268.86, "source": "autotuned"}, {"m": 29, "n": 29, "k": 32, "tile_m": 3, "tile_n": 3, "w": 12, "v": 22, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB1", "perf": 3430.8, "source": "autotuned"}, {"m": 29, "n": 32, "k": 14, "tile_m": 2, "tile_n": 4, "threads": 320, "grouping": 32, "minblocks": 2, "algorithm": "medium", "perf": 3099.21, "source": "autotuned"}, {"m": 29, "n": 32, "k": 29, "tile_m": 3, "tile_n": 3, "w": 4, "v": 20, "threads": 128, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 3632.97, "source": "autotuned"}, {"m": 29, "n": 32, "k": 32, "tile_m": 3, "tile_n": 3, "w": 12, "v": 20, "threads": 128, "grouping": 16, "minblocks": 2, "algorithm": "largeDB1", "perf": 3755.41, "source": "autotuned"}, {"m": 32, "n": 14, "k": 14, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 29, "minblocks": 5, "algorithm": "medium", "perf": 2364.55, "source": "autotuned"}, {"m": 32, "n": 14, "k": 29, "tile_m": 2, "tile_n": 2, "threads": 448, "grouping": 5, "minblocks": 2, "algorithm": "medium", "perf": 2643.28, "source": "autotuned"}, {"m": 32, "n": 14, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 576, "grouping": 26, "minblocks": 1, "algorithm": "medium", "perf": 2768.43, "source": "autotuned"}, {"m": 32, "n": 24, "k": 24, "tile_m": 2, "tile_n": 4, "w": 8, "v": 12, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3394.48, "source": "autotuned"}, {"m": 32, "n": 24, "k": 32, "tile_m": 2, "tile_n": 4, "w": 8, "v": 20, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3594.98, "source": "autotuned"}, {"m": 32, "n": 29, "k": 14, "tile_m": 2, "tile_n": 4, "threads": 320, "grouping": 32, "minblocks": 2, "algorithm": "medium", "perf": 3173.65, "source": "autotuned"}, {"m": 32, "n": 29, "k": 29, "tile_m": 2, "tile_n": 4, "threads": 512, "grouping": 26, "minblocks": 4, "algorithm": "medium", "perf": 3673.46, "source": "autotuned"}, {"m": 32, "n": 29, "k": 32, "tile_m": 2, "tile_n": 4, "threads": 512, "grouping": 26, "minblocks": 3, "algorithm": "medium", "perf": 3801.04, "source": "autotuned"}, {"m": 32, "n": 32, "k": 14, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 29, "minblocks": 1, "algorithm": "medium", "perf": 3570.23, "source": "autotuned"}, {"m": 32, "n": 32, "k": 24, "tile_m": 3, "tile_n": 3, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "perf": 3907.32, "source": "autotuned"}, {"m": 32, "n": 32, "k": 29, "tile_m": 3, "tile_n": 3, "w": 4, "v": 20, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "perf": 4075.72, "source": "autotuned"}, {"m": 32, "n": 32, "k": 32, "tile_m": 3, "tile_n": 3, "w": 4, "v": 16, "threads": 128, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4179.99, "source": "autotuned"}, {"m": 72, "n": 72, "k": 72, "tile_m": 5, "tile_n": 6, "w": 8, "v": 28, "threads": 192, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 8144.64, "source": "autotuned"} ] ================================================ FILE: src/acc/libsmm_acc/parameters/parameters_Mi50.json ================================================ [ {"m": 4, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 17, "minblocks": 13, "algorithm": "medium", "perf": 69.425, "source": "autotuned"}, {"m": 9, "n": 9, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 17, "minblocks": 2, "algorithm": "medium", "perf": 479.296, "source": "autotuned"}, {"m": 13, "n": 13, "k": 13, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 17, "minblocks": 2, "algorithm": "medium", "perf": 872.797, "source": "autotuned"}, {"m": 16, "n": 16, "k": 16, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 24, "minblocks": 2, "algorithm": "medium", "perf": 1203.91, "source": "autotuned"}, {"m": 17, "n": 17, "k": 17, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 27, "minblocks": 1, "algorithm": "medium", "perf": 1128.92, "source": "autotuned"}, {"m": 22, "n": 22, "k": 22, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 11, "minblocks": 2, "algorithm": "medium", "perf": 1457.43, "source": "autotuned"}, {"m": 23, "n": 23, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 17, "minblocks": 5, "algorithm": "medium", "perf": 1474.66, "source": "autotuned"}, {"m": 24, "n": 24, "k": 24, "tile_m": 1, "tile_n": 3, "w": 8, "v": 24, "threads": 192, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 1590.39, "source": "autotuned"}, {"m": 29, "n": 29, "k": 29, "tile_m": 2, "tile_n": 4, "w": 10, "v": 28, "threads": 128, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 1492.01, "source": "autotuned"}, {"m": 32, "n": 32, "k": 32, "tile_m": 4, "tile_n": 4, "w": 10, "v": 30, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 1856.44, "source": "autotuned"} ] ================================================ FILE: src/acc/libsmm_acc/parameters/parameters_P100.json ================================================ [File too large to display: 11.1 MB] ================================================ FILE: src/acc/libsmm_acc/parameters/parameters_V100.json ================================================ [ {"m": 4, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 1, "algorithm": "medium", "perf": 246.008, "source": "autotuned"}, {"m": 4, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 3, "algorithm": "medium", "perf": 295.995, "source": "autotuned"}, {"m": 4, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 14, "algorithm": "medium", "perf": 346.775, "source": "autotuned"}, {"m": 4, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 13, "algorithm": "medium", "perf": 392.944, "source": "autotuned"}, {"m": 4, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 16, "algorithm": "medium", "perf": 405.137, "source": "autotuned"}, {"m": 4, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 2, "algorithm": "medium", "perf": 385.195, "source": "autotuned"}, {"m": 4, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 22, "algorithm": "medium", "perf": 404.271, "source": "autotuned"}, {"m": 4, "n": 4, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 4, "k": 12, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 438.293, "source": "autotuned"}, {"m": 4, "n": 4, "k": 14, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 15, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 471.731, "source": "autotuned"}, {"m": 4, "n": 4, "k": 16, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 17, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 18, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 19, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 20, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 21, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 24, "algorithm": "medium", "perf": 479.602, "source": "autotuned"}, {"m": 4, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 25, "algorithm": "medium", "perf": 469.625, "source": "autotuned"}, {"m": 4, "n": 4, "k": 24, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 26, "algorithm": "medium", "perf": 468.707, "source": "autotuned"}, {"m": 4, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 472.517, "source": "autotuned"}, {"m": 4, "n": 4, "k": 27, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 12, "algorithm": "medium", "perf": 473.832, "source": "autotuned"}, {"m": 4, "n": 4, "k": 29, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 30, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 31, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 16, "algorithm": "medium", "perf": 469.584, "source": "autotuned"}, {"m": 4, "n": 4, "k": 33, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 34, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 35, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 36, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 37, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 38, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 4, "k": 39, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 40, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 41, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 42, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 43, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 44, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 4, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 440.299, "source": "autotuned"}, {"m": 4, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 1, "algorithm": "medium", "perf": 308.153, "source": "autotuned"}, {"m": 4, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 14, "algorithm": "medium", "perf": 364.843, "source": "autotuned"}, {"m": 4, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 15, "algorithm": "medium", "perf": 421.298, "source": "autotuned"}, {"m": 4, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 16, "algorithm": "medium", "perf": 386.405, "source": "autotuned"}, {"m": 4, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 4, "algorithm": "medium", "perf": 406.801, "source": "autotuned"}, {"m": 4, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 7, "algorithm": "medium", "perf": 422.926, "source": "autotuned"}, {"m": 4, "n": 5, "k": 10, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 5, "k": 12, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 462.967, "source": "autotuned"}, {"m": 4, "n": 5, "k": 14, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 15, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 22, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 5, "k": 17, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 18, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 19, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 20, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 21, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 18, "algorithm": "medium", "perf": 492.481, "source": "autotuned"}, {"m": 4, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 5, "minblocks": 16, "algorithm": "medium", "perf": 490.113, "source": "autotuned"}, {"m": 4, "n": 5, "k": 24, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 486.609, "source": "autotuned"}, {"m": 4, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 481.038, "source": "autotuned"}, {"m": 4, "n": 5, "k": 27, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 489.975, "source": "autotuned"}, {"m": 4, "n": 5, "k": 29, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 30, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 31, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 14, "algorithm": "medium", "perf": 496.239, "source": "autotuned"}, {"m": 4, "n": 5, "k": 33, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 34, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 35, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 36, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 37, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 38, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 5, "k": 39, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 40, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 41, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 42, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 43, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 44, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 5, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 1, "minblocks": 6, "algorithm": "medium", "perf": 468.896, "source": "autotuned"}, {"m": 4, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 8, "algorithm": "medium", "perf": 368.735, "source": "autotuned"}, {"m": 4, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 13, "algorithm": "medium", "perf": 435.89, "source": "autotuned"}, {"m": 4, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 6, "algorithm": "medium", "perf": 407.925, "source": "autotuned"}, {"m": 4, "n": 6, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 22, "algorithm": "medium", "perf": 462.645, "source": "autotuned"}, {"m": 4, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 9, "algorithm": "medium", "perf": 479.855, "source": "autotuned"}, {"m": 4, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 485.334, "source": "autotuned"}, {"m": 4, "n": 6, "k": 10, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 11, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 12, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 13, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 14, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 15, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 16, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 17, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 18, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 19, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 20, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 6, "k": 21, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 22, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 23, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 24, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 25, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 26, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 27, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 28, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 29, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 30, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 31, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 6, "k": 32, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 33, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 34, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 35, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 36, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 37, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 38, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 39, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 40, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 41, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 42, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 43, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 44, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 6, "k": 45, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 3, "algorithm": "medium", "perf": 428.942, "source": "autotuned"}, {"m": 4, "n": 7, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 13, "algorithm": "medium", "perf": 412.602, "source": "autotuned"}, {"m": 4, "n": 7, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 1, "algorithm": "medium", "perf": 475.905, "source": "autotuned"}, {"m": 4, "n": 7, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 1, "algorithm": "medium", "perf": 516.037, "source": "autotuned"}, {"m": 4, "n": 7, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 11, "algorithm": "medium", "perf": 525.403, "source": "autotuned"}, {"m": 4, "n": 7, "k": 9, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 10, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 11, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 12, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 25, "algorithm": "medium", "perf": 581.761, "source": "autotuned"}, {"m": 4, "n": 7, "k": 14, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 15, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 16, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 17, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 18, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 19, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 20, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 21, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 22, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 23, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 24, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 9, "algorithm": "medium", "perf": 549.47, "source": "autotuned"}, {"m": 4, "n": 7, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 19, "algorithm": "medium", "perf": 548.753, "source": "autotuned"}, {"m": 4, "n": 7, "k": 27, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 555.309, "source": "autotuned"}, {"m": 4, "n": 7, "k": 29, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 30, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 31, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 8, "algorithm": "medium", "perf": 563.644, "source": "autotuned"}, {"m": 4, "n": 7, "k": 33, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 34, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 35, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 36, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 37, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 38, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 39, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 40, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 41, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 42, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 43, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 44, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 7, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 529.874, "source": "autotuned"}, {"m": 4, "n": 8, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 1, "algorithm": "medium", "perf": 433.171, "source": "autotuned"}, {"m": 4, "n": 8, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 16, "algorithm": "medium", "perf": 477.871, "source": "autotuned"}, {"m": 4, "n": 8, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 23, "algorithm": "medium", "perf": 551.799, "source": "autotuned"}, {"m": 4, "n": 8, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 569.968, "source": "autotuned"}, {"m": 4, "n": 8, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 566.549, "source": "autotuned"}, {"m": 4, "n": 8, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 560.233, "source": "autotuned"}, {"m": 4, "n": 8, "k": 10, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 11, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 12, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 13, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 14, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 15, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 16, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 17, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 18, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 19, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 20, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 21, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 22, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 23, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 24, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 25, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 26, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 27, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 28, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 29, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 30, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 31, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 32, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 33, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 34, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 35, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 36, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 37, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 38, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 39, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 40, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 41, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 42, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 43, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 44, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 8, "k": 45, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 5, "algorithm": "medium", "perf": 413.149, "source": "autotuned"}, {"m": 4, "n": 9, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 492.074, "source": "autotuned"}, {"m": 4, "n": 9, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 10, "algorithm": "medium", "perf": 541.308, "source": "autotuned"}, {"m": 4, "n": 9, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 581.319, "source": "autotuned"}, {"m": 4, "n": 9, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 561.045, "source": "autotuned"}, {"m": 4, "n": 9, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 583.137, "source": "autotuned"}, {"m": 4, "n": 9, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 11, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 27, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 9, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 26, "algorithm": "medium", "perf": 621.518, "source": "autotuned"}, {"m": 4, "n": 9, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 18, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 9, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 15, "algorithm": "medium", "perf": 586.676, "source": "autotuned"}, {"m": 4, "n": 9, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 14, "algorithm": "medium", "perf": 580.338, "source": "autotuned"}, {"m": 4, "n": 9, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 14, "algorithm": "medium", "perf": 578.701, "source": "autotuned"}, {"m": 4, "n": 9, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 579.831, "source": "autotuned"}, {"m": 4, "n": 9, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 28, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 589.888, "source": "autotuned"}, {"m": 4, "n": 9, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 32, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 13, "algorithm": "medium", "perf": 597.201, "source": "autotuned"}, {"m": 4, "n": 9, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 39, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 1, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 9, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 9, "k": 45, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 15, "algorithm": "medium", "perf": 571.751, "source": "autotuned"}, {"m": 4, "n": 10, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 12, "algorithm": "medium", "perf": 461.137, "source": "autotuned"}, {"m": 4, "n": 10, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 27, "algorithm": "medium", "perf": 642.821, "source": "autotuned"}, {"m": 4, "n": 10, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 14, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 22, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 10, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 24, "algorithm": "medium", "perf": 623.118, "source": "autotuned"}, {"m": 4, "n": 10, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 10, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 10, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 37, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 1, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 10, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 10, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 11, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 27, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 12, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 20, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 12, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 12, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 38, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 12, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 12, "k": 45, "tile_m": 4, "tile_n": 1, "threads": 192, "grouping": 6, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 13, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 2, "algorithm": "medium", "perf": 580.161, "source": "autotuned"}, {"m": 4, "n": 13, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 622.204, "source": "autotuned"}, {"m": 4, "n": 13, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 9, "algorithm": "medium", "perf": 681.111, "source": "autotuned"}, {"m": 4, "n": 13, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 25, "algorithm": "medium", "perf": 671.288, "source": "autotuned"}, {"m": 4, "n": 13, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 23, "algorithm": "medium", "perf": 658.006, "source": "autotuned"}, {"m": 4, "n": 13, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 14, "algorithm": "medium", "perf": 645.508, "source": "autotuned"}, {"m": 4, "n": 13, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 14, "algorithm": "medium", "perf": 637.149, "source": "autotuned"}, {"m": 4, "n": 13, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 629.5, "source": "autotuned"}, {"m": 4, "n": 13, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 637.134, "source": "autotuned"}, {"m": 4, "n": 13, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 28, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 11, "algorithm": "medium", "perf": 642.176, "source": "autotuned"}, {"m": 4, "n": 13, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 32, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 16, "algorithm": "medium", "perf": 647.889, "source": "autotuned"}, {"m": 4, "n": 13, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 13, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 2, "minblocks": 8, "algorithm": "medium", "perf": 628.519, "source": "autotuned"}, {"m": 4, "n": 14, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 2, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 14, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 31, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 14, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 36, "tile_m": 4, "tile_n": 1, "threads": 192, "grouping": 6, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 14, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 14, "k": 45, "tile_m": 4, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 15, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 12, "algorithm": "medium", "perf": 643.765, "source": "autotuned"}, {"m": 4, "n": 15, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 15, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 21, "algorithm": "medium", "perf": 674.671, "source": "autotuned"}, {"m": 4, "n": 15, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 14, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 22, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 15, "k": 15, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 17, "algorithm": "medium", "perf": 664.565, "source": "autotuned"}, {"m": 4, "n": 15, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 17, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 15, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 24, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 15, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 34, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 15, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 15, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 11, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 16, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 18, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 16, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 25, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 16, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 39, "tile_m": 4, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 16, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 16, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 17, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 18, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 17, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 17, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 17, "k": 44, "tile_m": 4, "tile_n": 1, "threads": 256, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 17, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 18, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 19, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 31, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 19, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 36, "tile_m": 4, "tile_n": 1, "threads": 256, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 19, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 19, "k": 45, "tile_m": 4, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 20, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 20, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 21, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 18, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 21, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 27, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 21, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 36, "tile_m": 4, "tile_n": 1, "threads": 256, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 21, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 21, "k": 45, "tile_m": 4, "tile_n": 1, "threads": 256, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 22, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 7, "minblocks": 9, "algorithm": "medium", "perf": 721.241, "source": "autotuned"}, {"m": 4, "n": 22, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 4, "minblocks": 4, "algorithm": "medium", "perf": 698.948, "source": "autotuned"}, {"m": 4, "n": 22, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 19, "algorithm": "medium", "perf": 675.48, "source": "autotuned"}, {"m": 4, "n": 22, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 683.974, "source": "autotuned"}, {"m": 4, "n": 22, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 15, "tile_m": 4, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 22, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 694.29, "source": "autotuned"}, {"m": 4, "n": 22, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 691.473, "source": "autotuned"}, {"m": 4, "n": 22, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 693.046, "source": "autotuned"}, {"m": 4, "n": 22, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 22, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 43, "tile_m": 4, "tile_n": 1, "threads": 256, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 22, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 22, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 7, "minblocks": 12, "algorithm": "medium", "perf": 704.138, "source": "autotuned"}, {"m": 4, "n": 23, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 4, "minblocks": 4, "algorithm": "medium", "perf": 693.297, "source": "autotuned"}, {"m": 4, "n": 23, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 20, "algorithm": "medium", "perf": 688.521, "source": "autotuned"}, {"m": 4, "n": 23, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 13, "algorithm": "medium", "perf": 696.548, "source": "autotuned"}, {"m": 4, "n": 23, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 2, "minblocks": 11, "algorithm": "medium", "perf": 697.693, "source": "autotuned"}, {"m": 4, "n": 23, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 693.63, "source": "autotuned"}, {"m": 4, "n": 23, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 23, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 24, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 16, "algorithm": "medium", "perf": 689.717, "source": "autotuned"}, {"m": 4, "n": 25, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 679.56, "source": "autotuned"}, {"m": 4, "n": 25, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 673.897, "source": "autotuned"}, {"m": 4, "n": 25, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 23, "algorithm": "medium", "perf": 673.553, "source": "autotuned"}, {"m": 4, "n": 25, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 692.688, "source": "autotuned"}, {"m": 4, "n": 25, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 25, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 10, "algorithm": "medium", "perf": 699.011, "source": "autotuned"}, {"m": 4, "n": 25, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 702.163, "source": "autotuned"}, {"m": 4, "n": 25, "k": 27, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 25, "k": 28, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 703.031, "source": "autotuned"}, {"m": 4, "n": 25, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 32, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 8, "algorithm": "medium", "perf": 714.509, "source": "autotuned"}, {"m": 4, "n": 25, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 37, "tile_m": 4, "tile_n": 1, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 25, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 25, "k": 44, "tile_m": 4, "tile_n": 2, "threads": 256, "grouping": 6, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 25, "k": 45, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 709.255, "source": "autotuned"}, {"m": 4, "n": 26, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 713.203, "source": "autotuned"}, {"m": 4, "n": 26, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 3, "minblocks": 25, "algorithm": "medium", "perf": 682.143, "source": "autotuned"}, {"m": 4, "n": 26, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 7, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 4, "minblocks": 26, "algorithm": "medium", "perf": 682.312, "source": "autotuned"}, {"m": 4, "n": 26, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 22, "algorithm": "medium", "perf": 679.23, "source": "autotuned"}, {"m": 4, "n": 26, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 12, "tile_m": 4, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 26, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 697.924, "source": "autotuned"}, {"m": 4, "n": 26, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 17, "tile_m": 4, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 26, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 10, "algorithm": "medium", "perf": 706.743, "source": "autotuned"}, {"m": 4, "n": 26, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 697.513, "source": "autotuned"}, {"m": 4, "n": 26, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 25, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 700.508, "source": "autotuned"}, {"m": 4, "n": 26, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 711.801, "source": "autotuned"}, {"m": 4, "n": 26, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 28, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 713.949, "source": "autotuned"}, {"m": 4, "n": 26, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 30, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 26, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 32, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 8, "algorithm": "medium", "perf": 722.448, "source": "autotuned"}, {"m": 4, "n": 26, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 34, "tile_m": 4, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 26, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 43, "tile_m": 4, "tile_n": 1, "threads": 384, "grouping": 7, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 26, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 26, "k": 45, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 714.8, "source": "autotuned"}, {"m": 4, "n": 27, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 36, "tile_m": 4, "tile_n": 1, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 27, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 27, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 713.43, "source": "autotuned"}, {"m": 4, "n": 28, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 26, "algorithm": "medium", "perf": 691.419, "source": "autotuned"}, {"m": 4, "n": 28, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 688.417, "source": "autotuned"}, {"m": 4, "n": 28, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 21, "algorithm": "medium", "perf": 696.35, "source": "autotuned"}, {"m": 4, "n": 28, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 11, "tile_m": 4, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 28, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 16, "algorithm": "medium", "perf": 693.509, "source": "autotuned"}, {"m": 4, "n": 28, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 18, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 28, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 705.866, "source": "autotuned"}, {"m": 4, "n": 28, "k": 26, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 718.173, "source": "autotuned"}, {"m": 4, "n": 28, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 28, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 720.648, "source": "autotuned"}, {"m": 4, "n": 28, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 32, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 730.663, "source": "autotuned"}, {"m": 4, "n": 28, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 28, "k": 45, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 721.599, "source": "autotuned"}, {"m": 4, "n": 29, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 29, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 30, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 15, "tile_m": 4, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 30, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 17, "tile_m": 4, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 30, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 34, "tile_m": 4, "tile_n": 1, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 30, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 43, "tile_m": 4, "tile_n": 2, "threads": 224, "grouping": 6, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 30, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 30, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 8, "tile_m": 4, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 31, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 31, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 30, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 31, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 37, "tile_m": 4, "tile_n": 1, "threads": 384, "grouping": 7, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 31, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 31, "k": 44, "tile_m": 4, "tile_n": 2, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 31, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 713.191, "source": "autotuned"}, {"m": 4, "n": 32, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 4, "minblocks": 26, "algorithm": "medium", "perf": 697.466, "source": "autotuned"}, {"m": 4, "n": 32, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 7, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 716.759, "source": "autotuned"}, {"m": 4, "n": 32, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 715.929, "source": "autotuned"}, {"m": 4, "n": 32, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 12, "tile_m": 4, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 32, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 718.173, "source": "autotuned"}, {"m": 4, "n": 32, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 32, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 731.936, "source": "autotuned"}, {"m": 4, "n": 32, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 734.347, "source": "autotuned"}, {"m": 4, "n": 32, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 733.854, "source": "autotuned"}, {"m": 4, "n": 32, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 30, "tile_m": 4, "tile_n": 2, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 32, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 747.315, "source": "autotuned"}, {"m": 4, "n": 32, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 34, "tile_m": 4, "tile_n": 1, "threads": 288, "grouping": 9, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 32, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 41, "tile_m": 4, "tile_n": 1, "threads": 256, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 32, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 32, "k": 45, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 2, "minblocks": 5, "algorithm": "medium", "perf": 750.234, "source": "autotuned"}, {"m": 4, "n": 33, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 33, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 15, "tile_m": 4, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 33, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 20, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 33, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 29, "tile_m": 4, "tile_n": 2, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 33, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 35, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 33, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 33, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 34, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 8, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 35, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 21, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 35, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 26, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 35, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 39, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 35, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 35, "k": 44, "tile_m": 2, "tile_n": 3, "threads": 192, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 35, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 36, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 37, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 21, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 37, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 37, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 35, "tile_m": 4, "tile_n": 1, "threads": 224, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 37, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 37, "k": 44, "tile_m": 2, "tile_n": 3, "threads": 192, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 37, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 13, "tile_m": 4, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 38, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 16, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 38, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 27, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 38, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 38, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 38, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 38, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 39, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 40, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 15, "tile_m": 4, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 41, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 41, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 41, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 36, "tile_m": 2, "tile_n": 1, "threads": 256, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 41, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 41, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 5, "tile_m": 1, "tile_n": 11, "threads": 32, "grouping": 3, "minblocks": 25, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 42, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 18, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 42, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 27, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 42, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 33, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 42, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 42, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 43, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 6, "tile_m": 1, "tile_n": 11, "threads": 32, "grouping": 4, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 44, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 13, "tile_m": 4, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 44, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 31, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 44, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 34, "tile_m": 4, "tile_n": 2, "threads": 192, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 44, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 41, "tile_m": 2, "tile_n": 3, "threads": 224, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 4, "n": 44, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 44, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 8, "minblocks": 27, "algorithm": "medium", "perf": 661.936, "source": "autotuned"}, {"m": 4, "n": 45, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 32, "grouping": 4, "minblocks": 25, "algorithm": "medium", "perf": 669.852, "source": "autotuned"}, {"m": 4, "n": 45, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 7, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 3, "minblocks": 20, "algorithm": "medium", "perf": 679.091, "source": "autotuned"}, {"m": 4, "n": 45, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 6, "algorithm": "medium", "perf": 689.661, "source": "autotuned"}, {"m": 4, "n": 45, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 711.079, "source": "autotuned"}, {"m": 4, "n": 45, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 25, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 736.487, "source": "autotuned"}, {"m": 4, "n": 45, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 742.618, "source": "autotuned"}, {"m": 4, "n": 45, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 745.832, "source": "autotuned"}, {"m": 4, "n": 45, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 32, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 760.801, "source": "autotuned"}, {"m": 4, "n": 45, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 4, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 759.612, "source": "autotuned"}, {"m": 5, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 15, "algorithm": "medium", "perf": 298.03, "source": "autotuned"}, {"m": 5, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 14, "algorithm": "medium", "perf": 346.1, "source": "autotuned"}, {"m": 5, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 2, "algorithm": "medium", "perf": 395.26, "source": "autotuned"}, {"m": 5, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 23, "algorithm": "medium", "perf": 358.983, "source": "autotuned"}, {"m": 5, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 24, "algorithm": "medium", "perf": 378.392, "source": "autotuned"}, {"m": 5, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 8, "algorithm": "medium", "perf": 392.962, "source": "autotuned"}, {"m": 5, "n": 4, "k": 10, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 11, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 12, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 427.297, "source": "autotuned"}, {"m": 5, "n": 4, "k": 14, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 15, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 16, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 17, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 18, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 19, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 20, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 21, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 5, "minblocks": 14, "algorithm": "medium", "perf": 479.602, "source": "autotuned"}, {"m": 5, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 14, "algorithm": "medium", "perf": 475.792, "source": "autotuned"}, {"m": 5, "n": 4, "k": 24, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 14, "algorithm": "medium", "perf": 480.624, "source": "autotuned"}, {"m": 5, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 5, "minblocks": 16, "algorithm": "medium", "perf": 468.896, "source": "autotuned"}, {"m": 5, "n": 4, "k": 27, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 15, "algorithm": "medium", "perf": 478.41, "source": "autotuned"}, {"m": 5, "n": 4, "k": 29, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 30, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 31, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 1, "minblocks": 9, "algorithm": "medium", "perf": 475.743, "source": "autotuned"}, {"m": 5, "n": 4, "k": 33, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 34, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 35, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 36, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 37, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 38, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 39, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 40, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 41, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 42, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 43, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 44, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 4, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 1, "minblocks": 21, "algorithm": "medium", "perf": 457.174, "source": "autotuned"}, {"m": 5, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 12, "algorithm": "medium", "perf": 363.486, "source": "autotuned"}, {"m": 5, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 1, "algorithm": "medium", "perf": 430.294, "source": "autotuned"}, {"m": 5, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 6, "algorithm": "medium", "perf": 487.699, "source": "autotuned"}, {"m": 5, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 16, "algorithm": "medium", "perf": 434.941, "source": "autotuned"}, {"m": 5, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 1, "algorithm": "medium", "perf": 465.891, "source": "autotuned"}, {"m": 5, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 480.266, "source": "autotuned"}, {"m": 5, "n": 5, "k": 10, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 11, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 537.755, "source": "autotuned"}, {"m": 5, "n": 5, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 12, "algorithm": "medium", "perf": 540.485, "source": "autotuned"}, {"m": 5, "n": 5, "k": 14, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 5, "k": 15, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 3, "algorithm": "medium", "perf": 585.973, "source": "autotuned"}, {"m": 5, "n": 5, "k": 17, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 18, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 19, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 20, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 21, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 12, "algorithm": "medium", "perf": 552.18, "source": "autotuned"}, {"m": 5, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 19, "algorithm": "medium", "perf": 551.265, "source": "autotuned"}, {"m": 5, "n": 5, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 560.713, "source": "autotuned"}, {"m": 5, "n": 5, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 24, "algorithm": "medium", "perf": 543.459, "source": "autotuned"}, {"m": 5, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 22, "algorithm": "medium", "perf": 539.234, "source": "autotuned"}, {"m": 5, "n": 5, "k": 27, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 24, "algorithm": "medium", "perf": 539.9, "source": "autotuned"}, {"m": 5, "n": 5, "k": 29, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 30, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 31, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 12, "algorithm": "medium", "perf": 558.21, "source": "autotuned"}, {"m": 5, "n": 5, "k": 33, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 34, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 35, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 36, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 37, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 38, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 39, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 40, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 41, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 42, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 43, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 44, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 5, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 525.597, "source": "autotuned"}, {"m": 5, "n": 6, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 1, "algorithm": "medium", "perf": 438.832, "source": "autotuned"}, {"m": 5, "n": 6, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 15, "algorithm": "medium", "perf": 516.845, "source": "autotuned"}, {"m": 5, "n": 6, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 481.695, "source": "autotuned"}, {"m": 5, "n": 6, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 6, "algorithm": "medium", "perf": 496.549, "source": "autotuned"}, {"m": 5, "n": 6, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 532.953, "source": "autotuned"}, {"m": 5, "n": 6, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 553.846, "source": "autotuned"}, {"m": 5, "n": 6, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 6, "k": 11, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 12, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 13, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 14, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 15, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 16, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 17, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 18, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 19, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 20, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 21, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 22, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 23, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 6, "k": 25, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 26, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 27, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 28, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 29, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 30, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 31, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 32, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 33, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 34, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 35, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 36, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 37, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 6, "k": 38, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 39, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 40, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 41, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 42, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 43, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 44, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 6, "k": 45, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 16, "algorithm": "medium", "perf": 416.574, "source": "autotuned"}, {"m": 5, "n": 7, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 5, "algorithm": "medium", "perf": 445.927, "source": "autotuned"}, {"m": 5, "n": 7, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 2, "algorithm": "medium", "perf": 503.652, "source": "autotuned"}, {"m": 5, "n": 7, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 19, "algorithm": "medium", "perf": 512.586, "source": "autotuned"}, {"m": 5, "n": 7, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 19, "algorithm": "medium", "perf": 557.338, "source": "autotuned"}, {"m": 5, "n": 7, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 22, "algorithm": "medium", "perf": 590.81, "source": "autotuned"}, {"m": 5, "n": 7, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 12, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 10, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 7, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 13, "minblocks": 16, "algorithm": "medium", "perf": 608.599, "source": "autotuned"}, {"m": 5, "n": 7, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 592.774, "source": "autotuned"}, {"m": 5, "n": 7, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 26, "algorithm": "medium", "perf": 599.357, "source": "autotuned"}, {"m": 5, "n": 7, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 28, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 25, "algorithm": "medium", "perf": 591.972, "source": "autotuned"}, {"m": 5, "n": 7, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 17, "algorithm": "medium", "perf": 617.18, "source": "autotuned"}, {"m": 5, "n": 7, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 39, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 7, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 7, "k": 45, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 1, "minblocks": 6, "algorithm": "medium", "perf": 587.119, "source": "autotuned"}, {"m": 5, "n": 8, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 2, "algorithm": "medium", "perf": 439.326, "source": "autotuned"}, {"m": 5, "n": 8, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 13, "algorithm": "medium", "perf": 510.7, "source": "autotuned"}, {"m": 5, "n": 8, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 3, "algorithm": "medium", "perf": 570.354, "source": "autotuned"}, {"m": 5, "n": 8, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 21, "algorithm": "medium", "perf": 577.392, "source": "autotuned"}, {"m": 5, "n": 8, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 25, "algorithm": "medium", "perf": 593.793, "source": "autotuned"}, {"m": 5, "n": 8, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 23, "algorithm": "medium", "perf": 608.298, "source": "autotuned"}, {"m": 5, "n": 8, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 8, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 5, "algorithm": "medium", "perf": 481.098, "source": "autotuned"}, {"m": 5, "n": 9, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 1, "algorithm": "medium", "perf": 564.498, "source": "autotuned"}, {"m": 5, "n": 9, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 11, "algorithm": "medium", "perf": 610.45, "source": "autotuned"}, {"m": 5, "n": 9, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 25, "algorithm": "medium", "perf": 636.859, "source": "autotuned"}, {"m": 5, "n": 9, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 23, "algorithm": "medium", "perf": 626.219, "source": "autotuned"}, {"m": 5, "n": 9, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 21, "algorithm": "medium", "perf": 653.5, "source": "autotuned"}, {"m": 5, "n": 9, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 5, "minblocks": 14, "algorithm": "medium", "perf": 644.103, "source": "autotuned"}, {"m": 5, "n": 9, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 9, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 4, "minblocks": 18, "algorithm": "medium", "perf": 674.517, "source": "autotuned"}, {"m": 5, "n": 9, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 20, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 9, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 16, "algorithm": "medium", "perf": 648.108, "source": "autotuned"}, {"m": 5, "n": 9, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 649.547, "source": "autotuned"}, {"m": 5, "n": 9, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 25, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 26, "algorithm": "medium", "perf": 651.245, "source": "autotuned"}, {"m": 5, "n": 9, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 26, "algorithm": "medium", "perf": 647.326, "source": "autotuned"}, {"m": 5, "n": 9, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 655.242, "source": "autotuned"}, {"m": 5, "n": 9, "k": 29, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 9, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 12, "algorithm": "medium", "perf": 675.633, "source": "autotuned"}, {"m": 5, "n": 9, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 42, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 9, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 9, "k": 45, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 8, "algorithm": "medium", "perf": 645.929, "source": "autotuned"}, {"m": 5, "n": 10, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 10, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 17, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 10, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 24, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 10, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 38, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 10, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 10, "k": 45, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 11, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 11, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 10, "algorithm": "medium", "perf": 691.538, "source": "autotuned"}, {"m": 5, "n": 12, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 25, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 12, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 22, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 12, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 12, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 21, "algorithm": "medium", "perf": 751.708, "source": "autotuned"}, {"m": 5, "n": 12, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 21, "algorithm": "medium", "perf": 717.136, "source": "autotuned"}, {"m": 5, "n": 12, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 12, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "perf": 709.313, "source": "autotuned"}, {"m": 5, "n": 12, "k": 27, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 12, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 733.427, "source": "autotuned"}, {"m": 5, "n": 12, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 12, "k": 45, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 1, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 13, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 1, "algorithm": "medium", "perf": 669.163, "source": "autotuned"}, {"m": 5, "n": 13, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 709.666, "source": "autotuned"}, {"m": 5, "n": 13, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "perf": 717.806, "source": "autotuned"}, {"m": 5, "n": 13, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 21, "algorithm": "medium", "perf": 733.531, "source": "autotuned"}, {"m": 5, "n": 13, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 12, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 23, "algorithm": "medium", "perf": 758.992, "source": "autotuned"}, {"m": 5, "n": 13, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 16, "algorithm": "medium", "perf": 718.762, "source": "autotuned"}, {"m": 5, "n": 13, "k": 14, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 13, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 747.584, "source": "autotuned"}, {"m": 5, "n": 13, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "perf": 725.379, "source": "autotuned"}, {"m": 5, "n": 13, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 22, "algorithm": "medium", "perf": 720.143, "source": "autotuned"}, {"m": 5, "n": 13, "k": 24, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "perf": 741.677, "source": "autotuned"}, {"m": 5, "n": 13, "k": 25, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "perf": 722.723, "source": "autotuned"}, {"m": 5, "n": 13, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 23, "algorithm": "medium", "perf": 723.641, "source": "autotuned"}, {"m": 5, "n": 13, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 28, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 4, "algorithm": "medium", "perf": 718.646, "source": "autotuned"}, {"m": 5, "n": 13, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 17, "algorithm": "medium", "perf": 750.234, "source": "autotuned"}, {"m": 5, "n": 13, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 37, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 13, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 42, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 13, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 13, "k": 45, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 2, "algorithm": "medium", "perf": 725.673, "source": "autotuned"}, {"m": 5, "n": 14, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 14, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 15, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 21, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 15, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 28, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 15, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 39, "tile_m": 4, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 15, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 15, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 805.342, "source": "autotuned"}, {"m": 5, "n": 16, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 24, "algorithm": "medium", "perf": 775.76, "source": "autotuned"}, {"m": 5, "n": 16, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 27, "algorithm": "medium", "perf": 772.853, "source": "autotuned"}, {"m": 5, "n": 16, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 14, "algorithm": "medium", "perf": 787.938, "source": "autotuned"}, {"m": 5, "n": 16, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 770.975, "source": "autotuned"}, {"m": 5, "n": 16, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 30, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 16, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 3, "algorithm": "medium", "perf": 792.327, "source": "autotuned"}, {"m": 5, "n": 16, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 39, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 16, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 16, "k": 44, "tile_m": 5, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 16, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 17, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 18, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 6, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 18, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 17, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 18, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 18, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 35, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 18, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 18, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 19, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 19, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 19, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 19, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 19, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 19, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 20, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 27, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 21, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 12, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 21, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 23, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 21, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 30, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 21, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 33, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 21, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 40, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 21, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 21, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 9, "minblocks": 2, "algorithm": "medium", "perf": 794.063, "source": "autotuned"}, {"m": 5, "n": 22, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 26, "algorithm": "medium", "perf": 791.304, "source": "autotuned"}, {"m": 5, "n": 22, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 22, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 19, "algorithm": "medium", "perf": 788.463, "source": "autotuned"}, {"m": 5, "n": 22, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 784.236, "source": "autotuned"}, {"m": 5, "n": 22, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 17, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 22, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 804.773, "source": "autotuned"}, {"m": 5, "n": 22, "k": 23, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 807.012, "source": "autotuned"}, {"m": 5, "n": 22, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 8, "algorithm": "medium", "perf": 803.622, "source": "autotuned"}, {"m": 5, "n": 22, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 35, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 22, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 22, "k": 44, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 22, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 9, "minblocks": 5, "algorithm": "medium", "perf": 765.772, "source": "autotuned"}, {"m": 5, "n": 23, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 26, "algorithm": "medium", "perf": 772.399, "source": "autotuned"}, {"m": 5, "n": 23, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 18, "algorithm": "medium", "perf": 790.675, "source": "autotuned"}, {"m": 5, "n": 23, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 791.671, "source": "autotuned"}, {"m": 5, "n": 23, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 16, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 831.147, "source": "autotuned"}, {"m": 5, "n": 23, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 22, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 811.151, "source": "autotuned"}, {"m": 5, "n": 23, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 804.019, "source": "autotuned"}, {"m": 5, "n": 23, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 26, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 803.475, "source": "autotuned"}, {"m": 5, "n": 23, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 23, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 25, "algorithm": "medium", "perf": 796.427, "source": "autotuned"}, {"m": 5, "n": 24, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 806.037, "source": "autotuned"}, {"m": 5, "n": 24, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 24, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 10, "algorithm": "medium", "perf": 841.384, "source": "autotuned"}, {"m": 5, "n": 24, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 26, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 828.284, "source": "autotuned"}, {"m": 5, "n": 24, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 845.334, "source": "autotuned"}, {"m": 5, "n": 24, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 24, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 5, "algorithm": "medium", "perf": 797.443, "source": "autotuned"}, {"m": 5, "n": 25, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 784.633, "source": "autotuned"}, {"m": 5, "n": 25, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 19, "algorithm": "medium", "perf": 770.487, "source": "autotuned"}, {"m": 5, "n": 25, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 19, "algorithm": "medium", "perf": 800.91, "source": "autotuned"}, {"m": 5, "n": 25, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 806.303, "source": "autotuned"}, {"m": 5, "n": 25, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 22, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 25, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 25, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 10, "algorithm": "medium", "perf": 824.361, "source": "autotuned"}, {"m": 5, "n": 25, "k": 26, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 821.517, "source": "autotuned"}, {"m": 5, "n": 25, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 28, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 828.857, "source": "autotuned"}, {"m": 5, "n": 25, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 31, "tile_m": 5, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 25, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 844.859, "source": "autotuned"}, {"m": 5, "n": 25, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 35, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 25, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 40, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 25, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 25, "k": 45, "tile_m": 5, "tile_n": 1, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 835.988, "source": "autotuned"}, {"m": 5, "n": 26, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 4, "algorithm": "medium", "perf": 807.706, "source": "autotuned"}, {"m": 5, "n": 26, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 791.356, "source": "autotuned"}, {"m": 5, "n": 26, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 19, "algorithm": "medium", "perf": 786.815, "source": "autotuned"}, {"m": 5, "n": 26, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 26, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 17, "algorithm": "medium", "perf": 796.818, "source": "autotuned"}, {"m": 5, "n": 26, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 12, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 12, "algorithm": "medium", "perf": 816.155, "source": "autotuned"}, {"m": 5, "n": 26, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 802.23, "source": "autotuned"}, {"m": 5, "n": 26, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 19, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 26, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 22, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 823.99, "source": "autotuned"}, {"m": 5, "n": 26, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 827.597, "source": "autotuned"}, {"m": 5, "n": 26, "k": 24, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 848.091, "source": "autotuned"}, {"m": 5, "n": 26, "k": 25, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 828.214, "source": "autotuned"}, {"m": 5, "n": 26, "k": 26, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 830.522, "source": "autotuned"}, {"m": 5, "n": 26, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 28, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 836.658, "source": "autotuned"}, {"m": 5, "n": 26, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 224, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 855.53, "source": "autotuned"}, {"m": 5, "n": 26, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 36, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 26, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 26, "k": 45, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 2, "minblocks": 5, "algorithm": "medium", "perf": 849.24, "source": "autotuned"}, {"m": 5, "n": 27, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 27, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 6, "algorithm": "medium", "perf": 799.005, "source": "autotuned"}, {"m": 5, "n": 28, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 27, "algorithm": "medium", "perf": 784.792, "source": "autotuned"}, {"m": 5, "n": 28, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 19, "algorithm": "medium", "perf": 783.827, "source": "autotuned"}, {"m": 5, "n": 28, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 22, "algorithm": "medium", "perf": 805.649, "source": "autotuned"}, {"m": 5, "n": 28, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 11, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 28, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 810.823, "source": "autotuned"}, {"m": 5, "n": 28, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 28, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 25, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 839.457, "source": "autotuned"}, {"m": 5, "n": 28, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 840.78, "source": "autotuned"}, {"m": 5, "n": 28, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 28, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 848.995, "source": "autotuned"}, {"m": 5, "n": 28, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 869.837, "source": "autotuned"}, {"m": 5, "n": 28, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 36, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 28, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 28, "k": 45, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 859.985, "source": "autotuned"}, {"m": 5, "n": 29, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 7, "tile_m": 5, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 29, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 12, "tile_m": 5, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 29, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 30, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 29, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 35, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 29, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 40, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 29, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 29, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 30, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 25, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 31, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 12, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 31, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 19, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 31, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 26, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 31, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 31, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 31, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 805.336, "source": "autotuned"}, {"m": 5, "n": 32, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 4, "minblocks": 25, "algorithm": "medium", "perf": 804.973, "source": "autotuned"}, {"m": 5, "n": 32, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 7, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 19, "algorithm": "medium", "perf": 819.405, "source": "autotuned"}, {"m": 5, "n": 32, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 15, "algorithm": "medium", "perf": 827.845, "source": "autotuned"}, {"m": 5, "n": 32, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 11, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 32, "k": 12, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 841.384, "source": "autotuned"}, {"m": 5, "n": 32, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 846.251, "source": "autotuned"}, {"m": 5, "n": 32, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 2, "algorithm": "medium", "perf": 862.803, "source": "autotuned"}, {"m": 5, "n": 32, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 20, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 32, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 24, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 876.186, "source": "autotuned"}, {"m": 5, "n": 32, "k": 25, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 866.321, "source": "autotuned"}, {"m": 5, "n": 32, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 868.868, "source": "autotuned"}, {"m": 5, "n": 32, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 28, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 873.454, "source": "autotuned"}, {"m": 5, "n": 32, "k": 29, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 32, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 890.816, "source": "autotuned"}, {"m": 5, "n": 32, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 38, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 32, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 32, "k": 45, "tile_m": 3, "tile_n": 1, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 889.606, "source": "autotuned"}, {"m": 5, "n": 33, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 33, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 5, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 10, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 34, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 14, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 26, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 34, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 28, "tile_m": 5, "tile_n": 2, "threads": 224, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 34, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 34, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 34, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 43, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 34, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 34, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 6, "tile_m": 5, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 35, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 13, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 35, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 16, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 35, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 31, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 35, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 35, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 35, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 42, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 35, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 35, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 36, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 10, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 37, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 17, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 37, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 24, "tile_m": 5, "tile_n": 2, "threads": 224, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 37, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 39, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 37, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 37, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 6, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 38, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 15, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 38, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 20, "tile_m": 5, "tile_n": 2, "threads": 160, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 38, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 29, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 38, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 34, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 38, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 43, "tile_m": 5, "tile_n": 1, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 38, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 38, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 39, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 40, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 10, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 41, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 19, "tile_m": 5, "tile_n": 2, "threads": 160, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 41, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 24, "tile_m": 5, "tile_n": 2, "threads": 224, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 41, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 38, "tile_m": 5, "tile_n": 2, "threads": 192, "grouping": 1, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 41, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 41, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 7, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 26, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 42, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 14, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 42, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 21, "tile_m": 5, "tile_n": 2, "threads": 224, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 42, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 28, "tile_m": 5, "tile_n": 2, "threads": 256, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 42, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 43, "tile_m": 5, "tile_n": 1, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 42, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 42, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 43, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 21, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 44, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 28, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 44, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 39, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 44, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 44, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 4, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 10, "minblocks": 11, "algorithm": "medium", "perf": 751.005, "source": "autotuned"}, {"m": 5, "n": 45, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "perf": 769.065, "source": "autotuned"}, {"m": 5, "n": 45, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 18, "algorithm": "medium", "perf": 795.933, "source": "autotuned"}, {"m": 5, "n": 45, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 16, "algorithm": "medium", "perf": 816.787, "source": "autotuned"}, {"m": 5, "n": 45, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 45, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 842.717, "source": "autotuned"}, {"m": 5, "n": 45, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 19, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 45, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 24, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 5, "n": 45, "k": 25, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 885.081, "source": "autotuned"}, {"m": 5, "n": 45, "k": 26, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 893.5, "source": "autotuned"}, {"m": 5, "n": 45, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 28, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 897.887, "source": "autotuned"}, {"m": 5, "n": 45, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 916.161, "source": "autotuned"}, {"m": 5, "n": 45, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 5, "n": 45, "k": 45, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 919.182, "source": "autotuned"}, {"m": 6, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 15, "algorithm": "medium", "perf": 369.751, "source": "autotuned"}, {"m": 6, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 1, "algorithm": "medium", "perf": 437.31, "source": "autotuned"}, {"m": 6, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 8, "algorithm": "medium", "perf": 408.922, "source": "autotuned"}, {"m": 6, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 15, "algorithm": "medium", "perf": 459.907, "source": "autotuned"}, {"m": 6, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 2, "algorithm": "medium", "perf": 477.56, "source": "autotuned"}, {"m": 6, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 482.086, "source": "autotuned"}, {"m": 6, "n": 4, "k": 10, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 11, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 12, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 5, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 4, "k": 13, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 14, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 15, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 16, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 17, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 18, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 19, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 20, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 21, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 7, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 4, "k": 22, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 23, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 24, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 25, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 26, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 27, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 28, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 29, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 30, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 31, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 32, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 33, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 34, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 4, "k": 35, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 36, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 37, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 38, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 39, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 40, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 41, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 42, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 43, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 1, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 4, "k": 44, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 4, "k": 45, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 3, "algorithm": "medium", "perf": 454.274, "source": "autotuned"}, {"m": 6, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 10, "algorithm": "medium", "perf": 543.411, "source": "autotuned"}, {"m": 6, "n": 5, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 22, "algorithm": "medium", "perf": 509.28, "source": "autotuned"}, {"m": 6, "n": 5, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 530.719, "source": "autotuned"}, {"m": 6, "n": 5, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 567.27, "source": "autotuned"}, {"m": 6, "n": 5, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 586.779, "source": "autotuned"}, {"m": 6, "n": 5, "k": 10, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 11, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 12, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 13, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 14, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 15, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 16, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 17, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 18, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 19, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 20, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 21, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 22, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 23, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 24, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 25, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 26, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 27, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 28, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 29, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 30, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 31, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 32, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 33, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 34, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 35, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 36, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 37, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 38, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 39, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 40, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 41, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 42, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 43, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 44, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 5, "k": 45, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 13, "minblocks": 23, "algorithm": "medium", "perf": 436.777, "source": "autotuned"}, {"m": 6, "n": 6, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 13, "minblocks": 7, "algorithm": "medium", "perf": 514.148, "source": "autotuned"}, {"m": 6, "n": 6, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 13, "minblocks": 21, "algorithm": "medium", "perf": 519.349, "source": "autotuned"}, {"m": 6, "n": 6, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 13, "minblocks": 24, "algorithm": "medium", "perf": 551.619, "source": "autotuned"}, {"m": 6, "n": 6, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 13, "minblocks": 26, "algorithm": "medium", "perf": 599.955, "source": "autotuned"}, {"m": 6, "n": 6, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 6, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 13, "minblocks": 8, "algorithm": "medium", "perf": 510.693, "source": "autotuned"}, {"m": 6, "n": 7, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 10, "minblocks": 3, "algorithm": "medium", "perf": 546.154, "source": "autotuned"}, {"m": 6, "n": 7, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 10, "minblocks": 19, "algorithm": "medium", "perf": 578.921, "source": "autotuned"}, {"m": 6, "n": 7, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 13, "minblocks": 26, "algorithm": "medium", "perf": 620.416, "source": "autotuned"}, {"m": 6, "n": 7, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 13, "minblocks": 27, "algorithm": "medium", "perf": 679.445, "source": "autotuned"}, {"m": 6, "n": 7, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 703.892, "source": "autotuned"}, {"m": 6, "n": 7, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 4, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 7, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 31, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 25, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 7, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 37, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 7, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 7, "k": 44, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 7, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 537.011, "source": "autotuned"}, {"m": 6, "n": 8, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 4, "algorithm": "medium", "perf": 622.638, "source": "autotuned"}, {"m": 6, "n": 8, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 13, "minblocks": 22, "algorithm": "medium", "perf": 652.165, "source": "autotuned"}, {"m": 6, "n": 8, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 697.9, "source": "autotuned"}, {"m": 6, "n": 8, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 731.135, "source": "autotuned"}, {"m": 6, "n": 8, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 4, "minblocks": 26, "algorithm": "medium", "perf": 729.606, "source": "autotuned"}, {"m": 6, "n": 8, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 8, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 8, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 10, "minblocks": 1, "algorithm": "medium", "perf": 586.525, "source": "autotuned"}, {"m": 6, "n": 9, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 10, "minblocks": 11, "algorithm": "medium", "perf": 677.531, "source": "autotuned"}, {"m": 6, "n": 9, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 10, "minblocks": 27, "algorithm": "medium", "perf": 696.243, "source": "autotuned"}, {"m": 6, "n": 9, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 10, "minblocks": 26, "algorithm": "medium", "perf": 760.106, "source": "autotuned"}, {"m": 6, "n": 9, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 755.906, "source": "autotuned"}, {"m": 6, "n": 9, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 4, "minblocks": 25, "algorithm": "medium", "perf": 768.741, "source": "autotuned"}, {"m": 6, "n": 9, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 9, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 10, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 10, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 10, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 27, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 25, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 10, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 40, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 10, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 10, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 7, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 11, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 11, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 36, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 11, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 11, "k": 45, "tile_m": 4, "tile_n": 2, "threads": 64, "grouping": 1, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 12, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 12, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 19, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 13, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 24, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 13, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 36, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 13, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 13, "k": 45, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 14, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 11, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 14, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 21, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 14, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 28, "tile_m": 4, "tile_n": 2, "threads": 96, "grouping": 26, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 14, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 39, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 1, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 14, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 14, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 15, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 15, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 31, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 15, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 15, "k": 44, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 15, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 4, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 16, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 16, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 16, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 31, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 7, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 16, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 16, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 41, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 16, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 16, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 17, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 17, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 17, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 17, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 24, "tile_m": 4, "tile_n": 2, "threads": 96, "grouping": 26, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 17, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 39, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 17, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 17, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 7, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 18, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 18, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 20, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 17, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 18, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 27, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 18, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 18, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 18, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 18, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 19, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 5, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 11, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 20, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 23, "tile_m": 6, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 20, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 28, "tile_m": 6, "tile_n": 2, "threads": 64, "grouping": 1, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 20, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 20, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 41, "tile_m": 4, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 20, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 20, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 21, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 22, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 23, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 18, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 23, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 25, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 23, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 43, "tile_m": 4, "tile_n": 1, "threads": 288, "grouping": 9, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 23, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 23, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 24, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 20, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 24, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 31, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 24, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 41, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 24, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 24, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 25, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 24, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 26, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 26, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 7, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 27, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 27, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 27, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 34, "tile_m": 6, "tile_n": 1, "threads": 224, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 27, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 43, "tile_m": 5, "tile_n": 1, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 27, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 27, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 28, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 22, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 29, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 17, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 29, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 38, "tile_m": 3, "tile_n": 2, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 29, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 29, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 5, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 30, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 12, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 30, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 27, "tile_m": 3, "tile_n": 1, "threads": 288, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 30, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 33, "tile_m": 3, "tile_n": 1, "threads": 352, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 30, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 40, "tile_m": 3, "tile_n": 1, "threads": 448, "grouping": 5, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 30, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 30, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 6, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 31, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 31, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 31, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 25, "tile_m": 6, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 31, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 34, "tile_m": 3, "tile_n": 1, "threads": 352, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 31, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 43, "tile_m": 3, "tile_n": 1, "threads": 448, "grouping": 5, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 31, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 31, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 11, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 17, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 32, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 32, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 25, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 32, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 38, "tile_m": 3, "tile_n": 1, "threads": 416, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 32, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 32, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 33, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 20, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 33, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 31, "tile_m": 3, "tile_n": 1, "threads": 352, "grouping": 27, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 33, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 38, "tile_m": 3, "tile_n": 1, "threads": 448, "grouping": 5, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 33, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 41, "tile_m": 4, "tile_n": 1, "threads": 288, "grouping": 9, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 33, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 33, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 34, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 17, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 34, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 24, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 34, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 36, "tile_m": 3, "tile_n": 1, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 34, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 43, "tile_m": 3, "tile_n": 1, "threads": 512, "grouping": 5, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 34, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 34, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 35, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 11, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 36, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 36, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 192, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 36, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 39, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 36, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 36, "k": 44, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 36, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 37, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 38, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 6, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 39, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 39, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 20, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 39, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 35, "tile_m": 5, "tile_n": 1, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 39, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 42, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 39, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 39, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 11, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 40, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 25, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 40, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 36, "tile_m": 4, "tile_n": 1, "threads": 320, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 40, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 40, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 41, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 42, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 5, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 43, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 14, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 43, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 19, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 7, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 43, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 28, "tile_m": 4, "tile_n": 1, "threads": 192, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 43, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 33, "tile_m": 3, "tile_n": 1, "threads": 480, "grouping": 5, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 43, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 42, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 43, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 43, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 44, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 5, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 45, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 10, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 45, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 384, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 45, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 28, "tile_m": 4, "tile_n": 1, "threads": 192, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 6, "n": 45, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 6, "n": 45, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 16, "algorithm": "medium", "perf": 412.809, "source": "autotuned"}, {"m": 7, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 25, "algorithm": "medium", "perf": 391.024, "source": "autotuned"}, {"m": 7, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 7, "algorithm": "medium", "perf": 447.672, "source": "autotuned"}, {"m": 7, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 10, "algorithm": "medium", "perf": 480.486, "source": "autotuned"}, {"m": 7, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 14, "algorithm": "medium", "perf": 492.186, "source": "autotuned"}, {"m": 7, "n": 4, "k": 9, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 519.029, "source": "autotuned"}, {"m": 7, "n": 4, "k": 10, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 11, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 12, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 25, "algorithm": "medium", "perf": 561.624, "source": "autotuned"}, {"m": 7, "n": 4, "k": 14, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 15, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 16, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 17, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 18, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 19, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 20, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 21, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 22, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 23, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 24, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 14, "algorithm": "medium", "perf": 538.874, "source": "autotuned"}, {"m": 7, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 544.314, "source": "autotuned"}, {"m": 7, "n": 4, "k": 27, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 553.272, "source": "autotuned"}, {"m": 7, "n": 4, "k": 29, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 30, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 31, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 549.476, "source": "autotuned"}, {"m": 7, "n": 4, "k": 33, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 34, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 35, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 36, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 37, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 38, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 39, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 40, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 41, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 42, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 43, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 44, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 4, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 10, "algorithm": "medium", "perf": 527.092, "source": "autotuned"}, {"m": 7, "n": 5, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 13, "algorithm": "medium", "perf": 412.862, "source": "autotuned"}, {"m": 7, "n": 5, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 13, "algorithm": "medium", "perf": 440.647, "source": "autotuned"}, {"m": 7, "n": 5, "k": 6, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 17, "algorithm": "medium", "perf": 497.706, "source": "autotuned"}, {"m": 7, "n": 5, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 19, "algorithm": "medium", "perf": 513.429, "source": "autotuned"}, {"m": 7, "n": 5, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 20, "algorithm": "medium", "perf": 586.3, "source": "autotuned"}, {"m": 7, "n": 5, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 12, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 5, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 13, "minblocks": 21, "algorithm": "medium", "perf": 608.599, "source": "autotuned"}, {"m": 7, "n": 5, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 5, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 15, "algorithm": "medium", "perf": 596.467, "source": "autotuned"}, {"m": 7, "n": 5, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 23, "algorithm": "medium", "perf": 578.722, "source": "autotuned"}, {"m": 7, "n": 5, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 585.374, "source": "autotuned"}, {"m": 7, "n": 5, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 30, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 5, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 1, "minblocks": 4, "algorithm": "medium", "perf": 601.751, "source": "autotuned"}, {"m": 7, "n": 5, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 5, "k": 45, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 3, "algorithm": "medium", "perf": 582.16, "source": "autotuned"}, {"m": 7, "n": 6, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 3, "algorithm": "medium", "perf": 532.017, "source": "autotuned"}, {"m": 7, "n": 6, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 19, "algorithm": "medium", "perf": 561.04, "source": "autotuned"}, {"m": 7, "n": 6, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 19, "algorithm": "medium", "perf": 602.177, "source": "autotuned"}, {"m": 7, "n": 6, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 25, "algorithm": "medium", "perf": 655.348, "source": "autotuned"}, {"m": 7, "n": 6, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 679.328, "source": "autotuned"}, {"m": 7, "n": 6, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 11, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 13, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 6, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 18, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 6, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 36, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 6, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 6, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 13, "minblocks": 16, "algorithm": "medium", "perf": 570.156, "source": "autotuned"}, {"m": 7, "n": 7, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 17, "algorithm": "medium", "perf": 630.712, "source": "autotuned"}, {"m": 7, "n": 7, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 27, "algorithm": "medium", "perf": 674.449, "source": "autotuned"}, {"m": 7, "n": 7, "k": 8, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 729.115, "source": "autotuned"}, {"m": 7, "n": 7, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 748.054, "source": "autotuned"}, {"m": 7, "n": 7, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 12, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 7, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 2, "algorithm": "medium", "perf": 723.398, "source": "autotuned"}, {"m": 7, "n": 7, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 21, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 7, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 25, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 2, "minblocks": 10, "algorithm": "medium", "perf": 714.426, "source": "autotuned"}, {"m": 7, "n": 7, "k": 26, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 19, "algorithm": "medium", "perf": 715.418, "source": "autotuned"}, {"m": 7, "n": 7, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 28, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 15, "algorithm": "medium", "perf": 722.838, "source": "autotuned"}, {"m": 7, "n": 7, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 32, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 12, "algorithm": "medium", "perf": 745.885, "source": "autotuned"}, {"m": 7, "n": 7, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 35, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 7, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 40, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 7, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 7, "k": 45, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "perf": 713.538, "source": "autotuned"}, {"m": 7, "n": 8, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 8, "algorithm": "medium", "perf": 608.405, "source": "autotuned"}, {"m": 7, "n": 8, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 19, "algorithm": "medium", "perf": 651.642, "source": "autotuned"}, {"m": 7, "n": 8, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 717.014, "source": "autotuned"}, {"m": 7, "n": 8, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 772.091, "source": "autotuned"}, {"m": 7, "n": 8, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 27, "algorithm": "medium", "perf": 787.746, "source": "autotuned"}, {"m": 7, "n": 8, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 26, "algorithm": "medium", "perf": 768.533, "source": "autotuned"}, {"m": 7, "n": 8, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 21, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 8, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 30, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 8, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 35, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 1, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 8, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 8, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 1, "algorithm": "medium", "perf": 627.635, "source": "autotuned"}, {"m": 7, "n": 9, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 24, "algorithm": "medium", "perf": 690.695, "source": "autotuned"}, {"m": 7, "n": 9, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 21, "algorithm": "medium", "perf": 751.319, "source": "autotuned"}, {"m": 7, "n": 9, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 23, "algorithm": "medium", "perf": 797.512, "source": "autotuned"}, {"m": 7, "n": 9, "k": 8, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "perf": 782.853, "source": "autotuned"}, {"m": 7, "n": 9, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 24, "algorithm": "medium", "perf": 778.312, "source": "autotuned"}, {"m": 7, "n": 9, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 14, "algorithm": "medium", "perf": 783.727, "source": "autotuned"}, {"m": 7, "n": 9, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 22, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 25, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 9, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 24, "algorithm": "medium", "perf": 771.004, "source": "autotuned"}, {"m": 7, "n": 9, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 774.135, "source": "autotuned"}, {"m": 7, "n": 9, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 28, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 15, "algorithm": "medium", "perf": 773.538, "source": "autotuned"}, {"m": 7, "n": 9, "k": 29, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 1, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 9, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 806.222, "source": "autotuned"}, {"m": 7, "n": 9, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 9, "k": 45, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 16, "algorithm": "medium", "perf": 775.68, "source": "autotuned"}, {"m": 7, "n": 10, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 13, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 10, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 18, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 10, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 27, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 1, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 10, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 39, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 1, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 10, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 10, "k": 44, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 10, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 11, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 8, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 13, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 12, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 22, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 12, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 31, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 12, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 35, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 1, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 12, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 12, "k": 44, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 12, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 4, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 837.383, "source": "autotuned"}, {"m": 7, "n": 13, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 24, "algorithm": "medium", "perf": 817.077, "source": "autotuned"}, {"m": 7, "n": 13, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 24, "algorithm": "medium", "perf": 879.853, "source": "autotuned"}, {"m": 7, "n": 13, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 21, "algorithm": "medium", "perf": 882.819, "source": "autotuned"}, {"m": 7, "n": 13, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 864.026, "source": "autotuned"}, {"m": 7, "n": 13, "k": 14, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 13, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 19, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 13, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 873.66, "source": "autotuned"}, {"m": 7, "n": 13, "k": 26, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 17, "algorithm": "medium", "perf": 882.585, "source": "autotuned"}, {"m": 7, "n": 13, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 28, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 17, "algorithm": "medium", "perf": 884.999, "source": "autotuned"}, {"m": 7, "n": 13, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 2, "minblocks": 17, "algorithm": "medium", "perf": 919.479, "source": "autotuned"}, {"m": 7, "n": 13, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 41, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 13, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 13, "k": 45, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 8, "algorithm": "medium", "perf": 893.084, "source": "autotuned"}, {"m": 7, "n": 14, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 14, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 12, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 15, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 15, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 16, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 14, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 16, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 17, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 16, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 24, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 16, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 35, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 16, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 42, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 16, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 16, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 17, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 18, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 19, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 20, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 19, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 29, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 19, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 33, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 19, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 19, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 20, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 7, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 21, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 14, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 21, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 21, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 21, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 28, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 21, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 34, "tile_m": 2, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 21, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 41, "tile_m": 7, "tile_n": 1, "threads": 448, "grouping": 21, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 21, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 21, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 16, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 22, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 27, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 22, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 38, "tile_m": 2, "tile_n": 1, "threads": 288, "grouping": 6, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 22, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 41, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 22, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 22, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 23, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 10, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 23, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 23, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 28, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 23, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 33, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 23, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 23, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 24, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 14, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 24, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 24, "k": 24, "tile_m": 7, "tile_n": 1, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 24, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 33, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 24, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 42, "tile_m": 7, "tile_n": 1, "threads": 320, "grouping": 7, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 24, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 24, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 951.384, "source": "autotuned"}, {"m": 7, "n": 25, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "perf": 943.183, "source": "autotuned"}, {"m": 7, "n": 25, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 25, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 20, "algorithm": "medium", "perf": 950.204, "source": "autotuned"}, {"m": 7, "n": 25, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 984.683, "source": "autotuned"}, {"m": 7, "n": 25, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 10, "algorithm": "medium", "perf": 1007.31, "source": "autotuned"}, {"m": 7, "n": 25, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 20, "tile_m": 7, "tile_n": 1, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 25, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 25, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 1038.69, "source": "autotuned"}, {"m": 7, "n": 25, "k": 26, "tile_m": 2, "tile_n": 2, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1048.39, "source": "autotuned"}, {"m": 7, "n": 25, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 28, "tile_m": 4, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1044.36, "source": "autotuned"}, {"m": 7, "n": 25, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1076.16, "source": "autotuned"}, {"m": 7, "n": 25, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 34, "tile_m": 1, "tile_n": 1, "threads": 384, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 25, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 41, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 25, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 25, "k": 45, "tile_m": 4, "tile_n": 1, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 1071.86, "source": "autotuned"}, {"m": 7, "n": 26, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 26, "algorithm": "medium", "perf": 959.977, "source": "autotuned"}, {"m": 7, "n": 26, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 11, "minblocks": 23, "algorithm": "medium", "perf": 929.153, "source": "autotuned"}, {"m": 7, "n": 26, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 7, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 22, "algorithm": "medium", "perf": 966.104, "source": "autotuned"}, {"m": 7, "n": 26, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 23, "algorithm": "medium", "perf": 987.395, "source": "autotuned"}, {"m": 7, "n": 26, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 11, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 26, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 1018.74, "source": "autotuned"}, {"m": 7, "n": 26, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 16, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 26, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 1048.39, "source": "autotuned"}, {"m": 7, "n": 26, "k": 26, "tile_m": 4, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1054.07, "source": "autotuned"}, {"m": 7, "n": 26, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 1066.74, "source": "autotuned"}, {"m": 7, "n": 26, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 32, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 1096.73, "source": "autotuned"}, {"m": 7, "n": 26, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 26, "k": 45, "tile_m": 4, "tile_n": 1, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 1090.98, "source": "autotuned"}, {"m": 7, "n": 27, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 27, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 982.927, "source": "autotuned"}, {"m": 7, "n": 28, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 23, "algorithm": "medium", "perf": 928.32, "source": "autotuned"}, {"m": 7, "n": 28, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 28, "k": 7, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 20, "algorithm": "medium", "perf": 972.281, "source": "autotuned"}, {"m": 7, "n": 28, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 17, "algorithm": "medium", "perf": 1013.11, "source": "autotuned"}, {"m": 7, "n": 28, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 1037.78, "source": "autotuned"}, {"m": 7, "n": 28, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 15, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 28, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 24, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 28, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1076.16, "source": "autotuned"}, {"m": 7, "n": 28, "k": 26, "tile_m": 4, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1091.09, "source": "autotuned"}, {"m": 7, "n": 28, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 28, "tile_m": 4, "tile_n": 1, "threads": 224, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 1088.08, "source": "autotuned"}, {"m": 7, "n": 28, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 32, "tile_m": 4, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1113.98, "source": "autotuned"}, {"m": 7, "n": 28, "k": 33, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 28, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 42, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 28, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 28, "k": 45, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 1110.25, "source": "autotuned"}, {"m": 7, "n": 29, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 16, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 29, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 192, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 29, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 29, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 30, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 10, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 31, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 21, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 31, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 28, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 31, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 31, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 25, "algorithm": "medium", "perf": 968.388, "source": "autotuned"}, {"m": 7, "n": 32, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 24, "algorithm": "medium", "perf": 982.45, "source": "autotuned"}, {"m": 7, "n": 32, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 20, "algorithm": "medium", "perf": 1027.27, "source": "autotuned"}, {"m": 7, "n": 32, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "perf": 1044.53, "source": "autotuned"}, {"m": 7, "n": 32, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 12, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 32, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 1074.08, "source": "autotuned"}, {"m": 7, "n": 32, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 25, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1112.64, "source": "autotuned"}, {"m": 7, "n": 32, "k": 26, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 1128.45, "source": "autotuned"}, {"m": 7, "n": 32, "k": 27, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 32, "k": 28, "tile_m": 4, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1133.3, "source": "autotuned"}, {"m": 7, "n": 32, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 32, "tile_m": 2, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 1145.16, "source": "autotuned"}, {"m": 7, "n": 32, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 34, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 32, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 41, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 32, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 32, "k": 45, "tile_m": 4, "tile_n": 1, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 1159.87, "source": "autotuned"}, {"m": 7, "n": 33, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 33, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 34, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 8, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 18, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 35, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 17, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 35, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 30, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 35, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 36, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 35, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 35, "k": 45, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 36, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 36, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 18, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 37, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 192, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 37, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 37, "tile_m": 2, "tile_n": 2, "threads": 320, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 37, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 37, "k": 44, "tile_m": 6, "tile_n": 2, "w": 18, "v": 10, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "source": "predicted"}, {"m": 7, "n": 37, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 38, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 12, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 38, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 38, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 30, "tile_m": 5, "tile_n": 1, "threads": 320, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 38, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 33, "tile_m": 4, "tile_n": 1, "threads": 288, "grouping": 9, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 38, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 40, "tile_m": 2, "tile_n": 1, "threads": 352, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 38, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 38, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 8, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 39, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 17, "tile_m": 4, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 39, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 39, "tile_m": 6, "tile_n": 2, "w": 18, "v": 10, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "source": "predicted"}, {"m": 7, "n": 39, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 39, "k": 44, "tile_m": 6, "tile_n": 2, "w": 18, "v": 10, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "source": "predicted"}, {"m": 7, "n": 39, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 12, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 40, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 18, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 40, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 27, "tile_m": 4, "tile_n": 1, "threads": 192, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 40, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 40, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 41, "tile_m": 6, "tile_n": 2, "w": 18, "v": 10, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "source": "predicted"}, {"m": 7, "n": 40, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 40, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 15, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 41, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 18, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 41, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 41, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 36, "tile_m": 4, "tile_n": 1, "threads": 320, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 41, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 41, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 42, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 42, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 22, "tile_m": 7, "tile_n": 1, "threads": 384, "grouping": 10, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 42, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 31, "tile_m": 5, "tile_n": 1, "threads": 352, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 42, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 33, "tile_m": 5, "tile_n": 1, "threads": 320, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 42, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 42, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 43, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 44, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 44, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 18, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 44, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 27, "tile_m": 7, "tile_n": 1, "threads": 320, "grouping": 7, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 44, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 352, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 44, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 41, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 7, "n": 44, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 44, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 4, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 4, "minblocks": 17, "algorithm": "medium", "perf": 920.742, "source": "autotuned"}, {"m": 7, "n": 45, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 15, "algorithm": "medium", "perf": 954.678, "source": "autotuned"}, {"m": 7, "n": 45, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 7, "tile_m": 2, "tile_n": 3, "threads": 64, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 1004.78, "source": "autotuned"}, {"m": 7, "n": 45, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 9, "tile_m": 2, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "perf": 1051.89, "source": "autotuned"}, {"m": 7, "n": 45, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1087.89, "source": "autotuned"}, {"m": 7, "n": 45, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 25, "tile_m": 2, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1161.18, "source": "autotuned"}, {"m": 7, "n": 45, "k": 26, "tile_m": 4, "tile_n": 1, "threads": 256, "grouping": 2, "minblocks": 5, "algorithm": "medium", "perf": 1167.25, "source": "autotuned"}, {"m": 7, "n": 45, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 28, "tile_m": 4, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1176.58, "source": "autotuned"}, {"m": 7, "n": 45, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 32, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 2, "minblocks": 4, "algorithm": "medium", "perf": 1207.27, "source": "autotuned"}, {"m": 7, "n": 45, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 7, "n": 45, "k": 45, "tile_m": 4, "tile_n": 1, "threads": 320, "grouping": 2, "minblocks": 3, "algorithm": "medium", "perf": 1213.99, "source": "autotuned"}, {"m": 8, "n": 4, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 7, "minblocks": 1, "algorithm": "medium", "perf": 431.726, "source": "autotuned"}, {"m": 8, "n": 4, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 11, "algorithm": "medium", "perf": 477.505, "source": "autotuned"}, {"m": 8, "n": 4, "k": 6, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 23, "algorithm": "medium", "perf": 546.389, "source": "autotuned"}, {"m": 8, "n": 4, "k": 7, "tile_m": 1, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 5, "algorithm": "medium", "perf": 565.522, "source": "autotuned"}, {"m": 8, "n": 4, "k": 8, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 27, "algorithm": "medium", "perf": 566.549, "source": "autotuned"}, {"m": 8, "n": 4, "k": 9, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 10, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 4, "k": 11, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 12, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 13, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 14, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 15, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 16, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 17, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 18, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 19, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 20, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 4, "k": 21, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 22, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 23, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 24, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 25, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 26, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 27, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 28, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 29, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 30, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 31, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 32, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 33, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 34, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 35, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 36, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 37, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 38, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 39, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 4, "k": 40, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 41, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 42, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 43, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 44, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 4, "k": 45, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 10, "minblocks": 12, "algorithm": "medium", "perf": 520.996, "source": "autotuned"}, {"m": 8, "n": 5, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 10, "minblocks": 1, "algorithm": "medium", "perf": 584.015, "source": "autotuned"}, {"m": 8, "n": 5, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 13, "minblocks": 26, "algorithm": "medium", "perf": 596.162, "source": "autotuned"}, {"m": 8, "n": 5, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 5, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 5, "k": 24, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 5, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 37, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 5, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 5, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 8, "minblocks": 1, "algorithm": "medium", "perf": 535.147, "source": "autotuned"}, {"m": 8, "n": 6, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 5, "minblocks": 1, "algorithm": "medium", "perf": 623.198, "source": "autotuned"}, {"m": 8, "n": 6, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 692.73, "source": "autotuned"}, {"m": 8, "n": 6, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 10, "minblocks": 26, "algorithm": "medium", "perf": 730.266, "source": "autotuned"}, {"m": 8, "n": 6, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 4, "minblocks": 27, "algorithm": "medium", "perf": 725.755, "source": "autotuned"}, {"m": 8, "n": 6, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 43, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 6, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 6, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 13, "minblocks": 25, "algorithm": "medium", "perf": 674.466, "source": "autotuned"}, {"m": 8, "n": 7, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 10, "minblocks": 25, "algorithm": "medium", "perf": 737.422, "source": "autotuned"}, {"m": 8, "n": 7, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 809.675, "source": "autotuned"}, {"m": 8, "n": 7, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 4, "minblocks": 25, "algorithm": "medium", "perf": 807.945, "source": "autotuned"}, {"m": 8, "n": 7, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 14, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 7, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 5, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 7, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 7, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 34, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 1, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 7, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 43, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 7, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 7, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 10, "minblocks": 4, "algorithm": "medium", "perf": 751.703, "source": "autotuned"}, {"m": 8, "n": 8, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 948.152, "source": "autotuned"}, {"m": 8, "n": 8, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 4, "minblocks": 24, "algorithm": "medium", "perf": 873.252, "source": "autotuned"}, {"m": 8, "n": 8, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 27, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 8, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 21, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 8, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 8, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 8, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 13, "minblocks": 22, "algorithm": "medium", "perf": 703.856, "source": "autotuned"}, {"m": 8, "n": 9, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 10, "minblocks": 22, "algorithm": "medium", "perf": 842.134, "source": "autotuned"}, {"m": 8, "n": 9, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 10, "minblocks": 19, "algorithm": "medium", "perf": 855.471, "source": "autotuned"}, {"m": 8, "n": 9, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 14, "minblocks": 14, "algorithm": "medium", "perf": 845.869, "source": "autotuned"}, {"m": 8, "n": 9, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 9, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 10, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 13, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 11, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 9, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 7, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 11, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 16, "tile_m": 4, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 11, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 27, "tile_m": 1, "tile_n": 1, "threads": 320, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 11, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 34, "tile_m": 1, "tile_n": 1, "threads": 384, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 11, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 11, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 20, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 12, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 29, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 12, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 39, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 12, "k": 40, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 12, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 12, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 13, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 6, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 13, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 14, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 15, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 5, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 14, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 20, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 14, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 29, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 14, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 34, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 14, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 43, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 14, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 14, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 15, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 15, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 15, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 34, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 15, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 15, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 384, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 16, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 16, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 8, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 17, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 17, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 17, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 17, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 36, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 17, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 17, "k": 45, "tile_m": 4, "tile_n": 1, "threads": 384, "grouping": 23, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 18, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 5, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 18, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 12, "tile_m": 4, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 18, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 23, "tile_m": 4, "tile_n": 2, "threads": 96, "grouping": 26, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 18, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 18, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 41, "tile_m": 2, "tile_n": 1, "threads": 416, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 18, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 18, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 19, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 10, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 20, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 19, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 30, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 20, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 26, "tile_m": 4, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 20, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 20, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 7, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 21, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 21, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 17, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 21, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 21, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 21, "k": 44, "tile_m": 4, "tile_n": 1, "threads": 384, "grouping": 12, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 21, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 31, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 22, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 38, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 22, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 41, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 22, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 22, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 36, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 23, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 23, "k": 45, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 24, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 5, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 24, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 12, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 24, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 19, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 24, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 24, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 33, "tile_m": 5, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 24, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 40, "tile_m": 2, "tile_n": 1, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 24, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 24, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 15, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 25, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 17, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 25, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 24, "tile_m": 4, "tile_n": 1, "threads": 192, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 25, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 288, "grouping": 8, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 25, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 25, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 26, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 11, "tile_m": 8, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 27, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 27, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 27, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 37, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 10, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 27, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 27, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 416, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 27, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 4, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 10, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 28, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 13, "tile_m": 4, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 28, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 19, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 28, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 33, "tile_m": 4, "tile_n": 1, "threads": 288, "grouping": 9, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 28, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 352, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 28, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 28, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 29, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 4, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 10, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 30, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 13, "tile_m": 8, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 30, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 30, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 31, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 30, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 30, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 416, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 30, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 30, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 11, "tile_m": 8, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 31, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 25, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 31, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 36, "tile_m": 5, "tile_n": 1, "threads": 320, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 31, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 31, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 32, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 4, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 33, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 14, "tile_m": 8, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 33, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 19, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 33, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 33, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 33, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 41, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 33, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 33, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 11, "tile_m": 8, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 34, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 25, "tile_m": 4, "tile_n": 1, "threads": 320, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 34, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 39, "tile_m": 1, "tile_n": 1, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 34, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 34, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 35, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 7, "tile_m": 8, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 36, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 14, "tile_m": 8, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 36, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 17, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 36, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 24, "tile_m": 4, "tile_n": 1, "threads": 320, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 36, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 35, "tile_m": 1, "tile_n": 1, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 36, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 42, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 36, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 36, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 17, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 37, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 13, "tile_m": 8, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 37, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 19, "tile_m": 4, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 37, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 37, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 41, "tile_m": 2, "tile_n": 5, "threads": 128, "grouping": 19, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 37, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 37, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 38, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 5, "tile_m": 8, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 39, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 10, "tile_m": 8, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 39, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 23, "tile_m": 4, "tile_n": 1, "threads": 320, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 39, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 8, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 39, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 33, "tile_m": 1, "tile_n": 1, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 39, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 39, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 15, "tile_m": 8, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 40, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 17, "tile_m": 8, "tile_n": 1, "threads": 192, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 40, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 24, "tile_m": 4, "tile_n": 1, "threads": 320, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 40, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 35, "tile_m": 8, "tile_n": 1, "threads": 480, "grouping": 18, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 40, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 42, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 40, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 40, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 41, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 11, "tile_m": 8, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 42, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 16, "tile_m": 8, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 42, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 10, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 42, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 42, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 13, "tile_m": 8, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 43, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 20, "tile_m": 8, "tile_n": 1, "threads": 192, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 43, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 31, "tile_m": 8, "tile_n": 1, "threads": 480, "grouping": 18, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 43, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 33, "tile_m": 8, "tile_n": 1, "threads": 480, "grouping": 18, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 43, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 8, "n": 43, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 43, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 44, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 8, "n": 45, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 17, "algorithm": "medium", "perf": 375.31, "source": "autotuned"}, {"m": 9, "n": 4, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 26, "algorithm": "medium", "perf": 439.162, "source": "autotuned"}, {"m": 9, "n": 4, "k": 6, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 483.505, "source": "autotuned"}, {"m": 9, "n": 4, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 518.811, "source": "autotuned"}, {"m": 9, "n": 4, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 13, "minblocks": 19, "algorithm": "medium", "perf": 531.703, "source": "autotuned"}, {"m": 9, "n": 4, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 22, "algorithm": "medium", "perf": 578.535, "source": "autotuned"}, {"m": 9, "n": 4, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 19, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 4, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 15, "algorithm": "medium", "perf": 577.272, "source": "autotuned"}, {"m": 9, "n": 4, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 18, "algorithm": "medium", "perf": 574.223, "source": "autotuned"}, {"m": 9, "n": 4, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 4, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 567.038, "source": "autotuned"}, {"m": 9, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 15, "algorithm": "medium", "perf": 575.2, "source": "autotuned"}, {"m": 9, "n": 4, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 13, "algorithm": "medium", "perf": 579.048, "source": "autotuned"}, {"m": 9, "n": 4, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 585.549, "source": "autotuned"}, {"m": 9, "n": 4, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 37, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 4, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 42, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 4, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 4, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 4, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 21, "algorithm": "medium", "perf": 458.869, "source": "autotuned"}, {"m": 9, "n": 5, "k": 5, "tile_m": 1, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 24, "algorithm": "medium", "perf": 532.058, "source": "autotuned"}, {"m": 9, "n": 5, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 32, "grouping": 10, "minblocks": 14, "algorithm": "medium", "perf": 561.861, "source": "autotuned"}, {"m": 9, "n": 5, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 10, "minblocks": 26, "algorithm": "medium", "perf": 607.333, "source": "autotuned"}, {"m": 9, "n": 5, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 25, "algorithm": "medium", "perf": 631.071, "source": "autotuned"}, {"m": 9, "n": 5, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 5, "minblocks": 14, "algorithm": "medium", "perf": 650.478, "source": "autotuned"}, {"m": 9, "n": 5, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 18, "algorithm": "medium", "perf": 681.007, "source": "autotuned"}, {"m": 9, "n": 5, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 656.849, "source": "autotuned"}, {"m": 9, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 655.614, "source": "autotuned"}, {"m": 9, "n": 5, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 15, "algorithm": "medium", "perf": 656.774, "source": "autotuned"}, {"m": 9, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 10, "algorithm": "medium", "perf": 640.209, "source": "autotuned"}, {"m": 9, "n": 5, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 10, "algorithm": "medium", "perf": 678.178, "source": "autotuned"}, {"m": 9, "n": 5, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 5, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 645.929, "source": "autotuned"}, {"m": 9, "n": 6, "k": 4, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 6, "algorithm": "medium", "perf": 542.835, "source": "autotuned"}, {"m": 9, "n": 6, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 4, "algorithm": "medium", "perf": 619.213, "source": "autotuned"}, {"m": 9, "n": 6, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 13, "minblocks": 25, "algorithm": "medium", "perf": 646.841, "source": "autotuned"}, {"m": 9, "n": 6, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 25, "algorithm": "medium", "perf": 696.311, "source": "autotuned"}, {"m": 9, "n": 6, "k": 8, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 25, "algorithm": "medium", "perf": 710.748, "source": "autotuned"}, {"m": 9, "n": 6, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 6, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 22, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 6, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 31, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 6, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 36, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 6, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 6, "k": 45, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 7, "k": 4, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 25, "algorithm": "medium", "perf": 605.959, "source": "autotuned"}, {"m": 9, "n": 7, "k": 5, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 20, "algorithm": "medium", "perf": 657.579, "source": "autotuned"}, {"m": 9, "n": 7, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 7, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 18, "algorithm": "medium", "perf": 768.916, "source": "autotuned"}, {"m": 9, "n": 7, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 9, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 15, "algorithm": "medium", "perf": 772.147, "source": "autotuned"}, {"m": 9, "n": 7, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 11, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 5, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 7, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 20, "algorithm": "medium", "perf": 775.811, "source": "autotuned"}, {"m": 9, "n": 7, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 21, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 7, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 10, "algorithm": "medium", "perf": 769.283, "source": "autotuned"}, {"m": 9, "n": 7, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 778.217, "source": "autotuned"}, {"m": 9, "n": 7, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 799.404, "source": "autotuned"}, {"m": 9, "n": 7, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 7, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 4, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 17, "algorithm": "medium", "perf": 667.45, "source": "autotuned"}, {"m": 9, "n": 8, "k": 5, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 17, "algorithm": "medium", "perf": 734.394, "source": "autotuned"}, {"m": 9, "n": 8, "k": 6, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 19, "algorithm": "medium", "perf": 802.799, "source": "autotuned"}, {"m": 9, "n": 8, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 8, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 13, "minblocks": 15, "algorithm": "medium", "perf": 818.438, "source": "autotuned"}, {"m": 9, "n": 8, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 19, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 22, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 8, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 26, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 8, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 8, "k": 45, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 9, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 24, "algorithm": "medium", "perf": 721.956, "source": "autotuned"}, {"m": 9, "n": 9, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 23, "algorithm": "medium", "perf": 798.279, "source": "autotuned"}, {"m": 9, "n": 9, "k": 6, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 11, "algorithm": "medium", "perf": 851.583, "source": "autotuned"}, {"m": 9, "n": 9, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 22, "algorithm": "medium", "perf": 882.204, "source": "autotuned"}, {"m": 9, "n": 9, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 26, "algorithm": "medium", "perf": 897.133, "source": "autotuned"}, {"m": 9, "n": 9, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 26, "algorithm": "medium", "perf": 894.306, "source": "autotuned"}, {"m": 9, "n": 9, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 27, "algorithm": "medium", "perf": 891.564, "source": "autotuned"}, {"m": 9, "n": 9, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 12, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 25, "algorithm": "medium", "perf": 904.749, "source": "autotuned"}, {"m": 9, "n": 9, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 25, "algorithm": "medium", "perf": 885.963, "source": "autotuned"}, {"m": 9, "n": 9, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 915.109, "source": "autotuned"}, {"m": 9, "n": 9, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 879.336, "source": "autotuned"}, {"m": 9, "n": 9, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 22, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 884.267, "source": "autotuned"}, {"m": 9, "n": 9, "k": 23, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 15, "algorithm": "medium", "perf": 881.057, "source": "autotuned"}, {"m": 9, "n": 9, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 25, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 2, "minblocks": 13, "algorithm": "medium", "perf": 889.476, "source": "autotuned"}, {"m": 9, "n": 9, "k": 26, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 889.636, "source": "autotuned"}, {"m": 9, "n": 9, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 28, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 899.71, "source": "autotuned"}, {"m": 9, "n": 9, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 9, "k": 45, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 887.859, "source": "autotuned"}, {"m": 9, "n": 10, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 5, "minblocks": 13, "algorithm": "medium", "perf": 898.622, "source": "autotuned"}, {"m": 9, "n": 10, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 4, "algorithm": "medium", "perf": 952.679, "source": "autotuned"}, {"m": 9, "n": 10, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 10, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 11, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 11, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 11, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 22, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 11, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 29, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 11, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 11, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 11, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 7, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 12, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 4, "minblocks": 16, "algorithm": "medium", "perf": 959.51, "source": "autotuned"}, {"m": 9, "n": 12, "k": 10, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "perf": 962.088, "source": "autotuned"}, {"m": 9, "n": 12, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 19, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 12, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 26, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 12, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 11, "algorithm": "medium", "perf": 1028.89, "source": "autotuned"}, {"m": 9, "n": 12, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 37, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 12, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 12, "k": 44, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 12, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 23, "algorithm": "medium", "perf": 932.634, "source": "autotuned"}, {"m": 9, "n": 13, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 21, "algorithm": "medium", "perf": 931.325, "source": "autotuned"}, {"m": 9, "n": 13, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 13, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 11, "algorithm": "medium", "perf": 954.731, "source": "autotuned"}, {"m": 9, "n": 13, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 12, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 25, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 13, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 14, "algorithm": "medium", "perf": 984.455, "source": "autotuned"}, {"m": 9, "n": 13, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 16, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 22, "algorithm": "medium", "perf": 1020.2, "source": "autotuned"}, {"m": 9, "n": 13, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 21, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 13, "k": 22, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 16, "algorithm": "medium", "perf": 992.026, "source": "autotuned"}, {"m": 9, "n": 13, "k": 23, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 11, "algorithm": "medium", "perf": 1008.27, "source": "autotuned"}, {"m": 9, "n": 13, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 26, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 1007.6, "source": "autotuned"}, {"m": 9, "n": 13, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 35, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 13, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 40, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 13, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 13, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 14, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 12, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 15, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 21, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 15, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 30, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 15, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 15, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 41, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 15, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 15, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 1049.8, "source": "autotuned"}, {"m": 9, "n": 16, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 1049.44, "source": "autotuned"}, {"m": 9, "n": 16, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "perf": 1071.58, "source": "autotuned"}, {"m": 9, "n": 16, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 16, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 17, "algorithm": "medium", "perf": 1100.21, "source": "autotuned"}, {"m": 9, "n": 16, "k": 17, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 18, "algorithm": "medium", "perf": 1087.28, "source": "autotuned"}, {"m": 9, "n": 16, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 22, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1100.47, "source": "autotuned"}, {"m": 9, "n": 16, "k": 23, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 20, "algorithm": "medium", "perf": 1092.09, "source": "autotuned"}, {"m": 9, "n": 16, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 16, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 10, "minblocks": 17, "algorithm": "medium", "perf": 1007.55, "source": "autotuned"}, {"m": 9, "n": 17, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 19, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 17, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 1095.06, "source": "autotuned"}, {"m": 9, "n": 17, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 1071.59, "source": "autotuned"}, {"m": 9, "n": 17, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 20, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 17, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 22, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 1078.61, "source": "autotuned"}, {"m": 9, "n": 17, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 2, "minblocks": 20, "algorithm": "medium", "perf": 1082.66, "source": "autotuned"}, {"m": 9, "n": 17, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 31, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 17, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 38, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 17, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 17, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 7, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 18, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 16, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 18, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 25, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 18, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 35, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 18, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 18, "k": 44, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 18, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 19, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 39, "tile_m": 9, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 20, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 20, "k": 44, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 20, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 39, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 21, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 21, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 23, "algorithm": "medium", "perf": 1032.38, "source": "autotuned"}, {"m": 9, "n": 22, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 22, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 1102.68, "source": "autotuned"}, {"m": 9, "n": 22, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1125.11, "source": "autotuned"}, {"m": 9, "n": 22, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 15, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 22, "k": 16, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 1165.93, "source": "autotuned"}, {"m": 9, "n": 22, "k": 17, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1143.83, "source": "autotuned"}, {"m": 9, "n": 22, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 22, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 15, "algorithm": "medium", "perf": 1163.2, "source": "autotuned"}, {"m": 9, "n": 22, "k": 23, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 16, "algorithm": "medium", "perf": 1163.88, "source": "autotuned"}, {"m": 9, "n": 22, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 25, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 22, "k": 26, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 15, "algorithm": "medium", "perf": 1186.82, "source": "autotuned"}, {"m": 9, "n": 22, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 35, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 22, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 22, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 24, "algorithm": "medium", "perf": 1039.39, "source": "autotuned"}, {"m": 9, "n": 23, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "perf": 1043.06, "source": "autotuned"}, {"m": 9, "n": 23, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 1101.62, "source": "autotuned"}, {"m": 9, "n": 23, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 12, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 23, "k": 13, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "perf": 1146.44, "source": "autotuned"}, {"m": 9, "n": 23, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 16, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 1186.48, "source": "autotuned"}, {"m": 9, "n": 23, "k": 17, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 1153.25, "source": "autotuned"}, {"m": 9, "n": 23, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 22, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 1190.96, "source": "autotuned"}, {"m": 9, "n": 23, "k": 23, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 4, "algorithm": "medium", "perf": 1177.76, "source": "autotuned"}, {"m": 9, "n": 23, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 26, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 1194.34, "source": "autotuned"}, {"m": 9, "n": 23, "k": 27, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 23, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 34, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 23, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 23, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 10, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 24, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 17, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 24, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 24, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 24, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 36, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 24, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 24, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 25, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 23, "algorithm": "medium", "perf": 1049.02, "source": "autotuned"}, {"m": 9, "n": 26, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 22, "algorithm": "medium", "perf": 1062.13, "source": "autotuned"}, {"m": 9, "n": 26, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 7, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 26, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 16, "algorithm": "medium", "perf": 1135.3, "source": "autotuned"}, {"m": 9, "n": 26, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 13, "tile_m": 9, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 1180.7, "source": "autotuned"}, {"m": 9, "n": 26, "k": 14, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 26, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 16, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 26, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 22, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 1227.07, "source": "autotuned"}, {"m": 9, "n": 26, "k": 23, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 2, "minblocks": 3, "algorithm": "medium", "perf": 1223.56, "source": "autotuned"}, {"m": 9, "n": 26, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 26, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1246.86, "source": "autotuned"}, {"m": 9, "n": 26, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 26, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 6, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 27, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 27, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 20, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 6, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 27, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 27, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 27, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 34, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 27, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 41, "tile_m": 9, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 27, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 27, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 10, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 28, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 17, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 28, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 24, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 28, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 39, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 12, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 28, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 28, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 29, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 29, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 28, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 29, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 33, "tile_m": 5, "tile_n": 1, "threads": 288, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 29, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 29, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 30, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 31, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 14, "tile_m": 9, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 31, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 28, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 31, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 34, "tile_m": 5, "tile_n": 1, "threads": 320, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 31, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 43, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 31, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 31, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 32, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 8, "tile_m": 9, "tile_n": 1, "threads": 96, "grouping": 17, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 33, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 22, "tile_m": 7, "tile_n": 1, "threads": 256, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 33, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 36, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 33, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 33, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 4, "tile_m": 9, "tile_n": 1, "threads": 64, "grouping": 19, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 34, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 13, "tile_m": 9, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 34, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 18, "tile_m": 9, "tile_n": 1, "threads": 192, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 34, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 27, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 34, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 34, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 34, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 35, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 4, "tile_m": 9, "tile_n": 1, "threads": 64, "grouping": 19, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 36, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 13, "tile_m": 9, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 36, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 22, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 36, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 31, "tile_m": 5, "tile_n": 1, "threads": 384, "grouping": 14, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 36, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 384, "grouping": 14, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 36, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 41, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 36, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 36, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 37, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 12, "tile_m": 9, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 38, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 18, "tile_m": 9, "tile_n": 1, "threads": 192, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 38, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 27, "tile_m": 5, "tile_n": 1, "threads": 288, "grouping": 9, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 38, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 39, "tile_m": 6, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 38, "k": 40, "tile_m": 6, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 38, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 38, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 15, "tile_m": 9, "tile_n": 1, "threads": 160, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 39, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 18, "tile_m": 9, "tile_n": 1, "threads": 192, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 39, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 25, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 39, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 39, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 39, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 5, "tile_m": 9, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 40, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 12, "tile_m": 9, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 40, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 256, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 40, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 30, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 40, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 288, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 40, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 43, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 24, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 40, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 40, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 8, "tile_m": 9, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 41, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 17, "tile_m": 9, "tile_n": 1, "threads": 192, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 41, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 38, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 41, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 41, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 42, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 18, "tile_m": 9, "tile_n": 1, "threads": 192, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 43, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 25, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 11, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 43, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 36, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 43, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 43, "tile_m": 5, "tile_n": 3, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 43, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 43, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 4, "tile_m": 9, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 44, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 15, "tile_m": 9, "tile_n": 1, "threads": 192, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 44, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 7, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 44, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 320, "grouping": 10, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 44, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 43, "tile_m": 5, "tile_n": 3, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 44, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 44, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 8, "tile_m": 9, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 45, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 17, "tile_m": 9, "tile_n": 1, "threads": 192, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 45, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 30, "tile_m": 5, "tile_n": 1, "threads": 320, "grouping": 10, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 45, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 39, "tile_m": 5, "tile_n": 2, "threads": 224, "grouping": 23, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 45, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 9, "n": 45, "k": 44, "tile_m": 5, "tile_n": 3, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 9, "n": 45, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 10, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 4, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 10, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 4, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 19, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 4, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 4, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 41, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 4, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 4, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 5, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 6, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 8, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 14, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 7, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 7, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 31, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 7, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 36, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 7, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 7, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 8, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 8, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 8, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 8, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 8, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 41, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 8, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 8, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 11, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 9, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 18, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 9, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 29, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 9, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 36, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 9, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 9, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 10, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 27, "algorithm": "medium", "perf": 977.584, "source": "autotuned"}, {"m": 10, "n": 10, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 10, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 22, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 10, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 31, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 10, "k": 32, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1027.72, "source": "autotuned"}, {"m": 10, "n": 10, "k": 33, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 10, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 42, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 10, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 10, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 11, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 4, "minblocks": 14, "algorithm": "medium", "perf": 1050.75, "source": "autotuned"}, {"m": 10, "n": 12, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 12, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 11, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 13, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 18, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 13, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 37, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 13, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 13, "k": 44, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 13, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 14, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 14, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 12, "tile_m": 5, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 14, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 23, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 14, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 30, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 14, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 33, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 14, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 40, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 14, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 14, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 4, "minblocks": 16, "algorithm": "medium", "perf": 1071.76, "source": "autotuned"}, {"m": 10, "n": 15, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 5, "minblocks": 9, "algorithm": "medium", "perf": 1088.77, "source": "autotuned"}, {"m": 10, "n": 15, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 15, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 16, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 38, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 17, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 17, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 6, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 18, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 18, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 20, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 18, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 35, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 18, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 42, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 18, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 18, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 13, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 19, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 14, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 19, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 23, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 19, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 6, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 19, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 34, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 19, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 43, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 19, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 19, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 20, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 21, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 20, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 28, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 20, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 39, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 20, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 20, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 21, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 22, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 6, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 23, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 15, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 23, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 24, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 23, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 34, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 23, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 43, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 23, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 23, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 24, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 20, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 6, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 24, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 29, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 24, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 38, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 24, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 24, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 25, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 16, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 25, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 27, "tile_m": 6, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 25, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 38, "tile_m": 5, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 25, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 25, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 26, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 15, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 26, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 20, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 26, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 29, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 26, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 35, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 26, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 26, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 27, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 28, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 16, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 29, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 27, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 29, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 39, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 29, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 29, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 7, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 30, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 14, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 30, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 21, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 30, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 28, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 30, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 35, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 30, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 42, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 30, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 30, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 31, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 13, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 31, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 31, "tile_m": 5, "tile_n": 1, "threads": 320, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 31, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 31, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 32, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 33, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 12, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 33, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 30, "tile_m": 5, "tile_n": 1, "threads": 384, "grouping": 14, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 33, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 35, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 33, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 33, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 33, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 8, "tile_m": 6, "tile_n": 1, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 34, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 19, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 34, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 26, "tile_m": 5, "tile_n": 1, "threads": 352, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 34, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 36, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 34, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 34, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 35, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 26, "tile_m": 5, "tile_n": 1, "threads": 352, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 35, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 38, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 35, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 35, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 9, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 26, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 36, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 36, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 30, "tile_m": 5, "tile_n": 1, "threads": 384, "grouping": 14, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 36, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 37, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 36, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 36, "k": 44, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 36, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 37, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 38, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 12, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 39, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 39, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 26, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 11, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 39, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 39, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 39, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 39, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 9, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 40, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 22, "tile_m": 10, "tile_n": 1, "threads": 224, "grouping": 6, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 40, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 31, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 40, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 36, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 40, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 40, "k": 45, "tile_m": 5, "tile_n": 3, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 41, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 7, "tile_m": 6, "tile_n": 1, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 41, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 14, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 31, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 41, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 25, "tile_m": 10, "tile_n": 1, "threads": 256, "grouping": 23, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 41, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 35, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 41, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 42, "tile_m": 10, "tile_n": 1, "threads": 256, "grouping": 23, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 41, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 41, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 42, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 26, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 11, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 43, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 43, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 9, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 44, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 30, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 44, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 39, "tile_m": 5, "tile_n": 2, "threads": 224, "grouping": 23, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 44, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 44, "k": 44, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 44, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 4, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 45, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 15, "tile_m": 10, "tile_n": 1, "threads": 192, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 45, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 22, "tile_m": 10, "tile_n": 1, "threads": 256, "grouping": 7, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 45, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 25, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 11, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 45, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 35, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 45, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 42, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 10, "n": 45, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 10, "n": 45, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 4, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 5, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 14, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 5, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 5, "k": 24, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 5, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 34, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 1, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 5, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 43, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 5, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 5, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 10, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 6, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 21, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 6, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 28, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 6, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 39, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 1, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 6, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 6, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 5, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 7, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 18, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 7, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 27, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 7, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 33, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 1, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 7, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 7, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 7, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 8, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 21, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 8, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 30, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 8, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 35, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 8, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 8, "k": 44, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 8, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 9, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 10, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 11, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 26, "algorithm": "medium", "perf": 1022.85, "source": "autotuned"}, {"m": 11, "n": 11, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 13, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 11, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 11, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 27, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 11, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 38, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 11, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 11, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 6, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 12, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 15, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 12, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 20, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 12, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 29, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 12, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 35, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 12, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 12, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 5, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 13, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 12, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 13, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 23, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 13, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 30, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 13, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 34, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 13, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 41, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 13, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 13, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 8, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 26, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 14, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 21, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 14, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 26, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 14, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 39, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 14, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 14, "k": 44, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 14, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 15, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 5, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 16, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 12, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 16, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 23, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 16, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 30, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 16, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 16, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 15, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 17, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 22, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 17, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 29, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 17, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 36, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 17, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 43, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 17, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 17, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 13, "tile_m": 6, "tile_n": 1, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 18, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 19, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 18, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 26, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 18, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 38, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 18, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 41, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 18, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 18, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 19, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 20, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 7, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 18, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 21, "k": 8, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 21, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 21, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 21, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 30, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 21, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 21, "k": 44, "tile_m": 6, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 21, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 5, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 22, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 12, "tile_m": 6, "tile_n": 1, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 22, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 19, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 22, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 26, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 22, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 41, "tile_m": 6, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 22, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 22, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 11, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 23, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 21, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 23, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 39, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 23, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 23, "k": 44, "tile_m": 6, "tile_n": 2, "threads": 64, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 23, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 5, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 7, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 24, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 14, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 24, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 288, "grouping": 30, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 24, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 33, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 24, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 42, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 24, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 24, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 25, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 26, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 11, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 27, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 18, "tile_m": 6, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 27, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 29, "tile_m": 6, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 27, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 36, "tile_m": 6, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 27, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 27, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 4, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 28, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 13, "tile_m": 6, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 28, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 22, "tile_m": 7, "tile_n": 1, "threads": 256, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 28, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 31, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 28, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 33, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 28, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 42, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 28, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 28, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 7, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 29, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 14, "tile_m": 6, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 29, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 21, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 29, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 28, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 29, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 43, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 29, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 29, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 30, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 30, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 31, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 32, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 9, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 33, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 20, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 33, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 27, "tile_m": 3, "tile_n": 1, "threads": 384, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 33, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 38, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 33, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 33, "k": 45, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 34, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 7, "tile_m": 6, "tile_n": 1, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 34, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 14, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 34, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 17, "tile_m": 11, "tile_n": 1, "threads": 192, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 34, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 24, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 34, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 34, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 34, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 34, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 22, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 35, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 31, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 35, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 36, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 35, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 35, "k": 45, "tile_m": 11, "tile_n": 1, "threads": 256, "grouping": 23, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 36, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 18, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 36, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 25, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 11, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 36, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 36, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 37, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 6, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 38, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 17, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 38, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 34, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 38, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 38, "k": 45, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 39, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 14, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 39, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 23, "tile_m": 3, "tile_n": 5, "threads": 128, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 39, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 28, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 39, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 37, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 39, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 39, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 11, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 40, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 16, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 40, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 25, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 11, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 40, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 38, "tile_m": 6, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 40, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 40, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 41, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 42, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 6, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 43, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 20, "tile_m": 11, "tile_n": 1, "threads": 224, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 43, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 31, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 43, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 34, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 43, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 43, "k": 45, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 44, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 11, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 44, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 16, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 44, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 25, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 11, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 44, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 37, "tile_m": 6, "tile_n": 1, "threads": 224, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 44, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 44, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 9, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 45, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 27, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 45, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 37, "tile_m": 6, "tile_n": 1, "threads": 224, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 45, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 11, "n": 45, "k": 44, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 11, "n": 45, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 4, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 14, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 4, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 4, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 35, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 4, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 42, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 4, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 4, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 5, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 19, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 6, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 24, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 6, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 6, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 21, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 7, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 28, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 7, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 39, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 7, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 7, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 6, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 8, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 8, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 8, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 8, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 31, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 8, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 35, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 8, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 42, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 8, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 8, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 5, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 9, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 14, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 9, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 28, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 9, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 2, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 9, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 43, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 9, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 9, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 10, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 11, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 11, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 20, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 11, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 29, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 11, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 38, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 11, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 11, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 12, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 19, "algorithm": "medium", "perf": 1148.64, "source": "autotuned"}, {"m": 12, "n": 12, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 12, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 6, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 7, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 13, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 15, "tile_m": 6, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 13, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 20, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 13, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 29, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 13, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 34, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 13, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 43, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 13, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 13, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 10, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 14, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 17, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 14, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 24, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 14, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 39, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 14, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 14, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 15, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 16, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 22, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 16, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 31, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 16, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 36, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 1, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 16, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 16, "k": 45, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 17, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 17, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 8, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 18, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 26, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 18, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 36, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 18, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 18, "k": 45, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 19, "k": 4, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 19, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 15, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 19, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 18, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 19, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 29, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 19, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 33, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 19, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 40, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 19, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 19, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 23, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 20, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 30, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 20, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 37, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 20, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 20, "k": 44, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 20, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 4, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 21, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 22, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 21, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 29, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 21, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 21, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 22, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 23, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 12, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 23, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 18, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 23, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 33, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 23, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 40, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 23, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 23, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 15, "tile_m": 6, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 24, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 22, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 24, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 29, "tile_m": 6, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 24, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 36, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 24, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 24, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 25, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 21, "tile_m": 6, "tile_n": 1, "threads": 288, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 25, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 30, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 25, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 32, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 25, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 41, "tile_m": 6, "tile_n": 2, "threads": 64, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 25, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 25, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 26, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 4, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 27, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 13, "tile_m": 6, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 27, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 33, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 27, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 27, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 28, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 4, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 29, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 13, "tile_m": 6, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 29, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 22, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 29, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 31, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 29, "k": 32, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 29, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 41, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 29, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 29, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 8, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 30, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 19, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 17, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 30, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 26, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 30, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 37, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 30, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 30, "k": 44, "tile_m": 6, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 30, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 31, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 32, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 10, "tile_m": 6, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 33, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 17, "tile_m": 3, "tile_n": 1, "threads": 288, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 33, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 24, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 33, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 33, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 7, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 34, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 34, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 20, "tile_m": 12, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 34, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 29, "tile_m": 3, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 34, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 42, "tile_m": 6, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 34, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 34, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 35, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 37, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 35, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 35, "k": 44, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 35, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 10, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 36, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 21, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 36, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 28, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 36, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 39, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 36, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 36, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 37, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 14, "tile_m": 7, "tile_n": 1, "threads": 192, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 38, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 11, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 38, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 28, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 38, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 37, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 38, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 42, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 38, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 38, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 7, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 39, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 39, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 16, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 39, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 27, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 39, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 39, "k": 45, "tile_m": 1, "tile_n": 9, "threads": 288, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 40, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 10, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 40, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 20, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 5, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 40, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 38, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 24, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 40, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 40, "k": 45, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 41, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 10, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 41, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 11, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 41, "k": 24, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 11, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 41, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 36, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 41, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 41, "k": 45, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 42, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 42, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 14, "tile_m": 1, "tile_n": 10, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 43, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 16, "tile_m": 12, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 43, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 25, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 43, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 37, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 43, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 42, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 43, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 43, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 44, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 10, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 45, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 24, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 45, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 37, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 12, "n": 45, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 12, "n": 45, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 26, "algorithm": "medium", "perf": 538.053, "source": "autotuned"}, {"m": 13, "n": 4, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 9, "minblocks": 1, "algorithm": "medium", "perf": 580.215, "source": "autotuned"}, {"m": 13, "n": 4, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 25, "algorithm": "medium", "perf": 646.473, "source": "autotuned"}, {"m": 13, "n": 4, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 21, "algorithm": "medium", "perf": 636.567, "source": "autotuned"}, {"m": 13, "n": 4, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 20, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 4, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 15, "algorithm": "medium", "perf": 632.137, "source": "autotuned"}, {"m": 13, "n": 4, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 625.163, "source": "autotuned"}, {"m": 13, "n": 4, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 15, "algorithm": "medium", "perf": 632.236, "source": "autotuned"}, {"m": 13, "n": 4, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 4, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 38, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 4, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 41, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 1, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 4, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 4, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 10, "minblocks": 19, "algorithm": "medium", "perf": 601.518, "source": "autotuned"}, {"m": 13, "n": 5, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 10, "minblocks": 27, "algorithm": "medium", "perf": 657.575, "source": "autotuned"}, {"m": 13, "n": 5, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 4, "minblocks": 22, "algorithm": "medium", "perf": 712.892, "source": "autotuned"}, {"m": 13, "n": 5, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 11, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 5, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 15, "algorithm": "medium", "perf": 702.088, "source": "autotuned"}, {"m": 13, "n": 5, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 738.124, "source": "autotuned"}, {"m": 13, "n": 5, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 13, "algorithm": "medium", "perf": 719.495, "source": "autotuned"}, {"m": 13, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 15, "algorithm": "medium", "perf": 713.614, "source": "autotuned"}, {"m": 13, "n": 5, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 25, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 5, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 712.358, "source": "autotuned"}, {"m": 13, "n": 5, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 5, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 6, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 15, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 7, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 7, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 7, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 36, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 7, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 43, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 7, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 7, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 8, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 8, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 8, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 28, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 8, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 8, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 19, "algorithm": "medium", "perf": 877.374, "source": "autotuned"}, {"m": 13, "n": 9, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "perf": 879.219, "source": "autotuned"}, {"m": 13, "n": 9, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 9, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 14, "algorithm": "medium", "perf": 970.648, "source": "autotuned"}, {"m": 13, "n": 9, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 15, "algorithm": "medium", "perf": 972.888, "source": "autotuned"}, {"m": 13, "n": 9, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 16, "tile_m": 2, "tile_n": 1, "threads": 224, "grouping": 5, "minblocks": 7, "algorithm": "medium", "perf": 1001.38, "source": "autotuned"}, {"m": 13, "n": 9, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 22, "tile_m": 2, "tile_n": 1, "threads": 224, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 978.269, "source": "autotuned"}, {"m": 13, "n": 9, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 15, "algorithm": "medium", "perf": 981.528, "source": "autotuned"}, {"m": 13, "n": 9, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 990.302, "source": "autotuned"}, {"m": 13, "n": 9, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 9, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 10, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 10, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 19, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 10, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 33, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 2, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 10, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 42, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 10, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 10, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 7, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 19, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 11, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 14, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 11, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 17, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 11, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 24, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 11, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 43, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 11, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 11, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 12, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 4, "tile_m": 8, "tile_n": 1, "threads": 64, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 1111.68, "source": "autotuned"}, {"m": 13, "n": 13, "k": 5, "tile_m": 8, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 1109.06, "source": "autotuned"}, {"m": 13, "n": 13, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 9, "tile_m": 8, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 1135.75, "source": "autotuned"}, {"m": 13, "n": 13, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 11, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 13, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 1164.52, "source": "autotuned"}, {"m": 13, "n": 13, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 16, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 1230.31, "source": "autotuned"}, {"m": 13, "n": 13, "k": 17, "tile_m": 4, "tile_n": 2, "threads": 32, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 1199.08, "source": "autotuned"}, {"m": 13, "n": 13, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 22, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 1215.28, "source": "autotuned"}, {"m": 13, "n": 13, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 1223.86, "source": "autotuned"}, {"m": 13, "n": 13, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 25, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 13, "k": 26, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1220.15, "source": "autotuned"}, {"m": 13, "n": 13, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 36, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 13, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 13, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 9, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 14, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 14, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 14, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 19, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 14, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 28, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 14, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 33, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 14, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 42, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 14, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 14, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 15, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 13, "minblocks": 14, "algorithm": "medium", "perf": 1169.67, "source": "autotuned"}, {"m": 13, "n": 16, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 7, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 17, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 16, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 25, "algorithm": "medium", "perf": 1217.94, "source": "autotuned"}, {"m": 13, "n": 16, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 19, "algorithm": "medium", "perf": 1261.88, "source": "autotuned"}, {"m": 13, "n": 16, "k": 14, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 16, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 16, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 19, "algorithm": "medium", "perf": 1316.52, "source": "autotuned"}, {"m": 13, "n": 16, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 21, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 16, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 18, "algorithm": "medium", "perf": 1333.01, "source": "autotuned"}, {"m": 13, "n": 16, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 28, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 16, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 32, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 16, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 43, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 16, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 16, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 17, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 4, "minblocks": 9, "algorithm": "medium", "perf": 1240.09, "source": "autotuned"}, {"m": 13, "n": 17, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 1269.37, "source": "autotuned"}, {"m": 13, "n": 17, "k": 18, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 17, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 23, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 1303.07, "source": "autotuned"}, {"m": 13, "n": 17, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 27, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 17, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 37, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 17, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 17, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 18, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 10, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 19, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 19, "k": 24, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 19, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 37, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 19, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 19, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 20, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 15, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 20, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 29, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 20, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 32, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 20, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 43, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 20, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 20, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 21, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 4, "tile_m": 8, "tile_n": 1, "threads": 96, "grouping": 13, "minblocks": 14, "algorithm": "medium", "perf": 1203.83, "source": "autotuned"}, {"m": 13, "n": 22, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "perf": 1187.22, "source": "autotuned"}, {"m": 13, "n": 22, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 1308.67, "source": "autotuned"}, {"m": 13, "n": 22, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 13, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 1346.22, "source": "autotuned"}, {"m": 13, "n": 22, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 21, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 22, "k": 22, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 1453.46, "source": "autotuned"}, {"m": 13, "n": 22, "k": 23, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 2, "minblocks": 2, "algorithm": "medium", "perf": 1457.16, "source": "autotuned"}, {"m": 13, "n": 22, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 26, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 1480.46, "source": "autotuned"}, {"m": 13, "n": 22, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 28, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 22, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 22, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 19, "algorithm": "medium", "perf": 1197.81, "source": "autotuned"}, {"m": 13, "n": 23, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "perf": 1214.22, "source": "autotuned"}, {"m": 13, "n": 23, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 8, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 23, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "perf": 1310.86, "source": "autotuned"}, {"m": 13, "n": 23, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 1362.06, "source": "autotuned"}, {"m": 13, "n": 23, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 16, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 1447.81, "source": "autotuned"}, {"m": 13, "n": 23, "k": 17, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1430.26, "source": "autotuned"}, {"m": 13, "n": 23, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 22, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1470.51, "source": "autotuned"}, {"m": 13, "n": 23, "k": 23, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 1478.54, "source": "autotuned"}, {"m": 13, "n": 23, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 26, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 9, "algorithm": "medium", "perf": 1500.66, "source": "autotuned"}, {"m": 13, "n": 23, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 31, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 23, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 38, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 23, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 23, "k": 45, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 24, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 7, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 24, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 12, "tile_m": 8, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 24, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 21, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 24, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 32, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 24, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 41, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 24, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 24, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 25, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 4, "tile_m": 8, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 17, "algorithm": "medium", "perf": 1215.84, "source": "autotuned"}, {"m": 13, "n": 26, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 11, "algorithm": "medium", "perf": 1225.27, "source": "autotuned"}, {"m": 13, "n": 26, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 1382.06, "source": "autotuned"}, {"m": 13, "n": 26, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 6, "algorithm": "medium", "perf": 1417.56, "source": "autotuned"}, {"m": 13, "n": 26, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 20, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 17, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 26, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 22, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 2, "minblocks": 2, "algorithm": "medium", "perf": 1536.42, "source": "autotuned"}, {"m": 13, "n": 26, "k": 23, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 2, "minblocks": 11, "algorithm": "medium", "perf": 1536.74, "source": "autotuned"}, {"m": 13, "n": 26, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 26, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 1558.37, "source": "autotuned"}, {"m": 13, "n": 26, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 29, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 26, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 39, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 26, "k": 40, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 26, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 26, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 8, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 27, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 27, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 30, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 27, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 37, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 27, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 27, "k": 44, "tile_m": 2, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 27, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 28, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 29, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 16, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 29, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 27, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 29, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 34, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 29, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 29, "k": 45, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 30, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 12, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 30, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 21, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 30, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 30, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 30, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 30, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 30, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 31, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 36, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 32, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 32, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 7, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 33, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 12, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 33, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 21, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 33, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 34, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 33, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 43, "tile_m": 7, "tile_n": 1, "threads": 192, "grouping": 6, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 33, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 33, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 34, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 16, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 34, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 31, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 34, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 34, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 35, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 8, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 36, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 19, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 36, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 26, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 36, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 37, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 36, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 36, "k": 44, "tile_m": 7, "tile_n": 2, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 36, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 7, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 37, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 15, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 37, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 20, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 37, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 29, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 37, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 34, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 37, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 43, "tile_m": 7, "tile_n": 2, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 37, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 37, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 38, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 39, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 11, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 39, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 22, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 39, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 29, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 39, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 39, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 19, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 40, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 24, "tile_m": 7, "tile_n": 1, "threads": 320, "grouping": 11, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 40, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 36, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 40, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 40, "k": 45, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 41, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 41, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 42, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 22, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 11, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 42, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 31, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 42, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 42, "k": 44, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 42, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 11, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 43, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 21, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 11, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 43, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 28, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 43, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 39, "tile_m": 7, "tile_n": 2, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 43, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 43, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 44, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 18, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 45, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 15, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 45, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 18, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 45, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 29, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 45, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 32, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 45, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 43, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 13, "n": 45, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 13, "n": 45, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 4, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 11, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 5, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 5, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 5, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 5, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 22, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 6, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 5, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 6, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 20, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 6, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 34, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 6, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 41, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 6, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 6, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 5, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 7, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 14, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 7, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 23, "tile_m": 2, "tile_n": 1, "threads": 192, "grouping": 6, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 7, "k": 24, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 7, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 7, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 42, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 7, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 7, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 12, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 8, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 10, "tile_m": 2, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 8, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 8, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 28, "tile_m": 2, "tile_n": 1, "threads": 256, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 8, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 33, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 8, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 8, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 16, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 9, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 27, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 9, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 38, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 9, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 41, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 9, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 9, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 7, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 27, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 10, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 14, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 10, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 21, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 10, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 28, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 10, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 2, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 10, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 41, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 10, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 10, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 11, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 10, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 12, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 20, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 12, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 29, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 12, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 33, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 12, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 12, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 13, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 16, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 13, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 27, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 13, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 41, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 13, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 13, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 14, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 16, "algorithm": "medium", "perf": 1285.95, "source": "autotuned"}, {"m": 14, "n": 14, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 14, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 15, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 18, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 16, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 12, "tile_m": 7, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 16, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 19, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 16, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 26, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 16, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 33, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 16, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 40, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 16, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 16, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 17, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 18, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 8, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 7, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 19, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 22, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 19, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 31, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 19, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 35, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 19, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 19, "k": 44, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 19, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 20, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 21, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 18, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 21, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 27, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 21, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 39, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 6, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 21, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 21, "k": 44, "tile_m": 7, "tile_n": 1, "threads": 192, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 21, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 15, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 22, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 22, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 22, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 29, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 22, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 32, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 22, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 22, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 7, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 7, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 23, "k": 8, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 23, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 21, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 23, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 30, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 23, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 35, "tile_m": 7, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 23, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 23, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 7, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 7, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 24, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 12, "tile_m": 8, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 24, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 21, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 24, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 26, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 24, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 35, "tile_m": 7, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 24, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 40, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 24, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 24, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 11, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 6, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 25, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 18, "tile_m": 7, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 25, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 36, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 25, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 25, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 5, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 26, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 26, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 23, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 26, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 30, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 26, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 32, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 26, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 26, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 27, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 4, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 12, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 28, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 13, "tile_m": 7, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 28, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 26, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 28, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 35, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 28, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 40, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 28, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 28, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 39, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 29, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 29, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 30, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 8, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 31, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 23, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 31, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 30, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 31, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 31, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 32, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 17, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 32, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 24, "tile_m": 7, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 32, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 35, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 32, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 42, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 32, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 32, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 33, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 34, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 11, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 35, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 20, "tile_m": 2, "tile_n": 6, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 35, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 29, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 35, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 39, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 35, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 35, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 36, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 25, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 37, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 15, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 37, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 20, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 11, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 37, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 29, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 37, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 35, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 37, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 17, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 37, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 37, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 38, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 16, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 38, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 31, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 38, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 38, "tile_m": 9, "tile_n": 1, "w": 16, "v": 14, "threads": 96, "grouping": 16, "minblocks": 8, "algorithm": "largeDB1", "source": "predicted"}, {"m": 14, "n": 38, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 38, "k": 45, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 39, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 11, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 39, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 28, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 39, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 38, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 17, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 39, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 39, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 40, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 7, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 41, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 14, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 41, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 21, "tile_m": 2, "tile_n": 7, "threads": 160, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 41, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 28, "tile_m": 2, "tile_n": 7, "threads": 160, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 41, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 35, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 41, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 42, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 41, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 41, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 9, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 42, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 16, "tile_m": 7, "tile_n": 1, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 42, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 39, "tile_m": 3, "tile_n": 2, "w": 18, "v": 4, "threads": 128, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "source": "predicted"}, {"m": 14, "n": 42, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 42, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 20, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 43, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 43, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 14, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 44, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 19, "tile_m": 7, "tile_n": 1, "threads": 288, "grouping": 10, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 44, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 44, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 42, "tile_m": 9, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 44, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 44, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 6, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 45, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 20, "tile_m": 7, "tile_n": 1, "threads": 320, "grouping": 11, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 45, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 45, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 35, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 10, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 45, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 42, "tile_m": 9, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 14, "n": 45, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 14, "n": 45, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 5, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 10, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 4, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 7, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 8, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 4, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 17, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 23, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 4, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 26, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 4, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 35, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 41, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 4, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 4, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 5, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 6, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 7, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 7, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 7, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 39, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 7, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 7, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 13, "tile_m": 2, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 8, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 8, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 9, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 10, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 10, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 10, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 19, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 10, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 26, "tile_m": 2, "tile_n": 3, "threads": 64, "grouping": 25, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 10, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 33, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 10, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 40, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 10, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 10, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 11, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 10, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 11, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 21, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 11, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 11, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 11, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 12, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 15, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 13, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 22, "tile_m": 2, "tile_n": 4, "threads": 64, "grouping": 25, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 13, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 29, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 13, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 35, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 13, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 42, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 13, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 13, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 13, "tile_m": 8, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 14, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 19, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 14, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 14, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 33, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 14, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 14, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 14, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 11, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 15, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 15, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 1348.44, "source": "autotuned"}, {"m": 15, "n": 15, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 20, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 15, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 29, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 26, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 15, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 15, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 14, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 16, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 15, "tile_m": 8, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 16, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 20, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 16, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 29, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 16, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 34, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 16, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 43, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 16, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 16, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 13, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 17, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 17, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 17, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 30, "tile_m": 2, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 17, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 33, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 17, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 40, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 17, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 17, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 7, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 18, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 21, "tile_m": 2, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 18, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 26, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 18, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 38, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 18, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 18, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 19, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 20, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 21, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 29, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 20, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 30, "tile_m": 2, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 20, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 34, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 20, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 43, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 20, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 20, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 21, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 22, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 13, "tile_m": 8, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 23, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 16, "tile_m": 8, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 23, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 27, "tile_m": 2, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 23, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 41, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 23, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 23, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 15, "tile_m": 8, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 24, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 22, "tile_m": 2, "tile_n": 6, "threads": 32, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 24, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 29, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 24, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 24, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 25, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 38, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 26, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 26, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 19, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 27, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 18, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 27, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 27, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 27, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 32, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 27, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 41, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 27, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 27, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 28, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 6, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 29, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 13, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 29, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 31, "tile_m": 2, "tile_n": 3, "threads": 192, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 29, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 33, "tile_m": 2, "tile_n": 7, "threads": 128, "grouping": 1, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 29, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 40, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 29, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 29, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 10, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 30, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 29, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 30, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 39, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 30, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 30, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 4, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 20, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 31, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 13, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 31, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 18, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 31, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 27, "tile_m": 2, "tile_n": 3, "threads": 224, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 31, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 32, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 31, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 41, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 17, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 31, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 31, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 10, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 32, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 19, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 32, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 37, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 32, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 32, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 10, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 33, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 17, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 33, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 24, "tile_m": 2, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 33, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 39, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 33, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 33, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 14, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 34, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 34, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 28, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 34, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 34, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 34, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 43, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 17, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 34, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 34, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 35, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 10, "tile_m": 9, "tile_n": 1, "threads": 160, "grouping": 29, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 36, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 19, "tile_m": 2, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 36, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 28, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 36, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 38, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 7, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 36, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 36, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 37, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 38, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 7, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 39, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 14, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 39, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 25, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 39, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 32, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 39, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 43, "tile_m": 2, "tile_n": 3, "threads": 256, "grouping": 10, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 39, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 39, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 40, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 17, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 41, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 26, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 41, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 39, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 8, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 41, "k": 40, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 8, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 41, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 41, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 9, "tile_m": 4, "tile_n": 3, "threads": 64, "grouping": 25, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 42, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 42, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 30, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 10, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 42, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 34, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 42, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 42, "k": 45, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 43, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 6, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 43, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 15, "tile_m": 2, "tile_n": 6, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 43, "k": 16, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 43, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 25, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 43, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 34, "tile_m": 2, "tile_n": 4, "threads": 96, "grouping": 26, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 43, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 43, "tile_m": 2, "tile_n": 6, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 43, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 43, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 44, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 10, "tile_m": 2, "tile_n": 6, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 45, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 17, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 45, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 24, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 15, "n": 45, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 15, "n": 45, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 6, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 7, "tile_m": 2, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 4, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 5, "minblocks": 22, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 4, "k": 9, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 10, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 11, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 12, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 13, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 14, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 15, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 16, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 5, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 4, "k": 18, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 19, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 20, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 21, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 22, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 23, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 24, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 25, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 4, "k": 27, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 28, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 29, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 30, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 31, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 32, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 33, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 34, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 35, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 4, "k": 36, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 37, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 38, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 39, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 40, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 41, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 42, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 43, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 44, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 4, "k": 45, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 32, "grouping": 8, "minblocks": 26, "algorithm": "medium", "perf": 796.959, "source": "autotuned"}, {"m": 16, "n": 5, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 4, "minblocks": 22, "algorithm": "medium", "perf": 780.707, "source": "autotuned"}, {"m": 16, "n": 5, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 13, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 19, "algorithm": "medium", "perf": 767.06, "source": "autotuned"}, {"m": 16, "n": 5, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 16, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 789.126, "source": "autotuned"}, {"m": 16, "n": 5, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 13, "algorithm": "medium", "perf": 781.229, "source": "autotuned"}, {"m": 16, "n": 5, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 5, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 11, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 5, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 6, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 6, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 25, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 3, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 6, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 38, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 6, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 6, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 7, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 7, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 23, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 7, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 7, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 1, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 7, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 40, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 7, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 7, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 8, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 1052.33, "source": "autotuned"}, {"m": 16, "n": 9, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 5, "minblocks": 14, "algorithm": "medium", "perf": 1060.21, "source": "autotuned"}, {"m": 16, "n": 9, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 1071.99, "source": "autotuned"}, {"m": 16, "n": 9, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 1104.43, "source": "autotuned"}, {"m": 16, "n": 9, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1089.7, "source": "autotuned"}, {"m": 16, "n": 9, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 22, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 3, "minblocks": 18, "algorithm": "medium", "perf": 1097.3, "source": "autotuned"}, {"m": 16, "n": 9, "k": 23, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 1089.58, "source": "autotuned"}, {"m": 16, "n": 9, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 9, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 11, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 10, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 10, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 39, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 10, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 10, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 4, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 10, "minblocks": 23, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 11, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 13, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 11, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 11, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 31, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 11, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 35, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 11, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 11, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 11, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 12, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 10, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 13, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 12, "minblocks": 19, "algorithm": "medium", "perf": 1184.66, "source": "autotuned"}, {"m": 16, "n": 13, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 4, "minblocks": 14, "algorithm": "medium", "perf": 1239.17, "source": "autotuned"}, {"m": 16, "n": 13, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 1283.89, "source": "autotuned"}, {"m": 16, "n": 13, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 16, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1315.31, "source": "autotuned"}, {"m": 16, "n": 13, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 19, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 13, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 2, "minblocks": 17, "algorithm": "medium", "perf": 1319.04, "source": "autotuned"}, {"m": 16, "n": 13, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 32, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 13, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 41, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 13, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 13, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 11, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 7, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 14, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 14, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 25, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 14, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 14, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 14, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 15, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 5, "tile_m": 1, "tile_n": 8, "threads": 32, "grouping": 8, "minblocks": 27, "algorithm": "medium", "perf": 1305.79, "source": "autotuned"}, {"m": 16, "n": 16, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 16, "k": 9, "tile_m": 1, "tile_n": 8, "threads": 32, "grouping": 3, "minblocks": 26, "algorithm": "medium", "perf": 1397.65, "source": "autotuned"}, {"m": 16, "n": 16, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 13, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 1449.51, "source": "autotuned"}, {"m": 16, "n": 16, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 16, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1523.53, "source": "autotuned"}, {"m": 16, "n": 16, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 1482.75, "source": "autotuned"}, {"m": 16, "n": 16, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1529.11, "source": "autotuned"}, {"m": 16, "n": 16, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 1515.27, "source": "autotuned"}, {"m": 16, "n": 16, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 31, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 16, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 37, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 16, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 16, "k": 44, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 16, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 1368.03, "source": "autotuned"}, {"m": 16, "n": 17, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 17, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 16, "tile_m": 1, "tile_n": 9, "threads": 32, "grouping": 2, "minblocks": 19, "algorithm": "medium", "perf": 1493.26, "source": "autotuned"}, {"m": 16, "n": 17, "k": 17, "tile_m": 1, "tile_n": 9, "threads": 32, "grouping": 2, "minblocks": 13, "algorithm": "medium", "perf": 1443.65, "source": "autotuned"}, {"m": 16, "n": 17, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 17, "k": 22, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 1498.59, "source": "autotuned"}, {"m": 16, "n": 17, "k": 23, "tile_m": 2, "tile_n": 5, "threads": 32, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 1490.94, "source": "autotuned"}, {"m": 16, "n": 17, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 28, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 17, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 39, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 17, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 17, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 18, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 4, "tile_m": 1, "tile_n": 11, "threads": 64, "grouping": 6, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 19, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 19, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 29, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 19, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 35, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 19, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 42, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 19, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 19, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 6, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 20, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 23, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 20, "k": 24, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 20, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 36, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 20, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 20, "k": 45, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 21, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 21, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 5, "minblocks": 8, "algorithm": "medium", "perf": 1476.24, "source": "autotuned"}, {"m": 16, "n": 22, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 16, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 1642.34, "source": "autotuned"}, {"m": 16, "n": 22, "k": 17, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1601.36, "source": "autotuned"}, {"m": 16, "n": 22, "k": 18, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 29, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 22, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 22, "tile_m": 2, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 11, "algorithm": "medium", "perf": 1678.29, "source": "autotuned"}, {"m": 16, "n": 22, "k": 23, "tile_m": 2, "tile_n": 6, "threads": 32, "grouping": 2, "minblocks": 4, "algorithm": "medium", "perf": 1667.16, "source": "autotuned"}, {"m": 16, "n": 22, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 27, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 22, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 288, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 22, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 22, "k": 45, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 23, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 16, "algorithm": "medium", "perf": 1387.02, "source": "autotuned"}, {"m": 16, "n": 23, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 23, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 5, "minblocks": 9, "algorithm": "medium", "perf": 1493.7, "source": "autotuned"}, {"m": 16, "n": 23, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 1582.33, "source": "autotuned"}, {"m": 16, "n": 23, "k": 14, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 3, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 23, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 16, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "perf": 1664.11, "source": "autotuned"}, {"m": 16, "n": 23, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 288, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 1618.44, "source": "autotuned"}, {"m": 16, "n": 23, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 21, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 23, "k": 22, "tile_m": 2, "tile_n": 6, "threads": 32, "grouping": 2, "minblocks": 9, "algorithm": "medium", "perf": 1695.08, "source": "autotuned"}, {"m": 16, "n": 23, "k": 23, "tile_m": 4, "tile_n": 3, "threads": 32, "grouping": 2, "minblocks": 8, "algorithm": "medium", "perf": 1687.93, "source": "autotuned"}, {"m": 16, "n": 23, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 28, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 23, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 35, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 23, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 42, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 23, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 23, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 12, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 7, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 24, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 40, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 24, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 24, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 25, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 9, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 26, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 16, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 26, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 27, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 26, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 37, "tile_m": 2, "tile_n": 7, "threads": 128, "grouping": 1, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 26, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 26, "k": 44, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 26, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 6, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 19, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 27, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 15, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 27, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 27, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 29, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 27, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 42, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 27, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 27, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 28, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 20, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 29, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 29, "tile_m": 2, "tile_n": 3, "threads": 192, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 29, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 38, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 29, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 29, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 6, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 30, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 9, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 30, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 16, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 30, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 27, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 30, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 30, "k": 45, "tile_m": 2, "tile_n": 3, "threads": 192, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 31, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 31, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 10, "tile_m": 10, "tile_n": 1, "threads": 160, "grouping": 6, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 32, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 21, "tile_m": 9, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 32, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 28, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 32, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 32, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 8, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 33, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 31, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 33, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 38, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 33, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 33, "k": 45, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 13, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 34, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 34, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 6, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 35, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 9, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 35, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 16, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 35, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 27, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 35, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 34, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 35, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 35, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 20, "tile_m": 2, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 36, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 29, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 36, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 39, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 7, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 36, "k": 40, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 36, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 36, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 37, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 15, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 38, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 20, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 38, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 29, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 38, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 38, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 9, "tile_m": 10, "tile_n": 1, "threads": 192, "grouping": 7, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 39, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 16, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 39, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 27, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 39, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 34, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 39, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 39, "k": 45, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 8, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 40, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 40, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 14, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 40, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 19, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 40, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 28, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 40, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 40, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 42, "tile_m": 1, "tile_n": 10, "threads": 96, "grouping": 26, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 40, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 40, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 41, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 7, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 42, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 14, "tile_m": 4, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 42, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 21, "tile_m": 4, "tile_n": 3, "threads": 64, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 42, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 42, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 42, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 43, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 42, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 42, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 9, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 43, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 18, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 43, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 27, "tile_m": 2, "tile_n": 7, "threads": 160, "grouping": 1, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 43, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 37, "tile_m": 2, "tile_n": 6, "threads": 64, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 43, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 43, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 44, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 10, "tile_m": 2, "tile_n": 6, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 45, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 45, "k": 24, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 45, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 37, "tile_m": 2, "tile_n": 6, "threads": 64, "grouping": 6, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 16, "n": 45, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 16, "n": 45, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 10, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 4, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 15, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 4, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 4, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 32, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 4, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 43, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 4, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 4, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 8, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 5, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 5, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 17, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 5, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 30, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 5, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 39, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 5, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 5, "k": 44, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 5, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 6, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 5, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 7, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 18, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 7, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 1, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 7, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 7, "k": 44, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 4, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 7, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 7, "tile_m": 1, "tile_n": 8, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 8, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 8, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 17, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 8, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 30, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 8, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 34, "tile_m": 5, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 8, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 43, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 8, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 8, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 9, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 15, "algorithm": "medium", "perf": 1017.05, "source": "autotuned"}, {"m": 17, "n": 9, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 6, "minblocks": 9, "algorithm": "medium", "perf": 1093.49, "source": "autotuned"}, {"m": 17, "n": 9, "k": 17, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 1070.7, "source": "autotuned"}, {"m": 17, "n": 9, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 22, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1087.55, "source": "autotuned"}, {"m": 17, "n": 9, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 32, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 1093.2, "source": "autotuned"}, {"m": 17, "n": 9, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 36, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 9, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 9, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 10, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 11, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 12, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 13, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 224, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 1246.95, "source": "autotuned"}, {"m": 17, "n": 13, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 17, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 20, "algorithm": "medium", "perf": 1287.34, "source": "autotuned"}, {"m": 17, "n": 13, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 23, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 15, "algorithm": "medium", "perf": 1325.03, "source": "autotuned"}, {"m": 17, "n": 13, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 30, "tile_m": 10, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 13, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 37, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 13, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 13, "k": 44, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 13, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 12, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 14, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 18, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 14, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 27, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 14, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 39, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 14, "k": 40, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 14, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 14, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 15, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 7, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 16, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 9, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 26, "algorithm": "medium", "perf": 1370.02, "source": "autotuned"}, {"m": 17, "n": 16, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 14, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 16, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 16, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 19, "algorithm": "medium", "perf": 1466.93, "source": "autotuned"}, {"m": 17, "n": 16, "k": 17, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 1452.87, "source": "autotuned"}, {"m": 17, "n": 16, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 21, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 16, "k": 22, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 14, "algorithm": "medium", "perf": 1490.38, "source": "autotuned"}, {"m": 17, "n": 16, "k": 23, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 15, "algorithm": "medium", "perf": 1493.66, "source": "autotuned"}, {"m": 17, "n": 16, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 28, "tile_m": 10, "tile_n": 1, "threads": 32, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 16, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 34, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 16, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 16, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 9, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 13, "minblocks": 4, "algorithm": "medium", "perf": 1368.12, "source": "autotuned"}, {"m": 17, "n": 17, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 13, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1446.94, "source": "autotuned"}, {"m": 17, "n": 17, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 1524.54, "source": "autotuned"}, {"m": 17, "n": 17, "k": 17, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 1499.4, "source": "autotuned"}, {"m": 17, "n": 17, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 22, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1536.35, "source": "autotuned"}, {"m": 17, "n": 17, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 1539.49, "source": "autotuned"}, {"m": 17, "n": 17, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 17, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 18, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 20, "tile_m": 9, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 18, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 27, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 18, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 18, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 18, "k": 45, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 19, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 9, "tile_m": 9, "tile_n": 1, "threads": 160, "grouping": 29, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 19, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 16, "tile_m": 9, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 19, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 19, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 19, "k": 45, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 20, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 20, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 20, "tile_m": 9, "tile_n": 1, "threads": 96, "grouping": 26, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 20, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 31, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 20, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 34, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 20, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 20, "k": 45, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 21, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 14, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 21, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 19, "tile_m": 2, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 21, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 24, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 21, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 37, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 21, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 21, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 9, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1429.34, "source": "autotuned"}, {"m": 17, "n": 22, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 16, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 1638.17, "source": "autotuned"}, {"m": 17, "n": 22, "k": 17, "tile_m": 9, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 11, "algorithm": "medium", "perf": 1606.06, "source": "autotuned"}, {"m": 17, "n": 22, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 22, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "perf": 1673.45, "source": "autotuned"}, {"m": 17, "n": 22, "k": 23, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 2, "minblocks": 5, "algorithm": "medium", "perf": 1680.38, "source": "autotuned"}, {"m": 17, "n": 22, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 22, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 9, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 1457.2, "source": "autotuned"}, {"m": 17, "n": 23, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 11, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 23, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 13, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1557.3, "source": "autotuned"}, {"m": 17, "n": 23, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 16, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 1659.79, "source": "autotuned"}, {"m": 17, "n": 23, "k": 17, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 1632.08, "source": "autotuned"}, {"m": 17, "n": 23, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 22, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 2, "minblocks": 4, "algorithm": "medium", "perf": 1699.3, "source": "autotuned"}, {"m": 17, "n": 23, "k": 23, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 2, "minblocks": 12, "algorithm": "medium", "perf": 1707.42, "source": "autotuned"}, {"m": 17, "n": 23, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 25, "tile_m": 9, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 23, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 37, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 23, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 23, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 14, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 24, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 23, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 24, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 28, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 24, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 37, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 24, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 24, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 6, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 25, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 17, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 25, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 24, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 25, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 34, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 25, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 25, "k": 45, "tile_m": 2, "tile_n": 3, "threads": 224, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 26, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 26, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 4, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 19, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 27, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 32, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 27, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 41, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 17, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 27, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 27, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 28, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 7, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 29, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 14, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 29, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 17, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 29, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 24, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 29, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 34, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 29, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 29, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 11, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 30, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 28, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 30, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 37, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 30, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 30, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 31, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 8, "tile_m": 10, "tile_n": 1, "threads": 160, "grouping": 6, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 32, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 19, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 32, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 26, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 32, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 32, "k": 45, "tile_m": 9, "tile_n": 2, "w": 4, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB1", "source": "predicted"}, {"m": 17, "n": 33, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 33, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 23, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 34, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 30, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 34, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 37, "tile_m": 2, "tile_n": 5, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 34, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 34, "k": 44, "tile_m": 2, "tile_n": 3, "threads": 192, "grouping": 8, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 34, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 4, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 35, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 11, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 35, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 22, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 35, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 29, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 35, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 32, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 35, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 35, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 36, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 19, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 36, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 26, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 36, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 37, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 36, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 36, "k": 44, "tile_m": 2, "tile_n": 3, "threads": 224, "grouping": 10, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 36, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 7, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 37, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 12, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 37, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 21, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 37, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 37, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 38, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 12, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 39, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 21, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 39, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 30, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 39, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 32, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 39, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 41, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 39, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 39, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 8, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 40, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 26, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 40, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 36, "tile_m": 2, "tile_n": 6, "threads": 64, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 40, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 40, "k": 45, "tile_m": 2, "tile_n": 6, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 41, "k": 4, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 41, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 15, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 41, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 18, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 41, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 29, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 41, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 33, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 41, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 40, "tile_m": 2, "tile_n": 6, "threads": 96, "grouping": 1, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 41, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 41, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 42, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 6, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 43, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 15, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 43, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 20, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 43, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 43, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 34, "tile_m": 2, "tile_n": 7, "threads": 64, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 43, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 43, "tile_m": 2, "tile_n": 7, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 43, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 43, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 44, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 27, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 45, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 12, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 45, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 18, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 45, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 33, "tile_m": 2, "tile_n": 7, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 45, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 40, "tile_m": 2, "tile_n": 7, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 17, "n": 45, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 17, "n": 45, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 4, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 10, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 5, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 15, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 5, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 5, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 25, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 5, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 35, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 5, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 42, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 5, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 5, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 6, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 19, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 6, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 6, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 6, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 6, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 9, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 6, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 7, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 17, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 7, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 7, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 39, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 1, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 7, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 7, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 4, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 8, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 8, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 8, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 31, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 8, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 8, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 384, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 9, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 9, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 10, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 17, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 11, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 11, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 11, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 11, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 12, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 23, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 12, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 12, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 37, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 12, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 12, "k": 44, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 12, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 6, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 13, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 15, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 13, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 13, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 25, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 13, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 42, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 13, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 13, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 14, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 17, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 15, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 15, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 6, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 16, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 15, "tile_m": 9, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 16, "k": 16, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 16, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 25, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 16, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 42, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 16, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 16, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 7, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 17, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 23, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 17, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 17, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 37, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 17, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 17, "k": 44, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 17, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 17, "tile_m": 1, "tile_n": 9, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 18, "k": 18, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 1597.87, "source": "autotuned"}, {"m": 18, "n": 18, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 26, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 18, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 18, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 18, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 19, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 20, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 6, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 21, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 9, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 21, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 21, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 31, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 21, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 21, "k": 45, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 22, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 10, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 22, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 17, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 22, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 24, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 22, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 39, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 22, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 22, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 23, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 23, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 26, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 23, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 37, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 23, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 23, "k": 44, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 23, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 4, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 7, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 24, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 15, "tile_m": 9, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 24, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 24, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 24, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 35, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 24, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 24, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 24, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 25, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 26, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 10, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 27, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 27, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 27, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 27, "k": 45, "tile_m": 10, "tile_n": 1, "threads": 160, "grouping": 8, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 28, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 7, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 26, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 28, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 14, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 28, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 25, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 28, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 35, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 28, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 28, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 28, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 9, "tile_m": 9, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 29, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 22, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 29, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 31, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 29, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 36, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 29, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 29, "k": 45, "tile_m": 3, "tile_n": 3, "threads": 160, "grouping": 25, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 30, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 33, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 30, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 42, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 30, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 30, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 31, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 4, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 32, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 13, "tile_m": 9, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 32, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 32, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 32, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 11, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 25, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 33, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 18, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 33, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 29, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 33, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 36, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 33, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 33, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 4, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 34, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 13, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 34, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 22, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 34, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 31, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 34, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 33, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 34, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 10, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 34, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 34, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 35, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 36, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 37, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 37, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 37, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 26, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 37, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 37, "k": 44, "tile_m": 2, "tile_n": 6, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 37, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 38, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 12, "tile_m": 2, "tile_n": 6, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 38, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 23, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 38, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 38, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 33, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 38, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 40, "tile_m": 2, "tile_n": 6, "threads": 96, "grouping": 1, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 38, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 38, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 15, "tile_m": 1, "tile_n": 8, "threads": 288, "grouping": 10, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 39, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 22, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 39, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 29, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 39, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 36, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 39, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 43, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 39, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 39, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 13, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 40, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 40, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 26, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 40, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 38, "tile_m": 2, "tile_n": 6, "threads": 64, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 40, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 41, "tile_m": 2, "tile_n": 6, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 40, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 40, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 41, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 42, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 7, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 43, "k": 8, "tile_m": 10, "tile_n": 1, "threads": 192, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 43, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 43, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 30, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 43, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 43, "k": 44, "tile_m": 9, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 43, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 44, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 12, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 44, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 19, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 44, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 26, "tile_m": 2, "tile_n": 7, "threads": 64, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 44, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 41, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 44, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 44, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 11, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 45, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 45, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 39, "tile_m": 3, "tile_n": 5, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 45, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 18, "n": 45, "k": 44, "tile_m": 9, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 18, "n": 45, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 4, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 21, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 4, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 30, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 4, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 32, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 4, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 41, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 4, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 4, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 5, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 6, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 8, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 7, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 2, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 7, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 7, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 7, "k": 45, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 8, "k": 4, "tile_m": 1, "tile_n": 8, "threads": 32, "grouping": 5, "minblocks": 27, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 8, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 11, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 8, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 8, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 29, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 8, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 2, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 8, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 8, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 9, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 9, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 37, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 9, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 9, "k": 44, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 9, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 7, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 10, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 10, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 10, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 33, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 10, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 40, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 10, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 10, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 11, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 12, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 13, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 13, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 13, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 36, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 13, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 13, "k": 45, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 14, "k": 4, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 15, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 14, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 15, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 14, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 18, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 14, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 14, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 33, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 14, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 40, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 14, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 14, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 8, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 15, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 26, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 15, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 36, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 15, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 15, "k": 45, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 16, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 6, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 7, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 16, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 15, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 16, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 20, "tile_m": 1, "tile_n": 8, "threads": 64, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 16, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 16, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 16, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 43, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 16, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 16, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 17, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 18, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 192, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 19, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 19, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 19, "tile_m": 2, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1648.65, "source": "autotuned"}, {"m": 19, "n": 19, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 19, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 39, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 19, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 19, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 6, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 20, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 20, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 20, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 34, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 20, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 43, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 20, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 20, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 6, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 23, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 21, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 16, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 21, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 31, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 21, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 21, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 38, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 22, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 22, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 10, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 23, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 36, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 23, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 23, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 6, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 24, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 13, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 24, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 24, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 27, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 24, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 24, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 41, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 24, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 24, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 7, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 25, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 14, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 25, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 25, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 35, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 25, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 42, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 25, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 25, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 26, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 28, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 26, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 39, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 26, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 26, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 27, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 28, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 6, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 29, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 15, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 29, "k": 16, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 29, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 25, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 29, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 35, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 29, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 29, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 13, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 30, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 20, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 30, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 31, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 30, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 38, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 30, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 30, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 10, "tile_m": 10, "tile_n": 1, "threads": 192, "grouping": 7, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 31, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 19, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 31, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 24, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 31, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 38, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 31, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 31, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 8, "tile_m": 10, "tile_n": 1, "threads": 160, "grouping": 6, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 32, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 17, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 32, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 26, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 32, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 35, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 32, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 32, "k": 44, "tile_m": 10, "tile_n": 1, "threads": 192, "grouping": 8, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 32, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 33, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 34, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 35, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 12, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 35, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 35, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 35, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 35, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 10, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 35, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 35, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 7, "tile_m": 11, "tile_n": 1, "threads": 160, "grouping": 7, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 36, "k": 8, "tile_m": 10, "tile_n": 1, "threads": 160, "grouping": 6, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 36, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 17, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 36, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 26, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 36, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 35, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 25, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 36, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 36, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 4, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 37, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 37, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 26, "tile_m": 2, "tile_n": 7, "threads": 64, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 37, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 37, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 37, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 38, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 39, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 15, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 40, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 17, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 40, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 24, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 40, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 35, "tile_m": 11, "tile_n": 1, "threads": 192, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 40, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 42, "tile_m": 2, "tile_n": 5, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 40, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 40, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 41, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 12, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 41, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 19, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 41, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 41, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 41, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 41, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 11, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 42, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 22, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 42, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 25, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 42, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 36, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 42, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 42, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 43, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 44, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 4, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 26, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 45, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 13, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 45, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 19, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 45, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 45, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 41, "tile_m": 5, "tile_n": 3, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 19, "n": 45, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 19, "n": 45, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 4, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 12, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 5, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 5, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 5, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 5, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 5, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 6, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 6, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 27, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 6, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 34, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 6, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 6, "k": 45, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 1, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 7, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 29, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 7, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 7, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 5, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 8, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 8, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 8, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 37, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 8, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 8, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 9, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 9, "tile_m": 1, "tile_n": 10, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 10, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 10, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 27, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 10, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 37, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 10, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 10, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 11, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 11, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 12, "algorithm": "medium", "perf": 1224.09, "source": "autotuned"}, {"m": 20, "n": 11, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 1236.34, "source": "autotuned"}, {"m": 20, "n": 11, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 11, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1297.58, "source": "autotuned"}, {"m": 20, "n": 11, "k": 21, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 11, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 288, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1299.21, "source": "autotuned"}, {"m": 20, "n": 11, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 11, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 32, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 2, "minblocks": 5, "algorithm": "medium", "perf": 1369.72, "source": "autotuned"}, {"m": 20, "n": 11, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 43, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 11, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 11, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 12, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 1264.76, "source": "autotuned"}, {"m": 20, "n": 12, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 9, "algorithm": "medium", "perf": 1309.5, "source": "autotuned"}, {"m": 20, "n": 12, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1376.58, "source": "autotuned"}, {"m": 20, "n": 12, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 25, "tile_m": 10, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 15, "algorithm": "medium", "perf": 1369.04, "source": "autotuned"}, {"m": 20, "n": 12, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 31, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 12, "k": 32, "tile_m": 2, "tile_n": 4, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 1446.23, "source": "autotuned"}, {"m": 20, "n": 12, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 12, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 12, "k": 45, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 13, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 10, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 13, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 13, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 28, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 13, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 13, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 14, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 4, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 15, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 15, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 15, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 15, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 15, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 43, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 15, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 15, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 16, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 14, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 16, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 17, "tile_m": 1, "tile_n": 8, "threads": 64, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 16, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 16, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 16, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 4, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 13, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 17, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 13, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 17, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 17, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 33, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 17, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 42, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 17, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 17, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 11, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 18, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 37, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 18, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 18, "k": 44, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 18, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 19, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 11, "tile_m": 1, "tile_n": 8, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 1630.94, "source": "autotuned"}, {"m": 20, "n": 20, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1792.94, "source": "autotuned"}, {"m": 20, "n": 20, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 1820.96, "source": "autotuned"}, {"m": 20, "n": 20, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 2, "minblocks": 2, "algorithm": "medium", "perf": 1926.77, "source": "autotuned"}, {"m": 20, "n": 20, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 20, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 21, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 14, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 21, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 21, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 21, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 33, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 21, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 42, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 21, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 21, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 11, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 22, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 25, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 22, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 36, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 22, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 22, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 23, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 7, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 24, "k": 8, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 24, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 24, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 24, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 24, "k": 44, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 24, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 11, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 14, "algorithm": "medium", "perf": 1702.26, "source": "autotuned"}, {"m": 20, "n": 25, "k": 12, "tile_m": 1, "tile_n": 9, "threads": 64, "grouping": 3, "minblocks": 14, "algorithm": "medium", "perf": 1747.44, "source": "autotuned"}, {"m": 20, "n": 25, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 20, "tile_m": 1, "tile_n": 9, "threads": 64, "grouping": 2, "minblocks": 9, "algorithm": "medium", "perf": 1894.53, "source": "autotuned"}, {"m": 20, "n": 25, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 25, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 1928.03, "source": "autotuned"}, {"m": 20, "n": 25, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 2044.24, "source": "autotuned"}, {"m": 20, "n": 25, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 25, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 11, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 26, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 26, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 25, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 26, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 39, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 26, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 26, "k": 44, "tile_m": 10, "tile_n": 1, "threads": 160, "grouping": 17, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 26, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 27, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 12, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 27, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 27, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 30, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 27, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 41, "tile_m": 10, "tile_n": 1, "threads": 160, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 27, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 27, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 28, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 28, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 24, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 28, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 28, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 43, "tile_m": 10, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 28, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 28, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 29, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 12, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 29, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 19, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 29, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 29, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 33, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 29, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 29, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 30, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 13, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 31, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 20, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 31, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 31, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 31, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 38, "tile_m": 2, "tile_n": 6, "w": 12, "v": 26, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 20, "n": 31, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 41, "tile_m": 10, "tile_n": 1, "threads": 160, "grouping": 8, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 31, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 31, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 32, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "perf": 1962.47, "source": "autotuned"}, {"m": 20, "n": 32, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 20, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 2132.1, "source": "autotuned"}, {"m": 20, "n": 32, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 25, "tile_m": 10, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 2171.45, "source": "autotuned"}, {"m": 20, "n": 32, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 27, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 32, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 32, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 2308.41, "source": "autotuned"}, {"m": 20, "n": 32, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 32, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 40, "tile_m": 10, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 32, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 32, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 6, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 33, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 15, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 33, "k": 16, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 33, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 25, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 33, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 34, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 33, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 43, "tile_m": 10, "tile_n": 1, "threads": 160, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 33, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 33, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 34, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 35, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 36, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 7, "tile_m": 11, "tile_n": 1, "threads": 160, "grouping": 7, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 37, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 16, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 37, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 25, "tile_m": 2, "tile_n": 7, "threads": 64, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 37, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 34, "tile_m": 2, "tile_n": 7, "threads": 96, "grouping": 1, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 37, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 43, "tile_m": 2, "tile_n": 5, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 37, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 37, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 13, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 38, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 38, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 38, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 41, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 38, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 38, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 39, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 40, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 14, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 40, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 40, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 33, "tile_m": 10, "tile_n": 1, "threads": 160, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 40, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 42, "tile_m": 11, "tile_n": 1, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 40, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 40, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 41, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 42, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 23, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 42, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 42, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 32, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 42, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 41, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 42, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 42, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 10, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 43, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 17, "tile_m": 2, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 43, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 24, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 43, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 38, "tile_m": 5, "tile_n": 3, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 43, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 43, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 6, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 44, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 13, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 44, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 20, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 44, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 27, "tile_m": 5, "tile_n": 3, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 44, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 33, "tile_m": 5, "tile_n": 3, "threads": 192, "grouping": 1, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 44, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 40, "tile_m": 10, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 44, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 44, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 7, "tile_m": 10, "tile_n": 1, "threads": 160, "grouping": 6, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 45, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 14, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 45, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 16, "tile_m": 2, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 45, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 34, "tile_m": 5, "tile_n": 3, "threads": 192, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 45, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 41, "tile_m": 5, "tile_n": 3, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 20, "n": 45, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 20, "n": 45, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 4, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 4, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 5, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 17, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 5, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 24, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 5, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 5, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 288, "grouping": 6, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 5, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 5, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 11, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 5, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 6, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 6, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 6, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 6, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 6, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 6, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 7, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 6, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 8, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 8, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 31, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 8, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 35, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 8, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 42, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 8, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 8, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 9, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 9, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 9, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 42, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 10, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 9, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 9, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 10, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 11, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 11, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 11, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 11, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 11, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 11, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 12, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 14, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 12, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 12, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 12, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 35, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 12, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 42, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 12, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 12, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 13, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 9, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 7, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 14, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 14, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 27, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 14, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 39, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 14, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 14, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 15, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 15, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 39, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 15, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 15, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 16, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 16, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 16, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 17, "k": 45, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 18, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 12, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 18, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 18, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 27, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 18, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 18, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 41, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 18, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 18, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 15, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 19, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 18, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 19, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 19, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 19, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 20, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 8, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 21, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 21, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 1831.9, "source": "autotuned"}, {"m": 21, "n": 21, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 21, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 37, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 21, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 21, "k": 44, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 21, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 4, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 22, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 13, "tile_m": 1, "tile_n": 8, "threads": 64, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 22, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 22, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 27, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 22, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 32, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 22, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 41, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 22, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 22, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 23, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 4, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 24, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 15, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 24, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 24, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 33, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 24, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 24, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 24, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 25, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 25, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 25, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 25, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 25, "k": 45, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 29, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 26, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 26, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 27, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 18, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 27, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 27, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 27, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 27, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 27, "k": 45, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 29, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 28, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 160, "grouping": 6, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 28, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 12, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 28, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 28, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 28, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 28, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 28, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 28, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 29, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 4, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 30, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 11, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 30, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 18, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 30, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 25, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 30, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 30, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 18, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 31, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 25, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 31, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 37, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 31, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 31, "k": 44, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 31, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 32, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 33, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 34, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 14, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 34, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 23, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 34, "k": 24, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 34, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 33, "tile_m": 5, "tile_n": 3, "threads": 160, "grouping": 1, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 34, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 34, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 34, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 6, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 35, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 13, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 35, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 20, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 35, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 34, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 35, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 41, "tile_m": 5, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 35, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 35, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 36, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 10, "tile_m": 11, "tile_n": 1, "threads": 256, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 37, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 21, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 37, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 37, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 38, "tile_m": 12, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 37, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 37, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 6, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 27, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 38, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 15, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 38, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 24, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 38, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 33, "tile_m": 1, "tile_n": 10, "threads": 96, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 38, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 42, "tile_m": 11, "tile_n": 1, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 38, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 38, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 39, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 13, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 40, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 16, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 40, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 40, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 41, "tile_m": 11, "tile_n": 1, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 40, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 40, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 10, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 41, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 41, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 41, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 33, "tile_m": 3, "tile_n": 5, "threads": 192, "grouping": 1, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 41, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 41, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 42, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 6, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 43, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 15, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 43, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 20, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 43, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 29, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 43, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 34, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 43, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 43, "tile_m": 11, "tile_n": 3, "w": 10, "v": 20, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 21, "n": 43, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 43, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 16, "tile_m": 4, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 44, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 44, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 38, "tile_m": 5, "tile_n": 3, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 44, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 41, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 21, "n": 44, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 44, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 21, "n": 45, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 15, "algorithm": "medium", "perf": 711.621, "source": "autotuned"}, {"m": 22, "n": 4, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 32, "grouping": 4, "minblocks": 6, "algorithm": "medium", "perf": 688.022, "source": "autotuned"}, {"m": 22, "n": 4, "k": 6, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 4, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 4, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 4, "minblocks": 20, "algorithm": "medium", "perf": 675.403, "source": "autotuned"}, {"m": 22, "n": 4, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 19, "algorithm": "medium", "perf": 683.239, "source": "autotuned"}, {"m": 22, "n": 4, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 4, "k": 16, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 4, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 693.792, "source": "autotuned"}, {"m": 22, "n": 4, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 681.694, "source": "autotuned"}, {"m": 22, "n": 4, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 25, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 4, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 10, "algorithm": "medium", "perf": 689.746, "source": "autotuned"}, {"m": 22, "n": 4, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 34, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 4, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 4, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 4, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 9, "minblocks": 27, "algorithm": "medium", "perf": 784.759, "source": "autotuned"}, {"m": 22, "n": 5, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 4, "minblocks": 27, "algorithm": "medium", "perf": 787.494, "source": "autotuned"}, {"m": 22, "n": 5, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 20, "algorithm": "medium", "perf": 784.145, "source": "autotuned"}, {"m": 22, "n": 5, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 15, "algorithm": "medium", "perf": 781.451, "source": "autotuned"}, {"m": 22, "n": 5, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 22, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 807.134, "source": "autotuned"}, {"m": 22, "n": 5, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 803.426, "source": "autotuned"}, {"m": 22, "n": 5, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 801.203, "source": "autotuned"}, {"m": 22, "n": 5, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 5, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 5, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 5, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 6, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 17, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 6, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 6, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 39, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 6, "k": 40, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 6, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 6, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 7, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 7, "tile_m": 1, "tile_n": 8, "threads": 64, "grouping": 4, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 8, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 14, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 8, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 8, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 8, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 384, "grouping": 8, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 8, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 8, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 64, "grouping": 13, "minblocks": 17, "algorithm": "medium", "perf": 1024.46, "source": "autotuned"}, {"m": 22, "n": 9, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 64, "grouping": 15, "minblocks": 18, "algorithm": "medium", "perf": 1018.92, "source": "autotuned"}, {"m": 22, "n": 9, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 1090.92, "source": "autotuned"}, {"m": 22, "n": 9, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "perf": 1141.06, "source": "autotuned"}, {"m": 22, "n": 9, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 1169.51, "source": "autotuned"}, {"m": 22, "n": 9, "k": 17, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 9, "algorithm": "medium", "perf": 1142.02, "source": "autotuned"}, {"m": 22, "n": 9, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "perf": 1178.83, "source": "autotuned"}, {"m": 22, "n": 9, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 1170.96, "source": "autotuned"}, {"m": 22, "n": 9, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "perf": 1190.75, "source": "autotuned"}, {"m": 22, "n": 9, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 32, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 2, "minblocks": 9, "algorithm": "medium", "perf": 1243.07, "source": "autotuned"}, {"m": 22, "n": 9, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 9, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 10, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 11, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 11, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 11, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 11, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 11, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 4, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 15, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 12, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 15, "tile_m": 1, "tile_n": 12, "threads": 32, "grouping": 2, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 12, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 22, "tile_m": 1, "tile_n": 12, "threads": 32, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 12, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 12, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 12, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 43, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 12, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 12, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 4, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 15, "algorithm": "medium", "perf": 1203.83, "source": "autotuned"}, {"m": 22, "n": 13, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 6, "minblocks": 11, "algorithm": "medium", "perf": 1199.03, "source": "autotuned"}, {"m": 22, "n": 13, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 1316.36, "source": "autotuned"}, {"m": 22, "n": 13, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 13, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 1361.0, "source": "autotuned"}, {"m": 22, "n": 13, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 288, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 1459.53, "source": "autotuned"}, {"m": 22, "n": 13, "k": 23, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 2, "minblocks": 3, "algorithm": "medium", "perf": 1465.16, "source": "autotuned"}, {"m": 22, "n": 13, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 26, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 2, "minblocks": 12, "algorithm": "medium", "perf": 1486.77, "source": "autotuned"}, {"m": 22, "n": 13, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 13, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 14, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 15, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 19, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 15, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 37, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 15, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 15, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 1448.79, "source": "autotuned"}, {"m": 22, "n": 16, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 16, "tile_m": 11, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 13, "algorithm": "medium", "perf": 1651.97, "source": "autotuned"}, {"m": 22, "n": 16, "k": 17, "tile_m": 11, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 3, "algorithm": "medium", "perf": 1592.98, "source": "autotuned"}, {"m": 22, "n": 16, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 22, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 2, "minblocks": 11, "algorithm": "medium", "perf": 1671.89, "source": "autotuned"}, {"m": 22, "n": 16, "k": 23, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 1664.08, "source": "autotuned"}, {"m": 22, "n": 16, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 16, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 4, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 18, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 17, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 5, "minblocks": 9, "algorithm": "medium", "perf": 1456.55, "source": "autotuned"}, {"m": 22, "n": 17, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 15, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 17, "k": 16, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 1635.33, "source": "autotuned"}, {"m": 22, "n": 17, "k": 17, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1595.45, "source": "autotuned"}, {"m": 22, "n": 17, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 22, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 2, "minblocks": 9, "algorithm": "medium", "perf": 1675.6, "source": "autotuned"}, {"m": 22, "n": 17, "k": 23, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 1681.7, "source": "autotuned"}, {"m": 22, "n": 17, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 25, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 17, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 17, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 17, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 17, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 8, "tile_m": 6, "tile_n": 1, "threads": 192, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 18, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 18, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 18, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 38, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 18, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 18, "k": 45, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 19, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 19, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 17, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 19, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 19, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 20, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 22, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 20, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 31, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 20, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 37, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 20, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 20, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 7, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 21, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 14, "tile_m": 1, "tile_n": 11, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 21, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 21, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 32, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 21, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 43, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 21, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 21, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 4, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 6, "minblocks": 12, "algorithm": "medium", "perf": 1421.19, "source": "autotuned"}, {"m": 22, "n": 22, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 5, "minblocks": 12, "algorithm": "medium", "perf": 1463.93, "source": "autotuned"}, {"m": 22, "n": 22, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 9, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 1663.75, "source": "autotuned"}, {"m": 22, "n": 22, "k": 10, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 22, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 13, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 1800.33, "source": "autotuned"}, {"m": 22, "n": 22, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 16, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1916.32, "source": "autotuned"}, {"m": 22, "n": 22, "k": 17, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 1870.44, "source": "autotuned"}, {"m": 22, "n": 22, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 22, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 22, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 2, "algorithm": "medium", "perf": 1960.01, "source": "autotuned"}, {"m": 22, "n": 22, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 1955.08, "source": "autotuned"}, {"m": 22, "n": 22, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 26, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 1990.71, "source": "autotuned"}, {"m": 22, "n": 22, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 32, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 2, "minblocks": 5, "algorithm": "medium", "perf": 2080.88, "source": "autotuned"}, {"m": 22, "n": 22, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 37, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 22, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 22, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 5, "minblocks": 13, "algorithm": "medium", "perf": 1421.46, "source": "autotuned"}, {"m": 22, "n": 23, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 6, "minblocks": 10, "algorithm": "medium", "perf": 1484.33, "source": "autotuned"}, {"m": 22, "n": 23, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 1662.16, "source": "autotuned"}, {"m": 22, "n": 23, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 13, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1770.26, "source": "autotuned"}, {"m": 22, "n": 23, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1877.7, "source": "autotuned"}, {"m": 22, "n": 23, "k": 17, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1852.86, "source": "autotuned"}, {"m": 22, "n": 23, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 22, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1926.55, "source": "autotuned"}, {"m": 22, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "perf": 1934.26, "source": "autotuned"}, {"m": 22, "n": 23, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 26, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 1969.68, "source": "autotuned"}, {"m": 22, "n": 23, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 23, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 24, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 23, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 24, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 24, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 24, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 24, "k": 45, "tile_m": 11, "tile_n": 1, "threads": 160, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 25, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 25, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 5, "minblocks": 13, "algorithm": "medium", "perf": 1462.44, "source": "autotuned"}, {"m": 22, "n": 26, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 5, "minblocks": 10, "algorithm": "medium", "perf": 1534.81, "source": "autotuned"}, {"m": 22, "n": 26, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 6, "minblocks": 6, "algorithm": "medium", "perf": 1747.8, "source": "autotuned"}, {"m": 22, "n": 26, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 13, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 1869.4, "source": "autotuned"}, {"m": 22, "n": 26, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 22, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 2021.4, "source": "autotuned"}, {"m": 22, "n": 26, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 2024.94, "source": "autotuned"}, {"m": 22, "n": 26, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 26, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 2073.98, "source": "autotuned"}, {"m": 22, "n": 26, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 26, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 12, "tile_m": 11, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 27, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 27, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 26, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 27, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 7, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 27, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 27, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 34, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 28, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 28, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 30, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 29, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 29, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 41, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 7, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 29, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 29, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 8, "tile_m": 11, "tile_n": 1, "threads": 192, "grouping": 10, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 30, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 30, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 26, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 30, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 30, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 17, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 31, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 26, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 31, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 39, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 31, "k": 40, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 31, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 31, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 4, "minblocks": 6, "algorithm": "medium", "perf": 1904.44, "source": "autotuned"}, {"m": 22, "n": 32, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 22, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 8, "algorithm": "medium", "perf": 2244.91, "source": "autotuned"}, {"m": 22, "n": 32, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 32, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 2417.23, "source": "autotuned"}, {"m": 22, "n": 32, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 32, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 13, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 33, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 33, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 26, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 33, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 33, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 25, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 33, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 40, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 33, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 33, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 15, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 34, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 34, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 29, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 34, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 35, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 34, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 42, "tile_m": 5, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 34, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 34, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 35, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 23, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 35, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 35, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 35, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 35, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 11, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 36, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 21, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 36, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 38, "tile_m": 3, "tile_n": 3, "threads": 224, "grouping": 1, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 36, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 36, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 37, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 12, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 37, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 19, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 37, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 26, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 37, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 33, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 27, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 37, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 40, "tile_m": 11, "tile_n": 1, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 37, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 37, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 7, "tile_m": 11, "tile_n": 1, "threads": 160, "grouping": 7, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 38, "k": 8, "tile_m": 11, "tile_n": 1, "threads": 224, "grouping": 11, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 38, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 21, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 38, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 8, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 38, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 35, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 38, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 38, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 39, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 11, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 40, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 18, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 40, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 40, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 39, "tile_m": 11, "tile_n": 1, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 40, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 40, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 41, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 42, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 43, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 14, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 43, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 43, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 32, "tile_m": 11, "tile_n": 4, "w": 10, "v": 12, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 22, "n": 43, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 41, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 43, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 43, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 44, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 5, "tile_m": 11, "tile_n": 1, "threads": 128, "grouping": 27, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 45, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 10, "tile_m": 11, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 22, "n": 45, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 22, "n": 45, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 8, "minblocks": 8, "algorithm": "medium", "perf": 697.748, "source": "autotuned"}, {"m": 23, "n": 4, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 4, "minblocks": 27, "algorithm": "medium", "perf": 692.1, "source": "autotuned"}, {"m": 23, "n": 4, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 4, "minblocks": 17, "algorithm": "medium", "perf": 675.284, "source": "autotuned"}, {"m": 23, "n": 4, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 20, "algorithm": "medium", "perf": 685.798, "source": "autotuned"}, {"m": 23, "n": 4, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 18, "tile_m": 1, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 4, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 689.119, "source": "autotuned"}, {"m": 23, "n": 4, "k": 23, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 12, "algorithm": "medium", "perf": 685.403, "source": "autotuned"}, {"m": 23, "n": 4, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 25, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 4, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 692.026, "source": "autotuned"}, {"m": 23, "n": 4, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 37, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 4, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 4, "k": 44, "tile_m": 2, "tile_n": 3, "threads": 96, "grouping": 1, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 4, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 10, "minblocks": 9, "algorithm": "medium", "perf": 765.819, "source": "autotuned"}, {"m": 23, "n": 5, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 770.232, "source": "autotuned"}, {"m": 23, "n": 5, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 19, "algorithm": "medium", "perf": 794.315, "source": "autotuned"}, {"m": 23, "n": 5, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 11, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 5, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 13, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 779.905, "source": "autotuned"}, {"m": 23, "n": 5, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 818.943, "source": "autotuned"}, {"m": 23, "n": 5, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 18, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 5, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 22, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 2, "minblocks": 12, "algorithm": "medium", "perf": 803.171, "source": "autotuned"}, {"m": 23, "n": 5, "k": 23, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 799.948, "source": "autotuned"}, {"m": 23, "n": 5, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 25, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 5, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 4, "minblocks": 6, "algorithm": "medium", "perf": 800.518, "source": "autotuned"}, {"m": 23, "n": 5, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 5, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 5, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 8, "tile_m": 6, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 6, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 6, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 30, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 6, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 6, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 7, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 7, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 8, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 18, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 8, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 27, "tile_m": 3, "tile_n": 1, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 8, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 36, "tile_m": 1, "tile_n": 8, "threads": 32, "grouping": 29, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 8, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 8, "k": 45, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 9, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 64, "grouping": 12, "minblocks": 17, "algorithm": "medium", "perf": 1023.81, "source": "autotuned"}, {"m": 23, "n": 9, "k": 5, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 13, "minblocks": 15, "algorithm": "medium", "perf": 1023.47, "source": "autotuned"}, {"m": 23, "n": 9, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 9, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 1100.22, "source": "autotuned"}, {"m": 23, "n": 9, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 11, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 5, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 9, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 1131.5, "source": "autotuned"}, {"m": 23, "n": 9, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 1178.32, "source": "autotuned"}, {"m": 23, "n": 9, "k": 17, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 1150.36, "source": "autotuned"}, {"m": 23, "n": 9, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 22, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 1179.45, "source": "autotuned"}, {"m": 23, "n": 9, "k": 23, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 1176.02, "source": "autotuned"}, {"m": 23, "n": 9, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 26, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 1195.58, "source": "autotuned"}, {"m": 23, "n": 9, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 9, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 37, "tile_m": 1, "tile_n": 10, "threads": 32, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 10, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 10, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 12, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 11, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 23, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 11, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 30, "tile_m": 1, "tile_n": 11, "threads": 32, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 11, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 33, "tile_m": 1, "tile_n": 11, "threads": 32, "grouping": 25, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 11, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 40, "tile_m": 1, "tile_n": 11, "threads": 32, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 11, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 11, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 25, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 12, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 12, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 27, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 1, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 12, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 37, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 12, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 12, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 4, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 14, "minblocks": 15, "algorithm": "medium", "perf": 1177.19, "source": "autotuned"}, {"m": 23, "n": 13, "k": 5, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "perf": 1175.8, "source": "autotuned"}, {"m": 23, "n": 13, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 4, "minblocks": 12, "algorithm": "medium", "perf": 1317.59, "source": "autotuned"}, {"m": 23, "n": 13, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 13, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 3, "minblocks": 16, "algorithm": "medium", "perf": 1370.54, "source": "autotuned"}, {"m": 23, "n": 13, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 1458.25, "source": "autotuned"}, {"m": 23, "n": 13, "k": 17, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1421.47, "source": "autotuned"}, {"m": 23, "n": 13, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 22, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 1476.23, "source": "autotuned"}, {"m": 23, "n": 13, "k": 23, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 2, "minblocks": 5, "algorithm": "medium", "perf": 1468.44, "source": "autotuned"}, {"m": 23, "n": 13, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 26, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 2, "minblocks": 4, "algorithm": "medium", "perf": 1500.18, "source": "autotuned"}, {"m": 23, "n": 13, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 13, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 14, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 4, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 15, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 15, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 15, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 15, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 22, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 15, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 33, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 15, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 40, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 15, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 15, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 5, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 5, "minblocks": 13, "algorithm": "medium", "perf": 1345.94, "source": "autotuned"}, {"m": 23, "n": 16, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 224, "grouping": 4, "minblocks": 9, "algorithm": "medium", "perf": 1472.9, "source": "autotuned"}, {"m": 23, "n": 16, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 13, "tile_m": 3, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1560.32, "source": "autotuned"}, {"m": 23, "n": 16, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 16, "tile_m": 12, "tile_n": 1, "threads": 32, "grouping": 2, "minblocks": 15, "algorithm": "medium", "perf": 1649.82, "source": "autotuned"}, {"m": 23, "n": 16, "k": 17, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 1621.65, "source": "autotuned"}, {"m": 23, "n": 16, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 22, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 1694.73, "source": "autotuned"}, {"m": 23, "n": 16, "k": 23, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 1691.64, "source": "autotuned"}, {"m": 23, "n": 16, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 16, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 224, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 1469.57, "source": "autotuned"}, {"m": 23, "n": 17, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 11, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 17, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 13, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 1559.69, "source": "autotuned"}, {"m": 23, "n": 17, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 16, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 1653.36, "source": "autotuned"}, {"m": 23, "n": 17, "k": 17, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1624.37, "source": "autotuned"}, {"m": 23, "n": 17, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 22, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 1698.96, "source": "autotuned"}, {"m": 23, "n": 17, "k": 23, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 1701.82, "source": "autotuned"}, {"m": 23, "n": 17, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 28, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 17, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 38, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 17, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 17, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 6, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 18, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 17, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 18, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 24, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 18, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 35, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 18, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 42, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 18, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 18, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 14, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 19, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 19, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 19, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 42, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 19, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 19, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 9, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 20, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 20, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 9, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 21, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 20, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 21, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 27, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 21, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 39, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 21, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 21, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 6, "minblocks": 13, "algorithm": "medium", "perf": 1410.89, "source": "autotuned"}, {"m": 23, "n": 22, "k": 5, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "perf": 1455.1, "source": "autotuned"}, {"m": 23, "n": 22, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 7, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 22, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 224, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 1654.71, "source": "autotuned"}, {"m": 23, "n": 22, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 13, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 1752.81, "source": "autotuned"}, {"m": 23, "n": 22, "k": 14, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 25, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 22, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1880.75, "source": "autotuned"}, {"m": 23, "n": 22, "k": 17, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 1844.78, "source": "autotuned"}, {"m": 23, "n": 22, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 22, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 1925.66, "source": "autotuned"}, {"m": 23, "n": 22, "k": 23, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 8, "algorithm": "medium", "perf": 1921.8, "source": "autotuned"}, {"m": 23, "n": 22, "k": 24, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 22, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 26, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 8, "algorithm": "medium", "perf": 1986.83, "source": "autotuned"}, {"m": 23, "n": 22, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 35, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 22, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 42, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 22, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 22, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 6, "minblocks": 4, "algorithm": "medium", "perf": 1404.74, "source": "autotuned"}, {"m": 23, "n": 23, "k": 5, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 5, "minblocks": 16, "algorithm": "medium", "perf": 1489.35, "source": "autotuned"}, {"m": 23, "n": 23, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "perf": 1725.75, "source": "autotuned"}, {"m": 23, "n": 23, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 13, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1867.64, "source": "autotuned"}, {"m": 23, "n": 23, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 16, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 1969.45, "source": "autotuned"}, {"m": 23, "n": 23, "k": 17, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 1941.68, "source": "autotuned"}, {"m": 23, "n": 23, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 22, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 2026.63, "source": "autotuned"}, {"m": 23, "n": 23, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 2028.24, "source": "autotuned"}, {"m": 23, "n": 23, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 26, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 2065.19, "source": "autotuned"}, {"m": 23, "n": 23, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 23, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 11, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 24, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 16, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 24, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 25, "tile_m": 3, "tile_n": 2, "threads": 320, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 24, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 38, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 24, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 24, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 9, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 25, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 27, "tile_m": 12, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 25, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 38, "tile_m": 2, "tile_n": 5, "threads": 96, "grouping": 25, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 25, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 25, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 4, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 6, "minblocks": 10, "algorithm": "medium", "perf": 1471.74, "source": "autotuned"}, {"m": 23, "n": 26, "k": 5, "tile_m": 12, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "perf": 1522.69, "source": "autotuned"}, {"m": 23, "n": 26, "k": 6, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 7, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 26, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 9, "tile_m": 2, "tile_n": 2, "threads": 256, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 1743.61, "source": "autotuned"}, {"m": 23, "n": 26, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 13, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 1884.43, "source": "autotuned"}, {"m": 23, "n": 26, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 17, "tile_m": 12, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 26, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 22, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 8, "algorithm": "medium", "perf": 2067.9, "source": "autotuned"}, {"m": 23, "n": 26, "k": 23, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 2073.49, "source": "autotuned"}, {"m": 23, "n": 26, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 26, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 2115.65, "source": "autotuned"}, {"m": 23, "n": 26, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 35, "tile_m": 12, "tile_n": 1, "threads": 96, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 26, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 40, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 25, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 26, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 26, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 35, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 25, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 27, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 42, "tile_m": 12, "tile_n": 1, "threads": 160, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 27, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 27, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 11, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 28, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 16, "tile_m": 12, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 28, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 25, "tile_m": 12, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 28, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 39, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 1, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 28, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 28, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 29, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 30, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 6, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 7, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 31, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 20, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 31, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 31, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 7, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 31, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 35, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 31, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 42, "tile_m": 12, "tile_n": 1, "threads": 192, "grouping": 7, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 31, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 31, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 32, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 9, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 25, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 33, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 22, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 33, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 31, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 33, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 33, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 4, "tile_m": 12, "tile_n": 1, "threads": 160, "grouping": 7, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 34, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 15, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 34, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 18, "tile_m": 5, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 34, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 29, "tile_m": 5, "tile_n": 3, "threads": 96, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 34, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 32, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 34, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 43, "tile_m": 5, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 34, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 34, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 8, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 27, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 35, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 26, "tile_m": 2, "tile_n": 7, "threads": 96, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 35, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 39, "tile_m": 3, "tile_n": 5, "threads": 128, "grouping": 1, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 35, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 35, "k": 44, "tile_m": 3, "tile_n": 3, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 35, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 22, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 36, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 29, "tile_m": 5, "tile_n": 3, "threads": 96, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 36, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 36, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 23, "tile_m": 2, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 37, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 30, "tile_m": 3, "tile_n": 5, "threads": 160, "grouping": 1, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 37, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 36, "tile_m": 12, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 37, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 43, "tile_m": 12, "tile_n": 1, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 37, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 37, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 5, "tile_m": 12, "tile_n": 1, "threads": 128, "grouping": 7, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 38, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 12, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 38, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 18, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 38, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 32, "tile_m": 3, "tile_n": 5, "threads": 160, "grouping": 1, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 38, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 43, "tile_m": 12, "tile_n": 1, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 38, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 38, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 38, "tile_m": 4, "tile_n": 3, "threads": 192, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 39, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 39, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 12, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 40, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 21, "tile_m": 2, "tile_n": 8, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 40, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 30, "tile_m": 3, "tile_n": 5, "threads": 160, "grouping": 1, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 40, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 39, "tile_m": 12, "tile_n": 1, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 40, "k": 40, "tile_m": 12, "tile_n": 1, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 40, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 40, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 15, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 41, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 22, "tile_m": 2, "tile_n": 7, "threads": 96, "grouping": 10, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 41, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 29, "tile_m": 12, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 41, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 43, "tile_m": 4, "tile_n": 9, "w": 12, "v": 40, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 23, "n": 41, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 41, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 4, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 7, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 42, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 13, "tile_m": 12, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 42, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 18, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 42, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 42, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 43, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 4, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 7, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 44, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 13, "tile_m": 12, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 44, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 22, "tile_m": 5, "tile_n": 3, "threads": 128, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 23, "n": 44, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 26, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 31, "tile_m": 4, "tile_n": 9, "w": 12, "v": 10, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 23, "n": 44, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 40, "tile_m": 4, "tile_n": 9, "w": 12, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 23, "n": 44, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 44, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 23, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 23, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 4, "k": 4, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 6, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 7, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 8, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 9, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 10, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 11, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 12, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 13, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 14, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 15, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 16, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 17, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 18, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 19, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 20, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 21, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 22, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 23, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 24, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 25, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 26, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 27, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 28, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 29, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 30, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 31, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 32, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 33, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 34, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 35, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 36, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 37, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 38, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 39, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 40, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 41, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 42, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 43, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 44, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 4, "k": 45, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 4, "minblocks": 26, "algorithm": "medium", "perf": 796.427, "source": "autotuned"}, {"m": 24, "n": 5, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 11, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 5, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 2, "minblocks": 14, "algorithm": "medium", "perf": 807.706, "source": "autotuned"}, {"m": 24, "n": 5, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 24, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 835.528, "source": "autotuned"}, {"m": 24, "n": 5, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 823.042, "source": "autotuned"}, {"m": 24, "n": 5, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 28, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 5, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 841.384, "source": "autotuned"}, {"m": 24, "n": 5, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 37, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 5, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 5, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 6, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 6, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 6, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 6, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 6, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 6, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 7, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 8, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 16, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 26, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 8, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 384, "grouping": 9, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 8, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 8, "k": 45, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 9, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 9, "tile_m": 3, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 9, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 9, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 27, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 9, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 9, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 9, "k": 45, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 10, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 10, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 11, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 11, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 11, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 12, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 12, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 12, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 37, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 12, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 12, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 14, "algorithm": "medium", "perf": 1250.39, "source": "autotuned"}, {"m": 24, "n": 13, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 13, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 1424.6, "source": "autotuned"}, {"m": 24, "n": 13, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 24, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 2, "minblocks": 12, "algorithm": "medium", "perf": 1553.58, "source": "autotuned"}, {"m": 24, "n": 13, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 26, "tile_m": 3, "tile_n": 4, "threads": 32, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 1549.36, "source": "autotuned"}, {"m": 24, "n": 13, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 13, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 2, "algorithm": "medium", "perf": 1611.52, "source": "autotuned"}, {"m": 24, "n": 13, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 37, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 13, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 13, "k": 44, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 13, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 14, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 6, "tile_m": 6, "tile_n": 1, "threads": 96, "grouping": 17, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 15, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 15, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 31, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 15, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 15, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 15, "k": 45, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 16, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 11, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 16, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 16, "tile_m": 12, "tile_n": 1, "threads": 32, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 16, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 25, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 16, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 38, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 16, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 16, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 17, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 18, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 18, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 36, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 18, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 18, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 19, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 12, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 19, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 19, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 19, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 34, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 19, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 43, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 6, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 19, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 19, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 20, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 12, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 29, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 21, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 21, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 21, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 39, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 21, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 21, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 21, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 30, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 22, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 22, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 22, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 37, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 22, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 22, "k": 44, "tile_m": 4, "tile_n": 7, "w": 18, "v": 22, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "source": "predicted"}, {"m": 24, "n": 22, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 23, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 4, "minblocks": 12, "algorithm": "medium", "perf": 1593.42, "source": "autotuned"}, {"m": 24, "n": 24, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 13, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 1983.67, "source": "autotuned"}, {"m": 24, "n": 24, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 24, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 24, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 2213.95, "source": "autotuned"}, {"m": 24, "n": 24, "k": 25, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 24, "k": 26, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 2211.71, "source": "autotuned"}, {"m": 24, "n": 24, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 2, "minblocks": 5, "algorithm": "medium", "perf": 2310.88, "source": "autotuned"}, {"m": 24, "n": 24, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 24, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 43, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 24, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 24, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 4, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 6, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 25, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 11, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 29, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 25, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 25, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 25, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 25, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 25, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 5, "minblocks": 10, "algorithm": "medium", "perf": 1612.07, "source": "autotuned"}, {"m": 24, "n": 26, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 13, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1965.73, "source": "autotuned"}, {"m": 24, "n": 26, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 24, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 2194.44, "source": "autotuned"}, {"m": 24, "n": 26, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 2182.89, "source": "autotuned"}, {"m": 24, "n": 26, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 32, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 3, "algorithm": "medium", "perf": 2311.83, "source": "autotuned"}, {"m": 24, "n": 26, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 26, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 27, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 12, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 27, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 23, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 27, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 27, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 43, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 1, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 27, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 27, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 28, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 28, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 28, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 28, "k": 44, "tile_m": 12, "tile_n": 1, "threads": 192, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 28, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 39, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 7, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 29, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 29, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 30, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 10, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 30, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 39, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 30, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 30, "k": 44, "tile_m": 12, "tile_n": 1, "threads": 192, "grouping": 7, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 30, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 4, "tile_m": 12, "tile_n": 1, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 31, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 15, "tile_m": 12, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 31, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 22, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 31, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 31, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 43, "tile_m": 12, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 31, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 31, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 7, "algorithm": "medium", "perf": 1756.65, "source": "autotuned"}, {"m": 24, "n": 32, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 8, "tile_m": 1, "tile_n": 11, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 32, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 13, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 2142.55, "source": "autotuned"}, {"m": 24, "n": 32, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 32, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 24, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 2451.83, "source": "autotuned"}, {"m": 24, "n": 32, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 26, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 2431.93, "source": "autotuned"}, {"m": 24, "n": 32, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 32, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 3, "algorithm": "medium", "perf": 2560.8, "source": "autotuned"}, {"m": 24, "n": 32, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 35, "tile_m": 12, "tile_n": 1, "threads": 64, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 32, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 32, "k": 44, "tile_m": 12, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 32, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 33, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 13, "tile_m": 12, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 34, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 20, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 34, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 31, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 34, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 38, "tile_m": 3, "tile_n": 5, "threads": 128, "grouping": 1, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 34, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 34, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 10, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 10, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 35, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 35, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 35, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 38, "tile_m": 3, "tile_n": 3, "threads": 160, "grouping": 1, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 35, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 35, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 36, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 6, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 37, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 15, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 37, "k": 16, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 37, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 25, "tile_m": 2, "tile_n": 7, "threads": 96, "grouping": 10, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 37, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 35, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 37, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 37, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 21, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 38, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 38, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 39, "tile_m": 12, "tile_n": 1, "threads": 192, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 38, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 38, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 39, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 40, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 7, "tile_m": 1, "tile_n": 10, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 41, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 14, "tile_m": 12, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 41, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 16, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 41, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 35, "tile_m": 3, "tile_n": 5, "threads": 192, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 41, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 42, "tile_m": 6, "tile_n": 6, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 24, "n": 41, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 41, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 11, "tile_m": 1, "tile_n": 10, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 42, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 42, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 26, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 17, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 42, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 38, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 42, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 42, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 24, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 5, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 14, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 28, "tile_m": 12, "tile_n": 1, "threads": 96, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 34, "tile_m": 12, "tile_n": 1, "threads": 96, "grouping": 1, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 43, "tile_m": 12, "tile_n": 1, "threads": 96, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 6, "tile_m": 1, "tile_n": 10, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 13, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 16, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 31, "tile_m": 5, "tile_n": 3, "threads": 192, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 35, "tile_m": 5, "tile_n": 3, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 42, "tile_m": 5, "tile_n": 3, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 24, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 24, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 4, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 9, "minblocks": 20, "algorithm": "medium", "perf": 688.492, "source": "autotuned"}, {"m": 25, "n": 4, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 4, "minblocks": 26, "algorithm": "medium", "perf": 677.205, "source": "autotuned"}, {"m": 25, "n": 4, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 3, "minblocks": 26, "algorithm": "medium", "perf": 692.721, "source": "autotuned"}, {"m": 25, "n": 4, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 22, "algorithm": "medium", "perf": 684.905, "source": "autotuned"}, {"m": 25, "n": 4, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 19, "algorithm": "medium", "perf": 692.688, "source": "autotuned"}, {"m": 25, "n": 4, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 25, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 10, "algorithm": "medium", "perf": 691.588, "source": "autotuned"}, {"m": 25, "n": 4, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 694.661, "source": "autotuned"}, {"m": 25, "n": 4, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 696.043, "source": "autotuned"}, {"m": 25, "n": 4, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 711.123, "source": "autotuned"}, {"m": 25, "n": 4, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 4, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 704.519, "source": "autotuned"}, {"m": 25, "n": 5, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 9, "minblocks": 23, "algorithm": "medium", "perf": 784.633, "source": "autotuned"}, {"m": 25, "n": 5, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 9, "minblocks": 24, "algorithm": "medium", "perf": 770.704, "source": "autotuned"}, {"m": 25, "n": 5, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 23, "algorithm": "medium", "perf": 779.902, "source": "autotuned"}, {"m": 25, "n": 5, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 17, "algorithm": "medium", "perf": 794.332, "source": "autotuned"}, {"m": 25, "n": 5, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 13, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 797.264, "source": "autotuned"}, {"m": 25, "n": 5, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 15, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 5, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 22, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 5, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 25, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 9, "algorithm": "medium", "perf": 822.625, "source": "autotuned"}, {"m": 25, "n": 5, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 808.442, "source": "autotuned"}, {"m": 25, "n": 5, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 28, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 814.46, "source": "autotuned"}, {"m": 25, "n": 5, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 844.859, "source": "autotuned"}, {"m": 25, "n": 5, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 35, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 5, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 42, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 5, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 5, "k": 45, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 832.032, "source": "autotuned"}, {"m": 25, "n": 6, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 19, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 6, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 6, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 36, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 6, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 6, "k": 45, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 7, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 9, "minblocks": 21, "algorithm": "medium", "perf": 951.384, "source": "autotuned"}, {"m": 25, "n": 7, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 11, "minblocks": 19, "algorithm": "medium", "perf": 920.51, "source": "autotuned"}, {"m": 25, "n": 7, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 10, "minblocks": 19, "algorithm": "medium", "perf": 947.852, "source": "autotuned"}, {"m": 25, "n": 7, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 3, "minblocks": 17, "algorithm": "medium", "perf": 970.814, "source": "autotuned"}, {"m": 25, "n": 7, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 13, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 996.022, "source": "autotuned"}, {"m": 25, "n": 7, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 25, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1030.87, "source": "autotuned"}, {"m": 25, "n": 7, "k": 26, "tile_m": 3, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1040.72, "source": "autotuned"}, {"m": 25, "n": 7, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 28, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1041.99, "source": "autotuned"}, {"m": 25, "n": 7, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 2, "minblocks": 9, "algorithm": "medium", "perf": 1078.37, "source": "autotuned"}, {"m": 25, "n": 7, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 7, "k": 45, "tile_m": 3, "tile_n": 1, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 1067.21, "source": "autotuned"}, {"m": 25, "n": 8, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 6, "tile_m": 1, "tile_n": 8, "threads": 64, "grouping": 4, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 8, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 9, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 6, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 8, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 8, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 64, "grouping": 13, "minblocks": 16, "algorithm": "medium", "perf": 1018.77, "source": "autotuned"}, {"m": 25, "n": 9, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 64, "grouping": 10, "minblocks": 19, "algorithm": "medium", "perf": 1031.57, "source": "autotuned"}, {"m": 25, "n": 9, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 7, "tile_m": 1, "tile_n": 9, "threads": 64, "grouping": 4, "minblocks": 17, "algorithm": "medium", "perf": 1090.63, "source": "autotuned"}, {"m": 25, "n": 9, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 9, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "perf": 1110.54, "source": "autotuned"}, {"m": 25, "n": 9, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 1161.08, "source": "autotuned"}, {"m": 25, "n": 9, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1218.26, "source": "autotuned"}, {"m": 25, "n": 9, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1219.13, "source": "autotuned"}, {"m": 25, "n": 9, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 1243.81, "source": "autotuned"}, {"m": 25, "n": 9, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 32, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 1281.24, "source": "autotuned"}, {"m": 25, "n": 9, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 9, "k": 45, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "perf": 1264.33, "source": "autotuned"}, {"m": 25, "n": 10, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 8, "tile_m": 1, "tile_n": 10, "threads": 96, "grouping": 6, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 10, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 10, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 10, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 37, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 10, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 10, "k": 44, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 10, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 10, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 11, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "perf": 1260.81, "source": "autotuned"}, {"m": 25, "n": 11, "k": 12, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 1273.55, "source": "autotuned"}, {"m": 25, "n": 11, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 17, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 11, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 20, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 1350.23, "source": "autotuned"}, {"m": 25, "n": 11, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 11, "k": 25, "tile_m": 5, "tile_n": 2, "threads": 32, "grouping": 2, "minblocks": 12, "algorithm": "medium", "perf": 1377.63, "source": "autotuned"}, {"m": 25, "n": 11, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 32, "tile_m": 5, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 8, "algorithm": "medium", "perf": 1452.92, "source": "autotuned"}, {"m": 25, "n": 11, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 39, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 11, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 11, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 12, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 11, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 1311.32, "source": "autotuned"}, {"m": 25, "n": 12, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 9, "algorithm": "medium", "perf": 1355.85, "source": "autotuned"}, {"m": 25, "n": 12, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 20, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 1439.07, "source": "autotuned"}, {"m": 25, "n": 12, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 12, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 12, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 37, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 12, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 12, "k": 44, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 12, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 13, "minblocks": 17, "algorithm": "medium", "perf": 1172.24, "source": "autotuned"}, {"m": 25, "n": 13, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "perf": 1201.28, "source": "autotuned"}, {"m": 25, "n": 13, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 7, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "perf": 1288.33, "source": "autotuned"}, {"m": 25, "n": 13, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 1349.59, "source": "autotuned"}, {"m": 25, "n": 13, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 1380.55, "source": "autotuned"}, {"m": 25, "n": 13, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1408.24, "source": "autotuned"}, {"m": 25, "n": 13, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 25, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1523.91, "source": "autotuned"}, {"m": 25, "n": 13, "k": 26, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "perf": 1512.28, "source": "autotuned"}, {"m": 25, "n": 13, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 28, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1543.2, "source": "autotuned"}, {"m": 25, "n": 13, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 32, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 2, "minblocks": 10, "algorithm": "medium", "perf": 1604.12, "source": "autotuned"}, {"m": 25, "n": 13, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 42, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 13, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 13, "k": 45, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 1600.38, "source": "autotuned"}, {"m": 25, "n": 14, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 1451.35, "source": "autotuned"}, {"m": 25, "n": 14, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 1482.32, "source": "autotuned"}, {"m": 25, "n": 14, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 19, "tile_m": 5, "tile_n": 2, "threads": 64, "grouping": 26, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 14, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 26, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1595.12, "source": "autotuned"}, {"m": 25, "n": 14, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 2, "algorithm": "medium", "perf": 1680.53, "source": "autotuned"}, {"m": 25, "n": 14, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 36, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 14, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 14, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 17, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 15, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 15, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 38, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 15, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 15, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 6, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 16, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 15, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 16, "k": 16, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 16, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 25, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 16, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 42, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 16, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 16, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 17, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 17, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 30, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 17, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 37, "tile_m": 5, "tile_n": 3, "threads": 128, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 17, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 17, "k": 44, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 17, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 18, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 19, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 19, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 19, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 39, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 19, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 19, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 1691.1, "source": "autotuned"}, {"m": 25, "n": 20, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 5, "minblocks": 6, "algorithm": "medium", "perf": 1720.72, "source": "autotuned"}, {"m": 25, "n": 20, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 20, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 1886.91, "source": "autotuned"}, {"m": 25, "n": 20, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 25, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1909.19, "source": "autotuned"}, {"m": 25, "n": 20, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 32, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 2038.68, "source": "autotuned"}, {"m": 25, "n": 20, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 20, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 21, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 21, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 20, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 21, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 21, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 21, "k": 45, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 17, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 22, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 17, "tile_m": 5, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 22, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 22, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 38, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 22, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 22, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 23, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 4, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 7, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 24, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 15, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 25, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 24, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 22, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 24, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 25, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 24, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 35, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 24, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 42, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 24, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 24, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "perf": 1485.73, "source": "autotuned"}, {"m": 25, "n": 25, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 5, "minblocks": 12, "algorithm": "medium", "perf": 1575.59, "source": "autotuned"}, {"m": 25, "n": 25, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 7, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 1702.42, "source": "autotuned"}, {"m": 25, "n": 25, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 9, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 4, "minblocks": 2, "algorithm": "medium", "perf": 1812.74, "source": "autotuned"}, {"m": 25, "n": 25, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 11, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 1890.71, "source": "autotuned"}, {"m": 25, "n": 25, "k": 12, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 1953.74, "source": "autotuned"}, {"m": 25, "n": 25, "k": 13, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1968.88, "source": "autotuned"}, {"m": 25, "n": 25, "k": 14, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 2006.28, "source": "autotuned"}, {"m": 25, "n": 25, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 20, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 2131.35, "source": "autotuned"}, {"m": 25, "n": 25, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 25, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 2191.41, "source": "autotuned"}, {"m": 25, "n": 25, "k": 26, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 2199.01, "source": "autotuned"}, {"m": 25, "n": 25, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 28, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 2205.83, "source": "autotuned"}, {"m": 25, "n": 25, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 32, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 2298.51, "source": "autotuned"}, {"m": 25, "n": 25, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 25, "k": 45, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 2299.51, "source": "autotuned"}, {"m": 25, "n": 26, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "perf": 1505.1, "source": "autotuned"}, {"m": 25, "n": 26, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 6, "minblocks": 8, "algorithm": "medium", "perf": 1562.99, "source": "autotuned"}, {"m": 25, "n": 26, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 7, "tile_m": 3, "tile_n": 2, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "perf": 1727.51, "source": "autotuned"}, {"m": 25, "n": 26, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 9, "tile_m": 3, "tile_n": 2, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "perf": 1769.71, "source": "autotuned"}, {"m": 25, "n": 26, "k": 10, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 26, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 13, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 1923.39, "source": "autotuned"}, {"m": 25, "n": 26, "k": 14, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 1957.32, "source": "autotuned"}, {"m": 25, "n": 26, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 17, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 26, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 24, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 26, "k": 25, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 2161.58, "source": "autotuned"}, {"m": 25, "n": 26, "k": 26, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 2159.22, "source": "autotuned"}, {"m": 25, "n": 26, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 28, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 2202.3, "source": "autotuned"}, {"m": 25, "n": 26, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 32, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 2305.68, "source": "autotuned"}, {"m": 25, "n": 26, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 39, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 25, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 26, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 26, "k": 45, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 5, "algorithm": "medium", "perf": 2334.51, "source": "autotuned"}, {"m": 25, "n": 27, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 8, "tile_m": 1, "tile_n": 10, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 27, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 19, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 27, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 26, "tile_m": 3, "tile_n": 2, "threads": 256, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 27, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 37, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 27, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 27, "k": 44, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 1, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 27, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 4, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "perf": 1549.16, "source": "autotuned"}, {"m": 25, "n": 28, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 5, "minblocks": 11, "algorithm": "medium", "perf": 1616.88, "source": "autotuned"}, {"m": 25, "n": 28, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 7, "tile_m": 3, "tile_n": 2, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "perf": 1760.61, "source": "autotuned"}, {"m": 25, "n": 28, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 9, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 6, "minblocks": 5, "algorithm": "medium", "perf": 1846.28, "source": "autotuned"}, {"m": 25, "n": 28, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 13, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 2007.98, "source": "autotuned"}, {"m": 25, "n": 28, "k": 14, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 28, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 25, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 2238.93, "source": "autotuned"}, {"m": 25, "n": 28, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 28, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 3, "algorithm": "medium", "perf": 2303.35, "source": "autotuned"}, {"m": 25, "n": 28, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 32, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 2, "algorithm": "medium", "perf": 2395.28, "source": "autotuned"}, {"m": 25, "n": 28, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 35, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 28, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 42, "tile_m": 3, "tile_n": 4, "w": 14, "v": 22, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 25, "n": 28, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 28, "k": 45, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 1, "minblocks": 3, "algorithm": "medium", "perf": 2401.66, "source": "autotuned"}, {"m": 25, "n": 29, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 29, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 22, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 29, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 31, "tile_m": 3, "tile_n": 5, "w": 14, "v": 26, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 25, "n": 29, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 36, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 29, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 29, "k": 45, "tile_m": 7, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 30, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 38, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 6, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 30, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 30, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 10, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 26, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 31, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 19, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 31, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 36, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 1, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 31, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 31, "k": 45, "tile_m": 3, "tile_n": 3, "threads": 192, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 32, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 6, "minblocks": 8, "algorithm": "medium", "perf": 1604.78, "source": "autotuned"}, {"m": 25, "n": 32, "k": 5, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 5, "minblocks": 9, "algorithm": "medium", "perf": 1712.86, "source": "autotuned"}, {"m": 25, "n": 32, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 7, "tile_m": 3, "tile_n": 2, "threads": 256, "grouping": 6, "minblocks": 6, "algorithm": "medium", "perf": 1882.31, "source": "autotuned"}, {"m": 25, "n": 32, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 9, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 1923.68, "source": "autotuned"}, {"m": 25, "n": 32, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 11, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 2058.0, "source": "autotuned"}, {"m": 25, "n": 32, "k": 12, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 2113.34, "source": "autotuned"}, {"m": 25, "n": 32, "k": 13, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 2129.49, "source": "autotuned"}, {"m": 25, "n": 32, "k": 14, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 2179.1, "source": "autotuned"}, {"m": 25, "n": 32, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 32, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 20, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 2319.12, "source": "autotuned"}, {"m": 25, "n": 32, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 25, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 2380.19, "source": "autotuned"}, {"m": 25, "n": 32, "k": 26, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 2405.19, "source": "autotuned"}, {"m": 25, "n": 32, "k": 27, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 32, "k": 28, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 2, "algorithm": "medium", "perf": 2445.47, "source": "autotuned"}, {"m": 25, "n": 32, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 32, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 2543.17, "source": "autotuned"}, {"m": 25, "n": 32, "k": 33, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 13, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 32, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 32, "k": 45, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 2534.58, "source": "autotuned"}, {"m": 25, "n": 33, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 10, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 33, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 21, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 33, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 28, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 7, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 33, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 39, "tile_m": 3, "tile_n": 5, "threads": 128, "grouping": 1, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 33, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 33, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 34, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 9, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 25, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 35, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 35, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 27, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 35, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 36, "tile_m": 3, "tile_n": 5, "w": 12, "v": 30, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 25, "n": 35, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 35, "k": 45, "tile_m": 3, "tile_n": 5, "threads": 256, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 36, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 36, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 10, "tile_m": 1, "tile_n": 10, "threads": 288, "grouping": 11, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 37, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 29, "tile_m": 3, "tile_n": 5, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 37, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 36, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 37, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 37, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 5, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 7, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 38, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 14, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 38, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 23, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 38, "k": 24, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 38, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 34, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 38, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 43, "tile_m": 5, "tile_n": 7, "w": 12, "v": 32, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 25, "n": 38, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 38, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 39, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 26, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 40, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 25, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 8, "tile_m": 1, "tile_n": 10, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 21, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 39, "tile_m": 3, "tile_n": 5, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 41, "k": 44, "tile_m": 5, "tile_n": 2, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 6, "tile_m": 1, "tile_n": 10, "threads": 288, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 13, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 31, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 12, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 34, "tile_m": 3, "tile_n": 5, "threads": 192, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 41, "tile_m": 3, "tile_n": 5, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 7, "tile_m": 1, "tile_n": 10, "threads": 192, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 13, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 16, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 27, "tile_m": 3, "tile_n": 5, "threads": 160, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 38, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 25, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 7, "minblocks": 6, "algorithm": "medium", "perf": 1681.3, "source": "autotuned"}, {"m": 25, "n": 45, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 5, "minblocks": 8, "algorithm": "medium", "perf": 1844.44, "source": "autotuned"}, {"m": 25, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 7, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "perf": 2028.88, "source": "autotuned"}, {"m": 25, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 9, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 5, "minblocks": 4, "algorithm": "medium", "perf": 2114.73, "source": "autotuned"}, {"m": 25, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 13, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 2282.07, "source": "autotuned"}, {"m": 25, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 25, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 2621.81, "source": "autotuned"}, {"m": 25, "n": 45, "k": 26, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 2612.42, "source": "autotuned"}, {"m": 25, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 28, "tile_m": 3, "tile_n": 5, "threads": 128, "grouping": 1, "minblocks": 7, "algorithm": "medium", "perf": 2678.19, "source": "autotuned"}, {"m": 25, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 32, "tile_m": 3, "tile_n": 5, "threads": 160, "grouping": 1, "minblocks": 5, "algorithm": "medium", "perf": 2804.03, "source": "autotuned"}, {"m": 25, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 25, "n": 45, "k": 45, "tile_m": 7, "tile_n": 2, "threads": 96, "grouping": 2, "minblocks": 3, "algorithm": "medium", "perf": 2769.88, "source": "autotuned"}, {"m": 26, "n": 4, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 9, "minblocks": 6, "algorithm": "medium", "perf": 699.77, "source": "autotuned"}, {"m": 26, "n": 4, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 3, "minblocks": 26, "algorithm": "medium", "perf": 688.995, "source": "autotuned"}, {"m": 26, "n": 4, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 4, "minblocks": 17, "algorithm": "medium", "perf": 677.491, "source": "autotuned"}, {"m": 26, "n": 4, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 17, "algorithm": "medium", "perf": 693.116, "source": "autotuned"}, {"m": 26, "n": 4, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 4, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 703.614, "source": "autotuned"}, {"m": 26, "n": 4, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 694.92, "source": "autotuned"}, {"m": 26, "n": 4, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 708.26, "source": "autotuned"}, {"m": 26, "n": 4, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 32, "tile_m": 2, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 4, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 43, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 4, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 4, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 9, "minblocks": 22, "algorithm": "medium", "perf": 804.323, "source": "autotuned"}, {"m": 26, "n": 5, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 5, "minblocks": 26, "algorithm": "medium", "perf": 784.372, "source": "autotuned"}, {"m": 26, "n": 5, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 8, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 5, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 23, "algorithm": "medium", "perf": 802.5, "source": "autotuned"}, {"m": 26, "n": 5, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 13, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 13, "algorithm": "medium", "perf": 801.035, "source": "autotuned"}, {"m": 26, "n": 5, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 5, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 22, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 819.975, "source": "autotuned"}, {"m": 26, "n": 5, "k": 23, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 821.742, "source": "autotuned"}, {"m": 26, "n": 5, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 826.193, "source": "autotuned"}, {"m": 26, "n": 5, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 30, "tile_m": 5, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 5, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 39, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 5, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 5, "k": 44, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 5, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 6, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 6, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 6, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 24, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 6, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 34, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 6, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 7, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 6, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 6, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 7, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 8, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 43, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 8, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 8, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 64, "grouping": 13, "minblocks": 15, "algorithm": "medium", "perf": 1043.71, "source": "autotuned"}, {"m": 26, "n": 9, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 4, "minblocks": 24, "algorithm": "medium", "perf": 1052.58, "source": "autotuned"}, {"m": 26, "n": 9, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 9, "k": 9, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "perf": 1138.73, "source": "autotuned"}, {"m": 26, "n": 9, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 1184.14, "source": "autotuned"}, {"m": 26, "n": 9, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 1229.9, "source": "autotuned"}, {"m": 26, "n": 9, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1228.59, "source": "autotuned"}, {"m": 26, "n": 9, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1249.07, "source": "autotuned"}, {"m": 26, "n": 9, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 36, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 9, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 9, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 12, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 10, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 10, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 27, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 10, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 39, "tile_m": 1, "tile_n": 10, "threads": 96, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 10, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 10, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 10, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 11, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 11, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 43, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 11, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 11, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 12, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 13, "minblocks": 17, "algorithm": "medium", "perf": 1216.94, "source": "autotuned"}, {"m": 26, "n": 13, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 5, "minblocks": 14, "algorithm": "medium", "perf": 1229.6, "source": "autotuned"}, {"m": 26, "n": 13, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 7, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 13, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "perf": 1378.77, "source": "autotuned"}, {"m": 26, "n": 13, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1417.71, "source": "autotuned"}, {"m": 26, "n": 13, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1533.15, "source": "autotuned"}, {"m": 26, "n": 13, "k": 23, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 2, "minblocks": 4, "algorithm": "medium", "perf": 1533.11, "source": "autotuned"}, {"m": 26, "n": 13, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 26, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 1554.51, "source": "autotuned"}, {"m": 26, "n": 13, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 13, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 13, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 4, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 14, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 11, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 14, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 14, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 14, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 14, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 18, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 15, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 15, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 36, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 15, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 43, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 15, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 15, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 5, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 16, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 16, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 21, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 16, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 28, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 16, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 34, "tile_m": 3, "tile_n": 2, "threads": 288, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 16, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 16, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 17, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 18, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 11, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 19, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 19, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 19, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 37, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 19, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 19, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 20, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 20, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 20, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 34, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 20, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 20, "k": 45, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 21, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 14, "tile_m": 1, "tile_n": 11, "threads": 64, "grouping": 2, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 21, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 21, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 21, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 37, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 21, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 21, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 4, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 6, "minblocks": 11, "algorithm": "medium", "perf": 1499.81, "source": "autotuned"}, {"m": 26, "n": 22, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 5, "minblocks": 10, "algorithm": "medium", "perf": 1535.64, "source": "autotuned"}, {"m": 26, "n": 22, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 1734.07, "source": "autotuned"}, {"m": 26, "n": 22, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 13, "tile_m": 1, "tile_n": 11, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 1854.64, "source": "autotuned"}, {"m": 26, "n": 22, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 18, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 22, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 22, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "perf": 2013.32, "source": "autotuned"}, {"m": 26, "n": 22, "k": 23, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 2014.1, "source": "autotuned"}, {"m": 26, "n": 22, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 26, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 2055.64, "source": "autotuned"}, {"m": 26, "n": 22, "k": 27, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 22, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 22, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 4, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "perf": 1491.55, "source": "autotuned"}, {"m": 26, "n": 23, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 4, "minblocks": 12, "algorithm": "medium", "perf": 1542.12, "source": "autotuned"}, {"m": 26, "n": 23, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 1784.05, "source": "autotuned"}, {"m": 26, "n": 23, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 352, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 1883.67, "source": "autotuned"}, {"m": 26, "n": 23, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 22, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 2063.9, "source": "autotuned"}, {"m": 26, "n": 23, "k": 23, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 2052.66, "source": "autotuned"}, {"m": 26, "n": 23, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 26, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 2, "minblocks": 6, "algorithm": "medium", "perf": 2108.1, "source": "autotuned"}, {"m": 26, "n": 23, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 23, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 14, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 24, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 24, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 28, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 24, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 37, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 23, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 24, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 24, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 25, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 17, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 25, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 25, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 34, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 25, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 25, "k": 45, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 26, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "perf": 1540.78, "source": "autotuned"}, {"m": 26, "n": 26, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 1601.64, "source": "autotuned"}, {"m": 26, "n": 26, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 9, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "perf": 1892.58, "source": "autotuned"}, {"m": 26, "n": 26, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 11, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 26, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 13, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 2050.56, "source": "autotuned"}, {"m": 26, "n": 26, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 22, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 4, "algorithm": "medium", "perf": 2248.36, "source": "autotuned"}, {"m": 26, "n": 26, "k": 23, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 2, "minblocks": 1, "algorithm": "medium", "perf": 2245.79, "source": "autotuned"}, {"m": 26, "n": 26, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 26, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 5, "algorithm": "medium", "perf": 2288.66, "source": "autotuned"}, {"m": 26, "n": 26, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 26, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 37, "tile_m": 3, "tile_n": 4, "w": 12, "v": 26, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 26, "n": 26, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 26, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 27, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 28, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 7, "tile_m": 1, "tile_n": 10, "threads": 224, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 29, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 14, "tile_m": 1, "tile_n": 10, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 29, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 17, "tile_m": 5, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 29, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 29, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 34, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 29, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 29, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 9, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 26, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 30, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 20, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 30, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 25, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 30, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 38, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 30, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 30, "k": 45, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 31, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 9, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 31, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 16, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 31, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 38, "tile_m": 3, "tile_n": 5, "w": 12, "v": 28, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 26, "n": 31, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 31, "k": 45, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 32, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 11, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 32, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 18, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 32, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 37, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 32, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 32, "k": 44, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 32, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 33, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 34, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 35, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 13, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 35, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 35, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 17, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 35, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 33, "tile_m": 3, "tile_n": 5, "threads": 192, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 35, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 42, "tile_m": 3, "tile_n": 5, "threads": 192, "grouping": 1, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 35, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 35, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 11, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 36, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 18, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 36, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 29, "tile_m": 3, "tile_n": 5, "threads": 160, "grouping": 1, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 36, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 36, "tile_m": 3, "tile_n": 6, "w": 12, "v": 20, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 26, "n": 36, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 36, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 37, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 13, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 37, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 37, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 37, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 41, "tile_m": 7, "tile_n": 5, "w": 10, "v": 28, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 26, "n": 37, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 37, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 10, "tile_m": 1, "tile_n": 10, "threads": 288, "grouping": 11, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 38, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 38, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 38, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 37, "tile_m": 7, "tile_n": 5, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 26, "n": 38, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 38, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 26, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 39, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 26, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 5, "tile_m": 1, "tile_n": 11, "threads": 224, "grouping": 10, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 12, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 41, "tile_m": 3, "tile_n": 5, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 7, "tile_m": 1, "tile_n": 11, "threads": 192, "grouping": 7, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 42, "k": 8, "tile_m": 1, "tile_n": 11, "threads": 224, "grouping": 10, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 21, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 30, "tile_m": 1, "tile_n": 10, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 42, "k": 44, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 4, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 22, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 29, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 33, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 40, "tile_m": 1, "tile_n": 10, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 18, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 27, "tile_m": 7, "tile_n": 6, "w": 8, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 26, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 36, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 44, "k": 45, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 41, "tile_m": 3, "tile_n": 5, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 26, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 26, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 4, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 4, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 35, "tile_m": 2, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 4, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 192, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 4, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 4, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 8, "minblocks": 25, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 5, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 5, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 19, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 5, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 32, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 5, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 41, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 5, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 5, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 11, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 6, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 25, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 6, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 39, "tile_m": 6, "tile_n": 1, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 6, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 6, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 35, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 7, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 7, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 7, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 8, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 7, "tile_m": 1, "tile_n": 9, "threads": 64, "grouping": 4, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 9, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 2, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 9, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 9, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 35, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 9, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 9, "k": 44, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 9, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 11, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 6, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 10, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 16, "tile_m": 1, "tile_n": 10, "threads": 64, "grouping": 4, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 10, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 10, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 38, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 10, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 10, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 5, "tile_m": 1, "tile_n": 11, "threads": 64, "grouping": 4, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 11, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 11, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 11, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 11, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 33, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 1, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 11, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 1, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 11, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 11, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 7, "tile_m": 7, "tile_n": 1, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 12, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 6, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 12, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 17, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 12, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 7, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 12, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 35, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 12, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 12, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 13, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 14, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 13, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 15, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 15, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 31, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 15, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 33, "tile_m": 3, "tile_n": 2, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 15, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 40, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 15, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 15, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 7, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 16, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 31, "tile_m": 3, "tile_n": 2, "threads": 224, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 16, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 37, "tile_m": 5, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 16, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 16, "k": 44, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 16, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 7, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 17, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 2, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 17, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 17, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 39, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 17, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 17, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 18, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 7, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 18, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 16, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 18, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 18, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 18, "k": 45, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 26, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 19, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 19, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 20, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 21, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 21, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 38, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 21, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 21, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 9, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 6, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 22, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 16, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 22, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 22, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 37, "tile_m": 6, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 22, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 22, "k": 44, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 22, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 6, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 7, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 23, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 15, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 23, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 23, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 29, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 23, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 42, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 25, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 23, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 23, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 24, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 25, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 14, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 25, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 25, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 28, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 25, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 25, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 9, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 26, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 18, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 26, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 27, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 26, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 36, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 26, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 26, "k": 45, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 2, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 27, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 7, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 7, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 27, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 14, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 27, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 21, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 27, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 27, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 2, "minblocks": 5, "algorithm": "medium", "perf": 2376.96, "source": "autotuned"}, {"m": 27, "n": 27, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 27, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 35, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 7, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 27, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 42, "tile_m": 3, "tile_n": 4, "w": 16, "v": 24, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 27, "n": 27, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 27, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 10, "tile_m": 5, "tile_n": 3, "threads": 64, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 28, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 28, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 28, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 36, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 28, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 28, "k": 45, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 29, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 29, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 30, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 4, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 31, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 15, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 31, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 29, "tile_m": 3, "tile_n": 5, "threads": 128, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 31, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 35, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 31, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 31, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 31, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 4, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 6, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 32, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 11, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 32, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 32, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 29, "tile_m": 3, "tile_n": 5, "threads": 128, "grouping": 1, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 32, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 17, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 32, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 32, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 33, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 17, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 33, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 33, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 34, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 40, "tile_m": 1, "tile_n": 8, "threads": 160, "grouping": 7, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 34, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 34, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 35, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 37, "tile_m": 3, "tile_n": 5, "w": 12, "v": 24, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 27, "n": 35, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 42, "tile_m": 5, "tile_n": 7, "w": 12, "v": 34, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 27, "n": 35, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 35, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 11, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 36, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 21, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 2, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 36, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 28, "tile_m": 3, "tile_n": 5, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 36, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 32, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 26, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 36, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 36, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 9, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 6, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 37, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 37, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 26, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 31, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 37, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 36, "tile_m": 3, "tile_n": 6, "w": 12, "v": 20, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 27, "n": 37, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 27, "n": 37, "k": 45, "tile_m": 7, "tile_n": 5, "w": 10, "v": 28, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 27, "n": 38, "k": 4, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 7, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 15, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 18, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 29, "tile_m": 3, "tile_n": 5, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 33, "tile_m": 6, "tile_n": 2, "threads": 96, "grouping": 11, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 40, "tile_m": 6, "tile_n": 2, "threads": 96, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 11, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 20, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 2, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 29, "tile_m": 3, "tile_n": 5, "threads": 160, "grouping": 1, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 38, "tile_m": 3, "tile_n": 3, "threads": 256, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 7, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 6, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 12, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 21, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 18, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 35, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 40, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 2, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 8, "tile_m": 1, "tile_n": 11, "threads": 224, "grouping": 10, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 19, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 26, "tile_m": 3, "tile_n": 5, "threads": 160, "grouping": 1, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 37, "tile_m": 3, "tile_n": 5, "threads": 224, "grouping": 1, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 43, "k": 44, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 12, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 21, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 2, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 30, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 32, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 13, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 41, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 2, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 27, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 27, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 4, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 673.287, "source": "autotuned"}, {"m": 28, "n": 4, "k": 6, "tile_m": 1, "tile_n": 4, "threads": 32, "grouping": 3, "minblocks": 26, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 4, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "perf": 692.231, "source": "autotuned"}, {"m": 28, "n": 4, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 4, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 27, "tile_m": 5, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 4, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 713.815, "source": "autotuned"}, {"m": 28, "n": 4, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 33, "tile_m": 2, "tile_n": 4, "threads": 160, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 4, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 40, "tile_m": 2, "tile_n": 1, "threads": 288, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 4, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 4, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 5, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 14, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 5, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 5, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 5, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 25, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 830.956, "source": "autotuned"}, {"m": 28, "n": 5, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 5, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 41, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 5, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 5, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 6, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 10, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 7, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 17, "tile_m": 3, "tile_n": 1, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 7, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 7, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 7, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 8, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 6, "tile_m": 1, "tile_n": 9, "threads": 64, "grouping": 4, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 9, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 9, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 9, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 9, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 34, "tile_m": 3, "tile_n": 3, "threads": 32, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 9, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 43, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 9, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 9, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 10, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 10, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 38, "tile_m": 3, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 10, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 41, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 10, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 10, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 11, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 12, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 17, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 12, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 12, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 36, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 12, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 12, "k": 45, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 13, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 13, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 13, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 14, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 14, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 14, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 41, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 14, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 14, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 10, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 15, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 15, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 15, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 33, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 15, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 15, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 12, "tile_m": 7, "tile_n": 2, "threads": 32, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 16, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 21, "tile_m": 1, "tile_n": 8, "threads": 64, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 16, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 30, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 16, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 39, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 16, "k": 40, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 16, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 16, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 17, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 5, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 18, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 18, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 18, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 34, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 18, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 43, "tile_m": 3, "tile_n": 2, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 18, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 18, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 5, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 19, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 19, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 19, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 36, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 19, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 19, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 26, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 20, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 29, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 20, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 20, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 20, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 20, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 21, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 21, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 36, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 21, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 43, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 21, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 21, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 22, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 5, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 23, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 23, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 23, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 37, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 23, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 23, "k": 44, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 23, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 24, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 29, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 25, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 22, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 25, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 25, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 25, "k": 44, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 25, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 5, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 26, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 12, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 26, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 18, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 26, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 32, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 26, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 43, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 26, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 26, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 27, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 28, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 15, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 28, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 20, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 28, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 2506.43, "source": "autotuned"}, {"m": 28, "n": 28, "k": 29, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 28, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 28, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 29, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 4, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 30, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 15, "tile_m": 1, "tile_n": 10, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 30, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 18, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 30, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 29, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 30, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 32, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 30, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 43, "tile_m": 3, "tile_n": 3, "threads": 160, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 30, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 30, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 8, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 31, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 26, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 31, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 39, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 31, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 31, "k": 44, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 31, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 10, "tile_m": 7, "tile_n": 2, "threads": 64, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 32, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 32, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 32, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 37, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 32, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 32, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 10, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 33, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 33, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 33, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 34, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 35, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 14, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 35, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 35, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 35, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 32, "tile_m": 10, "tile_n": 4, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "source": "predicted"}, {"m": 28, "n": 35, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 43, "tile_m": 5, "tile_n": 7, "w": 12, "v": 28, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "source": "predicted"}, {"m": 28, "n": 35, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 35, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 8, "tile_m": 1, "tile_n": 9, "threads": 320, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 36, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 26, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 31, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 36, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 38, "tile_m": 6, "tile_n": 6, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 28, "n": 36, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 36, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 28, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 10, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 28, "tile_m": 1, "tile_n": 8, "threads": 160, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 34, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 43, "tile_m": 7, "tile_n": 5, "w": 10, "v": 18, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "source": "predicted"}, {"m": 28, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 32, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 43, "tile_m": 7, "tile_n": 5, "w": 12, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 28, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 20, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 29, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 39, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 41, "k": 40, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 9, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 29, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 16, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 27, "tile_m": 7, "tile_n": 6, "w": 8, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 28, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 34, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 12, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 21, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 30, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 39, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 28, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 28, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 4, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 16, "tile_m": 5, "tile_n": 1, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 4, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 27, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 4, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 4, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 41, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 4, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 4, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 5, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 6, "tile_m": 3, "tile_n": 1, "threads": 64, "grouping": 4, "minblocks": 18, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 6, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 6, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 31, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 6, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 33, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 6, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 40, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 6, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 6, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 4, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 7, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 7, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 21, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 7, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 7, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 7, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 41, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 7, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 7, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 8, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 10, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 9, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 29, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 9, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 39, "tile_m": 1, "tile_n": 9, "threads": 32, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 9, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 9, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 5, "tile_m": 1, "tile_n": 10, "threads": 64, "grouping": 4, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 10, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 14, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 10, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 10, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 10, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 33, "tile_m": 1, "tile_n": 10, "threads": 32, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 10, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 42, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 10, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 10, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 11, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 4, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 12, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 12, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 12, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 32, "tile_m": 1, "tile_n": 12, "threads": 32, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 12, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 41, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 12, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 12, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 10, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 13, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 13, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 13, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 38, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 13, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 13, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 14, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 1545.05, "source": "autotuned"}, {"m": 29, "n": 14, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 16, "tile_m": 5, "tile_n": 3, "threads": 32, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 1615.89, "source": "autotuned"}, {"m": 29, "n": 14, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 29, "tile_m": 5, "tile_n": 3, "w": 10, "v": 8, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "perf": 1693.49, "source": "autotuned"}, {"m": 29, "n": 14, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1770.9, "source": "autotuned"}, {"m": 29, "n": 14, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 14, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 9, "tile_m": 3, "tile_n": 5, "threads": 32, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 15, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 15, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 27, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 15, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 37, "tile_m": 1, "tile_n": 9, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 15, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 15, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 11, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 16, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 14, "tile_m": 3, "tile_n": 1, "threads": 256, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1706.42, "source": "autotuned"}, {"m": 29, "n": 16, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 16, "tile_m": 3, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "perf": 1749.29, "source": "autotuned"}, {"m": 29, "n": 16, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 16, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 29, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 16, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 39, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 16, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 16, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 4, "tile_m": 1, "tile_n": 10, "threads": 96, "grouping": 26, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 17, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 13, "tile_m": 1, "tile_n": 11, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 17, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 26, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 17, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 35, "tile_m": 5, "tile_n": 2, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 17, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 40, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 17, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 17, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 18, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 4, "tile_m": 1, "tile_n": 10, "threads": 96, "grouping": 26, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 19, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 13, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 19, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 19, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 31, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 19, "k": 32, "tile_m": 1, "tile_n": 10, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 19, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 41, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 19, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 19, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 11, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 20, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 18, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 20, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 36, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 20, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 20, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 21, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 15, "tile_m": 4, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 22, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 22, "tile_m": 4, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 22, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 29, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 22, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 35, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 22, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 42, "tile_m": 4, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 22, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 22, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 5, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 23, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 12, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 23, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 23, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 23, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 32, "tile_m": 1, "tile_n": 10, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 23, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 23, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 24, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 13, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 25, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 25, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 26, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 25, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 33, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 25, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 40, "tile_m": 3, "tile_n": 3, "threads": 160, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 25, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 25, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 7, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 26, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 26, "k": 8, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 26, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 26, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 21, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 26, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 30, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 26, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 35, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 26, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 26, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 27, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 11, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 28, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 21, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 28, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 38, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 28, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 28, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 5, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 29, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 12, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 29, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 14, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 2271.93, "source": "autotuned"}, {"m": 29, "n": 29, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 16, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 2399.04, "source": "autotuned"}, {"m": 29, "n": 29, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 19, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 29, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 26, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 29, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 29, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 2547.24, "source": "autotuned"}, {"m": 29, "n": 29, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 32, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 2645.48, "source": "autotuned"}, {"m": 29, "n": 29, "k": 33, "tile_m": 3, "tile_n": 3, "threads": 160, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 29, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 24, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 29, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 29, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 30, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 7, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 31, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 31, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 30, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 31, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 31, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 32, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 14, "tile_m": 3, "tile_n": 2, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 2320.73, "source": "autotuned"}, {"m": 29, "n": 32, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 20, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 32, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 29, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 2639.95, "source": "autotuned"}, {"m": 29, "n": 32, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 31, "tile_m": 4, "tile_n": 8, "w": 12, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 29, "n": 32, "k": 32, "tile_m": 3, "tile_n": 2, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 2714.3, "source": "autotuned"}, {"m": 29, "n": 32, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 35, "tile_m": 5, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 32, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 42, "tile_m": 4, "tile_n": 8, "w": 12, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 29, "n": 32, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 32, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 33, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 9, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 34, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 27, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 34, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 34, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 11, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 35, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 16, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 35, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 25, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 35, "k": 26, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 38, "tile_m": 5, "tile_n": 7, "w": 12, "v": 28, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 29, "n": 35, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 35, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 29, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 35, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 26, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 42, "tile_m": 4, "tile_n": 9, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "source": "predicted"}, {"m": 29, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 35, "tile_m": 6, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 9, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 20, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 27, "tile_m": 6, "tile_n": 7, "w": 8, "v": 24, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 29, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 39, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 26, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 9, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 16, "tile_m": 3, "tile_n": 5, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 39, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 26, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 7, "tile_m": 1, "tile_n": 6, "threads": 384, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 14, "tile_m": 3, "tile_n": 5, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 17, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 24, "tile_m": 1, "tile_n": 10, "threads": 256, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 35, "tile_m": 1, "tile_n": 10, "threads": 224, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 42, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 26, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 11, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 28, "tile_m": 3, "tile_n": 4, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 38, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 26, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 14, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 23, "tile_m": 1, "tile_n": 10, "threads": 288, "grouping": 26, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 28, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 42, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 26, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 6, "tile_m": 1, "tile_n": 6, "threads": 384, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 17, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 24, "tile_m": 6, "tile_n": 8, "w": 8, "v": 26, "threads": 32, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 29, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 35, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 29, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 42, "tile_m": 5, "tile_n": 9, "w": 10, "v": 32, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "source": "predicted"}, {"m": 29, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 29, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 4, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 16, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 4, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 27, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 4, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 4, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 41, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 4, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 4, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 5, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 6, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 4, "minblocks": 17, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 7, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 15, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 7, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 20, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 7, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 29, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 7, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 7, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 43, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 7, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 7, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 8, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 10, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 9, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 9, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 39, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 9, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 9, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 6, "tile_m": 1, "tile_n": 10, "threads": 64, "grouping": 4, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 10, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 13, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 10, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 31, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 10, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 33, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 10, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 40, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 10, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 10, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 4, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 11, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 11, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 11, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 11, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 34, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 11, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 41, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 11, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 11, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 5, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 12, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 12, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 27, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 12, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 12, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 41, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 12, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 12, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 13, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 21, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 13, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 13, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 38, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 13, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 13, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 14, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 14, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 14, "k": 24, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 14, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 33, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 14, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 14, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 14, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 15, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 16, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 16, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 29, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 16, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 39, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 16, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 16, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 4, "tile_m": 1, "tile_n": 10, "threads": 96, "grouping": 26, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 17, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 17, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 17, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 35, "tile_m": 1, "tile_n": 9, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 17, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 40, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 17, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 17, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 18, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 18, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 512, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 18, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 38, "tile_m": 3, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 18, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 18, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 19, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 20, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 18, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 20, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 36, "tile_m": 3, "tile_n": 2, "threads": 128, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 20, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 20, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 21, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 22, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 5, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 23, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 23, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 23, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 31, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 23, "k": 32, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 23, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 41, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 23, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 23, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 24, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 25, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 19, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 25, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 25, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 33, "tile_m": 3, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 25, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 25, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 25, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 15, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 26, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 26, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 29, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 26, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 35, "tile_m": 3, "tile_n": 3, "threads": 96, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 26, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 26, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 26, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 27, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 27, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 23, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 27, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 27, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 32, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 27, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 27, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 28, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 38, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 28, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 28, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 5, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 29, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 12, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 29, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 19, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 29, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 26, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 29, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 33, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 29, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 40, "tile_m": 3, "tile_n": 3, "threads": 160, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 29, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 29, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 7, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 30, "k": 8, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 30, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 21, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 30, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 30, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 2650.57, "source": "autotuned"}, {"m": 30, "n": 30, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 35, "tile_m": 3, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 30, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 30, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 31, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 9, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 32, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 23, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 32, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 30, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 32, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 34, "tile_m": 5, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 32, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 32, "k": 45, "tile_m": 3, "tile_n": 11, "w": 12, "v": 18, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 30, "n": 33, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 6, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 33, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 15, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 33, "k": 16, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 33, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 25, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 33, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 34, "tile_m": 3, "tile_n": 6, "w": 12, "v": 18, "threads": 64, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 30, "n": 33, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 43, "tile_m": 3, "tile_n": 11, "w": 12, "v": 18, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 30, "n": 33, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 33, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 12, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 34, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 17, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 34, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 26, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 34, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 40, "tile_m": 5, "tile_n": 7, "w": 12, "v": 18, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 30, "n": 34, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 34, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 30, "n": 35, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 35, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 6, "tile_m": 1, "tile_n": 11, "threads": 256, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 9, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 36, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 20, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 31, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 34, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 36, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 17, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 39, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 39, "k": 40, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 4, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 15, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 22, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 32, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 43, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 8, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 19, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 26, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 38, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 42, "k": 45, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 10, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 17, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 24, "tile_m": 1, "tile_n": 6, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 31, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 14, "tile_m": 5, "tile_n": 3, "threads": 96, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 25, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 32, "tile_m": 6, "tile_n": 8, "w": 8, "v": 22, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 30, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 43, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 30, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 30, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 4, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 6, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 13, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 15, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 20, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 25, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 26, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 28, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 29, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 32, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 35, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 4, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 23, "tile_m": 2, "tile_n": 2, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 5, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 5, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 24, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 6, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 6, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 28, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 6, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 32, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 6, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 41, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 6, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 6, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 10, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 7, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 7, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 7, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 38, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 7, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 7, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 8, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 6, "tile_m": 1, "tile_n": 9, "threads": 64, "grouping": 4, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 9, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 9, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 9, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 9, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 320, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 9, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 9, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 9, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 13, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 10, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 10, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 31, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 10, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 10, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 10, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 11, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 11, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 11, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 33, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 11, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 11, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 12, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 13, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 12, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 12, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 27, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 12, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 33, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 12, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 40, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 12, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 12, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 13, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 13, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 13, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 13, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 41, "tile_m": 1, "tile_n": 8, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 13, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 13, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 14, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 14, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 38, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 14, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 41, "tile_m": 1, "tile_n": 8, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 14, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 14, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 15, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 16, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 16, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 30, "tile_m": 2, "tile_n": 2, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 16, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 39, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 16, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 16, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 16, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 17, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 18, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 19, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 19, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 19, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 26, "tile_m": 1, "tile_n": 10, "threads": 64, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 19, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 37, "tile_m": 1, "tile_n": 10, "threads": 64, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 19, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 19, "k": 44, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 19, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 20, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 21, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 21, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 39, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 21, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 21, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 22, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 22, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 21, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 22, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 34, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 22, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 43, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 22, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 22, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 23, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 19, "tile_m": 1, "tile_n": 12, "threads": 64, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 23, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 26, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 23, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 36, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 23, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 23, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 24, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 25, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 25, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 31, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 25, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 25, "k": 44, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 25, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 5, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 26, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 15, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 26, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 26, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 26, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 26, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 43, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 26, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 26, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 27, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 26, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 27, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 39, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 27, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 27, "k": 44, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 27, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 4, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 28, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 11, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 28, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 22, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 28, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 29, "tile_m": 1, "tile_n": 10, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 28, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 28, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 29, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 30, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 29, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 36, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 5, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 29, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 43, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 29, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 29, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 5, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 30, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 12, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 30, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 18, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 30, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 32, "tile_m": 1, "tile_n": 10, "threads": 96, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 30, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 43, "tile_m": 4, "tile_n": 8, "w": 12, "v": 18, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 31, "n": 30, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 30, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 31, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 2700.28, "source": "autotuned"}, {"m": 31, "n": 31, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 31, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 11, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 32, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 16, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 32, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 25, "tile_m": 1, "tile_n": 11, "threads": 96, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 32, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 38, "tile_m": 4, "tile_n": 8, "w": 12, "v": 18, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 31, "n": 32, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 32, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 26, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 33, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 31, "n": 34, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 34, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 7, "tile_m": 1, "tile_n": 11, "threads": 256, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 35, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 14, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 35, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 21, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 35, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 35, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 35, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 35, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 42, "tile_m": 1, "tile_n": 10, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 35, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 35, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 4, "tile_m": 1, "tile_n": 8, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 13, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 18, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 27, "tile_m": 2, "tile_n": 8, "threads": 96, "grouping": 26, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 37, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 41, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 14, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 19, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 24, "tile_m": 2, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 42, "tile_m": 1, "tile_n": 10, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 31, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 35, "tile_m": 1, "tile_n": 10, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 42, "tile_m": 1, "tile_n": 10, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 11, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 28, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 24, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 38, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 6, "tile_m": 1, "tile_n": 11, "threads": 256, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 17, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 24, "tile_m": 1, "tile_n": 6, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 35, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 42, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 23, "tile_m": 1, "tile_n": 6, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 28, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 24, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 9, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 16, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 39, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 20, "tile_m": 2, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 27, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 24, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 31, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 39, "tile_m": 8, "tile_n": 6, "w": 10, "v": 30, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 31, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 31, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 4, "k": 4, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 5, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 6, "tile_m": 2, "tile_n": 2, "threads": 32, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 4, "k": 7, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 8, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 9, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 10, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 11, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 12, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 14, "algorithm": "medium", "perf": 712.551, "source": "autotuned"}, {"m": 32, "n": 4, "k": 14, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 4, "k": 16, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 17, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 18, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 19, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 20, "tile_m": 1, "tile_n": 1, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 4, "k": 21, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 22, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 23, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 24, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 728.383, "source": "autotuned"}, {"m": 32, "n": 4, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 734.347, "source": "autotuned"}, {"m": 32, "n": 4, "k": 27, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 738.692, "source": "autotuned"}, {"m": 32, "n": 4, "k": 29, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 4, "k": 30, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 31, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 748.772, "source": "autotuned"}, {"m": 32, "n": 4, "k": 33, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 34, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 35, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 4, "k": 36, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 37, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 38, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 39, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 40, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 41, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 42, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 43, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 44, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 4, "k": 45, "threads": 128, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 4, "tile_m": 2, "tile_n": 3, "threads": 32, "grouping": 5, "minblocks": 2, "algorithm": "medium", "perf": 788.628, "source": "autotuned"}, {"m": 32, "n": 5, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 32, "grouping": 4, "minblocks": 25, "algorithm": "medium", "perf": 806.704, "source": "autotuned"}, {"m": 32, "n": 5, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 64, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 809.076, "source": "autotuned"}, {"m": 32, "n": 5, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 12, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 5, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 860.484, "source": "autotuned"}, {"m": 32, "n": 5, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 5, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 863.101, "source": "autotuned"}, {"m": 32, "n": 5, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 5, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 5, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 41, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 5, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 5, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 884.942, "source": "autotuned"}, {"m": 32, "n": 6, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 6, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 32, "grouping": 5, "minblocks": 25, "algorithm": "medium", "perf": 950.689, "source": "autotuned"}, {"m": 32, "n": 7, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 5, "minblocks": 15, "algorithm": "medium", "perf": 1006.18, "source": "autotuned"}, {"m": 32, "n": 7, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 4, "minblocks": 14, "algorithm": "medium", "perf": 1044.53, "source": "autotuned"}, {"m": 32, "n": 7, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "perf": 1070.92, "source": "autotuned"}, {"m": 32, "n": 7, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 7, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1130.79, "source": "autotuned"}, {"m": 32, "n": 7, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 7, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1158.98, "source": "autotuned"}, {"m": 32, "n": 7, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 38, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 7, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 7, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 1155.62, "source": "autotuned"}, {"m": 32, "n": 8, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 9, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 8, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 18, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 8, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 27, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 8, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 36, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 8, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 8, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 9, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 64, "grouping": 4, "minblocks": 13, "algorithm": "medium", "perf": 1189.05, "source": "autotuned"}, {"m": 32, "n": 9, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 1266.02, "source": "autotuned"}, {"m": 32, "n": 9, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 1272.14, "source": "autotuned"}, {"m": 32, "n": 9, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1334.41, "source": "autotuned"}, {"m": 32, "n": 9, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1345.25, "source": "autotuned"}, {"m": 32, "n": 9, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 1380.62, "source": "autotuned"}, {"m": 32, "n": 9, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 9, "k": 45, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 1398.6, "source": "autotuned"}, {"m": 32, "n": 10, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 16, "algorithm": "medium", "perf": 1295.37, "source": "autotuned"}, {"m": 32, "n": 10, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 1316.2, "source": "autotuned"}, {"m": 32, "n": 10, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 10, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 352, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 1486.53, "source": "autotuned"}, {"m": 32, "n": 10, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 10, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 5, "tile_m": 1, "tile_n": 11, "threads": 64, "grouping": 4, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 11, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 11, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 11, "algorithm": "medium", "perf": 1401.98, "source": "autotuned"}, {"m": 32, "n": 11, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 3, "minblocks": 8, "algorithm": "medium", "perf": 1409.69, "source": "autotuned"}, {"m": 32, "n": 11, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 11, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 20, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1507.32, "source": "autotuned"}, {"m": 32, "n": 11, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 27, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 11, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 1595.66, "source": "autotuned"}, {"m": 32, "n": 11, "k": 33, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 11, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 11, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 11, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 1472.58, "source": "autotuned"}, {"m": 32, "n": 12, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 1614.85, "source": "autotuned"}, {"m": 32, "n": 12, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 12, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 1631.17, "source": "autotuned"}, {"m": 32, "n": 12, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 29, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 12, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 512, "grouping": 4, "minblocks": 3, "algorithm": "medium", "perf": 1687.2, "source": "autotuned"}, {"m": 32, "n": 12, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 36, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 12, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 12, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 4, "minblocks": 11, "algorithm": "medium", "perf": 1444.9, "source": "autotuned"}, {"m": 32, "n": 13, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 9, "algorithm": "medium", "perf": 1494.08, "source": "autotuned"}, {"m": 32, "n": 13, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 1560.49, "source": "autotuned"}, {"m": 32, "n": 13, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1621.29, "source": "autotuned"}, {"m": 32, "n": 13, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 384, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 1714.82, "source": "autotuned"}, {"m": 32, "n": 13, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 13, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 13, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 14, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 1640.15, "source": "autotuned"}, {"m": 32, "n": 14, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 14, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 36, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 14, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 14, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 15, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 15, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 15, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 27, "tile_m": 1, "tile_n": 3, "threads": 448, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 15, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 33, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 15, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 15, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 9, "algorithm": "medium", "perf": 1495.79, "source": "autotuned"}, {"m": 32, "n": 16, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 4, "minblocks": 6, "algorithm": "medium", "perf": 1794.95, "source": "autotuned"}, {"m": 32, "n": 16, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "perf": 1798.83, "source": "autotuned"}, {"m": 32, "n": 16, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 16, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 17, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 17, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 29, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 17, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 36, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 17, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 17, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 17, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 18, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 18, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 18, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 24, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 18, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 18, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 19, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 4, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 20, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 4, "minblocks": 6, "algorithm": "medium", "perf": 1930.43, "source": "autotuned"}, {"m": 32, "n": 20, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 20, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 20, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 2135.9, "source": "autotuned"}, {"m": 32, "n": 20, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 20, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 31, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 20, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 20, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 26, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 20, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 20, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 21, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 21, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 21, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 21, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 43, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 21, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 21, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 1904.44, "source": "autotuned"}, {"m": 32, "n": 22, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 22, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 23, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 23, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 23, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 36, "tile_m": 4, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 23, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 23, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 5, "minblocks": 8, "algorithm": "medium", "perf": 1756.65, "source": "autotuned"}, {"m": 32, "n": 24, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 24, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 13, "tile_m": 1, "tile_n": 12, "threads": 64, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 2172.37, "source": "autotuned"}, {"m": 32, "n": 24, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 24, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 24, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 2431.14, "source": "autotuned"}, {"m": 32, "n": 24, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 26, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 2435.09, "source": "autotuned"}, {"m": 32, "n": 24, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 24, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 32, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 2543.84, "source": "autotuned"}, {"m": 32, "n": 24, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 35, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 24, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 24, "k": 44, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 24, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 5, "minblocks": 7, "algorithm": "medium", "perf": 1752.88, "source": "autotuned"}, {"m": 32, "n": 25, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 1916.66, "source": "autotuned"}, {"m": 32, "n": 25, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 5, "algorithm": "medium", "perf": 2094.56, "source": "autotuned"}, {"m": 32, "n": 25, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 13, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 2181.89, "source": "autotuned"}, {"m": 32, "n": 25, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 2429.15, "source": "autotuned"}, {"m": 32, "n": 25, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 2519.15, "source": "autotuned"}, {"m": 32, "n": 25, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 25, "k": 45, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 2569.3, "source": "autotuned"}, {"m": 32, "n": 26, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "perf": 1789.55, "source": "autotuned"}, {"m": 32, "n": 26, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 7, "algorithm": "medium", "perf": 1986.08, "source": "autotuned"}, {"m": 32, "n": 26, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 4, "minblocks": 5, "algorithm": "medium", "perf": 2071.44, "source": "autotuned"}, {"m": 32, "n": 26, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 12, "tile_m": 1, "tile_n": 10, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "perf": 2213.46, "source": "autotuned"}, {"m": 32, "n": 26, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 26, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 24, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "perf": 2496.78, "source": "autotuned"}, {"m": 32, "n": 26, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 26, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 2514.02, "source": "autotuned"}, {"m": 32, "n": 26, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 2625.43, "source": "autotuned"}, {"m": 32, "n": 26, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 41, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 26, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 26, "k": 45, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 2612.42, "source": "autotuned"}, {"m": 32, "n": 27, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 11, "tile_m": 1, "tile_n": 6, "threads": 384, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 27, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 27, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 39, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 27, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 27, "k": 44, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 27, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 5, "minblocks": 7, "algorithm": "medium", "perf": 1706.12, "source": "autotuned"}, {"m": 32, "n": 28, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 480, "grouping": 4, "minblocks": 4, "algorithm": "medium", "perf": 2294.83, "source": "autotuned"}, {"m": 32, "n": 28, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 25, "tile_m": 2, "tile_n": 7, "threads": 64, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 2558.66, "source": "autotuned"}, {"m": 32, "n": 28, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 2600.81, "source": "autotuned"}, {"m": 32, "n": 28, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 2649.48, "source": "autotuned"}, {"m": 32, "n": 28, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 2746.52, "source": "autotuned"}, {"m": 32, "n": 28, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 42, "tile_m": 1, "tile_n": 6, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 28, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 28, "k": 45, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 2759.99, "source": "autotuned"}, {"m": 32, "n": 29, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 29, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 29, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 29, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 2631.69, "source": "autotuned"}, {"m": 32, "n": 29, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 29, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 29, "k": 44, "tile_m": 4, "tile_n": 8, "w": 14, "v": 18, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 32, "n": 29, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 13, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 30, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 30, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 26, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 30, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 38, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 30, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 41, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 30, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 30, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 11, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 31, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 31, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 4, "tile_m": 2, "tile_n": 8, "threads": 64, "grouping": 32, "minblocks": 5, "algorithm": "medium", "perf": 1811.89, "source": "autotuned"}, {"m": 32, "n": 32, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 7, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "perf": 2196.76, "source": "autotuned"}, {"m": 32, "n": 32, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 10, "tile_m": 2, "tile_n": 8, "threads": 64, "grouping": 4, "minblocks": 2, "algorithm": "medium", "perf": 2425.0, "source": "autotuned"}, {"m": 32, "n": 32, "k": 11, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "perf": 2468.06, "source": "autotuned"}, {"m": 32, "n": 32, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 16, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "perf": 2733.95, "source": "autotuned"}, {"m": 32, "n": 32, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 22, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 2801.94, "source": "autotuned"}, {"m": 32, "n": 32, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 24, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 2848.85, "source": "autotuned"}, {"m": 32, "n": 32, "k": 25, "tile_m": 1, "tile_n": 8, "threads": 160, "grouping": 3, "minblocks": 3, "algorithm": "medium", "perf": 2821.09, "source": "autotuned"}, {"m": 32, "n": 32, "k": 26, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 2853.46, "source": "autotuned"}, {"m": 32, "n": 32, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 29, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "perf": 2876.93, "source": "autotuned"}, {"m": 32, "n": 32, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 32, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "perf": 2970.84, "source": "autotuned"}, {"m": 32, "n": 32, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 39, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 32, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 32, "n": 32, "k": 45, "tile_m": 2, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 1, "algorithm": "medium", "perf": 2972.04, "source": "autotuned"}, {"m": 32, "n": 33, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 33, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 33, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 26, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 33, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 37, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 33, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 33, "k": 44, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 33, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 34, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 12, "tile_m": 1, "tile_n": 12, "threads": 96, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 34, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 30, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 34, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 34, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 35, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 26, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 38, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 37, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 36, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 23, "tile_m": 2, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 37, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 39, "k": 44, "tile_m": 1, "tile_n": 10, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 14, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 23, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 42, "tile_m": 1, "tile_n": 10, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 14, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 25, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 35, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 42, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 9, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 22, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 36, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 43, "k": 45, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 5, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "perf": 2090.44, "source": "autotuned"}, {"m": 32, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 7, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "perf": 2357.34, "source": "autotuned"}, {"m": 32, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 9, "tile_m": 1, "tile_n": 6, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "perf": 2485.44, "source": "autotuned"}, {"m": 32, "n": 45, "k": 10, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 19, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 32, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 28, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "perf": 3112.08, "source": "autotuned"}, {"m": 32, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 36, "tile_m": 8, "tile_n": 6, "w": 10, "v": 44, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 32, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 32, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 4, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 4, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 4, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 4, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 19, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 4, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 26, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 4, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 41, "tile_m": 1, "tile_n": 1, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 4, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 4, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 5, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 4, "tile_m": 2, "tile_n": 6, "threads": 32, "grouping": 3, "minblocks": 25, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 6, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 6, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 29, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 6, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 33, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 6, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 6, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 6, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 3, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 7, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 7, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 7, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 7, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 7, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 7, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 4, "tile_m": 1, "tile_n": 8, "threads": 64, "grouping": 4, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 8, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 13, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 8, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 8, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 8, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 384, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 8, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 8, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 11, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 9, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 9, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 29, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 9, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 9, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 10, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 11, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 11, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 11, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 37, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 11, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 11, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 12, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 12, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 21, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 12, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 448, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 12, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 41, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 12, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 12, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 11, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 13, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 18, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 13, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 37, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 13, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 13, "k": 44, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 13, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 33, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 14, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 42, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 14, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 14, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 15, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 37, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 15, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 15, "k": 44, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 15, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 16, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 17, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 17, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 17, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 38, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 17, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 17, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 18, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 18, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 18, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 18, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 35, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 18, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 18, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 18, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 19, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 20, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 20, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 20, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 39, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 20, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 20, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 21, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 22, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 22, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 20, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 22, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 35, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 22, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 22, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 22, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 23, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 23, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 23, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 23, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 23, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 34, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 23, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 43, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 23, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 23, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 24, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 20, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 24, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 24, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 38, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 24, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 24, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 25, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 25, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 25, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 38, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 25, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 25, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 26, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 27, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 27, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 31, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 27, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 27, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 27, "k": 45, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 28, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 28, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 28, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 16, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 29, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 27, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 29, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 39, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 29, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 29, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 30, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 15, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 30, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 30, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 30, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 35, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 30, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 30, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 26, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 31, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 33, "n": 32, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 32, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 4, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 33, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 13, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 33, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 33, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 31, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 33, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 33, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 34, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 25, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 34, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 34, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 43, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 34, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 34, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 35, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 36, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 22, "tile_m": 3, "tile_n": 5, "threads": 96, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 36, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 36, "tile_m": 1, "tile_n": 6, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 25, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 43, "tile_m": 1, "tile_n": 10, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 12, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 39, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 39, "k": 40, "tile_m": 9, "tile_n": 5, "w": 10, "v": 28, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "source": "predicted"}, {"m": 33, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 8, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 39, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 40, "k": 44, "tile_m": 9, "tile_n": 5, "w": 10, "v": 28, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "source": "predicted"}, {"m": 33, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 22, "tile_m": 3, "tile_n": 4, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 15, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 24, "tile_m": 1, "tile_n": 6, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 34, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 12, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 23, "tile_m": 1, "tile_n": 6, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 33, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 33, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 4, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 19, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 4, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 24, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 4, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 37, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 4, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 42, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 4, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 4, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 5, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 6, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 4, "tile_m": 2, "tile_n": 7, "threads": 32, "grouping": 4, "minblocks": 21, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 7, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 7, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 7, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 7, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 7, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 7, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 8, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 8, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 8, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 8, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 8, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 9, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 9, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 9, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 9, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 9, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 9, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 38, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 10, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 10, "k": 45, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 11, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 11, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 41, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 11, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 11, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 12, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 19, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 12, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 12, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 37, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 12, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 12, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 13, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 13, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 21, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 13, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 35, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 13, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 128, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 13, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 13, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 29, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 14, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 20, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 14, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 29, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 14, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 38, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 14, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 14, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 15, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 16, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 17, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 20, "tile_m": 1, "tile_n": 4, "threads": 352, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 17, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 31, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 17, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 38, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 17, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 17, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 6, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 18, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 18, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 18, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 18, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 35, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 18, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 18, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 19, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 19, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 27, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 19, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 34, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 19, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 41, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 19, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 19, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 20, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 20, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 39, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 20, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 20, "k": 44, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 20, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 21, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 22, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 23, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 23, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 512, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 23, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 23, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 34, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 23, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 41, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 23, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 23, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 24, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 17, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 24, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 24, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 24, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 24, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 25, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 26, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 27, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 27, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 27, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 34, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 27, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 43, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 27, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 27, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 28, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 28, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 28, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 39, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 28, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 28, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 29, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 29, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 29, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 29, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 29, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 30, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 30, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 26, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 37, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 30, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 30, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 34, "n": 31, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 31, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 32, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 11, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 33, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 25, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 33, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 39, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 33, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 33, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 34, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 13, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 34, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 19, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 34, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 34, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 41, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 34, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 34, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 35, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 14, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 35, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 35, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 35, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 35, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 42, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 35, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 35, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 36, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 23, "tile_m": 4, "tile_n": 3, "threads": 128, "grouping": 4, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 28, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 24, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 35, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 42, "tile_m": 1, "tile_n": 10, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 13, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 20, "tile_m": 3, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 40, "tile_m": 9, "tile_n": 5, "w": 10, "v": 20, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 34, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 43, "k": 8, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 17, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 35, "tile_m": 7, "tile_n": 2, "w": 12, "v": 42, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 34, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 12, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 23, "tile_m": 1, "tile_n": 6, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 11, "tile_m": 1, "tile_n": 6, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 34, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 38, "tile_m": 7, "tile_n": 2, "w": 12, "v": 42, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 34, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 34, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 4, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 4, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 4, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 4, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 19, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 4, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 33, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 4, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 42, "tile_m": 1, "tile_n": 1, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 4, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 4, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 5, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 6, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 7, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 7, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 7, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 7, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 7, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 7, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 8, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 8, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 8, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 8, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 33, "tile_m": 1, "tile_n": 1, "threads": 416, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 8, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 8, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 8, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 9, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 10, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 11, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 30, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 11, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 36, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 11, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 11, "k": 45, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 12, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 12, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 19, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 12, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 12, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 33, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 12, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 40, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 12, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 12, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 13, "k": 8, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 13, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 17, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 13, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 512, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 13, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 13, "k": 44, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 13, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 14, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 14, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 14, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 14, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 41, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 14, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 14, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 15, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 16, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 17, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 21, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 17, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 17, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 39, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 17, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 17, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 6, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 18, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 18, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 20, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 18, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 29, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 18, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 34, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 18, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 18, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 18, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 19, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 16, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 19, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 27, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 19, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 34, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 19, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 19, "k": 45, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 20, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 39, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 20, "k": 40, "tile_m": 4, "tile_n": 3, "threads": 64, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 20, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 20, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 21, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 22, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 22, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 28, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 22, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 22, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 23, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 23, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 23, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 23, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 34, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 23, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 23, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 24, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 24, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 24, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 24, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 25, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 26, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 14, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 27, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 27, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 27, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 34, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 27, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 43, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 27, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 27, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 28, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 28, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 39, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 28, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 28, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 10, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 29, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 29, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 29, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 26, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 37, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 29, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 29, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 35, "n": 30, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 30, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 14, "tile_m": 3, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 30, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 30, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 30, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 30, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 43, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 30, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 30, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 31, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 32, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 33, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 33, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 20, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 33, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 29, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 33, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 33, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 33, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 42, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 33, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 33, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 34, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 26, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 34, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 39, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 34, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 34, "k": 44, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 34, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 35, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 29, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 35, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 35, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 43, "tile_m": 7, "tile_n": 3, "w": 6, "v": 8, "threads": 64, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "source": "predicted"}, {"m": 35, "n": 35, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 35, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 36, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 22, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 36, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 36, "k": 44, "tile_m": 7, "tile_n": 6, "w": 10, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "source": "predicted"}, {"m": 35, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 12, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 43, "tile_m": 9, "tile_n": 5, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "source": "predicted"}, {"m": 35, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 23, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 36, "tile_m": 1, "tile_n": 10, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 43, "tile_m": 9, "tile_n": 5, "w": 10, "v": 26, "threads": 32, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 35, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 22, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 22, "tile_m": 1, "tile_n": 6, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 43, "tile_m": 3, "tile_n": 6, "w": 10, "v": 32, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 35, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 12, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 21, "tile_m": 1, "tile_n": 6, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 39, "tile_m": 1, "tile_n": 6, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 45, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 35, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 35, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 4, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 4, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 16, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 4, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 4, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 39, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 4, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 4, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 5, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 6, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 6, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 37, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 6, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 6, "k": 44, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 6, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 4, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 7, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 12, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 7, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 7, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 7, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 7, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 7, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 7, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 9, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 8, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 8, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 8, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 36, "tile_m": 1, "tile_n": 1, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 8, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 8, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 9, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 11, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 9, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 9, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 25, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 9, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 9, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 9, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 10, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 4, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 11, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 11, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 11, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 33, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 11, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 11, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 11, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 12, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 12, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 13, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 29, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 13, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 18, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 13, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 512, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 13, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 13, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 13, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 14, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 31, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 14, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 37, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 14, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 42, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 14, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 14, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 15, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 16, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 38, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 17, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 17, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 18, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 18, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 17, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 18, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 18, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 35, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 18, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 42, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 18, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 18, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 22, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 19, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 31, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 19, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 19, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 20, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 20, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 20, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 20, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 40, "tile_m": 2, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 20, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 20, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 21, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 22, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 17, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 22, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 24, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 22, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 35, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 22, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 42, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 22, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 22, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 23, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 23, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 28, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 23, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 23, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 23, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 24, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 24, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 24, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 38, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 24, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 24, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 25, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 27, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 25, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 38, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 25, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 25, "k": 45, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 26, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 26, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 27, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 27, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 27, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 35, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 27, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 42, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 27, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 27, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 26, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 28, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 36, "n": 29, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 9, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 29, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 29, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 29, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 39, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 29, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 29, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 30, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 30, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 30, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 35, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 30, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 30, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 30, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 31, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 32, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 33, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 33, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 33, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 33, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 35, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 33, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 33, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 13, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 34, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 19, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 34, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 34, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 33, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 34, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 40, "tile_m": 3, "tile_n": 7, "w": 8, "v": 8, "threads": 64, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "source": "predicted"}, {"m": 36, "n": 34, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 34, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 35, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 21, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 36, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 36, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 34, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 36, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 43, "tile_m": 9, "tile_n": 5, "w": 10, "v": 28, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "source": "predicted"}, {"m": 36, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 12, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 33, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 40, "tile_m": 9, "tile_n": 5, "w": 10, "v": 28, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "source": "predicted"}, {"m": 36, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 11, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 21, "tile_m": 2, "tile_n": 6, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 38, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 13, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 22, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 40, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 41, "tile_m": 9, "tile_n": 5, "w": 10, "v": 18, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "source": "predicted"}, {"m": 36, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 14, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 35, "tile_m": 1, "tile_n": 7, "threads": 352, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 42, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 11, "tile_m": 1, "tile_n": 6, "threads": 416, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 39, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 12, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 23, "tile_m": 1, "tile_n": 6, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 22, "tile_m": 1, "tile_n": 6, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 36, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 35, "tile_m": 5, "tile_n": 4, "w": 14, "v": 14, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 36, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 42, "tile_m": 3, "tile_n": 6, "w": 10, "v": 32, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 36, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 36, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 4, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 6, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 4, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 4, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 4, "k": 16, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 4, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 25, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 4, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 34, "tile_m": 1, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 4, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 43, "tile_m": 1, "tile_n": 1, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 4, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 4, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 5, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 5, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 5, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 5, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 5, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 6, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 6, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 12, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 7, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 7, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 7, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 7, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 7, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 8, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 8, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 8, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 32, "tile_m": 1, "tile_n": 1, "threads": 416, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 8, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 352, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 8, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 8, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 9, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 10, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 17, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 10, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 10, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 39, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 10, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 10, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 11, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 19, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 11, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 37, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 11, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 11, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 12, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 13, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 13, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 13, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 13, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 13, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 29, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 14, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 14, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 448, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 14, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 14, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 15, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 15, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 15, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 16, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 30, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 16, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 16, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 4, "tile_m": 1, "tile_n": 10, "threads": 96, "grouping": 26, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 17, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 17, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 17, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 17, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 17, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 17, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 17, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 18, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 37, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 18, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 18, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 19, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 20, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 20, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 31, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 20, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 37, "tile_m": 4, "tile_n": 2, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 20, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 20, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 21, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 21, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 25, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 21, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 21, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 43, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 21, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 21, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 22, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 23, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 23, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 23, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 23, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 41, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 23, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 23, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 24, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 24, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 24, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 34, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 24, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 24, "k": 45, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 25, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 25, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 26, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 26, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 26, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 37, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 26, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 26, "k": 44, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 26, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 27, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 27, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 39, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 27, "k": 40, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 27, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 27, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 37, "n": 28, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 28, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 29, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 29, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 29, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 29, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 41, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 29, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 29, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 30, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 30, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 26, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 30, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 38, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 30, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 30, "k": 45, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 31, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 31, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 32, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 33, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 27, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 33, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 38, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 33, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 41, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 33, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 33, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 34, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 34, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 20, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 34, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 34, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 34, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 34, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 34, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 34, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 35, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 10, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 448, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 33, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 36, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 13, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 27, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 37, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 41, "tile_m": 3, "tile_n": 5, "w": 14, "v": 36, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 37, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 8, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 22, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 31, "tile_m": 1, "tile_n": 5, "threads": 320, "grouping": 24, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 35, "tile_m": 1, "tile_n": 10, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 39, "k": 44, "tile_m": 2, "tile_n": 9, "w": 10, "v": 26, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 37, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 21, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 38, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 34, "tile_m": 1, "tile_n": 7, "threads": 352, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 41, "tile_m": 3, "tile_n": 6, "w": 16, "v": 16, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 37, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 14, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 23, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 43, "k": 24, "tile_m": 1, "tile_n": 6, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 42, "tile_m": 3, "tile_n": 7, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 37, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 448, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 37, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 37, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 4, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 38, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 4, "k": 45, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 6, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 5, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 5, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 24, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 5, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 35, "tile_m": 1, "tile_n": 1, "threads": 480, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 5, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 5, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 5, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 6, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 6, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 38, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 6, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 6, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 7, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 16, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 7, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 7, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 7, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 7, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 8, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 6, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 8, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 8, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 31, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 8, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 35, "tile_m": 1, "tile_n": 1, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 8, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 352, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 8, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 8, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 9, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 9, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 9, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 9, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 9, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 4, "tile_m": 2, "tile_n": 2, "threads": 96, "grouping": 5, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 10, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 10, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 10, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 27, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 10, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 10, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 41, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 10, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 10, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 11, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 7, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 12, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 12, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 21, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 12, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 12, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 35, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 12, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 42, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 12, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 12, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 13, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 14, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 15, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 15, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 25, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 15, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 38, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 15, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 15, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 16, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 16, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 16, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 31, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 16, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 16, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 16, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 17, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 18, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 19, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 19, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 37, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 19, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 19, "k": 44, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 19, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 20, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 21, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 21, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 37, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 21, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 21, "k": 44, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 21, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 22, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 22, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 27, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 22, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 22, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 41, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 22, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 22, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 23, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 18, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 23, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 25, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 23, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 36, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 23, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 23, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 24, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 15, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 24, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 24, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 33, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 24, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 24, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 24, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 25, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 17, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 25, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 25, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 36, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 25, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 25, "k": 45, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 26, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 26, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 26, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 26, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 26, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 42, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 26, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 26, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 38, "n": 27, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 27, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 28, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 28, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 28, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 28, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 28, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 40, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 28, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 28, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 29, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 29, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 30, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 31, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 31, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 31, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 31, "k": 45, "tile_m": 5, "tile_n": 8, "w": 8, "v": 18, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "source": "predicted"}, {"m": 38, "n": 32, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 32, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 33, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 33, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 33, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 34, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 14, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 34, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 34, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 34, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 34, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 41, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 34, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 34, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 35, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 13, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 35, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 35, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 35, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 40, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 35, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 13, "tile_m": 1, "tile_n": 8, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 31, "tile_m": 1, "tile_n": 5, "threads": 320, "grouping": 24, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 41, "tile_m": 3, "tile_n": 5, "w": 14, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 38, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 38, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 25, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 34, "tile_m": 1, "tile_n": 10, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 43, "tile_m": 9, "tile_n": 2, "w": 16, "v": 16, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 38, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 40, "tile_m": 3, "tile_n": 5, "w": 10, "v": 38, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 38, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 24, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 38, "tile_m": 3, "tile_n": 6, "w": 16, "v": 16, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 38, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 23, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 41, "tile_m": 3, "tile_n": 6, "w": 16, "v": 16, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 38, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 23, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 36, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 42, "k": 45, "tile_m": 3, "tile_n": 6, "w": 16, "v": 16, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 38, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 448, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 17, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 24, "tile_m": 1, "tile_n": 6, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 38, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 39, "tile_m": 3, "tile_n": 7, "w": 12, "v": 16, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 38, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 38, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 4, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 20, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 4, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 10, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 20, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 31, "tile_m": 5, "tile_n": 1, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 4, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 38, "tile_m": 2, "tile_n": 4, "threads": 224, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 4, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 4, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 192, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 5, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 10, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 5, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 5, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 28, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 5, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 5, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 6, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 6, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 7, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 7, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 7, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 7, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 8, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 8, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 8, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 37, "tile_m": 1, "tile_n": 1, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 8, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 8, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 9, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 10, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 4, "tile_m": 1, "tile_n": 11, "threads": 64, "grouping": 4, "minblocks": 13, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 11, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 11, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 29, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 11, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 11, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 11, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 11, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 12, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 5, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 13, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 13, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 19, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 13, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 28, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 13, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 33, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 13, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 42, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 13, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 13, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 9, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 14, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 18, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 14, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 27, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 14, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 37, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 14, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 14, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 15, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 15, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 21, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 15, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 15, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 32, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 15, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 15, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 15, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 16, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 16, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 16, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 16, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 16, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 16, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 17, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 17, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 19, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 17, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 17, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 42, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 17, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 17, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 18, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 18, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 36, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 18, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 18, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 19, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 20, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 20, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 20, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 20, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 43, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 20, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 20, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 21, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 22, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 23, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 23, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 23, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 28, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 23, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 23, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 24, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 24, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 17, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 24, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 26, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 24, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 24, "k": 44, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 24, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 25, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 26, "k": 26, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 26, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 39, "n": 27, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 13, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 27, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 27, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 27, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 27, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 41, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 27, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 27, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 28, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 29, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 29, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 29, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 34, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 29, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 29, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 29, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 30, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 30, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 30, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 39, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 30, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 30, "k": 44, "tile_m": 10, "tile_n": 4, "w": 8, "v": 26, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "source": "predicted"}, {"m": 39, "n": 30, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 31, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 12, "tile_m": 1, "tile_n": 8, "threads": 160, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 31, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 31, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 31, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 41, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 31, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 31, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 32, "tile_m": 1, "tile_n": 4, "threads": 352, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 32, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 32, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 33, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 33, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 33, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 33, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 35, "tile_m": 2, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 33, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 33, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 34, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 34, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 34, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 34, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 33, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 34, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 40, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 34, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 34, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 38, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 35, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 35, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 36, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 12, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 19, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 36, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 26, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 32, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 36, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 24, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 35, "tile_m": 1, "tile_n": 10, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 42, "tile_m": 6, "tile_n": 3, "w": 18, "v": 8, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 39, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 13, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 20, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 13, "tile_m": 1, "tile_n": 8, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 19, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 41, "tile_m": 3, "tile_n": 6, "w": 16, "v": 16, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 39, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 11, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 22, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 25, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 36, "tile_m": 4, "tile_n": 5, "w": 14, "v": 14, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 39, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 10, "tile_m": 1, "tile_n": 6, "threads": 416, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 24, "tile_m": 1, "tile_n": 6, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 39, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 37, "tile_m": 5, "tile_n": 4, "w": 14, "v": 14, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 39, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 39, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 4, "k": 4, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 5, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 6, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 7, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 8, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 9, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 4, "k": 11, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 12, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 13, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 14, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 15, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 16, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 17, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 18, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 19, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 20, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 4, "k": 21, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 22, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 23, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 24, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 25, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 26, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 27, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 28, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 29, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 30, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 31, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 32, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 33, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 34, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 35, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 36, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 37, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 38, "tile_m": 1, "tile_n": 1, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 4, "k": 39, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 40, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 41, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 42, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 43, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 44, "threads": 160, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 4, "k": 45, "tile_m": 3, "tile_n": 2, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 5, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 5, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 6, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 4, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 6, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 9, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 6, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 20, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 6, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 31, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 6, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 6, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 7, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 7, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 7, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 7, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 37, "tile_m": 1, "tile_n": 1, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 7, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 7, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 7, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 8, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 10, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 9, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 17, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 9, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 9, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 39, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 9, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 9, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 10, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 512, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 10, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 28, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 10, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 37, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 10, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 42, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 10, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 10, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 11, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 12, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 19, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 12, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 36, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 12, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 12, "k": 45, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 13, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 29, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 13, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 13, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 512, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 13, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 38, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 13, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 13, "k": 45, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 14, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 14, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 15, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 15, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 25, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 15, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 15, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 5, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 16, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 16, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 16, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 16, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 42, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 16, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 16, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 8, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 17, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 17, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 26, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 17, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 35, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 17, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 17, "k": 44, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 17, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 18, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 9, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 19, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 19, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 31, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 19, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 19, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 19, "k": 45, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 20, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 20, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 20, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 20, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 32, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 20, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 20, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 21, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 22, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 22, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 22, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 22, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 35, "tile_m": 7, "tile_n": 2, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 22, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 42, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 22, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 22, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 23, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 30, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 23, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 39, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 23, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 23, "k": 44, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 23, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 24, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 25, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 19, "tile_m": 1, "tile_n": 4, "threads": 480, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 25, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 25, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 37, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 25, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 25, "k": 44, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 25, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 40, "n": 26, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 26, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 12, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 26, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 26, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 35, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 26, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 40, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 26, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 26, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 27, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 17, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 28, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 28, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 28, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 28, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 8, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 29, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 29, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 29, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 36, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 29, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 29, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 22, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 30, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 30, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 31, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 32, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 21, "tile_m": 4, "tile_n": 3, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 32, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 32, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 35, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 32, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 32, "k": 44, "tile_m": 10, "tile_n": 4, "w": 8, "v": 16, "threads": 32, "grouping": 16, "minblocks": 8, "algorithm": "largeDB2", "source": "predicted"}, {"m": 40, "n": 32, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 33, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 33, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 20, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 33, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 33, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 34, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 33, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 43, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 33, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 33, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 34, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 11, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 35, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 39, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 35, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 35, "k": 44, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 35, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 13, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 35, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 42, "tile_m": 5, "tile_n": 9, "w": 10, "v": 16, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "source": "predicted"}, {"m": 40, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 13, "tile_m": 1, "tile_n": 8, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 19, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 38, "tile_m": 3, "tile_n": 5, "w": 14, "v": 36, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 40, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 41, "tile_m": 3, "tile_n": 5, "w": 14, "v": 36, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 40, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 11, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 20, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 38, "tile_m": 3, "tile_n": 5, "w": 14, "v": 36, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 40, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 22, "tile_m": 2, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 29, "tile_m": 2, "tile_n": 3, "threads": 288, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 36, "tile_m": 2, "tile_n": 7, "w": 16, "v": 26, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 40, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 43, "tile_m": 3, "tile_n": 6, "w": 10, "v": 36, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 40, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 448, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 19, "tile_m": 2, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 24, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 22, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 14, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 21, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 40, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 43, "tile_m": 3, "tile_n": 6, "w": 10, "v": 36, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 40, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 40, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 4, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 19, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 4, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 24, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 4, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 36, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 4, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 4, "k": 45, "tile_m": 3, "tile_n": 2, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 5, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 7, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 5, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 14, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 5, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 21, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 5, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 28, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 5, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 34, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 5, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 5, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 6, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 11, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 7, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 7, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 7, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 288, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 7, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 7, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 8, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 6, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 9, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 160, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 9, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 9, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 9, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 34, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 9, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 43, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 9, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 9, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 10, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 10, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 38, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 10, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 10, "k": 45, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 11, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 11, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 6, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 4, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 12, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 12, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 12, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 12, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 13, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 9, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 14, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 14, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 31, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 14, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 37, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 14, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 14, "k": 44, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 14, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 11, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 15, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 28, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 15, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 37, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 15, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 15, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 8, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 16, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 16, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 30, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 16, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 39, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 16, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 16, "k": 44, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 16, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 17, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 7, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 18, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 16, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 18, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 18, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 34, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 18, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 18, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 18, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 19, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 19, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 19, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 34, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 19, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 43, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 19, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 19, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 20, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 17, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 20, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 29, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 38, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 20, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 20, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 5, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 21, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 21, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 21, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 21, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 21, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 43, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 21, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 21, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 22, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 23, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 23, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 27, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 23, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 23, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 23, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 23, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 24, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 41, "n": 25, "k": 4, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 32, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 25, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 13, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 25, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 22, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 25, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 25, "k": 32, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 25, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 41, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 25, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 25, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 26, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 26, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 26, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 43, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 26, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 26, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 27, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 28, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 29, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 30, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 30, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 30, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 43, "tile_m": 7, "tile_n": 6, "w": 12, "v": 22, "threads": 32, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "source": "predicted"}, {"m": 41, "n": 30, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 30, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 31, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 31, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 31, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 39, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 31, "k": 40, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 31, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 31, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 32, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 20, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 32, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 32, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 32, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 32, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 33, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 34, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 14, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 34, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 19, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 5, "minblocks": 1, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 34, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 34, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 33, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 34, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 42, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 34, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 34, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 8, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 35, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 31, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 35, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 36, "tile_m": 1, "tile_n": 5, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 35, "k": 45, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 36, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 416, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 23, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 28, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 37, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 39, "tile_m": 3, "tile_n": 5, "w": 14, "v": 36, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 41, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 14, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 24, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 43, "tile_m": 4, "tile_n": 5, "w": 14, "v": 16, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 41, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 11, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 38, "tile_m": 4, "tile_n": 4, "w": 14, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 41, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 14, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 21, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 35, "tile_m": 4, "tile_n": 4, "w": 14, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 41, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 42, "tile_m": 4, "tile_n": 4, "w": 14, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 41, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 11, "tile_m": 1, "tile_n": 5, "threads": 512, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 41, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 39, "tile_m": 3, "tile_n": 6, "w": 10, "v": 36, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 41, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 41, "n": 45, "k": 44, "tile_m": 3, "tile_n": 6, "w": 10, "v": 36, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 41, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 4, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 4, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 9, "tile_m": 2, "tile_n": 5, "threads": 64, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 5, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 18, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 5, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 27, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 5, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 36, "tile_m": 1, "tile_n": 5, "threads": 320, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 5, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 5, "k": 45, "tile_m": 1, "tile_n": 1, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 6, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 4, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 6, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 11, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 6, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 16, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 6, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 25, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 6, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 32, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 6, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 6, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 6, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 64, "grouping": 3, "minblocks": 11, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 7, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 7, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 31, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 7, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 35, "tile_m": 1, "tile_n": 5, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 7, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 7, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 7, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 34, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 8, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 5, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 9, "k": 10, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 4, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 9, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 23, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 9, "k": 28, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 33, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 9, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 10, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 26, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 29, "tile_m": 1, "tile_n": 5, "threads": 352, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 10, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 38, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 10, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 10, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 11, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 11, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 11, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 11, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 11, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 12, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 12, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 12, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 12, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 35, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 12, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 12, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 12, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 33, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 13, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 14, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 15, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 15, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 37, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 15, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 15, "k": 44, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 15, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 16, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 16, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 16, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 33, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 16, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 16, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 16, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 17, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 17, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 17, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 17, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 6, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 18, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 18, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 18, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 34, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 18, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 41, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 18, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 18, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 19, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 20, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 21, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 21, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 21, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 38, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 21, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 21, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 22, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 22, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 22, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 35, "tile_m": 7, "tile_n": 2, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 22, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 22, "k": 44, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 22, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 6, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 23, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 23, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 23, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 23, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 42, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 23, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 23, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 26, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 24, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 42, "n": 25, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 25, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 4, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 32, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 26, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 13, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 26, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 19, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 26, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 32, "tile_m": 1, "tile_n": 8, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 26, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 41, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 26, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 26, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 7, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 27, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 27, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 17, "tile_m": 1, "tile_n": 3, "threads": 480, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 27, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 27, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 35, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 27, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 27, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 27, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 28, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 28, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 28, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 28, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 33, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 28, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 28, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 29, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 30, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 31, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 31, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 31, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 35, "tile_m": 1, "tile_n": 4, "threads": 352, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 31, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 42, "tile_m": 4, "tile_n": 4, "w": 20, "v": 14, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 42, "n": 31, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 31, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 10, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 32, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 32, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 32, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 36, "tile_m": 1, "tile_n": 4, "threads": 352, "grouping": 5, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 32, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 32, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 33, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 448, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 33, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 33, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 31, "tile_m": 1, "tile_n": 12, "threads": 128, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 33, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 33, "tile_m": 1, "tile_n": 11, "threads": 128, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 33, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 33, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 34, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 34, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 34, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 34, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 34, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 35, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 23, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 23, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 37, "tile_m": 3, "tile_n": 5, "w": 14, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 42, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 13, "tile_m": 1, "tile_n": 8, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 18, "tile_m": 1, "tile_n": 11, "threads": 192, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 27, "tile_m": 1, "tile_n": 8, "threads": 320, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 41, "tile_m": 3, "tile_n": 5, "w": 10, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 42, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 36, "tile_m": 3, "tile_n": 5, "w": 14, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 42, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 40, "k": 45, "tile_m": 3, "tile_n": 5, "w": 14, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 42, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 38, "tile_m": 4, "tile_n": 4, "w": 14, "v": 16, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 42, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 15, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 42, "k": 16, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 12, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 27, "tile_m": 1, "tile_n": 8, "threads": 320, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 34, "tile_m": 3, "tile_n": 6, "w": 10, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 42, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 41, "tile_m": 3, "tile_n": 6, "w": 10, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 42, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 352, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 17, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 42, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 39, "tile_m": 3, "tile_n": 6, "w": 12, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 42, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 44, "k": 44, "tile_m": 3, "tile_n": 6, "w": 10, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 42, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 42, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 4, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 64, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 4, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 22, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 4, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 29, "tile_m": 7, "tile_n": 1, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 4, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 43, "tile_m": 3, "tile_n": 2, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 4, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 4, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 12, "tile_m": 2, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 5, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 15, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 21, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 5, "k": 22, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 29, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 5, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 35, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 5, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 5, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 42, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 5, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 4, "minblocks": 14, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 6, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 19, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 6, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 288, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 6, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 6, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 7, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 6, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 7, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 8, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 13, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 16, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 8, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 30, "tile_m": 1, "tile_n": 1, "threads": 512, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 8, "k": 31, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 34, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 8, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 41, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 43, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 8, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 8, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 6, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 9, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 9, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 9, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 29, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 9, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 384, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 9, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 9, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 9, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 8, "tile_m": 1, "tile_n": 10, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 10, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 13, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 19, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 10, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 33, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 39, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 10, "k": 40, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 10, "k": 44, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 10, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 11, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 12, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 96, "grouping": 4, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 13, "k": 6, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 13, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 15, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 13, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 29, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 13, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 33, "tile_m": 2, "tile_n": 4, "threads": 192, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 13, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 13, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 42, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 13, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 14, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 21, "tile_m": 1, "tile_n": 4, "threads": 480, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 14, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 14, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 38, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 14, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 14, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 15, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 11, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 15, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 18, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 15, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 21, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 15, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 38, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 43, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 15, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 15, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 16, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 16, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 16, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 34, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 16, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 41, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 16, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 16, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 5, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 12, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 26, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 17, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 18, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 4, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 19, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 19, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 22, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 29, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 19, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 32, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 19, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 6, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 20, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 20, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 20, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 31, "tile_m": 2, "tile_n": 4, "threads": 160, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 20, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 34, "tile_m": 2, "tile_n": 7, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 20, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 41, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 20, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 20, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 26, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 21, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 21, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 28, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 21, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 33, "tile_m": 2, "tile_n": 7, "threads": 128, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 21, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 21, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 21, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 9, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 22, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 18, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 27, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 39, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 44, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 22, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 23, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 43, "n": 24, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 24, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 24, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 24, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 32, "tile_m": 2, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 24, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 41, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 24, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 24, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 8, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 25, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 17, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 25, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 25, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 36, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 25, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 25, "k": 45, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 26, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 26, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 19, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 26, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 26, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 33, "tile_m": 1, "tile_n": 8, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 26, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 26, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 27, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 28, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 29, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 29, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 21, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 29, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 28, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 29, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 35, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 29, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 42, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 29, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 29, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 30, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 30, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 19, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 30, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 30, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 33, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 30, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 30, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 21, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 31, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 28, "tile_m": 2, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 31, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 31, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 41, "tile_m": 4, "tile_n": 4, "w": 20, "v": 14, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 43, "n": 31, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 31, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 32, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 32, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 19, "tile_m": 1, "tile_n": 9, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 32, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 32, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 33, "tile_m": 1, "tile_n": 8, "threads": 352, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 32, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 40, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 32, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 32, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 33, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 34, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 9, "tile_m": 1, "tile_n": 6, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 35, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 35, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 36, "tile_m": 3, "tile_n": 5, "w": 12, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 43, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 35, "k": 45, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 36, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 36, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 19, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 36, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 26, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 33, "tile_m": 1, "tile_n": 12, "threads": 160, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 36, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 40, "tile_m": 3, "tile_n": 5, "w": 12, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 43, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 37, "k": 8, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 17, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 26, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 37, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 41, "tile_m": 3, "tile_n": 5, "w": 14, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 43, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 37, "tile_m": 3, "tile_n": 5, "w": 14, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 43, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 12, "tile_m": 1, "tile_n": 8, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 17, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 26, "tile_m": 1, "tile_n": 8, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 40, "tile_m": 3, "tile_n": 5, "w": 10, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 43, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 448, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 24, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 38, "tile_m": 3, "tile_n": 6, "w": 10, "v": 30, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 43, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 13, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 22, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 42, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 41, "tile_m": 3, "tile_n": 6, "w": 10, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 43, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 19, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 26, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 43, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 37, "tile_m": 3, "tile_n": 6, "w": 10, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 43, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 43, "n": 45, "k": 44, "tile_m": 3, "tile_n": 6, "w": 10, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 43, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 4, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 4, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 4, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 5, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 6, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 7, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 8, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 9, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 10, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 11, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 12, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 13, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 14, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 15, "tile_m": 1, "tile_n": 4, "threads": 96, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 5, "k": 16, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 17, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 18, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 19, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 20, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 21, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 22, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 5, "k": 23, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 24, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 25, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 26, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 27, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 28, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 29, "tile_m": 1, "tile_n": 5, "threads": 160, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 5, "k": 30, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 31, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 32, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 33, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 34, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 5, "k": 36, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 37, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 38, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 39, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 40, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 41, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 5, "k": 43, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 44, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 5, "k": 45, "threads": 224, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 5, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 4, "minblocks": 15, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 6, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 7, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 160, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 6, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 14, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 19, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 6, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 21, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 256, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 6, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 28, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 6, "k": 34, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 41, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 6, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 7, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 4, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 5, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 6, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 8, "k": 7, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 8, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 9, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 10, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 11, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 12, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 13, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 8, "k": 14, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 15, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 8, "k": 17, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 18, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 19, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 20, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 21, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 22, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 23, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 24, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 25, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 26, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 27, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 28, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 29, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 30, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 31, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 8, "k": 32, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 33, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 34, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 8, "k": 35, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 36, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 37, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 38, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 39, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 40, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 41, "tile_m": 2, "tile_n": 3, "threads": 160, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 8, "k": 42, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 43, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 44, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 8, "k": 45, "threads": 352, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 16, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 27, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 38, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 41, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 9, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 4, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 5, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 6, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 7, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 8, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 9, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 10, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 11, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 12, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 10, "k": 14, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 15, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 16, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 17, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 18, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 10, "k": 20, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 21, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 22, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 23, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 24, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 25, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 10, "k": 27, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 28, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 29, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 30, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 31, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 32, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 33, "tile_m": 2, "tile_n": 4, "threads": 192, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 10, "k": 34, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 35, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 36, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 37, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 38, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 39, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 10, "k": 41, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 42, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 43, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 44, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 10, "k": 45, "threads": 448, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 7, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 11, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 14, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 17, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 288, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 11, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 24, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 29, "tile_m": 1, "tile_n": 6, "threads": 96, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 11, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 35, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 42, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 11, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 12, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 10, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 20, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 12, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 29, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 30, "tile_m": 1, "tile_n": 4, "threads": 224, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 12, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 33, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 34, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 12, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 43, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 12, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 12, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 4, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 5, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 6, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 10, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 13, "k": 7, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 8, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 9, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 10, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 11, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 12, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 13, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 14, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 13, "k": 16, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 17, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 18, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 19, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 20, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 21, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 22, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 23, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 24, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 25, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 26, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 27, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 28, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 29, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 13, "k": 30, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 31, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 32, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 33, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 13, "k": 34, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 35, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 36, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 37, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 38, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 39, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 40, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 41, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 13, "k": 43, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 44, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 13, "k": 45, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 5, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 14, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 32, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 41, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 14, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 4, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 5, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 6, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 7, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 8, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 9, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 10, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 15, "k": 12, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 13, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 14, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 15, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 16, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 17, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 18, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 19, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 20, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 21, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 15, "k": 22, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 23, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 24, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 25, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 26, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 27, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 28, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 29, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 30, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 31, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 32, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 33, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 34, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 35, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 36, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 37, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 38, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 15, "k": 39, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 40, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 41, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 42, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 43, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 44, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 15, "k": 45, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 6, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 16, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 8, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 288, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 16, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 16, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 22, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 29, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 16, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 31, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 34, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 16, "k": 35, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 43, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 16, "k": 44, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 16, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 5, "tile_m": 1, "tile_n": 9, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 17, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 17, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 17, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 30, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 17, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 17, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 40, "tile_m": 2, "tile_n": 4, "threads": 128, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 17, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 17, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 4, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 5, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 6, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 7, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 8, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 9, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 10, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 11, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 12, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 13, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 14, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 15, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 16, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 17, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 18, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 19, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 20, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 21, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 22, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 23, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 24, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 25, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 26, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 27, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 28, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 29, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 30, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 31, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 32, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 33, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 34, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 35, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 36, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 37, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 38, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 39, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 40, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 41, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 42, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 43, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 44, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 18, "k": 45, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 7, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 8, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 19, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 21, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 30, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 35, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 19, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 4, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 5, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 6, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 7, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 8, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 9, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 10, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 11, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 12, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 13, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 14, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 15, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 16, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 17, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 18, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 19, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 20, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 21, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 22, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 23, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 24, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 25, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 26, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 27, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 28, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 29, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 30, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 31, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 32, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 33, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 34, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 35, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 36, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 37, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 38, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 39, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 40, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 41, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 42, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 43, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 44, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 20, "k": 45, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 6, "tile_m": 1, "tile_n": 11, "threads": 160, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 21, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 21, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 31, "tile_m": 2, "tile_n": 4, "threads": 160, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 21, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 21, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 21, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 21, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 5, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 8, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 22, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 12, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 480, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 22, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 23, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 26, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 22, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 30, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 32, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 38, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 22, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 22, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 4, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 5, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 6, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 7, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 8, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 9, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 10, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 11, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 12, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 13, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 14, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 15, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 16, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 17, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 18, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 19, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 20, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 21, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 22, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 23, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 24, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 25, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 26, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 27, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 28, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 29, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 30, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 31, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 32, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 33, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 34, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 35, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 36, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 37, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 38, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 39, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 40, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 41, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 42, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 43, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 44, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 23, "k": 45, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 44, "n": 24, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 15, "tile_m": 1, "tile_n": 5, "threads": 224, "grouping": 4, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 24, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 24, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 29, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 24, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 43, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 24, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 24, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 25, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 26, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 29, "tile_m": 2, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 26, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 39, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 26, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 26, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 576, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 4, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 27, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 27, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 27, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 27, "tile_m": 2, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 27, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 32, "tile_m": 2, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 27, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 41, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 27, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 27, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 9, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 28, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 18, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 28, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 27, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 28, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 37, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 28, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 28, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 29, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 29, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 22, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 29, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 31, "tile_m": 2, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 29, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 40, "tile_m": 1, "tile_n": 6, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 29, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 29, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 30, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 672, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 5, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 31, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 18, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 31, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 31, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 32, "tile_m": 1, "tile_n": 4, "threads": 352, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 31, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 41, "tile_m": 2, "tile_n": 3, "threads": 256, "grouping": 26, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 31, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 31, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 9, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 32, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 18, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 32, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 27, "tile_m": 2, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 32, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 32, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 448, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 33, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 18, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 33, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 33, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 33, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 33, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 42, "tile_m": 4, "tile_n": 5, "w": 14, "v": 14, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 44, "n": 34, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 34, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 33, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 40, "tile_m": 4, "tile_n": 5, "w": 14, "v": 14, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 44, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 35, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 800, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 11, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 18, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 25, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 22, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 37, "tile_m": 3, "tile_n": 5, "w": 14, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 44, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 42, "tile_m": 3, "tile_n": 5, "w": 14, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 44, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 416, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 38, "tile_m": 3, "tile_n": 5, "w": 14, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 44, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 896, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 40, "k": 45, "tile_m": 3, "tile_n": 5, "w": 10, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 44, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 352, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 23, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 42, "k": 45, "tile_m": 3, "tile_n": 6, "w": 10, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 44, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 15, "tile_m": 1, "tile_n": 9, "threads": 224, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 17, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 35, "tile_m": 3, "tile_n": 6, "w": 10, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 44, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 40, "tile_m": 3, "tile_n": 6, "w": 10, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 44, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 11, "tile_m": 1, "tile_n": 5, "threads": 512, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 16, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 25, "tile_m": 1, "tile_n": 9, "threads": 352, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 39, "tile_m": 3, "tile_n": 6, "w": 10, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 44, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 11, "tile_m": 1, "tile_n": 5, "threads": 512, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 45, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 16, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 45, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 352, "grouping": 26, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 44, "n": 45, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 39, "tile_m": 3, "tile_n": 6, "w": 10, "v": 34, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 44, "n": 45, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 44, "n": 45, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 1024, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 4, "k": 4, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 5, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 6, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 7, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 8, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 9, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 10, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 11, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 12, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 13, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 14, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 15, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 16, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 17, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 18, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 19, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 20, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 21, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 22, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 23, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 24, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 25, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 26, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 27, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 28, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 29, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 30, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 31, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 32, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 33, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 34, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 35, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 36, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 37, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 38, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 39, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 40, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 41, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 42, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 43, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 44, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 4, "k": 45, "threads": 192, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 4, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 5, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 6, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 7, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 8, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 9, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 10, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 11, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 5, "k": 12, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 13, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 14, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 15, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 96, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 5, "k": 17, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 18, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 19, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 20, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 21, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 22, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 23, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 24, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 25, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 4, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 5, "k": 26, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 27, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 28, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 29, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 30, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 31, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 32, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 33, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 34, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 35, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 36, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 37, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 38, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 39, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 40, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 41, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 42, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 43, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 44, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 5, "k": 45, "threads": 256, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 4, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 5, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 6, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 7, "tile_m": 1, "tile_n": 6, "threads": 64, "grouping": 3, "minblocks": 16, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 6, "k": 8, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 9, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 10, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 11, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 12, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 13, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 128, "grouping": 3, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 6, "k": 15, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 16, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 17, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 18, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 19, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 20, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 6, "k": 22, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 23, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 24, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 25, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 26, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 27, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 28, "tile_m": 1, "tile_n": 1, "threads": 480, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 6, "k": 29, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 30, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 31, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 32, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 33, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 6, "k": 35, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 36, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 37, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 38, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 39, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 40, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 320, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 6, "k": 42, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 43, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 44, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 6, "k": 45, "threads": 288, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 4, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 5, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 6, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 7, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 8, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 9, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 10, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 11, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 12, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 13, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 14, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 15, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 16, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 17, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 18, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 19, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 20, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 21, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 22, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 23, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 24, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 25, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 26, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 27, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 28, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 29, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 30, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 31, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 32, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 33, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 34, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 35, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 36, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 37, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 38, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 39, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 40, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 41, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 42, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 43, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 44, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 7, "k": 45, "threads": 320, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 4, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 5, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 8, "k": 6, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 7, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 8, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 9, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 10, "tile_m": 1, "tile_n": 8, "threads": 160, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 8, "k": 11, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 12, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 13, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 14, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 15, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 16, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 17, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 18, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 19, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 20, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 21, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 22, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 23, "tile_m": 1, "tile_n": 5, "threads": 128, "grouping": 3, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 8, "k": 24, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 25, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 26, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 27, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 28, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 8, "k": 29, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 30, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 31, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 32, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 33, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 8, "k": 34, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 35, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 36, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 37, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 38, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 39, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 40, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 41, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 42, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 43, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 44, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 8, "k": 45, "threads": 384, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 4, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 5, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 6, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 7, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 8, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 9, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 10, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 11, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 12, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 13, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 14, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 15, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 16, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 29, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 9, "k": 17, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 18, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 19, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 20, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 21, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 22, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 23, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 24, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 25, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 26, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 27, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 9, "k": 28, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 29, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 30, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 31, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 32, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 33, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 34, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 35, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 36, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 37, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 38, "tile_m": 1, "tile_n": 9, "threads": 160, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 9, "k": 39, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 40, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 41, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 9, "k": 42, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 43, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 44, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 9, "k": 45, "threads": 416, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 4, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 5, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 6, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 7, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 8, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 9, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 10, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 11, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 12, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 13, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 14, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 15, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 16, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 17, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 18, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 19, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 20, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 21, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 22, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 23, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 24, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 25, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 26, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 27, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 28, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 29, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 30, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 31, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 32, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 33, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 34, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 35, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 36, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 37, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 38, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 39, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 40, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 41, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 42, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 43, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 44, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 10, "k": 45, "threads": 480, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 4, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 5, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 6, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 7, "tile_m": 1, "tile_n": 9, "threads": 128, "grouping": 4, "minblocks": 9, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 11, "k": 8, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 9, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 10, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 11, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 12, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 13, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 29, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 11, "k": 15, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 16, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 17, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 11, "k": 18, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 19, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 20, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 21, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 22, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 23, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 384, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 11, "k": 25, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 26, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 27, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 28, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 29, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 30, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 31, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 32, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 33, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 34, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 35, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 11, "k": 36, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 37, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 38, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 39, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 40, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 41, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 42, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 11, "k": 43, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 44, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 11, "k": 45, "threads": 512, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 4, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 5, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 6, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 7, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 8, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 9, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 160, "grouping": 29, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 12, "k": 11, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 12, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 13, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 14, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 15, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 16, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 17, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 18, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 19, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 480, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 12, "k": 21, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 22, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 23, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 24, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 25, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 26, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 27, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 28, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 29, "tile_m": 1, "tile_n": 3, "threads": 224, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 12, "k": 30, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 31, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 32, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 33, "tile_m": 1, "tile_n": 6, "threads": 160, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 12, "k": 34, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 35, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 36, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 37, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 38, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 39, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 40, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 41, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 42, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 43, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 44, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 12, "k": 45, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 4, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 5, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 6, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 7, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 8, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 9, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 10, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 11, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 12, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 13, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 14, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 15, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 16, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 17, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 18, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 19, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 20, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 21, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 22, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 23, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 24, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 25, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 26, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 27, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 28, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 29, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 30, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 31, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 32, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 33, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 34, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 35, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 36, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 37, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 38, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 39, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 40, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 41, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 42, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 43, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 44, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 13, "k": 45, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 4, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 5, "tile_m": 1, "tile_n": 8, "threads": 96, "grouping": 3, "minblocks": 12, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 14, "k": 6, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 7, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 8, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 9, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 10, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 11, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 12, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 13, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 14, "k": 15, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 16, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 17, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 18, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 19, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 20, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 21, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 22, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 23, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 24, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 25, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 26, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 27, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 28, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 29, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 30, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 31, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 14, "k": 33, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 34, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 35, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 36, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 37, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 38, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 39, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 40, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 41, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 14, "k": 42, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 43, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 44, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 14, "k": 45, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 4, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 5, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 6, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 7, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 8, "tile_m": 1, "tile_n": 8, "threads": 128, "grouping": 3, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 15, "k": 9, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 10, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 11, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 12, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 13, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 14, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 15, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 16, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 17, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 18, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 19, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 20, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 21, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 15, "k": 23, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 24, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 25, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 26, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 27, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 28, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 29, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 30, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 15, "k": 32, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 33, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 34, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 35, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 15, "k": 36, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 37, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 38, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 39, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 40, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 41, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 42, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 43, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 15, "k": 44, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 15, "k": 45, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 4, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 5, "tile_m": 1, "tile_n": 4, "threads": 192, "grouping": 5, "minblocks": 7, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 16, "k": 6, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 7, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 8, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 9, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 10, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 11, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 12, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 16, "k": 13, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 14, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 15, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 16, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 17, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 18, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 19, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 20, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 21, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 22, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 23, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 24, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 25, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 26, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 16, "k": 27, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 28, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 29, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 30, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 31, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 32, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 33, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 34, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 35, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 36, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 37, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 38, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 39, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 40, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 41, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 42, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 43, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 44, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 16, "k": 45, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 4, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 5, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 6, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 7, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 8, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 9, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 10, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 11, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 12, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 13, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 14, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 15, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 16, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 17, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 18, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 19, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 20, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 21, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 22, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 23, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 24, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 25, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 26, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 27, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 28, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 29, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 30, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 31, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 32, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 33, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 34, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 35, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 36, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 37, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 38, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 39, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 40, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 41, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 42, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 43, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 44, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 17, "k": 45, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 4, "tile_m": 1, "tile_n": 5, "threads": 192, "grouping": 5, "minblocks": 8, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 18, "k": 5, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 6, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 7, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 8, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 9, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 10, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 11, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 12, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 13, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 14, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 15, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 16, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 17, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 18, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 19, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 20, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 21, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 22, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 18, "k": 23, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 24, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 25, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 26, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 27, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 28, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 29, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 18, "k": 30, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 31, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 32, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 18, "k": 33, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 34, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 35, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 36, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 37, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 38, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 39, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 40, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 41, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 42, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 43, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 44, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 18, "k": 45, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 4, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 5, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 6, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 7, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 19, "k": 8, "tile_m": 1, "tile_n": 4, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 19, "k": 9, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 10, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 11, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 12, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 13, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 14, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 15, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 16, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 17, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 18, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 19, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 20, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 21, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 19, "k": 22, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 23, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 24, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 25, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 26, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 27, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 28, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 29, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 19, "k": 31, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 32, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 33, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 34, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 35, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 19, "k": 36, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 37, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 38, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 39, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 40, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 41, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 42, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 43, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 44, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 19, "k": 45, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 4, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 5, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 6, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 7, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 8, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 9, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 10, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 11, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 12, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 13, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 14, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 15, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 16, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 17, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 18, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 19, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 20, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 21, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 22, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 23, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 24, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 25, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 26, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 27, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 28, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 29, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 30, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 31, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 32, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 33, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 34, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 35, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 36, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 37, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 38, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 39, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 40, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 41, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 42, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 43, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 44, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 20, "k": 45, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 4, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 5, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 6, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 7, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 8, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 21, "k": 10, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 11, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 12, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 13, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 14, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 15, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 16, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 17, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 18, "tile_m": 1, "tile_n": 7, "threads": 160, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 21, "k": 19, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 20, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 21, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 22, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 23, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 24, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 25, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 26, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 27, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 21, "k": 28, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 29, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 30, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 31, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 32, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 33, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 34, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 35, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 36, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 37, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 38, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 39, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 21, "k": 40, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 41, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 42, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 43, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 21, "k": 44, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 21, "k": 45, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 4, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 5, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 22, "k": 6, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 7, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 8, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 9, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 10, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 11, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 288, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 22, "k": 13, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 14, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 15, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 16, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 17, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 18, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 19, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 20, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 21, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 22, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 22, "k": 24, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 25, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 26, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 27, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 28, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 29, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 22, "k": 31, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 32, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 22, "k": 33, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 34, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 35, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 36, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 37, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 38, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 39, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 40, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 41, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 42, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 43, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 44, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 22, "k": 45, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "tiny", "source": "predicted"}, {"m": 45, "n": 23, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 23, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 7, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 24, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 24, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 21, "tile_m": 1, "tile_n": 5, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 24, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 26, "tile_m": 1, "tile_n": 6, "threads": 192, "grouping": 3, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 24, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 35, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 24, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 24, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 24, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 544, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 11, "tile_m": 1, "tile_n": 4, "threads": 352, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 25, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 480, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 25, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 36, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 25, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 25, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 26, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 608, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 8, "tile_m": 1, "tile_n": 7, "threads": 224, "grouping": 5, "minblocks": 5, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 27, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 23, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 27, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 27, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 36, "tile_m": 1, "tile_n": 3, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 27, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 27, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 4, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 5, "minblocks": 6, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 28, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 13, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 28, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 26, "tile_m": 1, "tile_n": 6, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 28, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 35, "tile_m": 1, "tile_n": 4, "threads": 320, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 28, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 40, "tile_m": 1, "tile_n": 7, "threads": 192, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 28, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 28, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 640, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 29, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 12, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 30, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 21, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 30, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 30, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 30, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 39, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 30, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 30, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 10, "tile_m": 1, "tile_n": 6, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 31, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 19, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 31, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 31, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 38, "tile_m": 1, "tile_n": 4, "threads": 384, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 31, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 31, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 14, "tile_m": 1, "tile_n": 4, "threads": 448, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 32, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 32, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 32, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 32, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 43, "tile_m": 4, "tile_n": 4, "w": 20, "v": 14, "threads": 96, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 45, "n": 32, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 32, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 736, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 34, "tile_m": 1, "tile_n": 4, "threads": 416, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 33, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 43, "tile_m": 3, "tile_n": 5, "w": 14, "v": 32, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 45, "n": 33, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 33, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 10, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 34, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 17, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 34, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 24, "tile_m": 1, "tile_n": 7, "threads": 256, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 34, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 39, "tile_m": 3, "tile_n": 5, "w": 12, "v": 32, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 45, "n": 34, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 34, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 768, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 10, "tile_m": 1, "tile_n": 4, "threads": 480, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 35, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 19, "tile_m": 1, "tile_n": 9, "threads": 192, "grouping": 24, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 35, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 35, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 36, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 832, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 14, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 37, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 23, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 37, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 28, "tile_m": 1, "tile_n": 7, "threads": 288, "grouping": 3, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 37, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 34, "tile_m": 3, "tile_n": 5, "w": 14, "v": 20, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 45, "n": 37, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 43, "tile_m": 3, "tile_n": 5, "w": 14, "v": 32, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 45, "n": 37, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 37, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 10, "tile_m": 1, "tile_n": 6, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 38, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 17, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 38, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 24, "tile_m": 1, "tile_n": 8, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 38, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 38, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 864, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 39, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 14, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 40, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 16, "tile_m": 1, "tile_n": 5, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 40, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 25, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 24, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 40, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 34, "tile_m": 3, "tile_n": 5, "w": 14, "v": 32, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 45, "n": 40, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 43, "tile_m": 3, "tile_n": 5, "w": 10, "v": 32, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 45, "n": 40, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 40, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 928, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 5, "minblocks": 4, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 41, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 9, "tile_m": 1, "tile_n": 5, "threads": 416, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 41, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 20, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 4, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 41, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 31, "tile_m": 1, "tile_n": 7, "threads": 320, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 41, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 34, "tile_m": 3, "tile_n": 5, "w": 12, "v": 40, "threads": 160, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 45, "n": 41, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 41, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 42, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 960, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 6, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 10, "tile_m": 1, "tile_n": 5, "threads": 480, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 43, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 15, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 16, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 20, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 43, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 25, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 34, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 39, "tile_m": 3, "tile_n": 6, "w": 10, "v": 32, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 45, "n": 43, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 43, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 43, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 4, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 5, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 6, "tile_m": 1, "tile_n": 7, "threads": 384, "grouping": 5, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 44, "k": 7, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 8, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 9, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 10, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 11, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 12, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 13, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 14, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 15, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 44, "k": 16, "tile_m": 1, "tile_n": 9, "threads": 256, "grouping": 3, "minblocks": 3, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 44, "k": 17, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 18, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 19, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 20, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 21, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 22, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 23, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 24, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 25, "tile_m": 1, "tile_n": 9, "threads": 352, "grouping": 4, "minblocks": 2, "algorithm": "medium", "source": "predicted"}, {"m": 45, "n": 44, "k": 26, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 27, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 28, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 29, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 30, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 31, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 32, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 33, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 34, "tile_m": 3, "tile_n": 6, "w": 10, "v": 32, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 45, "n": 44, "k": 35, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 36, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 37, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 38, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 39, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 40, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 41, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 42, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 43, "tile_m": 3, "tile_n": 6, "w": 10, "v": 32, "threads": 128, "grouping": 16, "minblocks": 4, "algorithm": "largeDB2", "source": "predicted"}, {"m": 45, "n": 44, "k": 44, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 44, "k": 45, "tile_m": 1, "tile_n": 2, "threads": 992, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 4, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 5, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 6, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 7, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 8, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 9, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 10, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 11, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 12, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 13, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 14, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 15, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 16, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 17, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 18, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 19, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 20, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 21, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 22, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 23, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 24, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 25, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 26, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 27, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 28, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 29, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 30, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 31, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 32, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 33, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 34, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 35, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 36, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 37, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 38, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 39, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 40, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 41, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 42, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 43, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 44, "tile_m": 1, "tile_n": 3, "threads": 704, "grouping": 2, "minblocks": 1, "algorithm": "small", "source": "predicted"}, {"m": 45, "n": 45, "k": 45, "tile_m": 3, "tile_n": 8, "w": 16, "v": 32, "threads": 96, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 3610.99, "source": "autotuned"}, {"m": 55, "n": 55, "k": 32, "tile_m": 2, "tile_n": 7, "threads": 256, "grouping": 5, "minblocks": 2, "algorithm": "medium", "perf": 3960.66, "source": "autotuned"}, {"m": 56, "n": 56, "k": 56, "tile_m": 7, "tile_n": 4, "w": 20, "v": 44, "threads": 128, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 4524.45, "source": "autotuned"}, {"m": 64, "n": 64, "k": 64, "tile_m": 2, "tile_n": 8, "w": 24, "v": 56, "threads": 256, "grouping": 16, "minblocks": 2, "algorithm": "largeDB2", "perf": 5272.92, "source": "autotuned"}, {"m": 72, "n": 72, "k": 72, "tile_m": 5, "tile_n": 9, "w": 12, "v": 36, "threads": 128, "grouping": 16, "minblocks": 1, "algorithm": "largeDB2", "perf": 5054.05, "source": "autotuned"} ] ================================================ FILE: src/acc/libsmm_acc/parameters_utils.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #ifndef PARAMETERS_UTILS_H #define PARAMETERS_UTILS_H #include #include #include #include typedef std::array Triplet; typedef std::array KernelParameters; namespace std { template<> struct hash { size_t operator()(std::array const& k) const noexcept { /* the hash of an int is the int itself (perfect hash) */ size_t seed = k[0]; /* then mix the other hashes into it, see also boost::hash_combine */ seed ^= static_cast(k[1]) + 0x9e3779b9 + (seed << 6) + (seed >> 2); seed ^= static_cast(k[2]) + 0x9e3779b9 + (seed << 6) + (seed >> 2); return seed; } }; } // namespace std inline void get_libsmm_acc_triplets(std::vector& v, std::unordered_map const& ht) { for (auto it = ht.begin(); it != ht.end(); ++it) v.push_back(it->first); } #endif /*PARAMETERS_UTILS_H*/ ================================================ FILE: src/acc/libsmm_acc/tune/.gitignore ================================================ tune_*/ ================================================ FILE: src/acc/libsmm_acc/tune/README.md ================================================ # Auto-tuning Procedure for Finding Optimal CUDA/HIP Kernel Parameters in `libsmm_acc` The performance of the matrix-matrix multiplication kernels is highly dependent on the choice of algorithm and parameters. This is why auto-tuning is used to find optimal kernel parameters. --- ### Requirements Python version required: `python 3.6+` If you are about to autotune parameters for a new GPU (i.e. a GPU for which there are no auto-tuned parameters yet), please first follow [the instructions for a new GPU](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/README.md#adding-support-for-a-new-gpu-card). Install all python packages required (if you do not want this project's requirements to interfere with your other Python projects, consider doing so in a [virtual environment](https://docs.python.org/3/tutorial/venv.html)), using ```bash pip install -r requirements.txt ``` --- ### Auto-tuning procedure #### 1. Go to the `libsmm_acc/tune` directory ```bash $ cd dbcsr/src/acc/libsmm_acc/tune ``` The `parameters.h` file (a C++ header file generated from the JSON record of multiplication kernels and their optimal parameters) is needed for the auto-tuning procedure. One can copy it over from a build directory for example, as follows: ```bash $ cp ~/dbcsr/build_dir/src/acc/libsmm_acc/parameters.h ../ ``` #### 2. Adapt `tune_setup.py` to your environment The `tune_setup.py` script generates job files. You have to adapt the script to the environment of your supercomputer and your personal settings. ``` ... def gen_jobfile(outdir, m, n, k): ... output = "#!/bin/bash -l\n" output += "#SBATCH --nodes=%d\n" % num_nodes output += "#SBATCH --ntasks-per-core=1\n" output += "#SBATCH --ntasks-per-node=1\n" output += "#SBATCH --cpus-per-task=" + "%d\n" % cpus_per_node output += "#SBATCH --time=%s\n" % time output += "#SBATCH --partition=normal\n" output += "#SBATCH --constraint=gpu\n" output += "\n" output += "source ${MODULESHOME}/init/sh;\n" output += "module load daint-gpu\n" output += "module unload PrgEnv-cray\n" output += "module load PrgEnv-gnu\n" if compiler == "nvcc": output += "module load cudatoolkit/8.0.61_2.4.9-6.0.7.0_17.1__g899857c\n" else: # i.e. compiler = hipcc output += "module load hip\n" output += "module list\n" output += "export CRAY_CUDA_MPS=1\n" output += "cd $SLURM_SUBMIT_DIR \n" output += "\n" output += "date\n" ... ... ``` #### 3. Run the script `tune_setup.py` ##### Script arguments Specify which GPU you are auto-tuning for by passing the appropriate `parameters_GPU.json` file as an argument with `-p/--params`. Specify which compiler to use for compiling kernel code by passing `nvcc` or `hipcc` as an argument with `-b/--compiler`. More arguments can be set, run ```bash $ ./tune_setup.py --help ``` for more information. ##### Script positional arguments (block sizes to autotune) In addition, the script takes as arguments the block sizes you want to add to `libsmm_acc`. You can specify these as a list of integers or provide the parameter file of a different GPU from which to read the block sizes to autotune. ##### Examples For example, if the system you want to autotune for contains blocks of size 5 and 8, run: ```bash $ ./tune_setup.py 5 8 -p ../parameters/parameters_P100.json Reading parameters from parameters_P100.json libsmm_acc: Found 74096 existing parameter sets, of which 1641 are autotuned and 72455 are predicted. Requested to autotune 8 triplets Found 41824 parameter sets for 5x5x5 Found 83648 parameter sets for 5x5x8 Found 103072 parameter sets for 5x8x5 Found 103072 parameter sets for 5x8x8 Found 103072 parameter sets for 8x5x5 Found 103072 parameter sets for 8x5x8 Found 125344 parameter sets for 8x8x5 Found 125344 parameter sets for 8x8x8 ``` Or, if you want to obtain, for the NVIDIA P100, the parameters of the same block sizes as recorded for the NVIDIA K40, run: ```bash $ ./tune_setup.py -p ../parameters/parameters_P100.json ../parameters/parameters_K40.json Reading parameters from parameters_P100.json libsmm_acc: Found 74093 existing parameter sets, of which 1638 are autotuned and 72455 are predicted. Reading parameters to autotune from parameters_K40.json Requested to autotune 19 triplets Found 41824 parameter sets for 5x5x5 Found 95648 parameter sets for 6x6x6 Found 110496 parameter sets for 7x7x7 Found 125344 parameter sets for 8x8x8 Found 173764 parameter sets for 9x9x9 ... ``` ##### Output The script will create a directory for each combination of the block sizes: ```bash $ ls -d tune_* tune_5x5x5 tune_5x5x8 tune_5x8x5 tune_5x8x8 tune_8x5x5 tune_8x5x8 tune_8x8x5 tune_8x8x8 ``` Each directory contains a number of files: ```bash $ ls -1 tune_8x8x8/ Makefile tune_8x8x8_exe0_main.cu/cpp tune_8x8x8_exe0_part0.cu/cpp tune_8x8x8_exe0_part1.cu/cpp tune_8x8x8_exe0_part2.cu/cpp tune_8x8x8_exe0_part3.cu/cpp tune_8x8x8_exe0_part4.cu/cpp tune_8x8x8.job ``` For each possible parameter-set a *launcher* is generated. A launcher is a small snippet of C code, which launches the kernel by using the CUDA specific `<<< >>>`-notation or HIP's `hipLaunchKernelGGL` function. It also instantiates the C++ template which contains the actual kernel code. In order to parallelize the benchmarking, the launchers are distributed over multiple executables. Currently, up to 10'000 launchers are benchmarked by one *executable*. Each executable is linked together from several `tune_*_part???.o` and a `tune_*_main.o`. Each part-files contains up to 100 launchers. This allows to parallelize the compilation over multiple CPU cores. #### 4. Adapt `tune_submit.py` to your environment The script `tune_submit.py` was written for the slurm batch system as used e.g. by CRAY supercomputers. If your computer runs a different batch system, you have to adapt `tune_submit.py` accordingly. #### 5. Submit Jobs Each tune-directory contains a job file. Since there might be many tune-directories, the convenience script `tune_submit.py` can be used to submit jobs. It will go through all the `tune_*`-directories and check if its job has already been submitted or run. For this, the script calls `squeue` in the background and it searches for `slurm-*.out`files. In order to limit the number of jobs submitted at a time, a maximum number of jobs to submit can be specified with `-j`. When `tune_submit.py` is called without arguments, it will just list the jobs that could be submitted: ```bash $ ./tune_submit.py tune_5x5x5: Would submit, run with "doit!" tune_5x5x8: Would submit, run with "doit!" tune_5x8x5: Would submit, run with "doit!" tune_5x8x8: Would submit, run with "doit!" tune_8x5x5: Would submit, run with "doit!" tune_8x5x8: Would submit, run with "doit!" tune_8x8x5: Would submit, run with "doit!" tune_8x8x8: Would submit, run with "doit!" Number of jobs submitted: 8 ``` Only when `tune_submit.py` is called with `doit!` as its first argument, will it actually submit jobs: ```bash $ ./tune_submit.py doit! tune_5x5x5: Submitting Submitted batch job 277987 tune_5x5x8: Submitting Submitted batch job 277988 tune_5x8x5: Submitting Submitted batch job 277989 tune_5x8x8: Submitting Submitted batch job 277990 tune_8x5x5: Submitting Submitted batch job 277991 tune_8x5x8: Submitting Submitted batch job 277992 tune_8x8x5: Submitting Submitted batch job 277993 tune_8x8x8: Submitting Submitted batch job 277994 Number of jobs submitted: 8 ``` #### 6. Collect Results Run `tune_collect.py` to parse all log files and determine the best kernel for each blocksize: ```bash $ ./tune_collect.py Reading: tune_5x5x5/tune_5x5x5_exe0.log Reading: tune_5x5x8/tune_5x5x8_exe0.log Reading: tune_5x8x5/tune_5x8x5_exe0.log Reading: tune_5x8x8/tune_5x8x8_exe0.log Reading: tune_8x5x5/tune_8x5x5_exe0.log Reading: tune_8x5x8/tune_8x5x8_exe0.log Reading: tune_8x8x5/tune_8x8x5_exe0.log Reading: tune_8x8x8/tune_8x8x8_exe0.log Kernel_dnt_tiny(m=5, n=5, k=5, split_thread=32, threads=64, grouping=16, minblocks=1) , # 27.9623 GFlops Kernel_dnt_tiny(m=5, n=5, k=8, split_thread=32, threads=96, grouping=16, minblocks=1) , # 37.8978 GFlops Kernel_dnt_medium(m=5, n=8, k=5, tile_m=1, tile_n=1, threads=96, grouping=16, minblocks=8) , # 32.9231 GFlops Kernel_dnt_tiny(m=5, n=8, k=8, split_thread=32, threads=96, grouping=16, minblocks=1) , # 47.0366 GFlops Kernel_dnt_medium(m=8, n=5, k=5, tile_m=1, tile_n=1, threads=96, grouping=16, minblocks=12) , # 33.1999 GFlops Kernel_dnt_medium(m=8, n=5, k=8, tile_m=1, tile_n=1, threads=96, grouping=16, minblocks=12) , # 49.3499 GFlops Kernel_dnt_tiny(m=8, n=8, k=5, split_thread=32, threads=96, grouping=16, minblocks=1) , # 62.8469 GFlops Kernel_dnt_tiny(m=8, n=8, k=8, split_thread=32, threads=128, grouping=16, minblocks=1) , # 90.7763 GFlops Wrote parameters.json ``` The file `parameters.json` in `dbcsr/src/acc/libsmm_acc/parameters` now contains the newly autotuned parameters. #### 7. Merge new parameters with original parameter-file Run `tune_merge.py` to merge the new parameters with the original ones, within the directory `parameters`. ```bash $ ./tune_merge.py Merging parameters.json with parameters_P100.json Wrote parameters.new.json ``` The file `parameters.new.json` can now be used as a parameter file. Rename it to `parameters_GPU.json`, with the appropriate `GPU`. #### 8. Contribute parameters to the community **Contribute new optimal parameters** Submit a pull request updating the appropriate `parameters_GPU.json` file to the [DBCSR repository](https://github.com/cp2k/dbcsr). **Contribute autotuning data** See [instructions](https://github.com/cp2k/dbcsr-data#contributing) in DBCSR's [data repository](https://github.com/cp2k/dbcsr-data). ================================================ FILE: src/acc/libsmm_acc/tune/archive.sh ================================================ #!/bin/bash -e #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### echo "removing unneeded files...." rm -f tune_*/*.job tune_*/Makefile tune_*/*_exe? tune_*/*_part*.cu tune_*/*_part*.cpp tune_*/*.o fn="../libsmm_acc_tuning_`date +'%F'`.tgz" if [ -f $fn ]; then echo "Archive file exists already, aborting!" exit 1 fi set -x tar czf $fn . ================================================ FILE: src/acc/libsmm_acc/tune/cleanup.sh ================================================ #!/bin/bash -e #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### echo "removing tuning files...." rm -rf tune_*x*x* ================================================ FILE: src/acc/libsmm_acc/tune/requirements.txt ================================================ numpy==1.22.0 ================================================ FILE: src/acc/libsmm_acc/tune/tune_collect.py ================================================ #!/usr/bin/env python3 # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### import sys import re import json import argparse from pathlib import Path sys.path.append("../") from kernels.smm_acc import descr_to_kernel # noqa: E402 re_mnk = re.compile(r"tune_(\d+)x(\d+)x(\d+)") re_winner = re.compile(r"\nWINNER: \d+ (.+)\n") re_gflops = re.compile(r"# ([0-9.]+) GFlop/s") re_errors = re.compile(r"Number of errors: (\d+)\n") from dataclasses import dataclass # noqa: E402 @dataclass class awinner: value: str = "" missing: int = 0 incomplete: int = 0 n_errors: int = 0 def tune_sort_key(path: Path): try: _, triple = path.name.split("_") m, n, k = triple.split("x") except ValueError: return (0, 0, 0) # sort non-matching dirs as they come at the beginning return (int(m), int(n), int(k)) # =============================================================================== def main(tune_dir=Path(".")): winners = dict() n_errors = 0 for dir in sorted(tune_dir.glob("tune_*"), key=tune_sort_key): if not dir.is_dir(): continue for log_fpath in sorted(dir.glob("tune_*.log")): mnk = tuple(int(i) for i in re_mnk.search(log_fpath.name).groups()) if mnk not in winners: winners[mnk] = awinner() if not log_fpath.exists(): winners[mnk] = awinner(value=f"log missing: {log_fpath}", missing=1) print( "WARNING: Missing log:", log_fpath, ", please re-run (cd tune_mxnxk; sbatch tune_mxnxk.job)", ) n_errors += 1 else: n_errors += process_log(log_fpath, mnk, winners) if n_errors > 0: print(f"WARNING: Found {int(n_errors)} issues, check above messages.") # Get kernel objects from list of strings kernels = [ descr_to_kernel(kernel_descr.value) for kernel_descr in winners.values() if not (kernel_descr.missing or kernel_descr.incomplete) ] kernels_dict = dict(zip([(k.m, k.n, k.k) for k in kernels], kernels)) new_file = "../parameters/parameters.json" with open(new_file, "w") as f: s = json.dumps( [ kernels_dict[kernel].as_dict_for_parameters_json for kernel in sorted(kernels_dict.keys()) ] ) s = s.replace("}, ", "},\n") s = s.replace("[", "[\n") s = s.replace("]", "\n]") f.write(s) print("\n") print("Wrote", new_file) # =============================================================================== def process_log(log_fn: Path, mnk, winners): print(f"Reading {log_fn}") content = log_fn.read_text() m = re_errors.search(content) if not m: winners[mnk].incomplete += 1 print( "WARNING: Found incomplete log:", log_fn, ", please re-run (cd tune_mxnxk; sbatch tune_mxnxk.job)", ) return 1 n_errors = int(m.group(1)) if n_errors != 0: winners[mnk].n_errors += n_errors return 1 old_gflops = 0.0 m = re_gflops.search(winners[mnk].value) if m: old_gflops = float(m.group(1)) new_winner = re_winner.search(content) if not new_winner: return 0 new_winner = new_winner.group(1).strip().replace("GFlops", "GFlop/s") new_gflops = float(re_gflops.search(new_winner).group(1)) if new_gflops > old_gflops: winners[mnk].value = new_winner return 0 # =============================================================================== if __name__ == "__main__": parser = argparse.ArgumentParser( description=""" Collect autotuning results: parse the log files contained in folders tune_*x*x* to determine the best kernel for each block size, and store the results in a file "parameters.json". This script is part of the workflow for autotuning optimal libsmm_acc parameters. For more details, see README.md. """, formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) args = parser.parse_args() main() ================================================ FILE: src/acc/libsmm_acc/tune/tune_merge.py ================================================ #!/usr/bin/env python3 # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### import sys import json import argparse sys.path.append("../") from kernels.smm_acc import params_dict_to_kernel # noqa: E402 def main(param_fn): # Read new kernel parameters param_new = "../parameters/parameters.json" with open(param_new) as f: new_kernels = [params_dict_to_kernel(**params) for params in json.load(f)] # Read old kernel parameters with open(param_fn) as f: old_kernels = [params_dict_to_kernel(**params) for params in json.load(f)] # Merge two parameter lists print("Merging", param_new, "with", param_fn) kernels_dict = dict(zip([(k.m, k.n, k.k) for k in old_kernels], old_kernels)) new_kernels_dict = dict(zip([(k.m, k.n, k.k) for k in new_kernels], new_kernels)) kernels_dict.update(new_kernels_dict) # Write kernel parameters to new file new_file = "parameters.new.json" with open(new_file, "w") as f: s = json.dumps( [ kernels_dict[kernel].as_dict_for_parameters_json for kernel in sorted(kernels_dict.keys()) ] ) s = s.replace("}, ", "},\n") s = s.replace("[", "[\n") s = s.replace("]", "\n]") f.write(s) print("Wrote", new_file) # =============================================================================== if __name__ == "__main__": parser = argparse.ArgumentParser( description=""" Write a new kernel parameter file (parameters.new.json) as a unique merge of an already-existing parameter file (specified by `-p parameters_GPU.json`) and a new one (parameters.json) created by tune_collect.py. If a kernel (m, n, k) is listed in both the original parameter file and the new parameter file, retain its parameters as defined in the new parameter file. This script is part of the workflow for autotuning optimal libsmm_acc parameters. For more details, see README.md. """, formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) parser.add_argument( "-p", "--params", metavar="parameters_GPU.json", type=str, default="../parameters/parameters_A100.json", help="parameter file in which to merge the newly obtained autotuned parameters", ) args = parser.parse_args() main(args.params) ================================================ FILE: src/acc/libsmm_acc/tune/tune_setup.py ================================================ #!/usr/bin/env python3 # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### import sys import os import stat import json import math from itertools import product import argparse from pathlib import Path sys.path.append("../") from kernels.smm_acc_predict import ( # noqa: E402 gpu_architectures, kernel_algorithm, params_dict_to_kernel, compatible_mnk, ) # =============================================================================== def main( param_fn: Path, compiler, cpus_per_task, max_num_nodes, blocksizes, blocks_from_param_file, tune_dir: Path, ): # Read existing parameters assert ( param_fn.name in gpu_architectures.keys() ), f"Cannot find GPU architecture for file {param_fn.name}" arch_code = gpu_architectures[param_fn.name] with open("../kernels/gpu_properties.json") as fhandle: gpu_properties = json.load(fhandle)[arch_code] with open("../kernels/autotuning_properties.json") as fhandle: autotuning_properties = json.load(fhandle) with param_fn.open("r") as fhandle: all_kernels = [params_dict_to_kernel(**params) for params in json.load(fhandle)] print(f"Reading parameters from {param_fn}") autotuned_kernels = [k for k in all_kernels if k.autotuned] predicted_kernels = [k for k in all_kernels if not k.autotuned] print( "libsmm_acc: found %d existing parameter sets, of which %d are autotuned and %d are predicted." % (len(all_kernels), len(autotuned_kernels), len(predicted_kernels)) ) # Get blocksizes to be autotuned if blocks_from_param_file: # open and read file with open(blocksizes) as f: all_kernels_ref = [ params_dict_to_kernel(**params) for params in json.load(f) ] print(f"Reading parameters to autotune from {blocksizes}") triples = [(k.m, k.n, k.k) for k in all_kernels_ref if k.autotuned] else: assert len(set(blocksizes)) == len(blocksizes) blocksizes.sort() # Get (m, n, k) triplets to be autotuned triples = combinations(*blocksizes) print(f"Requested to autotune {len(triples)} triplets") for m, n, k in triples: existing = [kern for kern in autotuned_kernels if kern.can_handle(m, n, k)] if existing: print( "Found existing autotuned parameter set for %dx%dx%d, skipping." % (m, n, k) ) continue outdir = tune_dir / f"tune_{int(m)}x{int(n)}x{int(k)}" if outdir.exists(): print(f"Directory {outdir} exists already, skipping.") continue outdir.mkdir() gen_benchmark(outdir, gpu_properties, autotuning_properties, compiler, m, n, k) gen_jobfile(outdir, compiler, m, n, k, cpus_per_task, max_num_nodes) gen_makefile(outdir, compiler, arch_code) # =============================================================================== def format_params(params): output = [] order = [ "m", "n", "k", "tile_m", "tile_n", "w", "v", "split_thread", "threads", "blockdim", "grouping", ] for k in order: if k in params.keys(): output.append(f"{k}={int(params[k])}") for k in params.keys(): if k not in order: output.append(f"{k}={int(params[k])}") return f"({', '.join(output)})" def get_file_extension_from_compiler(compiler): return ".cu" if compiler == "nvcc" else ".cpp" # =============================================================================== def gen_benchmark(outdir, gpu_properties, autotuning_properties, compiler, m, n, k): includes = [] launcher_codes = [] launchers = [] kernel_descr = [] indent = " " file_extension = get_file_extension_from_compiler(compiler) # Get the kernel algorithms compatible with the given size: compatible_kernels = [ kernclass for classname, kernclass in kernel_algorithm.items() if compatible_mnk(classname, m, n, k) ] # Get the parameter sets to measure for this (m,n,k) for kernclass in compatible_kernels: params = kernclass.promising_parameters( m, n, k, gpu_properties, autotuning_properties ) if params == 0: continue for p in params: kern = kernclass(**p, source="autotuning_candidate", perf=0) includes.append(f"../../kernels/{kern.include}") launcher_codes.append(kern.launcher_code(compiler)) launchers.append(f"launch_{kern.name}") kernel_descr.append(kernclass.__name__ + format_params(p)) print(f"Found {len(launchers)} parameter sets for {int(m)}x{int(n)}x{int(k)}") if len(launchers) == 0: return # Compose the "include" line of the benchmark code incl_output = '#include "../../kernels/smm_acc_common.h"\n' for i in set(includes): incl_output += f'#include "{i}"\n' incl_output += "\n\n" # Compose the benchmark code # The benchmark is broken down in # - n_exe_files executables # - each executable is made of n_obj_files object files # - each object file is made up of launchers_per_obj launchers # - each launcher launches 1 GPU kernel with a certain set of kernel parameters max_launchers_per_exe = 10000 launchers_per_obj = 100 n_exe_files = int(len(launcher_codes) / max_launchers_per_exe) + 1 launchers_per_exe = int(len(launcher_codes) / n_exe_files) + 1 # Compose source code for each executable file for i in range(n_exe_files): chunk_a = i * launchers_per_exe chunk_b = min((i + 1) * launchers_per_exe, len(launcher_codes)) n_obj_files = math.ceil((chunk_b - chunk_a) / launchers_per_obj) if n_obj_files == 0: continue jdigits = int(math.log10(n_obj_files)) + 1 # Compose source code for each object file for j in range(n_obj_files): a = chunk_a + j * launchers_per_obj b = min(chunk_a + (j + 1) * launchers_per_obj, chunk_b) output = incl_output output += "\n\n".join(launcher_codes[a:b]) fn = outdir / f"tune_{m}x{n}x{k}_exe{i}_part{j:0{jdigits}}{file_extension}" writefile(fn, output) # Compose source code for "main" of executable file output = '#include "../../libsmm_acc_benchmark.h"\n\n' for j in range(chunk_b - chunk_a): output += ( f"int {launchers[chunk_a + j]}(const int *param_stack, int stack_size, " ) if compiler == "nvcc": output += "cudaStream_t stream, " else: output += "hipStream_t stream, " output += ( "int m_max, int n_max, int k_max," + " const double *a_data, const double *b_data, double *c_data);\n" ) output += "\n" output += "int main(int argc, char** argv) {\n" if compiler == "nvcc": output += ( indent + "cudaError_t err = cudaDeviceSetSharedMemConfig(cudaSharedMemBankSizeEightByte);\n" ) output += f"{indent}if(err != cudaSuccess) return(-1);\n" else: # i.e. compiler = hipcc output += ( indent + "hipError_t err = hipDeviceSetSharedMemConfig(hipSharedMemBankSizeEightByte);\n" ) output += f"{indent}if(err != hipSuccess) return(-1);\n" output += f"{indent}libsmm_acc_benchmark_t* handle;\n" output += f"{indent}KernelLauncher launchers[{int(chunk_b - chunk_a)}];\n" output += f"{indent}char *kernel_descr[{int(chunk_b - chunk_a)}];\n" for j in range(chunk_b - chunk_a): output += f"{indent}launchers[{int(j)}] = {launchers[chunk_a + j]};\n" output += indent + 'kernel_descr[%d] = (char *) "%s";\n' % ( j, kernel_descr[chunk_a + j], ) output += indent + "libsmm_acc_benchmark_init(&handle, tune, %d, %d, %d);\n" % ( m, n, k, ) output += ( indent + "int result = libsmm_acc_benchmark(handle, %d, %d, %d, %d, launchers, kernel_descr);\n" % (m, n, k, chunk_b - chunk_a) ) output += f"{indent}libsmm_acc_benchmark_finalize(handle);\n" output += f"{indent}return result;" output += "}\n" fn = ( outdir / f"tune_{int(m)}x{int(n)}x{int(k)}_exe{int(i)}_main{file_extension}" ) writefile(fn, output) # =============================================================================== def gen_jobfile(outdir, compiler, m, n, k, cpus_per_task, max_num_nodes=0): file_extension = get_file_extension_from_compiler(compiler) tprefix = f"tune_{int(m)}x{int(n)}x{int(k)}" all_exe_src = [fn.name for fn in outdir.glob(f"{tprefix}_*_main{file_extension}")] all_exe = sorted([fn.replace(f"_main{file_extension}", "") for fn in all_exe_src]) if max_num_nodes > 0: num_nodes = min(len(all_exe), max_num_nodes) else: num_nodes = len(all_exe) time = "00:40:00" output = f"""\ #!/bin/bash -l #SBATCH --nodes={int(num_nodes)} #SBATCH --exclusive #SBATCH --ntasks-per-core=1 #SBATCH --ntasks-per-node=1 #SBATCH --cpus-per-task={int(cpus_per_task)} #SBATCH --time={time} #SBATCH --account=jiek61 #SBATCH --partition=dc-gpu #SBATCH --cuda-mps #SBATCH --gres=gpu:4 module purge module add GCC/11.3.0 module add ParaStationMPI/5.8.0-1-mt module add CUDA/11.7 module list nvidia-smi t1=$(date +%s) """ # Compilation num_nodes_busy = 0 for exe in all_exe: output += ( f"srun --nodes=1 --ntasks=1 --ntasks-per-node=1" f" --cpus-per-task={cpus_per_task} --exact make -j {cpus_per_task} {exe} &\n" ) num_nodes_busy += 1 if num_nodes_busy == num_nodes: output += "wait\n" num_nodes_busy = 0 output += "wait\n" output += "t2=$(date +%s)\n" output += "echo $((t2-t1)) seconds for compilation step\n\n" # Execution output += "t1=$(date +%s)\n" for exe in all_exe: output += ( f"srun --nodes=1 --ntasks=1 --ntasks-per-node=1" f" --cpus-per-task=1 --exact ./{exe} > {exe}.log 2>&1 & \n" ) num_nodes_busy += 1 if num_nodes_busy == num_nodes: output += "wait\n" num_nodes_busy = 0 output += "wait\n" output += "t2=$(date +%s)\n" output += "echo $((t2-t1)) seconds for execution step\n\n" # Winner output += "echo Over all winner:\n" output += f"grep WINNER {tprefix}_exe*.log | sort -n --field-separator='#' -k 2 | tail -n 1\n\n" # Cleaning output += "make realclean\n" fn = outdir / f"{tprefix}.job" writefile(fn, output) # =============================================================================== def gen_makefile(outdir, compiler, arch): file_extension = get_file_extension_from_compiler(compiler) # header output = ".SECONDARY:\n" output += f"vpath %{file_extension}../\n\n" output += ".PHONY: do_nothing build_all clean realclean\n\n" output += "do_nothing:\n\n" output += "clean:\n" output += " rm -f *.o\n\n" output += "realclean: clean\n" output += " rm -f *.cu\n\n" # target "build_all" all_exe_src = sorted( [fn.name for fn in outdir.glob(f"tune_*_main{file_extension}")] ) build_targets = [fn.replace(f"_main{file_extension}", "") for fn in all_exe_src] output += f"build_all: {' '.join(build_targets)}\n\n" # compilation rule for helper-files: libsmm_acc_benchmark, acc_cuda/hip output += "libsmm_acc_benchmark.o : ../../libsmm_acc_benchmark.cpp\n" output += "acc.o :" if compiler == "nvcc": output += " ../../../cuda/acc_cuda.cpp\n\n" else: output += " ../../../hip/acc_hip.cpp\n\n" output += "libsmm_acc_benchmark.o acc.o :\n" if compiler == "nvcc": output += ( "\tnvcc -O3 -D__TUNING -D__CUDA -arch=" + str(arch) + " -w -c -o $@ -std=c++11 $<\n\n" ) else: output += ( "\thipcc -O3 -D__TUNING -D__HIP -w -munsafe-fp-atomics -c -o $@ $<\n\n" ) # compilation rule for kernel files headers = " ".join([f"../{fn}" for fn in Path("../kernels").glob("*.h")]) output += f"%.o : %{file_extension} {headers}\n" if compiler == "nvcc": output += f" nvcc -O3 -D__TUNING -D__CUDA -arch={str(arch)} -w -c $<\n\n" else: output += "\thipcc -O3 -D__TUNING -D__HIP -w -munsafe-fp-atomics -c $<\n\n" # compilation rule for autotuning executables for exe_src in all_exe_src: parts = sorted( [ fn.name for fn in outdir.glob( exe_src.replace(f"_main{file_extension}", "_part*") ) ] ) deps = [exe_src, "libsmm_acc_benchmark.cpp", "acc.cpp"] + parts deps_obj = " ".join( [fn.replace(".cu", ".o").replace(".cpp", ".o") for fn in deps] ) exe = exe_src.replace(f"_main{file_extension}", "") output += f"{exe} : {deps_obj}\n" if compiler == "nvcc": output += ( f" nvcc -O3 -D__CUDA -arch={str(arch)} -w -o $@ $^ -lcuda -lnvrtc\n\n" ) else: rocm_path = os.getenv("ROCM_PATH", "/opt/rocm") output += f"\thipcc -O3 -D__HIP -w -munsafe-fp-atomics -o $@ $^ {rocm_path}/hip/lib/libamdhip64.so\n\n" # write Makefile writefile(outdir / "Makefile", output) # =============================================================================== def gen_collect(outdir: Path, triples): output = "#!/bin/bash\n" for m, n, k in triples: output += f"grep WINNER tune_{int(m)}x{int(n)}x{int(k)}_exe*.log | sort -n --field-separator='#' -k 2 | tail -n 1\n" output += "#EOF\n" fn = outdir / "collect_winners.sh" writefile(fn, output) fn.chmod(fn.stat().st_mode | stat.S_IEXEC) # =============================================================================== def writefile(fn: Path, content): if fn.exists() and fn.read_text() == content: return fn.write_text(content) # =============================================================================== def combinations(*sizes): return list(product(sizes, sizes, sizes)) # =============================================================================== if __name__ == "__main__": parser = argparse.ArgumentParser( description=""" Set up the autotuning of specified blocksizes. This script produces folders (tune_*x*x*) containing the code, Makefile and jobfiles for the autotuning of a given (m, n, k)-triplet. This script is part of the workflow for autotuning optimal libsmm_acc parameters. For more details, see README.md. """, formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) parser.add_argument( "-p", "--params", metavar="parameters_GPU.json", default="../parameters/parameters_P100.json", type=Path, help="Parameter file that this autotuning should extend (pick the right GPU)", ) parser.add_argument( "-b", "--compiler", metavar="compiler", default="nvcc", help="Compiler to use for compiling kernel code (Options: nvcc, hipcc)", ) parser.add_argument( "-c", "--cpus_per_task", metavar="INT", default=128, type=int, help="Number of CPUs required per task", ) parser.add_argument( "-n", "--nodes", metavar="INT", default=1, type=int, help="Maximum number of nodes an slurm allocation can get. 0: not a limiting factor" + "(choose this option if you can allocate jobs of 20-30 nodes without a problem.", ) parser.add_argument( "blocksizes", metavar="BLOCKSIZE", nargs="+", type=str, help='Blocksize(s) to autotune. They can be provided as a list of integers (eg. "23",' + ' "4 5 13", "32 45") or provide a parameter file from which to read the blocksizes ' + "to autotune, of the format parameters_GPU.json.", ) args = parser.parse_args() # ========== # Verify option choice validity valid_compilers = ["nvcc", "hipcc"] assert ( args.compiler in valid_compilers ), f"Compiler chosen ({args.compiler}) is not valid, please choose among: {valid_compilers}" # ========== # Blocksizes from parameter file or as list of integers blocksizes_from_param_file = False if args.blocksizes[0].isdigit(): # blocksizes is a sequence of strings args.blocksizes = [int(b) for b in args.blocksizes] else: # blocksizes is a file name blocksizes_from_param_file = True args.blocksizes = args.blocksizes[0] # ========== main( args.params, args.compiler, args.cpus_per_task, args.nodes, args.blocksizes, blocksizes_from_param_file, Path("."), ) ================================================ FILE: src/acc/libsmm_acc/tune/tune_submit.py ================================================ #!/usr/bin/env python3 # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### import os import argparse from subprocess import check_call, check_output from pathlib import Path def tune_sort_key(path: Path): try: _, triple = path.name.split("_") m, n, k = triple.split("x") except ValueError: return (0, 0, 0) # sort non-matching dirs as they come at the beginning return (int(m), int(n), int(k)) # =============================================================================== def main(submit_jobs, num_jobs, tune_dir: Path, sbatch_args): cmd = ["squeue", "--user", os.environ["USER"], "--format=%j", "--nohead"] submitted = check_output(cmd, encoding="utf-8") n_submits = 0 for dir in sorted(tune_dir.glob("tune_*"), key=tune_sort_key): if not dir.is_dir(): continue if list(dir.glob("slurm-*.out")): print(f"{dir.name:20}: Found slurm file(s)") continue if dir.name in submitted: print(f"{dir.name:20}: Found submitted job") continue n_submits += 1 if submit_jobs: print(f"{dir.name:20}: Submitting") check_call(f"cd {dir}; sbatch {sbatch_args} *.job", shell=True) else: jobfiles = list(dir.glob("*.job")) if len(jobfiles) == 1: print(f'{dir.name:20}: Would submit, run with "doit!"') elif len(jobfiles) == 0: print( f"{dir.name:20}: Cannot find jobfile, delete this folder and re-create with tune_setup.py" ) else: print( f"{dir.name:20}: Found multiple jobfiles, delete this folder and re-create with tune_setup.py" ) if num_jobs > 0: if n_submits >= num_jobs: break print(f"Number of jobs submitted: {n_submits}") # =============================================================================== if __name__ == "__main__": parser = argparse.ArgumentParser( description=""" Submit autotuning jobs: Each tune-directory contains a job file. Since there might be many tune-directories, the convenience script tune_submit.py can be used. It will go through all the tune_*-directories and check if it has already been submitted or run. For this the script calls squeue in the background and it searches for slurm-*.out files. This script is part of the workflow for autotuning optimal libsmm_acc parameters. For more details, see README.md. """, formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) parser.add_argument("doit", metavar="doit!", nargs="?", type=str) parser.add_argument( "-j", "--num_jobs", metavar="INT", default=0, type=int, help="Maximum number of jobs to submit. 0: submit all", ) parser.add_argument( "-d", "--dir", metavar="tune_directory", default=".", type=Path, help="Path from which to read already-existing tune-folders and write new tune-folders", ) parser.add_argument( "--sbatch-args", metavar="sbatch_args", default="", type=str, help="Additional arguments passed to sbatch", ) args = parser.parse_args() submit_jobs = True if args.doit == "doit!" else False main(submit_jobs, args.num_jobs, args.dir, args.sbatch_args) ================================================ FILE: src/acc/opencl/Makefile ================================================ MAKDIR := $(subst //,,$(dir $(firstword $(MAKEFILE_LIST)))/) ACCDIR := $(MAKDIR)/.. INCACC := $(wildcard $(MAKDIR)/*.h*) $(ACCDIR)/acc.h SRCACC := $(wildcard $(MAKDIR)/*.c) OBJACC := $(SRCACC:.c=.o) INCSMM := $(wildcard $(MAKDIR)/smm/*.h*) \ $(MAKDIR)/smm/opencl_kernels.h \ $(ACCDIR)/acc_libsmm.h \ $(ACCDIR)/acc_bench.h \ $(NULL) SRCSMM := $(wildcard $(MAKDIR)/smm/*.c) OBJSMM := $(SRCSMM:.c=.o) KERNEL := $(wildcard $(MAKDIR)/smm/kernels/*.cl) INCALL := $(INCACC) $(INCSMM) LIBXSMMROOT := $(wildcard $(ACCDIR)/../../../../../libxsmm) ifeq (,$(LIBXSMMROOT)) LIBXSMMROOT := $(wildcard $(HOME)/libxsmm) endif UNAME := $(shell uname) HEADERONLY ?= 0 STATIC ?= 1 DEV ?= 0 # Kind of Clang/GCC based analysis: # leak, address, undefined, thread SANITIZE ?= $(NULL) # Intel Compiler ICX := $(shell which icx 2>/dev/null) INTEL ?= $(if $(ICX),$(if $(filter-out 0,$(GNU)),0,2),0) # select from set of predefined triplet specifications SPECID ?= 0 # limit shape in tests (zero or negative for unlimited) MAXEXT ?= 48 # number of tests (zero or negative for unlimited) NSMMS ?= 10 COMMAND := $(shell which command 2>/dev/null) ifneq (,$(COMMAND)) which = $(shell $(COMMAND) -v $1) else which = $(shell which $(firstword $1) 2>/dev/null) endif WITH_GPU := $(if $(WITH_GPU),$(WITH_GPU),$(GPUVER)) PARAMS_WITHGPU := $(MAKDIR)/smm/params/tune_multiply_$(WITH_GPU).csv PARAMS_DEFAULT := $(MAKDIR)/smm/tune_multiply.csv PARAMS := $(if $(wildcard $(PARAMS_WITHGPU)),$(PARAMS_WITHGPU),$(wildcard $(PARAMS_DEFAULT))) #PARAMDIR ?= $(MAKDIR)/smm/params ifeq (,$(PARAMS)) ifneq (,$(wildcard $(PARAMDIR))) WITH_GPUS := $(shell ls -1 $(PARAMDIR)/*.csv | cut -d. -f1 | rev | cut -d_ -f1 | rev) endif endif CFLAGS := -fPIC \ -Wall -Wextra -Wcast-qual \ -Wno-overlength-strings \ -Wno-variadic-macros \ -Wno-unused-function \ -Wno-long-long \ -D__OPENCL \ $(NULL) ifneq (,$(ELEM_TYPE)) CFLAGS += -DELEM_TYPE=$(ELEM_TYPE) endif USM ?= 0 ifneq (0,$(USM)) CFLAGS += -D__OFFLOAD_UNIFIED_MEMORY endif ifneq (0,$(INTEL)) ifneq (1,$(INTEL)) CXX := icpx CC := icx else CXX := icpc CC := icc endif AR := $(if $(call which,xiar),xiar,ar) else CXX := g++ CC := gcc ifneq (Darwin,$(UNAME)) AR := gcc-ar else AR := ar endif endif ifneq (0,$(DEV)) ifeq (1,$(DEV)) CFLAGS += -std=c89 CFLAGS += -Wno-unused-parameter else # DEV=2 (and higher): linking is not intended CFLAGS += -D__DBCSR_ACC CFLAGS += -Wno-gnu-zero-variadic-macro-arguments CFLAGS += -Wno-deprecated CFLAGS += -Werror ifneq (2,$(DEV)) ifneq (,$(findstring clang,$(CC) $(CXX))) override CC := clang++ --analyze else override CC := $(CXX) -xc++ endif else override CC := $(CXX) -xc++ endif $(info CC: $(shell $(CC) --version | head -n1)) OMP := 0 endif CFLAGS += -pedantic #else #CFLAGS += -std=c99 endif ifneq (,$(SANITIZE)) CXXFLAGS += -fsanitize=$(SANITIZE) CFLAGS += -fsanitize=$(SANITIZE) FCFLAGS += -fsanitize=$(SANITIZE) LDFLAGS += -fsanitize=$(SANITIZE) SYM = 1 endif ifneq (0,$(DBG)) CPP_OPENCL_FLAGS += -C ifeq (,$(DBG)) CFLAGS += -O2 -DNDEBUG else ifneq (1,$(DBG)) CFLAGS += -D_DEBUG endif CFLAGS += -O0 endif else CFLAGS += -O2 -DNDEBUG SYM ?= 0 endif ifneq (0,$(SYM)) CFLAGS += -g endif ifneq (0,$(OMP)) ifneq (0,$(INTEL)) CFLAGS += -qopenmp LDFLAGS += -qopenmp else ifneq (Darwin,$(UNAME)) CFLAGS += -fopenmp LDFLAGS += -fopenmp else # macOS CFLAGS += -Xpreprocessor -fopenmp LDFLAGS += -lomp endif endif ifneq (,$(LIBXSMMROOT)) ifneq (0,$(STATIC)) ifeq (0,$(HEADERONLY)) ifneq (0,$(OMP)) LDFLAGS += $(LIBXSMMROOT)/lib/libxsmmext.a endif LDFLAGS += $(LIBXSMMROOT)/lib/libxsmm.a else CFLAGS_XSMM += -DLIBXSMM_DEFAULT_CONFIG endif LDFLAGS += $(LIBXSMMROOT)/lib/libxsmmnoblas.a else LDFLAGS += -L$(LIBXSMMROOT)/lib ifneq (Darwin,$(UNAME)) LDFLAGS += -Wl,-rpath=$(LIBXSMMROOT)/lib endif ifneq (0,$(OMP)) LDFLAGS += -lxsmmext endif LDFLAGS += -lxsmm -lxsmmnoblas endif CFLAGS_XSMM += -pthread -D__LIBXSMM -I$(LIBXSMMROOT)/include LDFLAGS += -pthread -ldl -lm endif ifeq (Darwin,$(UNAME)) LDFLAGS += -framework OpenCL else OPENCL_LIB := $(shell ldconfig -p 2>/dev/null | grep -m1 OpenCL | rev | cut -d' ' -f1 | rev) ifeq (,$(OPENCL_LIB)) OPENCL_LIB := $(wildcard /usr/lib/x86_64-linux-gnu/libOpenCL.so.1) endif ifeq (,$(CUDATOOLKIT_HOME)) CUDATOOLKIT_HOME := $(NVSDKCOMPUTE_ROOT) endif ifeq (,$(CUDATOOLKIT_HOME)) NVCC := $(call which,nvcc) CUDATOOLKIT_HOME := $(if $(NVCC),$(abspath $(dir $(NVCC))/..)) endif ifneq (,$(CUDATOOLKIT_HOME)) CUDA_LIBDIR := $(if $(wildcard $(CUDATOOLKIT_HOME)/lib64),lib64,lib) ifeq (,$(wildcard $(OPENCL_INC))) CLINC := $(lastword $(sort $(wildcard $(CUDATOOLKIT_HOME)/../cuda/*/targets/x86_64-linux/include/CL/cl.h))) OPENCL_INC := $(if $(CLINC),$(abspath $(dir $(CLINC))/..),$(CUDATOOLKIT_HOME)/include) endif ifeq (,$(wildcard $(OPENCL_LIB))) LDFLAGS += -L$(CUDATOOLKIT_HOME)/$(CUDA_LIBDIR) LDFLAGS += -Wl,-rpath=$(CUDATOOLKIT_HOME)/$(CUDA_LIBDIR) endif else ifeq (,$(OPENCL_INC)) ifneq (,$(wildcard $(OPENCL_ROOT)/include/CL/cl.h)) LDFLAGS += -L$(OPENCL_ROOT)/$(if $(wildcard $(OPENCL_ROOT)/lib64),lib64,lib) OPENCL_INC := $(OPENCL_ROOT)/include else ifneq (,$(ICX)) OPENCL_ROOT := $(abspath $(dir $(ICX))/..) CLINC := $(wildcard $(OPENCL_ROOT)/include/sycl/CL/cl.h $(OPENCL_ROOT)/include/CL/cl.h) ifneq (,$(CLINC)) LDFLAGS += -L$(OPENCL_ROOT)/$(if $(wildcard $(OPENCL_ROOT)/lib64),lib64,lib) LDFLAGS += -L$(OPENCL_ROOT)/compiler/lib/intel64 -lintlc OPENCL_INC := $(abspath $(dir $(firstword $(CLINC)))/..) endif endif endif # OPENCL_INC: directory containing CL/cl.h. ifneq (,$(wildcard $(OPENCL_INC))) CFLAGS += -I$(OPENCL_INC) endif # OPENCL_LIB: file/library to be linked ifneq (,$(wildcard $(OPENCL_LIB))) LDFLAGS += $(OPENCL_LIB) else LDFLAGS += -l:libOpenCL.so.1 endif endif # Collect all paths in LD_LIBRARY_PATH and LD_LIBRARY_PATH/stubs, and append to LDFLAGS LD_LIBRARY_DIRS := $(wildcard $(subst :, ,$(LD_LIBRARY_PATH))) LD_LIBSTUB_PATH := $(wildcard $(patsubst %,%/stubs,$(LD_LIBRARY_DIRS))) LIBPATHS := $(foreach DIR,$(LD_LIBRARY_DIRS),$(if $(filter -L$(DIR),$(LDFLAGS)),$(NULL),-L$(DIR))) LIBSTUBS := $(foreach DIR,$(LD_LIBSTUB_PATH),$(if $(filter -L$(DIR),$(LDFLAGS)),$(NULL),-L$(DIR))) LDFLAGS += $(LIBPATHS) $(LIBSTUBS) .PHONY: bench bench: $(ACCDIR)/acc_bench .PHONY: all all: bench $(ACCDIR)/dbcsr_acc_test .PHONY: test test: test-interface test-smm .PHONY: test-interface test-interface: $(ACCDIR)/dbcsr_acc_test @echo "--- DBCSR Backend Interface" $(ACCDIR)/dbcsr_acc_test $(MAKDIR)/test-smm.log: bench $(eval SHAPES = $(shell $(ACCDIR)/acc_triplets.sh -k $(SPECID) -m $(MAXEXT) -n $(NSMMS))) $(eval DEVICE = "$(shell LIBXSMM_VERBOSE=0 ACC_OPENCL_VERBOSE=1 CHECK=0 $(ACCDIR)/acc_bench 1 1 1 2>&1 >/dev/null)") $(eval WITH_GPU = $(firstword $(foreach GPU,$(WITH_GPUS),$(findstring $(GPU),$(DEVICE))))) $(eval PARAMS = $(firstword $(wildcard $(PARAMDIR)/tune_multiply_$(WITH_GPU).csv))) $(eval GPUENV = $(if $(OPENCL_LIBSMM_SMM_PARAMS),$(NULL),$(if $(PARAMS),OPENCL_LIBSMM_SMM_PARAMS=$(PARAMS)))) @echo "--- DBCSR OpenCL SMMs ($(words $(SHAPES)))" @echo "$(DEVICE)" @if [ "$(GPUENV)" ]; then echo "$(GPUENV)"; fi @echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" ifneq (,$(LD_PRELOAD)) @echo "LD_PRELOAD=${LD_PRELOAD}" endif @echo "CC: $$($(CC) --version | head -n1)" @echo "runtime libraries:" @ldd $(ACCDIR)/acc_bench @echo "hostname: $$(hostname)" @echo @echo "$(SHAPES)" | xargs -n1 | ($(GPUENV) CHECK=$(if $(CHECK),$(CHECK),1) stdbuf --output=L \ $(ACCDIR)/acc_bench /dev/stdin 2>$(MAKDIR)/test-smm.err && rm $(MAKDIR)/test-smm.err) | tee $@ .PHONY: test-smm test-smm: $(MAKDIR)/test-smm.log ifneq (,$(call which,datamash)) ifeq (,$(shell datamash geomean 2>&1 | grep invalid)) @echo "geomean: $$(sed -n "/device:/p" $< 2>/dev/null | datamash -W -R 1 geomean 4) GFLOPS/s" endif @echo "median: $$(sed -n "/device:/p" $< 2>/dev/null | datamash -W -R 1 median 4) GFLOPS/s" @echo "mean: $$(sed -n "/device:/p" $< 2>/dev/null | datamash -W -R 1 mean 4) GFLOPS/s" endif @if [ -s $(MAKDIR)/test-smm.err ]; then \ echo && cat $(MAKDIR)/test-smm.err; \ if [ "0" != "$(if $(CHECK),$(CHECK),1)" ]; then exit 1; fi; \ fi $(MAKDIR)/smm/opencl_kernels.h: $(MAKDIR)/acc_opencl.sh $(KERNEL) $(PARAMS) CPPFLAGS=$(CPP_OPENCL_FLAGS) $(MAKDIR)/acc_opencl.sh $(KERNEL) $(PARAMS) $@ .PHONY: backend backend: $(ACCDIR)/dbcsr_acc.a $(ACCDIR)/dbcsr_acc.a: $(OBJACC) $(AR) -rs $@ $^ .PHONY: libsmm libsmm: $(ACCDIR)/dbcsr_acc_smm.a $(ACCDIR)/dbcsr_acc_smm.a: $(OBJSMM) $(AR) -rs $@ $^ %.o: %.c $(INCALL) $(MAKDIR)/Makefile $(CC) $(CFLAGS) $(CFLAGS_XSMM) -c $< -o $@ $(MAKDIR)/acc_bench.o: $(ACCDIR)/acc_bench.c $(MAKDIR)/Makefile ifneq (0,$(LIBXSMM)) $(CC) $(CFLAGS) $(CFLAGS_XSMM) -c $< -o $@ else $(CC) $(CFLAGS) -c $< -o $@ endif $(ACCDIR)/acc_bench: $(MAKDIR)/acc_bench.o $(ACCDIR)/dbcsr_acc_smm.a $(ACCDIR)/dbcsr_acc.a ifneq (,$(filter 0 1,$(DEV))) $(CC) $^ $(LDFLAGS) -o $@ else .PHONY: $(ACCDIR)/acc_bench endif $(MAKDIR)/dbcsr_acc_test.o: $(ACCDIR)/../../tests/dbcsr_acc_test.c $(MAKDIR)/Makefile $(CC) $(CFLAGS) -I$(ACCDIR)/.. -c $< -o $@ $(ACCDIR)/dbcsr_acc_test: $(MAKDIR)/dbcsr_acc_test.o $(ACCDIR)/dbcsr_acc.a ifneq (,$(filter 0 1,$(DEV))) $(CC) $^ $(LDFLAGS) -o $@ else .PHONY: $(ACCDIR)/dbcsr_acc_test endif .PHONY: clean clean: @rm -f $(OBJACC) $(OBJSMM) @rm -f $(MAKDIR)/dbcsr_acc_test.o @rm -f $(MAKDIR)/acc_bench.o @rm -f $(MAKDIR)/smm/opencl_kernels.h @rm -f $(MAKDIR)/test-smm.err .PHONY: realclean realclean: clean @rm -f $(ACCDIR)/dbcsr_acc.a $(ACCDIR)/dbcsr_acc_smm.a @rm -f $(ACCDIR)/acc_bench @rm -f $(ACCDIR)/dbcsr_acc_test @rm -f $(MAKDIR)/test-smm.log ================================================ FILE: src/acc/opencl/PACKAGE ================================================ { "description": "OpenCL backend for accelerator API", "archive": "libdbcsr", "requires": [".."] } ================================================ FILE: src/acc/opencl/README.md ================================================ # Backend The OpenCL backend implements the [ACC interface](https://github.com/cp2k/dbcsr/blob/develop/src/acc/acc.h), which is exposed in Fortran and used throughout DBCSR's code base to drive (GPU-)acceleration based on ACC's device enumeration, data movement, and synchronization functionality. By design, DBCSR activates one device per rank (process). For instance, multiple GPUs can be used by the means of multiple ranks per system or at least one rank per device. The LIBSMM library complements the backend and implements the [ACC LIBSMM interface](https://github.com/cp2k/dbcsr/blob/develop/src/acc/acc_libsmm.h). All major GPU vendors support OpenCL even if the vendor-preferred programming model suggests otherwise. On Nvidia GPUs, the OpenCL backend can be used with CUDA based GPU-code in other portions of CP2K. The OpenCL based backend provides the following benefits: * Code portability between GPU vendors (if not performance portability). For instance, performance of the OpenCL backend matches the performance of the CUDA backend or exceeds it. * Acceptable performance for kernels not covered by specifically tuned parameters, and the ability to run on GPU if no tuned parameters are present. * Auto-tuning kernels within an acceptable time limit along with handy scripts to retune parameters and to carry forward an existing set (new GPU). Runtime settings are made by the means of environment variables. The OpenCL backend provides `acc_getenv.sh` to list all occurrences of `getenv` categorized into "OpenCL Backend environment variables" and "OpenCL LIBSMM environment variables". Common backend related settings are: * `ACC_OPENCL_DEVSPLIT`: integer enabling devices to be split into subdevices (non-zero/default: subdevices, zero: aggregated). * `ACC_OPENCL_DEVTYPE`: character string selecting "cpu", "gpu", "all" (unfiltered), or any other string (neither CPU or GPU). * `ACC_OPENCL_DEVICE`: non-negative integer number to select a device from the (internally enumerated) list of devices. * `ACC_OPENCL_VENDOR`: character string matching the vendor of the OpenCL device in a case-insensitive fashion, e.g., "intel". * `ACC_OPENCL_VERBOSE`: verbosity level (integer) with console output on `stderr`. * `ACC_OPENCL_VERBOSE=1`: outputs the number of devices found and the name of the selected device. * `ACC_OPENCL_VERBOSE=2`: outputs the duration needed to generate a requested kernel. * `ACC_OPENCL_VERBOSE=3`: outputs device-side performance of kernels (every launch profiled). * `ACC_OPENCL_DUMP`: dump preprocessed kernel source code (1) or dump compiled OpenCL kernels (2). * `ACC_OPENCL_DUMP=1`: dump preprocessed kernel source code and use it for JIT compilation. Instantiates the original source code using preprocessor definitions (`-D`) and collapses the code accordingly. * `ACC_OPENCL_DUMP=2`: dump compiled OpenCL kernels (depends on OpenCL implementation), e.g., PTX code on Nvidia. The OpenCL backend enumerates and orders devices by kind, i.e., GPU, CPU, and "other" (primary criterion) and by memory capacity (secondary criterion). Device IDs are zero-based as defined by the ACC interface (and less than what is permitted by `acc_get_ndevices`). ================================================ FILE: src/acc/opencl/acc_getenv.sh ================================================ #!/usr/bin/env bash #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: BSD-3-Clause # #################################################################################################### FIND=$(command -v find) SORT=$(command -v sort) SED=$(command -v gsed) # GNU sed is desired (macOS) if [ ! "${SED}" ]; then SED=$(command -v sed) fi HERE="$(cd "$(dirname "$0")" && pwd -P)" SRC="${HERE}" EXT="c" if [ "${FIND}" ] && [ "${SORT}" ] && [ "${SED}" ] && [ -d "${SRC}" ]; then export LC_ALL=C ENVARS="$(${FIND} "${SRC}" -type f -name "*.${EXT}" -exec \ "${SED}" "s/getenv[[:space:]]*([[:space:]]*\".[^\"]*/\n&/g" {} \; | \ "${SED}" -n "s/.*getenv[[:space:]]*([[:space:]]*\"\(.[^\"]*\)..*/\1/p" | \ ${SORT} -u)" OTHERS=$(echo "${ENVARS}" | ${SED} "/ACC_OPENCL_/d;/OPENCL_LIBSMM_/d") if [ "${OTHERS}" ]; then echo "====================================" echo "Other environment variables" echo "====================================" echo "${ENVARS}" | ${SED} "/ACC_OPENCL_/d;/OPENCL_LIBSMM_/d" fi echo "====================================" echo "OpenCL Backend environment variables" echo "====================================" echo "${ENVARS}" | ${SED} -n "/ACC_OPENCL_/p" echo "====================================" echo "OpenCL LIBSMM environment variables" echo "====================================" echo "${ENVARS}" | ${SED} -n "/OPENCL_LIBSMM_/p" else >&2 echo "Error: missing prerequisites!" exit 1 fi ================================================ FILE: src/acc/opencl/acc_opencl.c ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #if defined(__OPENCL) # include "acc_opencl.h" # include # include # include # include # if defined(_WIN32) # include # include # else # include # include # include # endif # if defined(__DBCSR_ACC) # include "../acc_libsmm.h" # endif # include # include # if !defined(S_ISDIR) && defined(S_IFMT) && defined(S_IFDIR) # define S_ISDIR(A) ((S_IFMT & (A)) == S_IFDIR) # endif # if !defined(S_IREAD) # define S_IREAD S_IRUSR # endif # if !defined(S_IWRITE) # define S_IWRITE S_IWUSR # endif # if !defined(ACC_OPENCL_NLOCKS) # define ACC_OPENCL_NLOCKS 4 # endif # if !defined(ACC_OPENCL_TEMPDIR) && 1 # define ACC_OPENCL_TEMPDIR "/tmp" # endif # if !defined(ACC_OPENCL_CACHE_DID) && 1 # define ACC_OPENCL_CACHE_DID # endif # if !defined(ACC_OPENCL_CACHE_DIR) && 0 # define ACC_OPENCL_CACHE_DIR ".cl_cache" # endif # if !defined(ACC_OPENCL_CPPBIN) && 1 # define ACC_OPENCL_CPPBIN "/usr/bin/cpp" # endif # if !defined(ACC_OPENCL_SEDBIN) && 1 # define ACC_OPENCL_SEDBIN "/usr/bin/sed" # endif /* disabled: let MPI runtime come up before */ # if !defined(ACC_OPENCL_PREINIT) && 0 # define ACC_OPENCL_PREINIT # endif /* attempt to enable command aggregation */ # if !defined(ACC_OPENCL_CMDAGR) && 1 # define ACC_OPENCL_CMDAGR # endif # if !defined(ACC_OPENCL_NCCS) && 1 # define ACC_OPENCL_NCCS 0 # endif # if defined(__cplusplus) extern "C" { # endif char c_dbcsr_acc_opencl_locks[ACC_OPENCL_CACHELINE * ACC_OPENCL_NLOCKS]; /* global configuration discovered during initialization */ c_dbcsr_acc_opencl_config_t c_dbcsr_acc_opencl_config; # if defined(ACC_OPENCL_CACHE_DID) int c_dbcsr_acc_opencl_active_id; # endif void c_dbcsr_acc_opencl_notify(const char /*errinfo*/[], const void* /*private_info*/, size_t /*cb*/, void* /*user_data*/); void c_dbcsr_acc_opencl_notify(const char errinfo[], const void* private_info, size_t cb, void* user_data) { LIBXSMM_UNUSED(private_info); LIBXSMM_UNUSED(cb); LIBXSMM_UNUSED(user_data); fprintf(stderr, "ERROR ACC/OpenCL: %s\n", errinfo); } /** * Comparator used with qsort; stabilized by tail condition (a < b ? -1 : 1). * Brings GPUs with local memory in front, followed by (potentially) integrated GPUs, * and further orders by memory capacity. */ int c_dbcsr_acc_opencl_order_devices(const void* /*dev_a*/, const void* /*dev_b*/); int c_dbcsr_acc_opencl_order_devices(const void* dev_a, const void* dev_b) { const cl_device_id* const a = (const cl_device_id*)dev_a; const cl_device_id* const b = (const cl_device_id*)dev_b; cl_device_type type_a = 0, type_b = 0; assert(NULL != a && NULL != b && a != b); ACC_OPENCL_EXPECT(EXIT_SUCCESS == clGetDeviceInfo(*a, CL_DEVICE_TYPE, sizeof(cl_device_type), &type_a, NULL)); ACC_OPENCL_EXPECT(EXIT_SUCCESS == clGetDeviceInfo(*b, CL_DEVICE_TYPE, sizeof(cl_device_type), &type_b, NULL)); if (CL_DEVICE_TYPE_DEFAULT & type_a) { return -1; } else if (CL_DEVICE_TYPE_DEFAULT & type_b) { return 1; } else { if (CL_DEVICE_TYPE_GPU & type_a) { if (CL_DEVICE_TYPE_GPU & type_b) { int unified_a, unified_b; size_t size_a, size_b; ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_info_devmem(*a, NULL, &size_a, NULL, &unified_a)); ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_info_devmem(*b, NULL, &size_b, NULL, &unified_b)); if ((0 == unified_a && 0 == unified_b) || (0 != unified_a && 0 != unified_b)) { return (size_a < size_b ? 1 : (size_a != size_b ? -1 : (a < b ? -1 : 1))); } /* discrete GPU goes in front */ else if (0 == unified_b) return 1; else return -1; } else return -1; } else if (CL_DEVICE_TYPE_GPU & type_b) { return 1; } else { if (CL_DEVICE_TYPE_CPU & type_a) { if (CL_DEVICE_TYPE_CPU & type_b) { size_t size_a, size_b; ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_info_devmem(*a, NULL, &size_a, NULL, NULL)); ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_info_devmem(*b, NULL, &size_b, NULL, NULL)); return (size_a < size_b ? 1 : (size_a != size_b ? -1 : (a < b ? -1 : 1))); } else return -1; } else if (CL_DEVICE_TYPE_CPU & type_b) { return 1; } else { size_t size_a = 0, size_b = 0; ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_info_devmem(*a, NULL, &size_a, NULL, NULL)); ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_info_devmem(*b, NULL, &size_b, NULL, NULL)); return (size_a < size_b ? 1 : (size_a != size_b ? -1 : (a < b ? -1 : 1))); } } } } /** Setup to run prior to touching OpenCL runtime. */ void c_dbcsr_acc_opencl_configure(void); void c_dbcsr_acc_opencl_configure(void) { const char* const env_rank = (NULL != getenv("PMI_RANK") ? getenv("PMI_RANK") : getenv("OMPI_COMM_WORLD_LOCAL_RANK")); const char* const env_nranks = getenv("MPI_LOCALNRANKS"); /* TODO */ const char *const env_devsplit = getenv("ACC_OPENCL_DEVSPLIT"), *const env_nlocks = getenv("ACC_OPENCL_NLOCKS"); const char *const env_verbose = getenv("ACC_OPENCL_VERBOSE"), *const env_dump_acc = getenv("ACC_OPENCL_DUMP"); const char *const env_debug = getenv("ACC_OPENCL_DEBUG"), *const env_profile = getenv("ACC_OPENCL_PROFILE"); const char* const env_dump = (NULL != env_dump_acc ? env_dump_acc : getenv("IGC_ShaderDumpEnable")); const char *const env_neo = getenv("NEOReadDebugKeys"), *const env_wa = getenv("ACC_OPENCL_WA"); static char neo_enable_debug_keys[] = "NEOReadDebugKeys=1"; # if defined(ACC_OPENCL_STREAM_PRIORITIES) const char* const env_priority = getenv("ACC_OPENCL_PRIORITY"); # endif # if defined(ACC_OPENCL_NCCS) const char* const env_nccs = getenv("ACC_OPENCL_NCCS"); const int nccs = (NULL == env_nccs ? ACC_OPENCL_NCCS : atoi(env_nccs)); # endif # if defined(ACC_OPENCL_XHINTS) const char* const env_xhints = (ACC_OPENCL_XHINTS); const int xhints_default = 1 + 2 + 4 + 8 + 16; # else const char* const env_xhints = NULL; const int xhints_default = 0; # endif # if defined(ACC_OPENCL_ASYNC) const char* const env_async = (ACC_OPENCL_ASYNC); const int async_default = 1 + 2 + 4 + 8; # else const char* const env_async = NULL; const int async_default = 0; # endif const int nlocks = (NULL == env_nlocks ? 1 /*default*/ : atoi(env_nlocks)); const int neo = (NULL == env_neo ? 1 : atoi(env_neo)); int i; # if defined(_OPENMP) const int max_threads = omp_get_max_threads(), num_threads = omp_get_num_threads(); memset(&c_dbcsr_acc_opencl_config, 0, sizeof(c_dbcsr_acc_opencl_config)); c_dbcsr_acc_opencl_config.nthreads = (num_threads < max_threads ? max_threads : num_threads); # else memset(&c_dbcsr_acc_opencl_config, 0, sizeof(c_dbcsr_acc_opencl_config)); c_dbcsr_acc_opencl_config.nthreads = 1; # endif assert(NULL == c_dbcsr_acc_opencl_config.lock_main); /* test condition to avoid initializing multiple times */ libxsmm_init(); /* before using LIBXSMM's functionality */ c_dbcsr_acc_opencl_config.nranks = LIBXSMM_MAX(NULL != env_nranks ? atoi(env_nranks) : 1, 1); c_dbcsr_acc_opencl_config.nrank = (NULL != env_rank ? atoi(env_rank) : 0) % c_dbcsr_acc_opencl_config.nranks; assert(sizeof(ACC_OPENCL_LOCKTYPE) <= ACC_OPENCL_CACHELINE); for (i = 0; i < ACC_OPENCL_NLOCKS; ++i) { ACC_OPENCL_INIT((ACC_OPENCL_LOCKTYPE*)(c_dbcsr_acc_opencl_locks + ACC_OPENCL_CACHELINE * i)); } c_dbcsr_acc_opencl_config.lock_main = (ACC_OPENCL_LOCKTYPE*)c_dbcsr_acc_opencl_locks; c_dbcsr_acc_opencl_config.lock_memory = /* 2nd lock-domain */ (1 < LIBXSMM_MIN(nlocks, ACC_OPENCL_NLOCKS) ? ((ACC_OPENCL_LOCKTYPE*)(c_dbcsr_acc_opencl_locks + ACC_OPENCL_CACHELINE * 1)) : c_dbcsr_acc_opencl_config.lock_main); c_dbcsr_acc_opencl_config.lock_stream = /* 3rd lock-domain */ (2 < LIBXSMM_MIN(nlocks, ACC_OPENCL_NLOCKS) ? ((ACC_OPENCL_LOCKTYPE*)(c_dbcsr_acc_opencl_locks + ACC_OPENCL_CACHELINE * 2)) : c_dbcsr_acc_opencl_config.lock_main); c_dbcsr_acc_opencl_config.lock_event = /* 4th lock-domain */ (3 < LIBXSMM_MIN(nlocks, ACC_OPENCL_NLOCKS) ? ((ACC_OPENCL_LOCKTYPE*)(c_dbcsr_acc_opencl_locks + ACC_OPENCL_CACHELINE * 3)) : c_dbcsr_acc_opencl_config.lock_main); c_dbcsr_acc_opencl_config.verbosity = (NULL == env_verbose ? 0 : atoi(env_verbose)); c_dbcsr_acc_opencl_config.devsplit = (NULL == env_devsplit ? (/*1 < c_dbcsr_acc_opencl_config.nranks ? -1 :*/ 0) : atoi(env_devsplit)); # if defined(ACC_OPENCL_STREAM_PRIORITIES) c_dbcsr_acc_opencl_config.priority = (NULL == env_priority ? /*default*/ 3 : atoi(env_priority)); # endif c_dbcsr_acc_opencl_config.profile = (NULL == env_profile ? /*default*/ 0 : atoi(env_profile)); c_dbcsr_acc_opencl_config.xhints = (NULL == env_xhints ? xhints_default : atoi(env_xhints)); c_dbcsr_acc_opencl_config.async = (NULL == env_async ? async_default : atoi(env_async)); c_dbcsr_acc_opencl_config.dump = (NULL == env_dump ? /*default*/ 0 : atoi(env_dump)); c_dbcsr_acc_opencl_config.debug = (NULL == env_debug ? c_dbcsr_acc_opencl_config.dump : atoi(env_debug)); c_dbcsr_acc_opencl_config.wa = neo * (NULL == env_wa ? ((1 != c_dbcsr_acc_opencl_config.devsplit ? 0 : 1) + (2 + 4 + 8)) : atoi(env_wa)); # if defined(ACC_OPENCL_CACHE_DIR) { /* environment is populated before touching the compute runtime */ const char *const env_cache = getenv("ACC_OPENCL_CACHE"), *env_cachedir = getenv("NEO_CACHE_DIR"); int cache = (NULL == env_cache ? 0 : atoi(env_cache)); struct stat cachedir; if (0 == cache) { if (stat(ACC_OPENCL_CACHE_DIR, &cachedir) == 0 && S_ISDIR(cachedir.st_mode)) cache = 1; else if (stat(ACC_OPENCL_TEMPDIR "/" ACC_OPENCL_CACHE_DIR, &cachedir) == 0 && S_ISDIR(cachedir.st_mode)) cache = 2; } if (1 == cache) { static char neo_cachedir[] = "NEO_CACHE_DIR=" ACC_OPENCL_CACHE_DIR; static char ocl_cachedir[] = "cl_cache_dir=" ACC_OPENCL_CACHE_DIR; ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(neo_cachedir)); /* putenv before entering OpenCL */ ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(ocl_cachedir)); /* putenv before entering OpenCL */ env_cachedir = ACC_OPENCL_CACHE_DIR; } # if defined(ACC_OPENCL_TEMPDIR) else if (NULL == env_cachedir) { /* code-path entered by default */ if (NULL == env_cache || 0 != cache) { /* customize NEO_CACHE_DIR unless ACC_OPENCL_CACHE=0 */ static char neo_cachedir[] = "NEO_CACHE_DIR=" ACC_OPENCL_TEMPDIR "/" ACC_OPENCL_CACHE_DIR; ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(neo_cachedir)); /* putenv before entering OpenCL */ env_cachedir = ACC_OPENCL_TEMPDIR "/" ACC_OPENCL_CACHE_DIR; } if (0 != cache) { /* legacy-NEO is treated with explicit opt-in */ static char ocl_cachedir[] = "cl_cache_dir=" ACC_OPENCL_TEMPDIR "/" ACC_OPENCL_CACHE_DIR; ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(ocl_cachedir)); /* putenv before entering OpenCL */ } } # endif if (NULL != env_cachedir) { # if defined(_WIN32) LIBXSMM_UNUSED(env_cachedir); # else # if defined(S_IRWXU) && defined(S_IRGRP) && defined(S_IXGRP) && defined(S_IROTH) && defined(S_IXOTH) const int mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; # else const int mode = 0xFFFFFFFF; # endif ACC_OPENCL_EXPECT(0 == mkdir(env_cachedir, mode) || EEXIST == errno); /* soft-error */ # endif } } # endif # if defined(ACC_OPENCL_NCCS) if (0 != nccs && NULL == getenv("ZEX_NUMBER_OF_CCS")) { static char zex_nccs[ACC_OPENCL_MAXNDEVS * 8 + 32] = "ZEX_NUMBER_OF_CCS="; const int mode = ((1 == nccs || 2 == nccs) ? nccs : 4); int j = strlen(zex_nccs); for (i = 0; i < ACC_OPENCL_MAXNDEVS; ++i) { const char* const istr = (0 < i ? ",%u:%i" : "%u:%i"); const int n = LIBXSMM_SNPRINTF(zex_nccs + j, sizeof(zex_nccs) - j, istr, i, mode); if (0 < n) j += n; else { j = 0; break; } } if (0 < j && 0 == LIBXSMM_PUTENV(zex_nccs) && /* populate before touching the compute runtime */ (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity)) { fprintf(stderr, "INFO ACC/OpenCL: support multiple separate compute command streamers (%i-CCS mode)\n", mode); } } # endif if (0 != neo && (NULL != env_neo || 0 == LIBXSMM_PUTENV(neo_enable_debug_keys))) { if ((1 + 2 + 4) & c_dbcsr_acc_opencl_config.wa) { static char a[] = "ZE_FLAT_DEVICE_HIERARCHY=COMPOSITE", b[] = "EnableRecoverablePageFaults=0"; static char c[] = "DirectSubmissionOverrideBlitterSupport=0", *const apply[] = {a, b, c}; if ((1 & c_dbcsr_acc_opencl_config.wa) && NULL == getenv("ZE_FLAT_DEVICE_HIERARCHY")) { ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(apply[0])); } # if (1 >= ACC_OPENCL_USM) if ((2 & c_dbcsr_acc_opencl_config.wa) && NULL == getenv("EnableRecoverablePageFaults")) { ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(apply[1])); } # endif if ((4 & c_dbcsr_acc_opencl_config.wa) && NULL == getenv("DirectSubmissionOverrideBlitterSupport")) { ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(apply[2])); } } if (0 != c_dbcsr_acc_opencl_config.debug && NULL == getenv("DisableScratchPages")) { static char a[] = "DisableScratchPages=1", *const apply[] = {a}; ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(apply[0])); } } } int c_dbcsr_acc_init(void) { # if defined(_OPENMP) /* initialization/finalization is not meant to be thread-safe */ int result = ((0 == omp_in_parallel() || /*main*/ 0 == omp_get_thread_num()) ? EXIT_SUCCESS : EXIT_FAILURE); # else int result = EXIT_SUCCESS; # endif # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (NULL == c_dbcsr_acc_opencl_config.lock_main) { /* avoid to configure multiple times */ c_dbcsr_acc_opencl_configure(); } if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # else if (NULL == c_dbcsr_acc_opencl_config.lock_main) { /* avoid to configure multiple times */ c_dbcsr_acc_opencl_configure(); } # endif /* eventually touch OpenCL/compute runtime after configure */ if (0 == c_dbcsr_acc_opencl_config.ndevices && EXIT_SUCCESS == result) { /* avoid to initialize multiple times */ char buffer[ACC_OPENCL_BUFFERSIZE]; cl_platform_id platforms[ACC_OPENCL_MAXNDEVS] = {NULL}; cl_device_id devices[ACC_OPENCL_MAXNDEVS]; cl_device_type type = CL_DEVICE_TYPE_ALL; cl_uint nplatforms = 0, ndevices = 0, i; const char* const env_devmatch = getenv("ACC_OPENCL_DEVMATCH"); const char* const env_devtype = getenv("ACC_OPENCL_DEVTYPE"); const char* const env_device = getenv("ACC_OPENCL_DEVICE"); char* const env_devids = getenv("ACC_OPENCL_DEVIDS"); int device_id = (NULL == env_device ? 0 : atoi(env_device)); # if defined(ACC_OPENCL_CACHE_DID) assert(0 == c_dbcsr_acc_opencl_active_id); # endif if (EXIT_SUCCESS != c_dbcsr_acc_opencl_device_uid(NULL /*device*/, env_devmatch, &c_dbcsr_acc_opencl_config.devmatch)) { c_dbcsr_acc_opencl_config.devmatch = 1; } if (EXIT_SUCCESS == clGetPlatformIDs(0, NULL, &nplatforms) && 0 < nplatforms) { ACC_OPENCL_CHECK(result, clGetPlatformIDs(nplatforms <= ACC_OPENCL_MAXNDEVS ? nplatforms : ACC_OPENCL_MAXNDEVS, platforms, 0), "retrieve platform ids"); } if (EXIT_SUCCESS == result) { if (NULL != env_devtype && '\0' != *env_devtype) { if (NULL != LIBXSMM_STRISTR(env_devtype, "gpu")) { type = CL_DEVICE_TYPE_GPU; } else if (NULL != LIBXSMM_STRISTR(env_devtype, "cpu")) { type = CL_DEVICE_TYPE_CPU; } else if (NULL != LIBXSMM_STRISTR(env_devtype, "acc") || NULL != LIBXSMM_STRISTR(env_devtype, "other")) { type = CL_DEVICE_TYPE_ACCELERATOR; } else { type = CL_DEVICE_TYPE_ALL; } } c_dbcsr_acc_opencl_config.ndevices = 0; for (i = 0; i < nplatforms; ++i) { if (EXIT_SUCCESS == clGetDeviceIDs(platforms[i], type, 0, NULL, &ndevices) && 0 < ndevices) { ACC_OPENCL_CHECK(result, clGetDeviceIDs(platforms[i], type, ndevices, devices, NULL), "retrieve device ids"); if (EXIT_SUCCESS == result) { cl_uint j = 0; for (; j < ndevices; ++j) { # if defined(CL_VERSION_1_2) cl_device_partition_property properties[] = { CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN, CL_DEVICE_AFFINITY_DOMAIN_NUMA, /*terminator*/ 0}; cl_uint nunits = 0, n = 0; if ((1 < c_dbcsr_acc_opencl_config.devsplit || 0 > c_dbcsr_acc_opencl_config.devsplit) && /* Intel CPU (e.g., out of two sockets) yields thread-count of both sockets */ EXIT_SUCCESS == clGetDeviceInfo(devices[j], CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(cl_uint), &nunits, NULL) && 1 < nunits) { n = LIBXSMM_MIN(1 < c_dbcsr_acc_opencl_config.devsplit ? (cl_uint)c_dbcsr_acc_opencl_config.devsplit : nunits, ACC_OPENCL_MAXNDEVS); properties[0] = CL_DEVICE_PARTITION_EQUALLY; properties[1] = (nunits + n - 1) / n; } if (0 == c_dbcsr_acc_opencl_config.devsplit || 1 == c_dbcsr_acc_opencl_config.devsplit || (c_dbcsr_acc_opencl_config.ndevices + 1) == ACC_OPENCL_MAXNDEVS || EXIT_SUCCESS != clCreateSubDevices(devices[j], properties, 0, NULL, &n)) # endif { c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.ndevices] = devices[j]; ++c_dbcsr_acc_opencl_config.ndevices; } # if defined(CL_VERSION_1_2) else if (1 < n) { /* create subdevices */ if (ACC_OPENCL_MAXNDEVS < (c_dbcsr_acc_opencl_config.ndevices + n)) { n = (cl_uint)ACC_OPENCL_MAXNDEVS - c_dbcsr_acc_opencl_config.ndevices; } if (EXIT_SUCCESS == clCreateSubDevices(devices[j], properties, n, c_dbcsr_acc_opencl_config.devices + c_dbcsr_acc_opencl_config.ndevices, NULL)) { ACC_OPENCL_CHECK(result, clReleaseDevice(devices[j]), "release device"); c_dbcsr_acc_opencl_config.ndevices += n; } else break; } else { c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.ndevices] = devices[j]; ++c_dbcsr_acc_opencl_config.ndevices; } # endif } } /*else break;*/ } } } if (EXIT_SUCCESS == result && 0 < c_dbcsr_acc_opencl_config.ndevices) { const char* const env_vendor = getenv("ACC_OPENCL_VENDOR"); /* filter device by vendor (if requested) */ if (NULL != env_vendor && '\0' != *env_vendor) { for (i = 0; (int)i < c_dbcsr_acc_opencl_config.ndevices;) { if (EXIT_SUCCESS == clGetDeviceInfo(c_dbcsr_acc_opencl_config.devices[i], CL_DEVICE_VENDOR, ACC_OPENCL_BUFFERSIZE, buffer, NULL)) { if (NULL == LIBXSMM_STRISTR(buffer, env_vendor)) { # if defined(CL_VERSION_1_2) ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseDevice(c_dbcsr_acc_opencl_config.devices[i])); # endif --c_dbcsr_acc_opencl_config.ndevices; if ((int)i < c_dbcsr_acc_opencl_config.ndevices) { /* keep original order (stable) */ memmove(&c_dbcsr_acc_opencl_config.devices[i], &c_dbcsr_acc_opencl_config.devices[i + 1], sizeof(cl_device_id) * (c_dbcsr_acc_opencl_config.ndevices - i)); } } else ++i; } else break; /* error: retrieving device vendor */ } } /* reorder devices according to c_dbcsr_acc_opencl_order_devices */ if (EXIT_SUCCESS == result && 1 < c_dbcsr_acc_opencl_config.ndevices) { qsort(c_dbcsr_acc_opencl_config.devices, c_dbcsr_acc_opencl_config.ndevices, sizeof(cl_device_id), c_dbcsr_acc_opencl_order_devices); } /* ACC_OPENCL_DEVIDS is parsed as a list of devices (whitelist) */ if (EXIT_SUCCESS == result && NULL != env_devids && '\0' != *env_devids) { cl_uint devids[ACC_OPENCL_MAXNDEVS], ndevids = 0; char* did = strtok(env_devids, ACC_OPENCL_DELIMS " "); for (; NULL != did && ndevids < ACC_OPENCL_MAXNDEVS; did = strtok(NULL, ACC_OPENCL_DELIMS " ")) { const int id = atoi(did); if (0 <= id && id < c_dbcsr_acc_opencl_config.ndevices) devids[ndevids++] = id; } if (0 < ndevids) { ndevices = (cl_uint)c_dbcsr_acc_opencl_config.ndevices; for (i = 0; i < ndevices; ++i) { cl_uint match = 0, j = 0; do if (i == devids[j]) { match = 1; break; } while (++j < ndevids); if (0 == match) { # if defined(CL_VERSION_1_2) ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseDevice(c_dbcsr_acc_opencl_config.devices[i])); # endif c_dbcsr_acc_opencl_config.devices[i] = NULL; } } for (i = c_dbcsr_acc_opencl_config.ndevices - 1;; --i) { if (NULL == c_dbcsr_acc_opencl_config.devices[i]) { /* keep original order (stable) */ const cl_uint nmove = c_dbcsr_acc_opencl_config.ndevices - (i + 1); if (0 < nmove) { memmove( &c_dbcsr_acc_opencl_config.devices[i], &c_dbcsr_acc_opencl_config.devices[i + 1], sizeof(cl_device_id) * nmove); } --c_dbcsr_acc_opencl_config.ndevices; } if (0 == i) break; } } } } if (EXIT_SUCCESS == result && 0 < c_dbcsr_acc_opencl_config.ndevices) { /* preselect any default device or prune to homogeneous set of devices */ if (NULL == env_device || '\0' == *env_device) { char tmp[ACC_OPENCL_BUFFERSIZE] = ""; ndevices = (cl_uint)c_dbcsr_acc_opencl_config.ndevices; for (i = 0; i < ndevices; ++i) { cl_device_type itype; result = clGetDeviceInfo(c_dbcsr_acc_opencl_config.devices[i], CL_DEVICE_TYPE, sizeof(cl_device_type), &itype, NULL); if (EXIT_SUCCESS == result) { if (0 != (CL_DEVICE_TYPE_DEFAULT & itype)) { if (0 < i) { c_dbcsr_acc_opencl_config.devices[0] = c_dbcsr_acc_opencl_config.devices[i]; } c_dbcsr_acc_opencl_config.ndevices = 1; device_id = 0; break; } else if (CL_DEVICE_TYPE_ALL == type && NULL == env_devtype /*&& CL_DEVICE_TYPE_GPU == itype*/ && device_id <= (int)i) { result = clGetDeviceInfo(c_dbcsr_acc_opencl_config.devices[i], CL_DEVICE_NAME, ACC_OPENCL_BUFFERSIZE, buffer, NULL); if (EXIT_SUCCESS == result /* prune for homogeneous set of devices */ && ('\0' == *tmp || 0 == strncmp(buffer, tmp, ACC_OPENCL_BUFFERSIZE))) { c_dbcsr_acc_opencl_config.ndevices = i + 1; strncpy(tmp, buffer, ACC_OPENCL_BUFFERSIZE); } else break; /* error: retrieving device name */ } } else break; /* error: retrieving device type */ } } else { /* prune number of devices to only expose requested ID */ if (1 < c_dbcsr_acc_opencl_config.ndevices) { if (0 < device_id) { c_dbcsr_acc_opencl_config.devices[0] = c_dbcsr_acc_opencl_config.devices[device_id % c_dbcsr_acc_opencl_config.ndevices]; } c_dbcsr_acc_opencl_config.ndevices = 1; } device_id = 0; } } if (device_id < c_dbcsr_acc_opencl_config.ndevices) { if (EXIT_SUCCESS == result) { const size_t nhandles = ACC_OPENCL_MAXNITEMS * c_dbcsr_acc_opencl_config.nthreads; assert(0 < c_dbcsr_acc_opencl_config.ndevices); assert(c_dbcsr_acc_opencl_config.ndevices < ACC_OPENCL_MAXNDEVS); assert(NULL == c_dbcsr_acc_opencl_config.memptrs); assert(NULL == c_dbcsr_acc_opencl_config.memptr_data); assert(0 == c_dbcsr_acc_opencl_config.nmemptrs); assert(NULL == c_dbcsr_acc_opencl_config.streams); assert(NULL == c_dbcsr_acc_opencl_config.events); assert(NULL == c_dbcsr_acc_opencl_config.stream_data); assert(NULL == c_dbcsr_acc_opencl_config.event_data); assert(0 == c_dbcsr_acc_opencl_config.nstreams); assert(0 == c_dbcsr_acc_opencl_config.nevents); /* allocate and initialize memptr registry */ c_dbcsr_acc_opencl_config.nmemptrs = nhandles; c_dbcsr_acc_opencl_config.memptrs = (c_dbcsr_acc_opencl_info_memptr_t**)malloc( sizeof(c_dbcsr_acc_opencl_info_memptr_t*) * nhandles); c_dbcsr_acc_opencl_config.memptr_data = (c_dbcsr_acc_opencl_info_memptr_t*)malloc( sizeof(c_dbcsr_acc_opencl_info_memptr_t) * nhandles); if (NULL != c_dbcsr_acc_opencl_config.memptrs && NULL != c_dbcsr_acc_opencl_config.memptr_data) { c_dbcsr_acc_opencl_pmalloc_init(sizeof(c_dbcsr_acc_opencl_info_memptr_t), &c_dbcsr_acc_opencl_config.nmemptrs, (void**)c_dbcsr_acc_opencl_config.memptrs, c_dbcsr_acc_opencl_config.memptr_data); } else { free(c_dbcsr_acc_opencl_config.memptrs); free(c_dbcsr_acc_opencl_config.memptr_data); c_dbcsr_acc_opencl_config.memptr_data = NULL; c_dbcsr_acc_opencl_config.memptrs = NULL; c_dbcsr_acc_opencl_config.nmemptrs = 0; result = EXIT_FAILURE; } /* allocate and initialize streams registry */ c_dbcsr_acc_opencl_config.nstreams = nhandles; c_dbcsr_acc_opencl_config.streams = (c_dbcsr_acc_opencl_stream_t**)malloc(sizeof(c_dbcsr_acc_opencl_stream_t*) * nhandles); c_dbcsr_acc_opencl_config.stream_data = (c_dbcsr_acc_opencl_stream_t*)malloc( sizeof(c_dbcsr_acc_opencl_stream_t) * nhandles); if (NULL != c_dbcsr_acc_opencl_config.streams && NULL != c_dbcsr_acc_opencl_config.stream_data) { c_dbcsr_acc_opencl_pmalloc_init(sizeof(c_dbcsr_acc_opencl_stream_t), &c_dbcsr_acc_opencl_config.nstreams, (void**)c_dbcsr_acc_opencl_config.streams, c_dbcsr_acc_opencl_config.stream_data); } else { free(c_dbcsr_acc_opencl_config.streams); free(c_dbcsr_acc_opencl_config.stream_data); c_dbcsr_acc_opencl_config.stream_data = NULL; c_dbcsr_acc_opencl_config.streams = NULL; c_dbcsr_acc_opencl_config.nstreams = 0; result = EXIT_FAILURE; } /* allocate and initialize events registry */ c_dbcsr_acc_opencl_config.nevents = nhandles; c_dbcsr_acc_opencl_config.events = (cl_event**)malloc(sizeof(cl_event*) * nhandles); c_dbcsr_acc_opencl_config.event_data = (cl_event*)malloc(sizeof(cl_event) * nhandles); if (NULL != c_dbcsr_acc_opencl_config.events && NULL != c_dbcsr_acc_opencl_config.event_data) { c_dbcsr_acc_opencl_pmalloc_init(sizeof(cl_event*), &c_dbcsr_acc_opencl_config.nevents, (void**)c_dbcsr_acc_opencl_config.events, c_dbcsr_acc_opencl_config.event_data); } else { free(c_dbcsr_acc_opencl_config.events); free(c_dbcsr_acc_opencl_config.event_data); c_dbcsr_acc_opencl_config.event_data = NULL; c_dbcsr_acc_opencl_config.events = NULL; c_dbcsr_acc_opencl_config.nevents = 0; result = EXIT_FAILURE; } if ( # if defined(ACC_OPENCL_PROFILE_DBCSR) 2 <= c_dbcsr_acc_opencl_config.profile || # else 1 <= c_dbcsr_acc_opencl_config.profile || # endif 0 > c_dbcsr_acc_opencl_config.profile) { const char* const env_qsize = getenv("ACC_OPENCL_PROFILE_QSIZE"); const int psize = (NULL == env_qsize ? 0 : atoi(env_qsize)); const int qsize = (0 >= psize ? 1024 : LIBXSMM_MIN(psize, 65536)); const int profile = LIBXSMM_MAX(LIBXSMM_ABS(c_dbcsr_acc_opencl_config.profile), 2); const c_dbcsr_acc_opencl_hist_update_fn update[] = {c_dbcsr_acc_opencl_hist_avg, c_dbcsr_acc_opencl_hist_add}; c_dbcsr_acc_opencl_hist_create(&c_dbcsr_acc_opencl_config.hist_h2d, profile + 1, qsize, 2, update); c_dbcsr_acc_opencl_hist_create(&c_dbcsr_acc_opencl_config.hist_d2h, profile + 1, qsize, 2, update); c_dbcsr_acc_opencl_hist_create(&c_dbcsr_acc_opencl_config.hist_d2d, profile + 1, qsize, 2, update); } else { assert(NULL == c_dbcsr_acc_opencl_config.hist_h2d); assert(NULL == c_dbcsr_acc_opencl_config.hist_d2h); assert(NULL == c_dbcsr_acc_opencl_config.hist_d2d); } if (EXIT_SUCCESS == result) { /* lastly, print active device and list of devices */ # if defined(ACC_OPENCL_ACTIVATE) if (0 <= ACC_OPENCL_ACTIVATE && ACC_OPENCL_ACTIVATE < c_dbcsr_acc_opencl_config.ndevices) { result = c_dbcsr_acc_opencl_set_active_device(NULL /*lock*/, ACC_OPENCL_ACTIVATE); } else { if (0 < c_dbcsr_acc_opencl_config.nrank && 1 < c_dbcsr_acc_opencl_config.ndevices) { device_id = c_dbcsr_acc_opencl_config.nrank % c_dbcsr_acc_opencl_config.ndevices; } result = c_dbcsr_acc_opencl_set_active_device(NULL /*lock*/, device_id); } # else c_dbcsr_acc_opencl_config.device_id = device_id; # endif if ((2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) && (0 == c_dbcsr_acc_opencl_config.nrank)) { char platform_name[ACC_OPENCL_BUFFERSIZE]; for (i = 0; i < (cl_uint)c_dbcsr_acc_opencl_config.ndevices; ++i) { if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_name(c_dbcsr_acc_opencl_config.devices[i], buffer, ACC_OPENCL_BUFFERSIZE, platform_name, ACC_OPENCL_BUFFERSIZE, /*cleanup*/ 0)) { fprintf(stderr, "INFO ACC/OpenCL: DEVICE -> \"%s : %s\" (%u)\n", platform_name, buffer, i); } } } } } } else { /* mark as initialized */ c_dbcsr_acc_opencl_config.ndevices = -1; } # if defined(__DBCSR_ACC) /* DBCSR shall call c_dbcsr_acc_init as well as libsmm_acc_init (since both interfaces are used). * Also, libsmm_acc_init may privately call c_dbcsr_acc_init (as it depends on the ACC interface). * The implementation of c_dbcsr_acc_init should hence be safe against "over initialization". * However, DBCSR only calls c_dbcsr_acc_init (and expects an implicit libsmm_acc_init). */ if (EXIT_SUCCESS == result) result = libsmm_acc_init(); # endif } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } /* attempt to automatically initialize backend */ LIBXSMM_ATTRIBUTE_CTOR void c_dbcsr_acc_opencl_init(void) { if (NULL == c_dbcsr_acc_opencl_config.lock_main) { /* avoid to configure multiple times */ c_dbcsr_acc_opencl_configure(); } # if defined(ACC_OPENCL_PREINIT) ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_init()); # endif } /* attempt to automatically finalize backend */ LIBXSMM_ATTRIBUTE_DTOR void c_dbcsr_acc_opencl_finalize(void) { assert(c_dbcsr_acc_opencl_config.ndevices < ACC_OPENCL_MAXNDEVS); if (0 != c_dbcsr_acc_opencl_config.ndevices) { const int precision[] = {0, 1}; int i; LIBXSMM_STDIO_ACQUIRE(); c_dbcsr_acc_opencl_hist_print(stderr, c_dbcsr_acc_opencl_config.hist_h2d, "\nPROF ACC/OpenCL: H2D", precision, NULL /*adjust*/); c_dbcsr_acc_opencl_hist_print(stderr, c_dbcsr_acc_opencl_config.hist_d2h, "\nPROF ACC/OpenCL: D2H", precision, NULL /*adjust*/); c_dbcsr_acc_opencl_hist_print(stderr, c_dbcsr_acc_opencl_config.hist_d2d, "\nPROF ACC/OpenCL: D2D", precision, NULL /*adjust*/); LIBXSMM_STDIO_RELEASE(); for (i = 0; i < ACC_OPENCL_MAXNDEVS; ++i) { const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[i]; if (NULL != device_id) { # if defined(CL_VERSION_1_2) && 0 /* avoid potential segfault */ ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseDevice(device_id)); # endif } } if (NULL != c_dbcsr_acc_opencl_config.device.stream.queue) { /* release private stream */ clReleaseCommandQueue(c_dbcsr_acc_opencl_config.device.stream.queue); /* ignore return code */ } if (NULL != c_dbcsr_acc_opencl_config.device.context) { const cl_context context = c_dbcsr_acc_opencl_config.device.context; c_dbcsr_acc_opencl_config.device.context = NULL; clReleaseContext(context); /* ignore return code */ } for (i = 0; i < ACC_OPENCL_NLOCKS; ++i) { /* destroy locks */ ACC_OPENCL_DESTROY((ACC_OPENCL_LOCKTYPE*)(c_dbcsr_acc_opencl_locks + ACC_OPENCL_CACHELINE * i)); } /* release/reset buffers */ c_dbcsr_acc_opencl_hist_free(c_dbcsr_acc_opencl_config.hist_h2d); c_dbcsr_acc_opencl_hist_free(c_dbcsr_acc_opencl_config.hist_d2h); c_dbcsr_acc_opencl_hist_free(c_dbcsr_acc_opencl_config.hist_d2d); free(c_dbcsr_acc_opencl_config.memptrs); free(c_dbcsr_acc_opencl_config.memptr_data); free(c_dbcsr_acc_opencl_config.streams); free(c_dbcsr_acc_opencl_config.stream_data); free(c_dbcsr_acc_opencl_config.events); free(c_dbcsr_acc_opencl_config.event_data); /* clear entire configuration structure */ memset(&c_dbcsr_acc_opencl_config, 0, sizeof(c_dbcsr_acc_opencl_config)); # if defined(ACC_OPENCL_CACHE_DID) c_dbcsr_acc_opencl_active_id = 0; /* reset cached active device-ID */ # endif libxsmm_finalize(); } } int c_dbcsr_acc_finalize(void) { # if defined(_OPENMP) /* initialization/finalization is not meant to be thread-safe */ int result = ((0 == omp_in_parallel() || /*main*/ 0 == omp_get_thread_num()) ? EXIT_SUCCESS : EXIT_FAILURE); # else int result = EXIT_SUCCESS; # endif static void (*cleanup)(void) = c_dbcsr_acc_opencl_finalize; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif assert(c_dbcsr_acc_opencl_config.ndevices < ACC_OPENCL_MAXNDEVS); if (0 != c_dbcsr_acc_opencl_config.ndevices && NULL != cleanup) { # if defined(__DBCSR_ACC) /* DBCSR may call c_dbcsr_acc_init as well as libsmm_acc_init() since both interface are used. * libsmm_acc_init may privately call c_dbcsr_acc_init (as it depends on the ACC interface). * The implementation of c_dbcsr_acc_init should be safe against "over initialization". * However, DBCSR only calls c_dbcsr_acc_init and expects an implicit libsmm_acc_init(). */ if (EXIT_SUCCESS == result) result = libsmm_acc_finalize(); # endif if (EXIT_SUCCESS == result) result = atexit(cleanup); cleanup = NULL; } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_opencl_use_cmem(const c_dbcsr_acc_opencl_device_t* devinfo) { # if defined(ACC_OPENCL_CMEM) return (0 != devinfo->size_maxalloc && devinfo->size_maxalloc <= devinfo->size_maxcmem) ? EXIT_SUCCESS : EXIT_FAILURE; # else return EXIT_FAILURE; # endif } void c_dbcsr_acc_clear_errors(void) {} int c_dbcsr_acc_get_ndevices(int* ndevices) { int result; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif # if defined(__DBCSR_ACC) /* lazy initialization */ /* DBCSR calls c_dbcsr_acc_get_ndevices before calling c_dbcsr_acc_init. */ result = c_dbcsr_acc_init(); if (EXIT_SUCCESS == result) # endif { if (NULL != ndevices && 0 != c_dbcsr_acc_opencl_config.ndevices) { *ndevices = (0 < c_dbcsr_acc_opencl_config.ndevices ? c_dbcsr_acc_opencl_config.ndevices : 0); result = EXIT_SUCCESS; } else result = EXIT_FAILURE; } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_opencl_device_id(cl_device_id device, int* device_id, int* global_id) { int result = EXIT_SUCCESS, i; assert(c_dbcsr_acc_opencl_config.ndevices < ACC_OPENCL_MAXNDEVS); assert(NULL != device_id || NULL != global_id); for (i = 0; i < c_dbcsr_acc_opencl_config.ndevices; ++i) { if (device == c_dbcsr_acc_opencl_config.devices[i]) break; } if (i < c_dbcsr_acc_opencl_config.ndevices) { if (NULL != device_id) *device_id = i; if (NULL != global_id) { *global_id = i; for (++i; i < ACC_OPENCL_MAXNDEVS; ++i) { if (NULL != c_dbcsr_acc_opencl_config.devices[i]) { if (device == c_dbcsr_acc_opencl_config.devices[i]) { *global_id = i; break; } } else break; } } } else { if (NULL != device_id) *device_id = -1; if (NULL != global_id) *global_id = -1; if (NULL != device) result = EXIT_FAILURE; } return result; } int c_dbcsr_acc_opencl_device_vendor(cl_device_id device, const char vendor[], int use_platform_name) { char buffer[ACC_OPENCL_BUFFERSIZE]; int result = EXIT_SUCCESS; assert(NULL != device && NULL != vendor); if (0 == use_platform_name) { result = clGetDeviceInfo(device, CL_DEVICE_VENDOR, ACC_OPENCL_BUFFERSIZE, buffer, NULL); } else { cl_platform_id platform; result = clGetDeviceInfo(device, CL_DEVICE_PLATFORM, sizeof(cl_platform_id), &platform, NULL); if (EXIT_SUCCESS == result) { result = clGetPlatformInfo( platform, 1 == use_platform_name ? CL_PLATFORM_NAME : CL_PLATFORM_VENDOR, ACC_OPENCL_BUFFERSIZE, buffer, NULL); } } if (EXIT_SUCCESS == result) { result = (NULL != LIBXSMM_STRISTR(buffer, vendor) ? EXIT_SUCCESS : EXIT_FAILURE); } return result; } int c_dbcsr_acc_opencl_device_uid(cl_device_id device, const char devname[], unsigned int* uid) { int result; if (NULL != uid) { if (NULL != device && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(device, "intel", 0 /*use_platform_name*/)) { result = clGetDeviceInfo(device, 0x4251 /*CL_DEVICE_ID_INTEL*/, sizeof(unsigned int), uid, NULL); } else result = EXIT_FAILURE; if (EXIT_SUCCESS != result) { if (NULL != devname && '\0' != *devname) { *uid = (unsigned int)strtoul(devname, NULL, 0); if (0 == *uid) { const char *const begin = strrchr(devname, '['), *const end = strrchr(devname, ']'); if (NULL != begin && begin < end) { *uid = (unsigned int)strtoul(begin + 1, NULL, 0); } if (0 == *uid) { const size_t size = strlen(devname); const unsigned int hash = libxsmm_hash(devname, (unsigned int)size, 25071975 /*seed*/); *uid = libxsmm_hash(&hash, 4 /*size*/, hash >> 16 /*seed*/) & 0xFFFF; } } result = EXIT_SUCCESS; } else { result = EXIT_FAILURE; *uid = 0; } } } else result = EXIT_FAILURE; return result; } int c_dbcsr_acc_opencl_device_name( cl_device_id device, char name[], size_t name_maxlen, char platform[], size_t platform_maxlen, int cleanup) { int result_name = 0, result_platform = 0; assert(NULL != name || NULL != platform); if (NULL == device && 0 < c_dbcsr_acc_opencl_config.ndevices) { device = c_dbcsr_acc_opencl_config.devices[0]; /* NULL-device refers to device 0 */ } if (NULL != name && 0 != name_maxlen) { result_name = clGetDeviceInfo(device, CL_DEVICE_NAME, name_maxlen, name, NULL); if (0 != cleanup && EXIT_SUCCESS == result_name) { char* const part = strchr(name, ':'); if (NULL != part) *part = '\0'; } } if (NULL != platform && 0 != platform_maxlen) { cl_platform_id platform_id; result_platform = clGetDeviceInfo(device, CL_DEVICE_PLATFORM, sizeof(cl_platform_id), &platform_id, NULL); if (EXIT_SUCCESS == result_platform) { result_platform = clGetPlatformInfo(platform_id, CL_PLATFORM_NAME, platform_maxlen, platform, NULL); } } return result_name | result_platform; } int c_dbcsr_acc_opencl_device_level( cl_device_id device, int std_clevel[2], int std_level[2], char std_flag[16], cl_device_type* type) { char buffer[ACC_OPENCL_BUFFERSIZE]; unsigned int std_clevel_uint[2] = {0}, std_level_uint[2] = {0}; int result = EXIT_SUCCESS; assert(NULL != device && (NULL != std_clevel || NULL != std_level || NULL != std_flag || NULL != type)); result = clGetDeviceInfo(device, CL_DEVICE_OPENCL_C_VERSION, ACC_OPENCL_BUFFERSIZE / 2, buffer, NULL); if (EXIT_SUCCESS == result && (NULL != std_clevel || NULL != std_flag)) { if (2 == sscanf(buffer, "OpenCL C %u.%u", std_clevel_uint, std_clevel_uint + 1)) { std_clevel[0] = (int)std_clevel_uint[0]; std_clevel[1] = (int)std_clevel_uint[1]; } else result = EXIT_FAILURE; } if (EXIT_SUCCESS == result && (NULL != std_level || NULL != std_flag)) { result = clGetDeviceInfo( device, CL_DEVICE_VERSION, ACC_OPENCL_BUFFERSIZE - ACC_OPENCL_BUFFERSIZE / 2, buffer + ACC_OPENCL_BUFFERSIZE / 2, NULL); if (EXIT_SUCCESS == result) { if (2 == sscanf(buffer + ACC_OPENCL_BUFFERSIZE / 2, "OpenCL %u.%u", std_level_uint, std_level_uint + 1)) { std_level[0] = (int)std_level_uint[0]; std_level[1] = (int)std_level_uint[1]; } else result = EXIT_FAILURE; } } if (EXIT_SUCCESS == result && NULL != std_flag) { if (2 <= std_level_uint[0]) { const int nchar = LIBXSMM_SNPRINTF(std_flag, 16, "-cl-std=CL%u.0", std_level_uint[0]); if (0 >= nchar || 16 <= nchar) result = EXIT_FAILURE; } else if (1 <= std_level_uint[0]) { if (1 <= std_level_uint[1]) { const int nchar = LIBXSMM_SNPRINTF(std_flag, 16, "-cl-std=CL%u.%u", std_level_uint[0], std_level_uint[1]); if (0 >= nchar || 16 <= nchar) result = EXIT_FAILURE; } else if (1 <= std_clevel_uint[0]) { /* fallback */ const int nchar = LIBXSMM_SNPRINTF(std_flag, 16, "-cl-std=CL%u.%u", std_clevel_uint[0], std_clevel_uint[1]); if (0 >= nchar || 16 <= nchar) result = EXIT_FAILURE; } else *std_flag = '\0'; /* not an error */ } else *std_flag = '\0'; /* not an error */ } if (EXIT_SUCCESS == result && NULL != type) { result = clGetDeviceInfo(device, CL_DEVICE_TYPE, sizeof(cl_device_type), type, NULL); } if (EXIT_SUCCESS != result) { if (NULL != std_clevel) std_clevel[0] = std_clevel[1] = 0; if (NULL != std_level) std_level[0] = std_level[1] = 0; if (NULL != std_flag) *std_flag = '\0'; if (NULL != type) *type = 0; } return result; } int c_dbcsr_acc_opencl_device_ext(cl_device_id device, const char* const extnames[], int num_exts) { int result = ((NULL != extnames && 0 < num_exts) ? EXIT_SUCCESS : EXIT_FAILURE); char extensions[ACC_OPENCL_BUFFERSIZE], buffer[ACC_OPENCL_BUFFERSIZE]; assert(NULL != device); ACC_OPENCL_CHECK( result, clGetDeviceInfo(device, CL_DEVICE_EXTENSIONS, ACC_OPENCL_BUFFERSIZE, extensions, NULL), "retrieve device extensions"); if (EXIT_SUCCESS == result) { do { if (NULL != extnames[--num_exts]) { const char* const end = buffer + strlen(extnames[num_exts]); /* before strtok */ char* ext = strtok(strncpy(buffer, extnames[num_exts], ACC_OPENCL_BUFFERSIZE - 1), ACC_OPENCL_DELIMS " \t"); for (; NULL != ext; ext = ((ext + 1) < end ? strtok((ext + 1) + strlen(ext), ACC_OPENCL_DELIMS " \t") : NULL)) { if (NULL == strstr(extensions, ext)) { return EXIT_FAILURE; } } } } while (0 < num_exts); } return result; } int c_dbcsr_acc_opencl_create_context(cl_device_id active_id, cl_context* context) { cl_platform_id platform = NULL; int result; assert(0 < c_dbcsr_acc_opencl_config.ndevices); assert(NULL != active_id && NULL != context); result = clGetDeviceInfo(active_id, CL_DEVICE_PLATFORM, sizeof(cl_platform_id), &platform, NULL); assert(EXIT_SUCCESS != result || NULL != platform); if (EXIT_SUCCESS == result) { void (*const notify)( const char*, const void*, size_t, void*) = (0 != c_dbcsr_acc_opencl_config.verbosity ? c_dbcsr_acc_opencl_notify : NULL); cl_context_properties properties[] = { CL_CONTEXT_PLATFORM, 0 /*placeholder*/, 0 /* end of properties */ }; cl_context ctx = NULL; properties[1] = (long)platform; ctx = clCreateContext(properties, 1 /*num_devices*/, &active_id, notify, NULL /* user_data*/, &result); if (EXIT_SUCCESS != result && CL_INVALID_DEVICE != result) { /* retry */ ctx = clCreateContext(NULL /*properties*/, 1 /*num_devices*/, &active_id, notify, NULL /* user_data*/, &result); } if (EXIT_SUCCESS == result) { assert(NULL != ctx); *context = ctx; if (0 != c_dbcsr_acc_opencl_config.verbosity) { char buffer[ACC_OPENCL_BUFFERSIZE]; int global_id = 0; if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_name( active_id, buffer, ACC_OPENCL_BUFFERSIZE, NULL /*platform*/, 0 /*platform_maxlen*/, /*cleanup*/ 1) && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_id(active_id, NULL /*devid*/, &global_id)) { const size_t size = strlen(buffer); unsigned int uid[] = {0, 0}; if ((EXIT_SUCCESS == c_dbcsr_acc_opencl_device_uid(NULL /*device*/, buffer, uid + 1)) && (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_uid(active_id, NULL /*devname*/, uid) || 0 != uid[1]) && uid[0] != uid[1]) { ACC_OPENCL_EXPECT(0 < LIBXSMM_SNPRINTF(buffer + size, LIBXSMM_MAX(0, ACC_OPENCL_BUFFERSIZE - size), " [0x%04x]", 0 != uid[0] ? uid[0] : uid[1])); } fprintf(stderr, "INFO ACC/OpenCL: ndevices=%i device%i=\"%s\" context=%p pid=%u nthreads=%i\n", c_dbcsr_acc_opencl_config.ndevices, global_id, buffer, (void*)ctx, libxsmm_get_pid(), c_dbcsr_acc_opencl_config.nthreads); } } } else { if (CL_INVALID_DEVICE == result && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(active_id, "nvidia", 0 /*use_platform_name*/)) { fprintf(stderr, "WARN ACC/OpenCL: if MPI-ranks target the same device in exclusive mode,\n" " SMI must be used to enable sharing the device.\n"); } *context = NULL; } } return result; } int c_dbcsr_acc_opencl_set_active_device(ACC_OPENCL_LOCKTYPE* lock, int device_id) { c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; int result = EXIT_SUCCESS; assert(c_dbcsr_acc_opencl_config.ndevices < ACC_OPENCL_MAXNDEVS); if (0 <= device_id && device_id < c_dbcsr_acc_opencl_config.ndevices) { /* accessing devices is thread-safe (array is fixed after initialization) */ const cl_device_id active_id = c_dbcsr_acc_opencl_config.devices[device_id]; if (NULL != active_id) { cl_context context = NULL; if (NULL != lock) ACC_OPENCL_ACQUIRE(lock); context = devinfo->context; if (NULL != context) { if (device_id != c_dbcsr_acc_opencl_config.device_id) { const cl_device_id context_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id]; assert(NULL != context_id); # if defined(CL_VERSION_1_2) ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseDevice(context_id)); # endif result = clReleaseContext(context); context = NULL; } } if (EXIT_SUCCESS == result && (NULL == devinfo->context || device_id != c_dbcsr_acc_opencl_config.device_id)) { result = c_dbcsr_acc_opencl_create_context(active_id, &context); assert(NULL != context || EXIT_SUCCESS != result); } /* update/cache device-specific information */ if (EXIT_SUCCESS == result && (NULL == devinfo->context || device_id != c_dbcsr_acc_opencl_config.device_id)) { if (NULL != devinfo->stream.queue) { /* release private stream */ ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseCommandQueue(devinfo->stream.queue)); } memset(devinfo, 0, sizeof(*devinfo)); result = c_dbcsr_acc_opencl_device_level( active_id, devinfo->std_clevel, devinfo->std_level, devinfo->std_flag, &devinfo->type); if (EXIT_SUCCESS == result) { char devname[ACC_OPENCL_BUFFERSIZE] = ""; const char* const sgexts[] = {"cl_intel_required_subgroup_size", "cl_intel_subgroups", "cl_khr_subgroups"}; size_t sgsizes[16], nbytes = 0, i; ACC_OPENCL_STREAM_PROPERTIES_TYPE properties[4] = { CL_QUEUE_PROPERTIES, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, 0 /* terminator */ }; devinfo->intel = (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(active_id, "intel", 0 /*use_platform_name*/)); devinfo->nv = (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(active_id, "nvidia", 0 /*use_platform_name*/)); if (EXIT_SUCCESS != c_dbcsr_acc_opencl_device_name(active_id, devname, ACC_OPENCL_BUFFERSIZE, NULL /*platform*/, 0 /*platform_maxlen*/, /*cleanup*/ 1) || EXIT_SUCCESS != c_dbcsr_acc_opencl_device_uid(active_id, devname, &devinfo->uid)) { devinfo->uid = (cl_uint)-1; } if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(active_id, "amd", 0 /*use_platform_name*/) || EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(active_id, "amd", 1 /*use_platform_name*/)) { devinfo->amd = 1; if ('\0' != *devname) { const char* const gfxname = LIBXSMM_STRISTR(devname, "gfx"); if (NULL != gfxname && 90 <= atoi(gfxname + 3)) { devinfo->amd = 2; } } } if (EXIT_SUCCESS != clGetDeviceInfo(active_id, CL_DEVICE_HOST_UNIFIED_MEMORY, sizeof(cl_bool) /*cl_int*/, &devinfo->unified, NULL)) { devinfo->unified = CL_FALSE; } if (EXIT_SUCCESS != clGetDeviceInfo(active_id, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(cl_ulong), &devinfo->size_maxalloc, NULL)) { devinfo->size_maxalloc = 0; } if (EXIT_SUCCESS != clGetDeviceInfo(active_id, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof(cl_ulong), &devinfo->size_maxcmem, NULL)) { devinfo->size_maxcmem = 0; } if (EXIT_SUCCESS != clGetDeviceInfo(active_id, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(size_t), devinfo->wgsize, NULL)) { devinfo->wgsize[0] = 1; } if (EXIT_SUCCESS != clGetDeviceInfo(active_id, 4199 /*CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_MULTIPLE*/, sizeof(size_t), devinfo->wgsize + 1, NULL)) /* CL_VERSION_3_0 */ { devinfo->wgsize[1] = 1; } assert(0 == devinfo->wgsize[2]); if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(active_id, sgexts, 2) && 0 != devinfo->wgsize[1] && EXIT_SUCCESS == clGetDeviceInfo(active_id, 0x4108 /*CL_DEVICE_SUB_GROUP_SIZES_INTEL*/, sizeof(sgsizes), sgsizes, &nbytes)) { for (i = 0; (i * sizeof(size_t)) < nbytes; ++i) { const size_t sgsize = sgsizes[i]; if (devinfo->wgsize[2] < sgsize && (0 == (sgsize % devinfo->wgsize[1]) || 0 == (devinfo->wgsize[1] % sgsize))) { if (devinfo->wgsize[1] < sgsize) devinfo->wgsize[1] = sgsize; devinfo->wgsize[2] = sgsize; } } } else devinfo->wgsize[2] = 0; # if defined(ACC_OPENCL_XHINTS) && (1 >= ACC_OPENCL_USM) { /* cl_intel_unified_shared_memory extension */ cl_platform_id platform = NULL; cl_bitfield bitfield = 0; if (0 != (1 & c_dbcsr_acc_opencl_config.xhints) && 2 <= *devinfo->std_level && 0 != devinfo->intel && /*0 == c_dbcsr_acc_opencl_config.profile &&*/ (0 == devinfo->unified || NULL != (ACC_OPENCL_XHINTS)) && EXIT_SUCCESS == clGetDeviceInfo(active_id, CL_DEVICE_PLATFORM, sizeof(cl_platform_id), &platform, NULL) && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(active_id, "intel", 2 /*platform vendor*/) && EXIT_SUCCESS == clGetDeviceInfo(active_id, 0x4191 /*CL_DEVICE_DEVICE_MEM_CAPABILITIES_INTEL*/, sizeof(cl_bitfield), &bitfield, NULL) && 0 != bitfield) { void* ptr[8] = {NULL}; int i = 0, n = 0; ptr[0] = clGetExtensionFunctionAddressForPlatform(platform, "clSetKernelArgMemPointerINTEL"); ptr[1] = clGetExtensionFunctionAddressForPlatform(platform, "clEnqueueMemFillINTEL"); ptr[2] = clGetExtensionFunctionAddressForPlatform(platform, "clEnqueueMemcpyINTEL"); ptr[3] = clGetExtensionFunctionAddressForPlatform(platform, "clDeviceMemAllocINTEL"); ptr[4] = clGetExtensionFunctionAddressForPlatform(platform, "clSharedMemAllocINTEL"); ptr[5] = clGetExtensionFunctionAddressForPlatform(platform, "clHostMemAllocINTEL"); ptr[6] = clGetExtensionFunctionAddressForPlatform(platform, "clMemFreeINTEL"); for (; i < (int)(sizeof(ptr) / sizeof(*ptr)); ++i) { if (NULL != ptr[i]) ++n; } if (7 == n) { LIBXSMM_ASSIGN127(&devinfo->clSetKernelArgMemPointerINTEL, ptr + 0); LIBXSMM_ASSIGN127(&devinfo->clEnqueueMemFillINTEL, ptr + 1); LIBXSMM_ASSIGN127(&devinfo->clEnqueueMemcpyINTEL, ptr + 2); LIBXSMM_ASSIGN127(&devinfo->clDeviceMemAllocINTEL, ptr + 3); LIBXSMM_ASSIGN127(&devinfo->clSharedMemAllocINTEL, ptr + 4); LIBXSMM_ASSIGN127(&devinfo->clHostMemAllocINTEL, ptr + 5); LIBXSMM_ASSIGN127(&devinfo->clMemFreeINTEL, ptr + 6); } else if (0 != n) { fprintf(stderr, "WARN ACC/OpenCL: inconsistent state discovered!\n"); } } } # endif # if (0 != ACC_OPENCL_USM) { /* OpenCL 2.0 based SVM capabilities */ const char* const env_usm = getenv("ACC_OPENCL_USM"); cl_device_svm_capabilities svmcaps = 0; if (NULL == env_usm) { if (0 == devinfo->nv) { /* vendor workaround (force with ACC_OPENCL_USM=1) */ result = clGetDeviceInfo(active_id, CL_DEVICE_SVM_CAPABILITIES, sizeof(cl_device_svm_capabilities), &svmcaps, NULL); assert(EXIT_SUCCESS == result || 0 == svmcaps); } } else svmcaps = (cl_device_svm_capabilities)atoi(env_usm); devinfo->usm = (cl_int)svmcaps; } # endif # if defined(ACC_OPENCL_CMDAGR) if (0 != devinfo->intel) { /* device vendor (above) can now be used */ int result_cmdagr = EXIT_SUCCESS; const cl_command_queue q = ACC_OPENCL_CREATE_COMMAND_QUEUE(context, active_id, properties, &result_cmdagr); if (EXIT_SUCCESS == result_cmdagr) { assert(NULL != q); clReleaseCommandQueue(q); } } # endif properties[1] = 0; if (EXIT_SUCCESS == result) { devinfo->stream.queue = ACC_OPENCL_CREATE_COMMAND_QUEUE(context, active_id, properties, &result); } } if (EXIT_SUCCESS == result) { if (NULL == devinfo->context || device_id != c_dbcsr_acc_opencl_config.device_id) { c_dbcsr_acc_opencl_config.device_id = device_id; devinfo->context = context; } } else memset(devinfo, 0, sizeof(*devinfo)); } if (NULL != lock) ACC_OPENCL_RELEASE(lock); } else result = EXIT_FAILURE; } else result = EXIT_FAILURE; assert(EXIT_SUCCESS == result || NULL == devinfo->context); return result; } int c_dbcsr_acc_set_active_device(int device_id) { /* avoid ACC_OPENCL_PROFILE_DBCSR in this routine */ int result = EXIT_SUCCESS; if (0 <= device_id) { # if defined(__DBCSR_ACC) && defined(__OFFLOAD_OPENCL) if (0 == c_dbcsr_acc_opencl_config.ndevices) { /* not initialized */ result = c_dbcsr_acc_init(); } # endif } else result = EXIT_FAILURE; if (EXIT_SUCCESS == result) { if (device_id < c_dbcsr_acc_opencl_config.ndevices) { # if defined(ACC_OPENCL_CACHE_DID) if (c_dbcsr_acc_opencl_active_id != (device_id + 1)) # endif { result = c_dbcsr_acc_opencl_set_active_device(c_dbcsr_acc_opencl_config.lock_main, device_id); # if defined(ACC_OPENCL_CACHE_DID) if (EXIT_SUCCESS == result) c_dbcsr_acc_opencl_active_id = device_id + 1; # endif } } else result = EXIT_FAILURE; } ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_opencl_flags_atomics(const c_dbcsr_acc_opencl_device_t* devinfo, c_dbcsr_acc_opencl_atomic_fp_t kind, const char* exts[], size_t* exts_maxlen, char flags[], size_t flags_maxlen) { size_t ext1, ext2; int result = 0; for (ext1 = 0; ext1 < (NULL != exts_maxlen ? *exts_maxlen : 0); ++ext1) { if (NULL == exts[ext1] || '\0' == *exts[ext1]) break; } for (ext2 = ext1 + 1; ext2 < (NULL != exts_maxlen ? *exts_maxlen : 0); ++ext2) { if (NULL == exts[ext2] || '\0' == *exts[ext2]) break; } if (NULL != devinfo && NULL != exts_maxlen && ext2 < *exts_maxlen) { const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id]; const char* atomic_type = ""; switch (kind) { case c_dbcsr_acc_opencl_atomic_fp_64: { exts[ext1] = "cl_khr_fp64 cl_khr_int64_base_atomics cl_khr_int64_extended_atomics"; if (2 <= *devinfo->std_level && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) { atomic_type = "-DTA=long -DTA2=atomic_long -DTF=atomic_double"; } else { exts[ext1] = "cl_khr_fp64 cl_khr_int64_base_atomics"; if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) { atomic_type = "-DTA=long"; } else { /* fallback */ exts[ext1] = "cl_khr_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics"; if (2 <= *devinfo->std_level && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) { atomic_type = "-DATOMIC32_ADD64 -DTA=int -DTA2=atomic_int -DTF=atomic_double"; } else { exts[ext1] = "cl_khr_fp64 cl_khr_global_int32_base_atomics"; if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) { atomic_type = "-DATOMIC32_ADD64 -DTA=int"; } else kind = c_dbcsr_acc_opencl_atomic_fp_no; } } } } break; case c_dbcsr_acc_opencl_atomic_fp_32: { exts[ext1] = "cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics"; if (2 <= *devinfo->std_level && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) { exts[ext2] = "cl_khr_int64_base_atomics cl_khr_int64_extended_atomics"; atomic_type = "-DTA=int -DTA2=atomic_int -DTF=atomic_float"; } else { exts[ext1] = "cl_khr_global_int32_base_atomics"; if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) { exts[ext2] = "cl_khr_int64_base_atomics"; atomic_type = "-DTA=int"; } else kind = c_dbcsr_acc_opencl_atomic_fp_no; } } break; default: assert(c_dbcsr_acc_opencl_atomic_fp_no == kind); } if (c_dbcsr_acc_opencl_atomic_fp_no != kind) { const char *barrier_expr = NULL, *atomic_exp = NULL, *atomic_ops = ""; const char* const env_barrier = getenv("ACC_OPENCL_BARRIER"); const char* const env_atomics = getenv("ACC_OPENCL_ATOMICS"); if (NULL == env_barrier || '0' != *env_barrier) { barrier_expr = ((2 <= *devinfo->std_level && (0 == devinfo->intel || (CL_DEVICE_TYPE_CPU != devinfo->type))) ? "-D\"BARRIER(A)=work_group_barrier(A,memory_scope_work_group)\"" : "-D\"BARRIER(A)=barrier(A)\""); } else barrier_expr = ""; /* no barrier */ assert(NULL != barrier_expr); if (NULL == env_atomics || '0' != *env_atomics) { /* can signal/force atomics without confirmation */ const int force_atomics = ((NULL == env_atomics || '\0' == *env_atomics) ? 0 : atoi(env_atomics)); if (NULL == env_atomics || '\0' == *env_atomics || 0 != force_atomics) { cl_bitfield fp_atomics = 0; if (EXIT_SUCCESS == clGetDeviceInfo(device_id, (cl_device_info)(c_dbcsr_acc_opencl_atomic_fp_64 == kind ? 0x4232 : 0x4231), sizeof(cl_bitfield), &fp_atomics, NULL) && 0 != (/*add*/ (1 << 1) & fp_atomics)) { exts[ext2] = "cl_ext_float_atomics"; # if 1 /* enabling this permitted extension in source code causes compiler warning */ *exts_maxlen = ext2; /* quietly report extension by reducing exts_maxlen */ # endif atomic_exp = (c_dbcsr_acc_opencl_atomic_fp_64 == kind ? "atomic_fetch_add_explicit((GLOBAL_VOLATILE(atomic_double)*)A,B," "memory_order_relaxed,memory_scope_work_group)" : "atomic_fetch_add_explicit((GLOBAL_VOLATILE(atomic_float)*)A,B," "memory_order_relaxed,memory_scope_work_group)"); } else if (0 != force_atomics || (0 != devinfo->intel && ((0x4905 != devinfo->uid && 0 == devinfo->unified)))) { if ((((0 != force_atomics || (0 != devinfo->intel && ((0x0bd0 <= devinfo->uid && 0x0bdb >= devinfo->uid) || c_dbcsr_acc_opencl_atomic_fp_32 == kind)))))) { if (0 == force_atomics && (0 == devinfo->intel || 0x0bd0 > devinfo->uid || 0x0bdb < devinfo->uid)) { exts[ext2] = "cl_intel_global_float_atomics"; atomic_ops = "-Dcl_intel_global_float_atomics"; } else { atomic_ops = ((2 > *devinfo->std_level && 2 > force_atomics) ? "-DATOMIC_PROTOTYPES=1" : (3 > force_atomics ? "-DATOMIC_PROTOTYPES=2" : "-DATOMIC_PROTOTYPES=3")); } atomic_exp = ((2 > *devinfo->std_level && 2 > force_atomics) ? "atomic_add(A,B)" : "atomic_fetch_add_explicit((GLOBAL_VOLATILE(TF)*)A,B," "memory_order_relaxed,memory_scope_work_group)"); } else { atomic_exp = "atomic_add_global_cmpxchg(A,B)"; atomic_ops = "-DCMPXCHG=atom_cmpxchg"; } } else if (0 == devinfo->nv) { if (1 >= devinfo->amd) { atomic_ops = (c_dbcsr_acc_opencl_atomic_fp_32 == kind ? "-DCMPXCHG=atomic_cmpxchg" : "-DCMPXCHG=atom_cmpxchg"); atomic_exp = "atomic_add_global_cmpxchg(A,B)"; exts[ext2] = NULL; } else { /* GCN */ atomic_exp = (c_dbcsr_acc_opencl_atomic_fp_64 == kind ? "__builtin_amdgcn_global_atomic_fadd_f64(A,B,__ATOMIC_RELAXED,__OPENCL_MEMORY_SCOPE_WORK_GROUP)" : "__builtin_amdgcn_global_atomic_fadd_f32(A,B,__ATOMIC_RELAXED,__OPENCL_MEMORY_SCOPE_WORK_GROUP)"); } } else { /* xchg */ assert(NULL != atomic_ops && '\0' == *atomic_ops); atomic_exp = "atomic_add_global_xchg(A,B)"; } } else if (NULL != LIBXSMM_STRISTR(env_atomics, "cmpxchg")) { atomic_ops = (c_dbcsr_acc_opencl_atomic_fp_32 == kind ? "-DCMPXCHG=atomic_cmpxchg" : "-DCMPXCHG=atom_cmpxchg"); atomic_exp = "atomic_add_global_cmpxchg(A,B)"; exts[ext2] = NULL; } else { /* xchg */ atomic_exp = "atomic_add_global_xchg(A,B)"; atomic_ops = (c_dbcsr_acc_opencl_atomic_fp_32 == kind ? "-DXCHG=atomic_xchg" : "-DXCHG=atom_xchg"); } } else { /* unsynchronized */ atomic_exp = "*(A)+=(B)"; /* non-atomic update */ } assert(NULL != atomic_exp); /* compose build parameters and flags */ result = LIBXSMM_SNPRINTF(flags, flags_maxlen, " -DTAN=%i %s %s -D\"ATOMIC_ADD_GLOBAL(A,B)=%s\" %s", kind, atomic_type, atomic_ops, atomic_exp, barrier_expr); } } return result; } int c_dbcsr_acc_opencl_defines(const char defines[], char buffer[], size_t buffer_size, int cleanup) { const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; int result = 0; if (NULL != buffer && NULL != devinfo->context) { const int std_clevel = 100 * devinfo->std_clevel[0] + 10 * devinfo->std_clevel[1]; const int std_level = 100 * devinfo->std_level[0] + 10 * devinfo->std_level[1]; result = LIBXSMM_SNPRINTF(buffer, buffer_size, " -DACC_OPENCL_VERSION=%u -DACC_OPENCL_C_VERSION=%u%s", std_level, std_clevel, 0 == c_dbcsr_acc_opencl_config.debug ? " -DNDEBUG" : ""); if (0 < result && (int)buffer_size > result) { const int n = LIBXSMM_SNPRINTF( buffer + result, buffer_size - result, ' ' != buffer[result - 1] ? " %s" : "%s", NULL != defines ? defines : ""); if (0 <= n) { if ((int)buffer_size > (result += n) && 0 != cleanup) { char* replace = strpbrk(buffer + result - n, "\""); /* more portable (system/cpp needs quotes to protect braces) */ for (; NULL != replace; replace = strpbrk(replace + 1, "\"")) *replace = ' '; } } else result = -1; } } else result = -1; return result; } int c_dbcsr_acc_opencl_kernel_flags(const char build_params[], const char build_options[], const char try_options[], cl_program program, char buffer[], size_t buffer_size) { const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; int result = EXIT_SUCCESS, nchar = 0; assert(NULL != program && (NULL != buffer || 0 == buffer_size)); nchar = c_dbcsr_acc_opencl_defines(build_params, buffer, buffer_size, 1 /*cleanup*/); if (0 <= nchar && (int)buffer_size > nchar) { const int debug = (0 != c_dbcsr_acc_opencl_config.debug && 0 != devinfo->intel && CL_DEVICE_TYPE_CPU != devinfo->type); int n = LIBXSMM_SNPRINTF(buffer + nchar, buffer_size - nchar, " %s%s %s", 0 == debug ? "" : "-gline-tables-only ", devinfo->std_flag, NULL != build_options ? build_options : ""); if (0 <= n) { nchar += n; if (NULL != try_options && '\0' != *try_options) { /* length is not reported in result */ n = LIBXSMM_SNPRINTF(buffer + nchar, buffer_size - nchar, " %s", try_options); if (0 > n || (int)buffer_size <= (nchar + n)) buffer[nchar] = '\0'; } } else nchar = n; } if (0 <= nchar && (int)buffer_size > nchar) { /* check if internal flags apply */ const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id]; result = clBuildProgram(program, 1 /*num_devices*/, &device_id, buffer, NULL /*callback*/, NULL /*user_data*/); if (EXIT_SUCCESS != result) { /* failed to apply internal flags */ ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseProgram(program)); /* avoid unclean state */ buffer[nchar] = '\0'; /* remove internal flags */ } } else result = EXIT_FAILURE; return result; } int c_dbcsr_acc_opencl_kernel(size_t source_kind, const char source[], const char kernel_name[], const char build_params[], const char build_options[], const char try_options[], int* try_ok, const char* const extnames[], size_t num_exts, cl_kernel* kernel) { char buffer[ACC_OPENCL_BUFFERSIZE] = "", buffer_name[ACC_OPENCL_MAXSTRLEN * 2]; const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id]; const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; int result = ((NULL != source && NULL != kernel_name && '\0' != *kernel_name) ? EXIT_SUCCESS : EXIT_FAILURE); int ok = EXIT_SUCCESS, source_is_cl = (2 > source_kind), nchar = 0; size_t size_src = 0, size = 0; cl_program program = NULL; FILE* file_src = NULL; assert(NULL != devinfo->context); assert(NULL != kernel); *kernel = NULL; if (EXIT_SUCCESS == result && (1 == source_kind)) file_src = fopen(source, "rb"); if (NULL != file_src) { if (EXIT_SUCCESS == result) { const char* const file_ext = strrchr(source, '.'); char* src = NULL; source_is_cl = ((NULL != file_ext && NULL != LIBXSMM_STRISTR(file_ext + 1, "cl")) ? 1 : 0); size_src = (EXIT_SUCCESS == fseek(file_src, 0 /*offset*/, SEEK_END) ? ftell(file_src) : 0); src = (char*)((0 != size_src && EXIT_SUCCESS == fseek(file_src, 0 /*offset*/, SEEK_SET)) ? libxsmm_aligned_scratch(size_src + source_is_cl /*terminator?*/, 0 /*auto-align*/) : NULL); if (NULL != src) { if (size_src == fread(src, 1 /*sizeof(char)*/, size_src /*count*/, file_src)) { if (0 != source_is_cl) src[size_src] = '\0'; /* terminator */ source = src; } else { result = EXIT_FAILURE; libxsmm_free(src); } } else result = EXIT_FAILURE; } fclose(file_src); } else size_src = source_kind; if (EXIT_SUCCESS == result && 0 != source_is_cl) { const char* ext_source = source; size_src = strlen(ext_source); if (NULL != extnames) { int n = num_exts, nflat = 0; size_t size_ext = 0; for (; 0 < n; --n) { if (NULL != extnames[n - 1]) { const char* const end = buffer + strlen(extnames[n - 1]); /* before strtok */ char* ext = strtok(strncpy(buffer, extnames[n - 1], ACC_OPENCL_BUFFERSIZE - 1), ACC_OPENCL_DELIMS " \t"); for (; NULL != ext; ext = ((ext + 1) < end ? strtok((ext + 1) + strlen(ext), ACC_OPENCL_DELIMS " \t") : NULL), ++nflat) { size_ext += strlen(ext); } } } if (0 < size_ext && 0 < nflat) { const char* const enable_ext = "#pragma OPENCL EXTENSION %s : enable\n"; const size_t size_src_ext = size_src + size_ext + nflat * (strlen(enable_ext) - 2 /*%s*/); char* const ext_source_buffer = (char*)libxsmm_aligned_scratch(size_src_ext + 1 /*terminator*/, 0 /*auto-align*/); if (NULL != ext_source_buffer) { for (n = 0; 0 < num_exts; --num_exts) { if (NULL != extnames[num_exts - 1]) { const char* const end = buffer_name + strlen(extnames[num_exts - 1]); /* before strtok */ char* ext = strtok( strncpy(buffer_name, extnames[num_exts - 1], ACC_OPENCL_MAXSTRLEN * 2 - 1), ACC_OPENCL_DELIMS " \t"); for (; NULL != ext; ext = ((ext + 1) < end ? strtok((ext + 1) + strlen(ext), ACC_OPENCL_DELIMS " \t") : NULL)) { const char* line = source; for (;;) { if (2 != sscanf(line, "#pragma OPENCL EXTENSION %[^: ]%*[: ]%[^\n]", buffer, buffer + ACC_OPENCL_BUFFERSIZE / 2)) { line = NULL; break; } else if (0 == strncmp(buffer, ext, ACC_OPENCL_BUFFERSIZE / 2) && 0 == strncmp(buffer + ACC_OPENCL_BUFFERSIZE / 2, "enable", ACC_OPENCL_BUFFERSIZE / 2)) { break; } line = strchr(line, '\n'); if (NULL != line) { ++line; } else break; } # if !defined(NDEBUG) if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, (const char* const*)&ext, 1)) # endif { /* NDEBUG: assume given extension is supported (confirmed upfront) */ if (NULL == line) { /* extension is not already part of source */ n += LIBXSMM_SNPRINTF(ext_source_buffer + n, size_src_ext + 1 /*terminator*/ - n, enable_ext, ext); } } # if !defined(NDEBUG) else if (0 != strcmp("cl_intel_global_float_atomics", ext)) { fprintf(stderr, "WARN ACC/OpenCL: extension \"%s\" is not supported.\n", ext); } # endif } } } memcpy(ext_source_buffer + n, source, size_src); size_src += n; /* according to given/permitted extensions */ assert(size_src <= size_src_ext); ext_source_buffer[size_src] = '\0'; ext_source = ext_source_buffer; } } buffer[0] = '\0'; /* reset to empty */ } /* cpp: consider to preprocess kernel (failure does not impact result code) */ if (0 != c_dbcsr_acc_opencl_config.dump && NULL == file_src) { char dump_filename[ACC_OPENCL_MAXSTRLEN]; nchar = LIBXSMM_SNPRINTF(dump_filename, sizeof(dump_filename), "%s.cl", kernel_name); if (0 < nchar && (int)sizeof(dump_filename) > nchar) { const int std_flag_len = (int)strlen(devinfo->std_flag); const char* const env_cpp = getenv("ACC_OPENCL_CPP"); const int cpp = (NULL == env_cpp ? 1 /*default*/ : atoi(env_cpp)); # if defined(ACC_OPENCL_CPPBIN) FILE* const file_cpp = (0 != cpp ? fopen(ACC_OPENCL_CPPBIN, "rb") : NULL); # else FILE* const file_cpp = NULL; # endif int file_dmp = -1; if (NULL != file_cpp) { nchar = LIBXSMM_SNPRINTF(buffer_name, sizeof(buffer_name), ACC_OPENCL_TEMPDIR "/.%s.XXXXXX", kernel_name); if (0 < nchar && (int)sizeof(buffer_name) > nchar) file_dmp = mkstemp(buffer_name); fclose(file_cpp); /* existence-check */ } else file_dmp = open(dump_filename, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE); if (0 <= file_dmp) { if ((0 != std_flag_len && (3 != write(file_dmp, "/*\n", 3) || std_flag_len != write(file_dmp, devinfo->std_flag, std_flag_len) || 4 != write(file_dmp, "\n*/\n", 4))) || size_src != (size_t)write(file_dmp, ext_source, size_src)) { file_dmp = -1; } ACC_OPENCL_EXPECT(EXIT_SUCCESS == close(file_dmp)); } # if defined(ACC_OPENCL_CPPBIN) if (NULL != file_cpp && 0 <= file_dmp) { /* preprocess source-code */ const char* sed_pattern = ""; # if defined(ACC_OPENCL_SEDBIN) FILE* const file_sed = fopen(ACC_OPENCL_SEDBIN, "rb"); if (NULL != file_sed) { sed_pattern = "| " ACC_OPENCL_SEDBIN " '/^[[:space:]]*\\(\\/\\/.*\\)*$/d'"; fclose(file_sed); /* existence-check */ } # endif nchar = LIBXSMM_SNPRINTF( buffer, ACC_OPENCL_BUFFERSIZE, ACC_OPENCL_CPPBIN " -P -C -nostdinc %s", 0 == devinfo->nv ? "" : "-D__NV_CL_C_VERSION "); if (0 < nchar && ACC_OPENCL_BUFFERSIZE > nchar) { int n = c_dbcsr_acc_opencl_defines(build_params, buffer + nchar, ACC_OPENCL_BUFFERSIZE - nchar, 0 /*cleanup*/); if (0 <= n && ACC_OPENCL_BUFFERSIZE > (nchar += n)) { n = LIBXSMM_SNPRINTF(buffer + nchar, ACC_OPENCL_BUFFERSIZE - nchar, ' ' != buffer[nchar - 1] ? " %s %s >%s" : "%s %s >%s", buffer_name, sed_pattern, dump_filename); } nchar = (0 <= n ? nchar : 0) + n; } if (0 < nchar && ACC_OPENCL_BUFFERSIZE > nchar && EXIT_SUCCESS == system(buffer)) { FILE* const file = fopen(dump_filename, "r"); if (NULL != file) { const long int size_file = (EXIT_SUCCESS == fseek(file, 0 /*offset*/, SEEK_END) ? ftell(file) : 0); char* const src = (char*)(EXIT_SUCCESS == fseek(file, 0 /*offset*/, SEEK_SET) ? libxsmm_aligned_scratch(size_file + 1 /*terminator*/, 0 /*auto-align*/) : NULL); if (NULL != src) { if ((size_t)size_file == fread(src, 1 /*sizeof(char)*/, size_file /*count*/, file)) { if (source != ext_source) { void* p = NULL; LIBXSMM_ASSIGN127(&p, &ext_source); libxsmm_free(p); } src[size_file] = '\0'; ext_source = src; } else libxsmm_free(src); } ACC_OPENCL_EXPECT(EXIT_SUCCESS == fclose(file)); } } ACC_OPENCL_EXPECT(EXIT_SUCCESS == unlink(buffer_name)); /* remove temporary file */ buffer[0] = '\0'; /* reset to empty */ } # endif } } program = clCreateProgramWithSource(devinfo->context, 1 /*nlines*/, &ext_source, NULL, &result); assert(EXIT_SUCCESS != result || NULL != program); if (EXIT_SUCCESS == result) { ok = c_dbcsr_acc_opencl_kernel_flags(build_params, build_options, try_options, program, buffer, ACC_OPENCL_BUFFERSIZE); if (EXIT_SUCCESS == ok) result = ok; else { program = clCreateProgramWithSource(devinfo->context, 1 /*nlines*/, &ext_source, NULL, &result); assert(EXIT_SUCCESS != result || NULL != program); if (EXIT_SUCCESS == result) { result = clBuildProgram(program, 1 /*num_devices*/, &device_id, buffer, NULL /*callback*/, NULL /*user_data*/); ok = EXIT_FAILURE; } } } if (EXIT_SUCCESS == result) { if (source != ext_source) { void* p = NULL; LIBXSMM_ASSIGN127(&p, &ext_source); libxsmm_free(p); } buffer[0] = '\0'; /* reset to empty */ if (EXIT_SUCCESS == result) { /* extract kernel */ *kernel = clCreateKernel(program, kernel_name, &result); if (EXIT_SUCCESS == result) { assert(NULL != *kernel); if (NULL == file_src && (2 <= c_dbcsr_acc_opencl_config.dump || 0 > c_dbcsr_acc_opencl_config.dump)) { unsigned char* binary = NULL; binary = (unsigned char*)(EXIT_SUCCESS == clGetProgramInfo(program, CL_PROGRAM_BINARY_SIZES, sizeof(size_t), &size, NULL) ? libxsmm_aligned_scratch(size, 0 /*auto-align*/) : NULL); if (NULL != binary) { result = clGetProgramInfo(program, CL_PROGRAM_BINARIES, sizeof(unsigned char*), &binary, NULL); if (EXIT_SUCCESS == result) { /* successfully queried program binary */ FILE* file; nchar = LIBXSMM_SNPRINTF(buffer, ACC_OPENCL_BUFFERSIZE, "%s.dump", kernel_name); file = ((0 < nchar && ACC_OPENCL_BUFFERSIZE > nchar) ? fopen(buffer, "wb") : NULL); buffer[0] = '\0'; /* reset to empty */ if (NULL != file) { if (size != fwrite(binary, 1, size, file)) result = EXIT_FAILURE; fclose(file); } else result = EXIT_FAILURE; } libxsmm_free(binary); } else result = EXIT_FAILURE; } } } } else if (source != ext_source) { /* error: creating program */ void* p = NULL; LIBXSMM_ASSIGN127(&p, &ext_source); libxsmm_free(p); } } else if (EXIT_SUCCESS == result) { /* binary representation */ assert(1 < size_src || 0 == size_src); # if defined(CL_VERSION_2_1) if (0 != c_dbcsr_acc_opencl_config.dump) program = clCreateProgramWithIL(devinfo->context, source, size_src, &result); else # endif { program = clCreateProgramWithBinary( devinfo->context, 1, &device_id, &size_src, (const unsigned char**)&source, NULL /*binary_status*/, &result); } assert(EXIT_SUCCESS != result || NULL != program); if (EXIT_SUCCESS == result) { ok = c_dbcsr_acc_opencl_kernel_flags(build_params, build_options, try_options, program, buffer, ACC_OPENCL_BUFFERSIZE); if (EXIT_SUCCESS == ok) result = ok; else { # if defined(CL_VERSION_2_1) if (0 != c_dbcsr_acc_opencl_config.dump) program = clCreateProgramWithIL(devinfo->context, source, size_src, &result); else # endif { program = clCreateProgramWithBinary( devinfo->context, 1, &device_id, &size_src, (const unsigned char**)&source, NULL /*binary_status*/, &result); } assert(EXIT_SUCCESS != result || NULL != program); if (EXIT_SUCCESS == result) { result = clBuildProgram(program, 1 /*num_devices*/, &device_id, buffer, NULL /*callback*/, NULL /*user_data*/); ok = EXIT_FAILURE; } } } if (EXIT_SUCCESS == result) { *kernel = clCreateKernel(program, kernel_name, &result); # if defined(CL_VERSION_1_2) /* error creating kernel: discover available kernels in program, and adopt the last kernel listed */ if (EXIT_SUCCESS != result && EXIT_SUCCESS == clGetProgramInfo(program, CL_PROGRAM_KERNEL_NAMES, sizeof(char*), buffer, NULL) && '\0' != *buffer) { const char *const semicolon = strrchr(buffer, ';'), *const name = (NULL == semicolon ? buffer : (semicolon + 1)); *kernel = clCreateKernel(program, name, &result); } # endif assert(EXIT_SUCCESS != result || NULL != *kernel); } } if (NULL != file_src) { void* p = NULL; LIBXSMM_ASSIGN127(&p, (const void**)&source); assert(1 == source_kind); libxsmm_free(p); } if (NULL != program) { if (EXIT_SUCCESS != result && NULL != *kernel) { ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseKernel(*kernel)); *kernel = NULL; } if (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) { if (EXIT_SUCCESS == clGetProgramBuildInfo(program, device_id, CL_PROGRAM_BUILD_LOG, ACC_OPENCL_BUFFERSIZE, buffer, &size)) { const char* info = buffer; while ('\0' != *info && NULL != strchr("\n\r\t ", *info)) ++info; /* remove preceding newline etc. */ assert(NULL != kernel_name && '\0' != *kernel_name); if ('\0' != *info) fprintf(stderr, "INFO ACC/OpenCL: %s -> %s\n", kernel_name, info); } else buffer[0] = '\0'; /* reset to empty */ } ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseProgram(program)); /* release in any case (EXIT_SUCCESS) */ } if (NULL != try_ok) *try_ok = result | ok; ACC_OPENCL_RETURN(result, buffer); } int c_dbcsr_acc_opencl_set_kernel_ptr(cl_kernel kernel, cl_uint arg_index, const void* arg_value) { c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; int result = EXIT_FAILURE; assert(NULL != devinfo->context); # if (1 >= ACC_OPENCL_USM) if (NULL != devinfo->clSetKernelArgMemPointerINTEL) { result = devinfo->clSetKernelArgMemPointerINTEL(kernel, arg_index, arg_value); } else # endif # if (0 != ACC_OPENCL_USM) if (0 != devinfo->usm) { result = clSetKernelArgSVMPointer(kernel, arg_index, arg_value); } else # elif defined(NDEBUG) LIBXSMM_UNUSED(devinfo); # endif { result = clSetKernelArg(kernel, arg_index, sizeof(cl_mem), &arg_value); } ACC_OPENCL_RETURN(result); } double c_dbcsr_acc_opencl_duration(cl_event event, int* result_code) { cl_ulong begin = 0, end = 0; int r = EXIT_FAILURE; double result = 0; if (NULL != event) { r = clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &begin, NULL); if (EXIT_SUCCESS == r) { r = clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &end, NULL); if (EXIT_SUCCESS == r) { result = 1E-9 * LIBXSMM_DELTA(begin, end); /* Nanoseconds->seconds */ } } } if (NULL != result_code) *result_code = r; return result; } typedef struct c_dbcsr_acc_opencl_hist_t { c_dbcsr_acc_opencl_hist_update_fn* update; double *vals, min, max; int *buckets, nbuckets, nqueue, nvals, n; } c_dbcsr_acc_opencl_hist_t; void c_dbcsr_acc_opencl_hist_create( void** hist, int nbuckets, int nqueue, int nvals, const c_dbcsr_acc_opencl_hist_update_fn update[]) { c_dbcsr_acc_opencl_hist_t* h = (c_dbcsr_acc_opencl_hist_t*)malloc(sizeof(c_dbcsr_acc_opencl_hist_t)); assert(NULL != hist && 0 < nbuckets && 0 < nqueue && 0 < nvals && NULL != update); if (NULL != h) { h->vals = (double*)malloc(sizeof(double) * LIBXSMM_MAX(nbuckets, nqueue) * nvals); h->update = (c_dbcsr_acc_opencl_hist_update_fn*)malloc(sizeof(c_dbcsr_acc_opencl_hist_update_fn) * nvals); h->buckets = (int*)calloc(nbuckets, sizeof(int)); if (NULL != h->vals && NULL != h->buckets && NULL != h->update) { union { int raw; float value; } inf = {0}; # if defined(INFINITY) && /*overflow warning*/ !defined(_CRAYC) inf.value = (float)(INFINITY); # else inf.raw = 0x7F800000; # endif h->min = +inf.value; h->max = -inf.value; h->nbuckets = nbuckets; h->nqueue = nqueue; h->nvals = nvals; /* if update[] is NULL, c_dbcsr_acc_opencl_hist_avg is assumed */ for (h->n = 0; h->n < nvals; ++h->n) h->update[h->n] = update[h->n]; h->n = 0; } else { free(h->buckets); free(h->vals); free(h); h = NULL; } } *hist = h; } void c_dbcsr_acc_opencl_hist_avg(double* dst, const double* src) { assert(NULL != dst && NULL != src); *dst = 0.5 * (*dst + *src); } void c_dbcsr_acc_opencl_hist_add(double* dst, const double* src) { assert(NULL != dst && NULL != src); *dst += *src; } void c_dbcsr_acc_opencl_hist_set(ACC_OPENCL_LOCKTYPE* lock, void* hist, const double vals[]) { if (NULL != hist) { c_dbcsr_acc_opencl_hist_t* const h = (c_dbcsr_acc_opencl_hist_t*)hist; int i, j, k; if (NULL != lock) ACC_OPENCL_ACQUIRE(lock); if (h->nqueue <= h->n) { const double *values, w = h->max - h->min; const int* buckets; if (h->nqueue == h->n) { c_dbcsr_acc_opencl_hist_get(NULL /*lock*/, hist, &buckets, NULL /*nbuckets*/, NULL /*range*/, &values, NULL /*nvals*/); } for (i = 1; i <= h->nbuckets; ++i) { const double q = h->min + i * w / h->nbuckets; if (vals[0] <= q || h->nbuckets == i) { for (k = 0, j = (i - 1) * h->nvals; k < h->nvals; ++k) { if (0 != h->buckets[i - 1]) { (NULL != h->update[k] ? h->update[k] : c_dbcsr_acc_opencl_hist_avg)(h->vals + (j + k), vals + k); } else h->vals[j + k] = vals[k]; /* initialize */ } ++h->buckets[i - 1]; break; } } } else { /* fill-phase */ if (h->min > vals[0]) h->min = vals[0]; if (h->max < vals[0]) h->max = vals[0]; for (k = 0, j = h->nvals * h->n; k < h->nvals; ++k) { h->vals[j + k] = vals[k]; } } ++h->n; /* count number of accumulated values */ if (NULL != lock) ACC_OPENCL_RELEASE(lock); } } void c_dbcsr_acc_opencl_hist_get( ACC_OPENCL_LOCKTYPE* lock, void* hist, const int** buckets, int* nbuckets, double range[2], const double** vals, int* nvals) { int *b = NULL, m = 0, n = 0, i, j, k; double *v = NULL, r[] = {0, 0}; assert(NULL != buckets || NULL != range || NULL != vals); if (NULL != hist) { c_dbcsr_acc_opencl_hist_t* const h = (c_dbcsr_acc_opencl_hist_t*)hist; if (NULL != lock) ACC_OPENCL_ACQUIRE(lock); if (h->n <= h->nqueue) { const double w = h->max - h->min; if (h->n < h->nbuckets) h->nbuckets = h->n; for (i = 1, j = 0; i <= h->nbuckets; j = h->nvals * i++) { const double p = h->min + (i - 1) * w / h->nbuckets, q = h->min + i * w / h->nbuckets; for (n = 0, m = 0; n < h->n; m = ++n * h->nvals) { if (0 == h->buckets[n] && (p < h->vals[m] || 1 == i) && (h->vals[m] <= q || h->nbuckets == i)) { if (j != m) { if (0 != h->buckets[i - 1]) { /* accumulate */ for (k = 0; k < h->nvals; ++k) { (NULL != h->update[k] ? h->update[k] : c_dbcsr_acc_opencl_hist_avg)(h->vals + (j + k), h->vals + (m + k)); } } else { /* initialize/swap */ for (k = 0; k < h->nvals; ++k) { const double value = h->vals[m + k]; h->vals[m + k] = h->vals[j + k]; h->vals[j + k] = value; } } } ++h->buckets[i - 1]; } } } h->nqueue = 0; } if (0 < h->n) { r[0] = h->min; r[1] = h->max; b = h->buckets; n = h->nbuckets; v = h->vals; m = h->nvals; } if (NULL != lock) ACC_OPENCL_RELEASE(lock); } if (NULL != nbuckets) *nbuckets = n; if (NULL != buckets) *buckets = b; if (NULL != nvals) *nvals = m; if (NULL != vals) *vals = v; if (NULL != range) { range[0] = r[0]; range[1] = r[1]; } } void c_dbcsr_acc_opencl_hist_print( FILE* stream, void* hist, const char title[], const int prec[], const c_dbcsr_acc_opencl_hist_adjust_fn adjust[]) { int nbuckets = 0, nvals = 0, i = 1, j = 0, k; const int* buckets = NULL; const double* vals = NULL; double range[2]; c_dbcsr_acc_opencl_hist_get(NULL /*lock*/, hist, &buckets, &nbuckets, range, &vals, &nvals); if (NULL != stream && NULL != buckets && 0 < nbuckets && NULL != vals && 0 < nvals) { const double w = range[1] - range[0]; if (NULL != title) fprintf(stream, "%s pid=%u\n", title, libxsmm_get_pid()); for (; i <= nbuckets; j = nvals * i++) { const double q = range[0] + i * w / nbuckets, r = (i != nbuckets ? q : LIBXSMM_MAX(q, vals[j])); const int c = buckets[i - 1]; if (NULL != prec) fprintf(stream, "\t#%i <= %.*f: %i", i, prec[0], r, c); else fprintf(stream, "\t#%i <= %f: %i", i, r, c); if (0 != c) { fprintf(stream, " ->"); for (k = 0; k < nvals; ++k) { double value; if (NULL == adjust || NULL == adjust[k]) value = vals[j + k]; else value = adjust[k](vals[j + k], c); if (NULL != prec) fprintf(stream, " %.*f", prec[k], value); else fprintf(stream, " %f", value); } } fprintf(stream, "\n"); } } } void c_dbcsr_acc_opencl_hist_free(void* hist) { if (NULL != hist) { c_dbcsr_acc_opencl_hist_t* const h = (c_dbcsr_acc_opencl_hist_t*)hist; free(h->buckets); free(h->update); free(h->vals); free(h); } } const char* c_dbcsr_acc_opencl_stristrn(const char a[], const char b[], size_t maxlen) { const char* result = NULL; if (NULL != a && NULL != b && '\0' != *a && '\0' != *b && 0 != maxlen) { do { if (tolower(*a) != tolower(*b)) ++a; else { const char* c = b; size_t i = 0; result = a; while ('\0' != c[++i] && i != maxlen && '\0' != *++a) { if (tolower(*a) != tolower(c[i])) { result = NULL; break; } } if ('\0' != c[i] && '\0' != c[i + 1] && c[i] != c[i + 1] && i != maxlen) { result = NULL; } else break; } } while ('\0' != *a); } return result; } int c_dbcsr_acc_opencl_strimatch(const char a[], const char b[], const char delims[], int* count) { int result = 0, na = 0, nb = 0; if (NULL != a && NULL != b && '\0' != *a && '\0' != *b) { const char* const sep = ((NULL == delims || '\0' == *delims) ? " \t;,:-" : delims); const char *c, *tmp; char s[2] = {'\0'}; size_t m, n; for (;;) { while (*s = *b, NULL != strpbrk(s, sep)) ++b; /* left-trim */ if ('\0' != *b && '[' != *b) ++nb; /* count words */ else break; tmp = b; while ('\0' != *tmp && (*s = *tmp, NULL == strpbrk(s, sep))) ++tmp; m = tmp - b; c = c_dbcsr_acc_opencl_stristrn(a, b, LIBXSMM_MIN(1, m)); if (NULL != c) { const char* d = c; while ('\0' != *d && (*s = *d, NULL == strpbrk(s, sep))) ++d; n = d - c; if (1 >= n || NULL != c_dbcsr_acc_opencl_stristrn(c, b, LIBXSMM_MIN(m, n))) ++result; } b = tmp; } for (;;) { /* count number of words */ while (*s = *a, NULL != strpbrk(s, sep)) ++a; /* left-trim */ if ('\0' != *a && '[' != *a) ++na; /* count words */ else break; while ('\0' != *a && (*s = *a, NULL == strpbrk(s, sep))) ++a; } if (na < result) result = na; } else result = -1; if (NULL != count) *count = LIBXSMM_MAX(na, nb); return result; } # if defined(__cplusplus) } # endif #endif /*__OPENCL*/ ================================================ FILE: src/acc/opencl/acc_opencl.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #ifndef ACC_OPENCL_H #define ACC_OPENCL_H /* Support for other libraries, e.g., CP2K's DBM/DBT */ #if defined(__OFFLOAD_OPENCL) && !defined(__OPENCL) # define __OPENCL #endif #if defined(__OPENCL) # if !defined(CL_TARGET_OPENCL_VERSION) # define CL_TARGET_OPENCL_VERSION 220 # endif # if defined(__APPLE__) # include # else # include # endif #else # error Definition of __OPENCL preprocessor symbol is missing! #endif #if !defined(ACC_OPENCL_NOEXT) # if defined(__APPLE__) # include # else # include # endif #endif #if !defined(LIBXSMM_SYNC_NPAUSE) # define LIBXSMM_SYNC_NPAUSE 0 #endif #if defined(__LIBXSMM) && !defined(LIBXSMM_DEFAULT_CONFIG) # include # if !defined(LIBXSMM_TIMER_H) # include # endif # if !defined(LIBXSMM_SYNC_H) # include # endif #else /* OpenCL backend depends on LIBXSMM */ # include # if !defined(__LIBXSMM) # define __LIBXSMM # endif #endif #if !defined(LIBXSMM_VERSION_NUMBER) # define LIBXSMM_VERSION_NUMBER \ LIBXSMM_VERSION4(LIBXSMM_VERSION_MAJOR, LIBXSMM_VERSION_MINOR, LIBXSMM_VERSION_UPDATE, LIBXSMM_VERSION_PATCH) #endif #include "../acc.h" #if !defined(NDEBUG) # include #endif #include #include #if !defined(ACC_OPENCL_CACHELINE) # define ACC_OPENCL_CACHELINE LIBXSMM_CACHELINE #endif #if !defined(ACC_OPENCL_TLS) # define ACC_OPENCL_TLS LIBXSMM_TLS #endif #if !defined(ACC_OPENCL_MAXALIGN) # define ACC_OPENCL_MAXALIGN (2 << 20 /*2MB*/) #endif #if !defined(ACC_OPENCL_BUFFERSIZE) # define ACC_OPENCL_BUFFERSIZE (8 << 10 /*8KB*/) #endif #if !defined(ACC_OPENCL_MAXSTRLEN) # define ACC_OPENCL_MAXSTRLEN 48 #endif #if !defined(ACC_OPENCL_MAXNDEVS) # define ACC_OPENCL_MAXNDEVS 64 #endif /* Counted on a per-thread basis! */ #if !defined(ACC_OPENCL_MAXNITEMS) # define ACC_OPENCL_MAXNITEMS 1024 #endif /* First char is CSV-separator by default (w/o spaces) */ #if !defined(ACC_OPENCL_DELIMS) # define ACC_OPENCL_DELIMS ",;" #endif #if !defined(ACC_OPENCL_CMEM) && 1 # define ACC_OPENCL_CMEM #endif #if !defined(ACC_OPENCL_ASYNC) && 1 # define ACC_OPENCL_ASYNC getenv("ACC_OPENCL_ASYNC") #endif #if !defined(ACC_OPENCL_XHINTS) && 1 # define ACC_OPENCL_XHINTS getenv("ACC_OPENCL_XHINTS") #endif #if !defined(ACC_OPENCL_STREAM_PRIORITIES) && 0 # if defined(CL_QUEUE_PRIORITY_KHR) # define ACC_OPENCL_STREAM_PRIORITIES # endif #endif #if !defined(ACC_OPENCL_USM) && defined(CL_VERSION_2_0) && 1 # if defined(__OFFLOAD_UNIFIED_MEMORY) /* Do not rely on an Intel extension for pointer arithmetic */ # define ACC_OPENCL_USM 2 # else /* Rely on OpenCL 2.0 (eventually mix-in an Intel ext.) */ # define ACC_OPENCL_USM 1 # endif #else # define ACC_OPENCL_USM 0 #endif /* Activate device by default */ #if !defined(ACC_OPENCL_ACTIVATE) && 0 # define ACC_OPENCL_ACTIVATE 0 #endif /* Use DBCSR's profile for detailed timings (function name prefix-offset) */ #if !defined(ACC_OPENCL_PROFILE_DBCSR) && (defined(__OFFLOAD_PROFILING) || 1) # if defined(__DBCSR_ACC) # define ACC_OPENCL_PROFILE_DBCSR 8 # endif #endif /* attaching c_dbcsr_acc_opencl_stream_t is needed */ #define ACC_OPENCL_STREAM(A) ((const c_dbcsr_acc_opencl_stream_t*)(A)) /* incompatible with c_dbcsr_acc_event_record */ #define ACC_OPENCL_EVENT(A) ((const cl_event*)(A)) #define ACC_OPENCL_ATOMIC_ACQUIRE(LOCK) \ do { \ LIBXSMM_ATOMIC_ACQUIRE(LOCK, LIBXSMM_SYNC_NPAUSE, LIBXSMM_ATOMIC_SEQ_CST); \ } while (0) #define ACC_OPENCL_ATOMIC_RELEASE(LOCK) \ do { \ LIBXSMM_ATOMIC_RELEASE(LOCK, LIBXSMM_ATOMIC_SEQ_CST); \ } while (0) #if defined(LIBXSMM_ATOMIC_LOCKTYPE) # define ACC_OPENCL_ATOMIC_LOCKTYPE volatile LIBXSMM_ATOMIC_LOCKTYPE #else # define ACC_OPENCL_ATOMIC_LOCKTYPE volatile int #endif #if defined(_OPENMP) # include # define ACC_OPENCL_OMP_TID() omp_get_thread_num() # define ACC_OPENCL_INIT(LOCK) omp_init_lock(LOCK) # define ACC_OPENCL_DESTROY(LOCK) omp_destroy_lock(LOCK) # define ACC_OPENCL_ACQUIRE(LOCK) omp_set_lock(LOCK) # define ACC_OPENCL_RELEASE(LOCK) omp_unset_lock(LOCK) # define ACC_OPENCL_LOCKTYPE omp_lock_t #else # define ACC_OPENCL_OMP_TID() (/*main*/ 0) # define ACC_OPENCL_INIT(LOCK) (*(LOCK) = 0) # define ACC_OPENCL_DESTROY(LOCK) # define ACC_OPENCL_ACQUIRE(LOCK) ACC_OPENCL_ATOMIC_ACQUIRE(LOCK) # define ACC_OPENCL_RELEASE(LOCK) ACC_OPENCL_ATOMIC_RELEASE(LOCK) # define ACC_OPENCL_LOCKTYPE ACC_OPENCL_ATOMIC_LOCKTYPE #endif #if defined(CL_VERSION_2_0) # define ACC_OPENCL_STREAM_PROPERTIES_TYPE cl_queue_properties # define ACC_OPENCL_CREATE_COMMAND_QUEUE(CTX, DEV, PROPS, RESULT) clCreateCommandQueueWithProperties(CTX, DEV, PROPS, RESULT) #else # define ACC_OPENCL_STREAM_PROPERTIES_TYPE cl_int # define ACC_OPENCL_CREATE_COMMAND_QUEUE(CTX, DEV, PROPS, RESULT) \ clCreateCommandQueue(CTX, DEV, (cl_command_queue_properties)(NULL != (PROPS) ? ((PROPS)[1]) : 0), RESULT) #endif #if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER # define ACC_OPENCL_EXPECT(EXPR) LIBXSMM_EXPECT(EXPR) # define LIBXSMM_STRISTR libxsmm_stristr #else # define ACC_OPENCL_EXPECT(EXPR) \ if (0 == (EXPR)) assert(0) # define LIBXSMM_STRISTR strstr #endif #define ACC_OPENCL_ERROR() c_dbcsr_acc_opencl_config.device.error.code #define ACC_OPENCL_ERROR_NAME(CODE) \ ((EXIT_SUCCESS != c_dbcsr_acc_opencl_config.device.error.code && (CODE) == c_dbcsr_acc_opencl_config.device.error.code) \ ? c_dbcsr_acc_opencl_config.device.error.name \ : "") #define ACC_OPENCL_ERROR_REPORT(NAME) \ do { \ const char* const acc_opencl_error_report_name_ = (const char*)('\0' != *#NAME ? (uintptr_t)(NAME + 0) : 0); \ if (0 != c_dbcsr_acc_opencl_config.verbosity) { \ if (NULL != acc_opencl_error_report_name_ && '\0' != *acc_opencl_error_report_name_) { \ fprintf(stderr, "ERROR ACC/OpenCL: failed for %s!\n", acc_opencl_error_report_name_); \ } \ else if (0 != c_dbcsr_acc_opencl_config.device.error.code) { \ if (NULL != c_dbcsr_acc_opencl_config.device.error.name && '\0' != *c_dbcsr_acc_opencl_config.device.error.name) { \ fprintf(stderr, "ERROR ACC/OpenCL: %s (code=%i)\n", c_dbcsr_acc_opencl_config.device.error.name, \ c_dbcsr_acc_opencl_config.device.error.code); \ } \ else if (-1001 == c_dbcsr_acc_opencl_config.device.error.code) { \ fprintf(stderr, "ERROR ACC/OpenCL: incomplete OpenCL installation?\n"); \ } \ else { \ fprintf(stderr, "ERROR ACC/OpenCL: unknown error (code=%i)\n", c_dbcsr_acc_opencl_config.device.error.code); \ } \ } \ memset(&c_dbcsr_acc_opencl_config.device.error, 0, sizeof(c_dbcsr_acc_opencl_config.device.error)); \ } \ assert(!"SUCCESS"); \ } while (0) #define ACC_OPENCL_CHECK(RESULT, CMD, MSG) \ do { \ if (EXIT_SUCCESS == (RESULT)) { \ (RESULT) = (CMD); /* update result given code from cmd */ \ c_dbcsr_acc_opencl_config.device.error.name = (MSG); \ c_dbcsr_acc_opencl_config.device.error.code = (RESULT); \ assert(EXIT_SUCCESS == (RESULT)); \ } \ else ACC_OPENCL_ERROR_REPORT(); \ } while (0) #define ACC_OPENCL_RETURN(RESULT, ...) \ do { \ if (EXIT_SUCCESS == (RESULT)) { \ assert(EXIT_SUCCESS == c_dbcsr_acc_opencl_config.device.error.code); \ memset(&c_dbcsr_acc_opencl_config.device.error, 0, sizeof(c_dbcsr_acc_opencl_config.device.error)); \ } \ else ACC_OPENCL_ERROR_REPORT(__VA_ARGS__); \ return (RESULT); \ } while (0) #if defined(__cplusplus) extern "C" { #endif /** Rich type denoting an error. */ typedef struct c_dbcsr_acc_opencl_error_t { const char* name; int code; } c_dbcsr_acc_opencl_error_t; /** Information about streams (c_dbcsr_acc_stream_create). */ typedef struct c_dbcsr_acc_opencl_stream_t { cl_command_queue queue; int tid; #if defined(ACC_OPENCL_STREAM_PRIORITIES) int priority; #endif } c_dbcsr_acc_opencl_stream_t; /** Settings updated during c_dbcsr_acc_set_active_device. */ typedef struct c_dbcsr_acc_opencl_device_t { /** Activated device context. */ cl_context context; /** * Stream for internal purpose, e.g., stream-argument * (ACC-interface) can be NULL (synchronous) */ c_dbcsr_acc_opencl_stream_t stream; /** Last error (not necessarily thread-safe/specific). */ c_dbcsr_acc_opencl_error_t error; /** OpenCL compiler flag (language standard). */ char std_flag[16]; /** OpenCL support-level (major and minor). */ cl_int std_level[2], std_clevel[2]; /** * Maximum size of workgroup (WG), preferred multiple of WG-size (PM), * and size of subgoup (SG) only if larger-equal than PM. SG is signaled * smaller if an alternative SG-size exists (SG is zero if no support). */ size_t wgsize[3]; /** Maximum size of memory allocations and constant buffer. */ cl_ulong size_maxalloc, size_maxcmem; /** Kind of device (GPU, CPU, or other). */ cl_device_type type; /** Whether host memory is unified, and SVM/USM capabilities. */ cl_int unified, usm; /** Device-UID. */ cl_uint uid; /** Main vendor? */ cl_int intel, amd, nv; /* USM support functions */ cl_int (*clSetKernelArgMemPointerINTEL)(cl_kernel, cl_uint, const void*); cl_int (*clEnqueueMemFillINTEL)(cl_command_queue, void*, const void*, size_t, size_t, cl_uint, const cl_event*, cl_event*); cl_int (*clEnqueueMemcpyINTEL)(cl_command_queue, cl_bool, void*, const void*, size_t, cl_uint, const cl_event*, cl_event*); void* (*clDeviceMemAllocINTEL)(cl_context, cl_device_id, const /*cl_mem_properties_intel*/ void*, size_t, cl_uint, cl_int*); void* (*clSharedMemAllocINTEL)(cl_context, cl_device_id, const /*cl_mem_properties_intel*/ void*, size_t, cl_uint, cl_int*); void* (*clHostMemAllocINTEL)(cl_context, const /*cl_mem_properties_intel*/ void*, size_t, cl_uint, cl_int*); cl_int (*clMemFreeINTEL)(cl_context, void*); } c_dbcsr_acc_opencl_device_t; typedef enum c_dbcsr_acc_event_kind_t { c_dbcsr_acc_event_kind_none, c_dbcsr_acc_event_kind_h2d, c_dbcsr_acc_event_kind_d2h, c_dbcsr_acc_event_kind_d2d } c_dbcsr_acc_event_kind_t; /** Information about host/device-memory pointer. */ typedef struct c_dbcsr_acc_opencl_info_memptr_t { cl_mem memory; /* first item! */ void* memptr; } c_dbcsr_acc_opencl_info_memptr_t; /** Enumeration of FP-atomic kinds. */ typedef enum c_dbcsr_acc_opencl_atomic_fp_t { c_dbcsr_acc_opencl_atomic_fp_no = 0, c_dbcsr_acc_opencl_atomic_fp_32 = 1, c_dbcsr_acc_opencl_atomic_fp_64 = 2 } c_dbcsr_acc_opencl_atomic_fp_t; /** * Settings discovered/setup during c_dbcsr_acc_init (independent of the device) * and settings updated during c_dbcsr_acc_set_active_device (devinfo). */ typedef struct c_dbcsr_acc_opencl_config_t { /** Table of ordered viable/discovered devices (matching criterion). */ cl_device_id devices[ACC_OPENCL_MAXNDEVS]; /** Active device (per process). */ c_dbcsr_acc_opencl_device_t device; /** Locks used by domain. */ ACC_OPENCL_LOCKTYPE *lock_main, *lock_stream, *lock_event, *lock_memory; /** All memptrs and related storage/counter. */ c_dbcsr_acc_opencl_info_memptr_t **memptrs, *memptr_data; size_t nmemptrs; /* counter */ /** Handle-counter. */ size_t nstreams, nevents; /** All streams and related storage. */ c_dbcsr_acc_opencl_stream_t **streams, *stream_data; /** All events and related storage. */ cl_event **events, *event_data; /** Device-ID to lookup devices-array. */ cl_int device_id; /** Kernel-parameters are matched against device's UID */ cl_uint devmatch; /** Split devices into sub-devices (if possible) */ cl_int devsplit; /** Verbosity level (output on stderr). */ cl_int verbosity; /** Guessed number of ranks per node (local), and rank-ID. */ cl_int nranks, nrank; /** Non-zero if library is initialized (negative: no device). */ cl_int ndevices; /** Maximum number of threads (omp_get_max_threads). */ cl_int nthreads; #if defined(ACC_OPENCL_STREAM_PRIORITIES) /** Runtime-adjust ACC_OPENCL_STREAM_PRIORITIES. */ cl_int priority; #endif /** Runtime-enable ACC_OPENCL_PROFILE_DBCSR. */ cl_int profile; /** Detailed/optional insight. */ void *hist_h2d, *hist_d2h, *hist_d2d; /** Configuration and execution-hints. */ cl_int xhints; /** Asynchronous memory operations. */ cl_int async; /** Debug (output/symbols, etc.). */ cl_int debug; /** Dump level. */ cl_int dump; /** WA level */ cl_int wa; } c_dbcsr_acc_opencl_config_t; /** Global configuration setup in c_dbcsr_acc_init. */ extern c_dbcsr_acc_opencl_config_t c_dbcsr_acc_opencl_config; /** If buffers are hinted for non-concurrent writes aka "OpenCL constant". */ int c_dbcsr_acc_opencl_use_cmem(const c_dbcsr_acc_opencl_device_t* devinfo); /** Determines host-pointer registration (for modification). Returns NULL if memory is SVM/USM. */ c_dbcsr_acc_opencl_info_memptr_t* c_dbcsr_acc_opencl_info_hostptr(const void* memory); /** * Determines device-pointer registration (for modification; internal). The offset is measured in elsize. * Returns NULL if memory is SVM/USM (offset is zero in this case). */ c_dbcsr_acc_opencl_info_memptr_t* c_dbcsr_acc_opencl_info_devptr_modify( ACC_OPENCL_LOCKTYPE* lock, void* memory, size_t elsize, const size_t* amount, size_t* offset); /** Determines device-pointer registration for info/ro (lock-control); offset is measured in elsize. */ int c_dbcsr_acc_opencl_info_devptr_lock(c_dbcsr_acc_opencl_info_memptr_t* info, ACC_OPENCL_LOCKTYPE* lock, const void* memory, size_t elsize, const size_t* amount, size_t* offset); /** Determines device-pointer registration for info/ro; offset is measured in elsize. */ int c_dbcsr_acc_opencl_info_devptr( c_dbcsr_acc_opencl_info_memptr_t* info, const void* memory, size_t elsize, const size_t* amount, size_t* offset); /** Finds an existing stream for the given thread-ID (or NULL). */ const c_dbcsr_acc_opencl_stream_t* c_dbcsr_acc_opencl_stream(ACC_OPENCL_LOCKTYPE* lock, int thread_id); /** Determines default-stream (see c_dbcsr_acc_opencl_device_t::stream). */ const c_dbcsr_acc_opencl_stream_t* c_dbcsr_acc_opencl_stream_default(void); /** Like c_dbcsr_acc_memset_zero, but supporting an arbitrary value used as initialization pattern. */ int c_dbcsr_acc_opencl_memset(void* dev_mem, int value, size_t offset, size_t nbytes, void* stream); /** Amount of device memory; local memory is only non-zero if separate from global. */ int c_dbcsr_acc_opencl_info_devmem(cl_device_id device, size_t* mem_free, size_t* mem_total, size_t* mem_local, int* mem_unified); /** Get device-ID for given device, and optionally global device-ID. */ int c_dbcsr_acc_opencl_device_id(cl_device_id device, int* device_id, int* global_id); /** Confirm the vendor of the given device. */ int c_dbcsr_acc_opencl_device_vendor(cl_device_id device, const char vendor[], int use_platform_name); /** Capture or calculate UID based on the device-name. */ int c_dbcsr_acc_opencl_device_uid(cl_device_id device, const char devname[], unsigned int* uid); /** Based on the device-ID, return the device's UID (capture or calculate), device name, and platform name. */ int c_dbcsr_acc_opencl_device_name( cl_device_id device, char name[], size_t name_maxlen, char platform[], size_t platform_maxlen, int cleanup); /** Return the OpenCL support-level for the given device. */ int c_dbcsr_acc_opencl_device_level( cl_device_id device, int std_clevel[2], int std_level[2], char std_flag[16], cl_device_type* type); /** Check if given device supports the extensions. */ int c_dbcsr_acc_opencl_device_ext(cl_device_id device, const char* const extnames[], int num_exts); /** Create context for given device. */ int c_dbcsr_acc_opencl_create_context(cl_device_id device_id, cl_context* context); /** Internal variant of c_dbcsr_acc_set_active_device. */ int c_dbcsr_acc_opencl_set_active_device(ACC_OPENCL_LOCKTYPE* lock, int device_id); /** Assemble flags to support atomic operations. */ int c_dbcsr_acc_opencl_flags_atomics(const c_dbcsr_acc_opencl_device_t* devinfo, c_dbcsr_acc_opencl_atomic_fp_t kind, const char* exts[], size_t* exts_maxlen, char flags[], size_t flags_maxlen); /** Assemble given defines and internal definitions. */ int c_dbcsr_acc_opencl_defines(const char defines[], char buffer[], size_t buffer_size, int cleanup); /** Combines build-params, build-options, and extra flags. */ int c_dbcsr_acc_opencl_kernel_flags(const char build_params[], const char build_options[], const char try_options[], cl_program program, char buffer[], size_t buffer_size); /** * Build kernel from source with given kernel_name, build_params and build_options. * The build_params are meant to instantiate the kernel (-D) whereas build_options * are are meant to be compiler-flags. The source_kind denotes source's content: * 0: OpenCL source code * 1: Filename (OpenCL or binary) * >1: Binary code (source_kind denotes size) */ int c_dbcsr_acc_opencl_kernel(size_t source_kind, const char source[], const char kernel_name[], const char build_params[], const char build_options[], const char try_build_options[], int* try_ok, const char* const extnames[], size_t num_exts, cl_kernel* kernel); /** Per-thread variant of c_dbcsr_acc_device_synchronize. */ int c_dbcsr_acc_opencl_device_synchronize(ACC_OPENCL_LOCKTYPE* lock, int thread_id); /** To support USM, call this function for pointer arguments instead of clSetKernelArg. */ int c_dbcsr_acc_opencl_set_kernel_ptr(cl_kernel kernel, cl_uint arg_index, const void* arg_value); /** Support older LIBXSMM (libxsmm_pmalloc_init). */ void c_dbcsr_acc_opencl_pmalloc_init(size_t size, size_t* num, void* pool[], void* storage); /** Support older LIBXSMM (libxsmm_pmalloc). */ void* c_dbcsr_acc_opencl_pmalloc(ACC_OPENCL_LOCKTYPE* lock, void* pool[], size_t* i); /** Support older LIBXSMM (libxsmm_pfree). */ void c_dbcsr_acc_opencl_pfree(const void* pointer, void* pool[], size_t* i); /** Measure time in seconds for the given event. */ double c_dbcsr_acc_opencl_duration(cl_event event, int* result_code); typedef void (*c_dbcsr_acc_opencl_hist_update_fn)(double* /*dst*/, const double* /*src*/); typedef double (*c_dbcsr_acc_opencl_hist_adjust_fn)(double /*value*/, int count); void c_dbcsr_acc_opencl_hist_create( void** hist, int nbuckets, int nqueue, int nvals, const c_dbcsr_acc_opencl_hist_update_fn update[]); void c_dbcsr_acc_opencl_hist_avg(double* dst, const double* src); void c_dbcsr_acc_opencl_hist_add(double* dst, const double* src); void c_dbcsr_acc_opencl_hist_set(ACC_OPENCL_LOCKTYPE* lock, void* hist, const double vals[]); void c_dbcsr_acc_opencl_hist_get( ACC_OPENCL_LOCKTYPE* lock, void* hist, const int** buckets, int* nbuckets, double range[2], const double** vals, int* nvals); void c_dbcsr_acc_opencl_hist_print( FILE* stream, void* hist, const char title[], const int prec[], const c_dbcsr_acc_opencl_hist_adjust_fn adjust[]); void c_dbcsr_acc_opencl_hist_free(void* hist); /** Return the pointer to the 1st match of "b" in "a", or NULL (no match). */ const char* c_dbcsr_acc_opencl_stristrn(const char a[], const char b[], size_t maxlen); /** * Count the number of words in A (or B) with match in B (or A) respectively (case-insensitive). * Can be used to score the equality of A and B on a word-basis. The result is independent of * A-B or B-A order (symmetry). The score cannot exceed the number of words in A or B. * Optional delimiters determine characters splitting words (can be NULL). * Optional count yields total number of words. */ int c_dbcsr_acc_opencl_strimatch(const char a[], const char b[], const char delims[], int* count); #if defined(__cplusplus) } #endif #endif /*ACC_OPENCL_H*/ ================================================ FILE: src/acc/opencl/acc_opencl.sh ================================================ #!/usr/bin/env bash #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: BSD-3-Clause # #################################################################################################### # shellcheck disable=SC2048,SC2129 BASENAME=$(command -v basename) DIRNAME=$(command -v dirname) HEAD=$(command -v head) SORT=$(command -v sort) SED=$(command -v gsed) CAT=$(command -v cat) CPP=$(command -v cpp) TR=$(command -v tr) RM=$(command -v rm) WC=$(command -v wc) # flags used to control preprocessor CPPBASEFLAGS="-dD -P -fpreprocessed" # delimiters allowed in CSV-file DELIMS=";,\t|/" # GNU sed is desired (macOS) if [ ! "${SED}" ]; then SED=$(command -v sed) fi trap_exit() { if [ "0" != "$?" ] && [ "${HFILE}" ]; then ${RM} -f "${OFILE}"; fi } process_pre() { if [ "$1" ]; then if [ "${CPP}" ] && \ [ "$(eval "${CPP} ${CPPBASEFLAGS} $1" 2>/dev/null >/dev/null && echo "YES")" ]; then if [ "${CPPFLAGS}" ] && \ [ "$(eval "${CPP} ${CPPFLAGS} ${CPPBASEFLAGS} $1" 2>/dev/null >/dev/null && echo "YES")" ]; then eval "${CPP} ${CPPFLAGS} ${CPPBASEFLAGS} $1" 2>/dev/null else eval "${CPP} ${CPPBASEFLAGS} $1" 2>/dev/null fi else # fallback to sed ${SED} -r ':a;s%(.*)/\*.*\*/%\1%;ta;/\/\*/!b;N;ba' "$1" fi | \ if [ ! "$2" ] || [ "0" = "$2" ]; then # strip include guards GUARD=$(${BASENAME} "$1" | ${TR} '[:lower:]' '[:upper:]' | ${TR} '.' '_') if [ "${GUARD}" ] && [ "$(${SED} -n "/${GUARD}/p" "$1")" ]; then ${SED} "/${GUARD}/d;\${/\s*\#\s*endif/d}" else ${CAT} fi else ${CAT} fi fi } process() { IFS=$'\n' while read -r LINE; do INCLUDE=$(${SED} -n "s/#[[:space:]]*include[[:space:]][[:space:]]*\"/\"/p" <<<"${LINE}") if [ "${INCLUDE}" ] && [ "$1" ] && [ -e "$1" ]; then CLINC=$(${SED} "s/\"//g" <<<"${INCLUDE}") CLPATH=$(${DIRNAME} "$1") FILE=${CLPATH}/${CLINC} if [ "${FILE}" ] && [ -e "${FILE}" ]; then process_pre "${FILE}" "$2" | process "${FILE}" "$2" else >&2 echo "WARNING: header file ${FILE} not found!" #exit 1 fi else ${SED} <<<"${LINE}" \ -e '/^[[:space:]]*$/d' -e 's/[[:space:]]*$//' \ -e 's/[[:space:]]*\\/ \\\\/g' -e 's/"/\\"/g' \ -e 's/^/ "/' -e 's/$/\\n" \\/' fi done unset IFS } if [ "${BASENAME}" ] && [ "${DIRNAME}" ] && [ "${HEAD}" ] && [ "${SORT}" ] && \ [ "${SED}" ] && [ "${CAT}" ] && [ "${TR}" ] && [ "${RM}" ] && [ "${WC}" ]; then for OFILE in "$@"; do :; done while test $# -gt 0; do case "$1" in -h|--help) shift $#;; -k|--keep) KEEP=1 shift;; -b|--banner) BANNER=$2 shift 2;; -p|--params) PARAMS="$2\t" shift 2;; -c|-d|--debug|--comments) CPPFLAGS+=" -C" shift;; -v|--verbose) VERBOSE=1 shift;; *) break;; esac done HERE="$(cd "$(${DIRNAME} "$0")" && pwd -P)" PARAMDIR=${PARAMDIR:-${PARAMS}} PARAMDIR=${PARAMDIR:-${HERE}/smm/params} PARAMDIR=$(echo -e "${PARAMDIR}" | ${TR} -d '\t') if [ "$#" -gt 1 ]; then # allow for instance /dev/stdout if [ "${OFILE##*.}" = "h" ]; then if [ "${VERBOSE}" ] && [ "0" != "${VERBOSE}" ]; then echo "$0 $*" # stdout fi truncate -s0 "${OFILE}" HFILE=${OFILE} elif [ "${OFILE##*.}" = "cl" ] || [ "${OFILE##*.}" = "csv" ]; then >&2 echo "ERROR: no output/header file given!" exit 1 elif [ "${VERBOSE}" ] && [ "0" != "${VERBOSE}" ]; then if [[ ${OFILE} != /dev/stderr ]]; then >&2 echo "$0 $*" else # stdout echo "$0 $*" fi fi trap 'trap_exit' EXIT RNAME=$(${BASENAME} "$(cd "$(${DIRNAME} "$1")" && pwd -P)") ANAME=$(${TR} '[:lower:]' '[:upper:]' <<<"${RNAME}") NFILES_OCL=0 for CLFILE in ${*:1:${#@}-1}; do if [ "${CLFILE##*.}" = "cl" ]; then CLEXT=".cl" elif [ "${CLFILE##*.}" = "h" ]; then CLEXT=".h" else CLEXT="" fi if [ "${CLEXT}" ]; then if [ -e "${CLFILE}" ]; then CNAME=$(${BASENAME} "${CLFILE}" "${CLEXT}" | ${SED} "s/${RNAME}_//;s/_opencl//") BNAME=$(${TR} '[:lower:]' '[:upper:]' <<<"${CNAME}") SNAME=OPENCL_${ANAME}_STRING_${BNAME} VNAME=opencl_${RNAME}_source_${CNAME} MNAME=OPENCL_${ANAME}_SOURCE_${BNAME} if [ "0" != "$((0<(NFILES_OCL)))" ]; then echo elif [ "${BANNER}" ] && [ "0" != "${BANNER}" ]; then ${HEAD} -n"${BANNER}" "${CLFILE}" fi echo "#define ${MNAME} ${VNAME}" echo "#define ${SNAME} \\" process_pre "${CLFILE}" "${KEEP}" | process "${CLFILE}" "${KEEP}" echo " \"\"" echo "static const char ${VNAME}[] = ${SNAME};" NFILES_OCL=$((NFILES_OCL+1)) else >&2 echo "ERROR: ${CLFILE} does not exist!" exit 1 fi >>"${OFILE}" else CSVFILES=("${*:NFILES_OCL+1:${#@}-NFILES_OCL-1}") break fi done if [ "0" = "${NFILES_OCL}" ]; then >&2 echo "ERROR: no OpenCL file was given!" exit 1 fi NFILES_CSV=0 for CSVFILE in "${CSVFILES[@]}"; do if [ "${CSVFILE##*.}" = "csv" ]; then if [ -f "${CSVFILE}" ]; then NFILES_CSV=$((NFILES_CSV+1)) fi else >&2 echo "ERROR: ${CSVFILE} is not a CSV file!" exit 1 fi done if [ "0" = "${NFILES_CSV}" ] && [ "${PARAMDIR}" ] && [ -d "${PARAMDIR}" ]; then CSVFILES=("${PARAMDIR}"/*.csv) NFILES_CSV=${#CSVFILES[@]} fi for CSVFILE in "${CSVFILES[@]}"; do if [ ! "${DELIM}" ]; then SEPAR=$(${SED} -n "1s/[^${DELIMS}]//gp" "${CSVFILE}" 2>/dev/null) DELIM=${SEPAR:0:1} MATCH=$(${SED} -n "1s/[^${DELIM}]//gp" "${CSVFILE}" 2>/dev/null) fi if [ "${DELIM}" ]; then CHECK=$(${SED} "/^[[:space:]]*$/d;s/[^${DELIM}]//g" "${CSVFILE}" | ${SORT} -u | ${SED} -n "0,/./p") if [ "0" != "$((${#MATCH}<${#CHECK}))" ]; then ERRFILE=${CSVFILES[0]} elif [ "${MATCH}" != "${CHECK}" ]; then ERRFILE=${CSVFILE} fi else ERRFILE=${CSVFILE} fi if [ "${ERRFILE}" ] && [ -f "${ERRFILE}" ]; then >&2 echo "WARNING: ${ERRFILE} is malformed and ignored!" fi done DEVPAT="s/${DELIM}..*//" DEVICES=$(for CSVFILE in "${CSVFILES[@]}"; do ${SED} "1d;/^[[:space:]]*$/d;${DEVPAT}" "${CSVFILE}"; done | ${SORT} -u) SNAME=OPENCL_${ANAME}_STRING_PARAMS_SMM VNAME=opencl_${RNAME}_params_smm DNAME=opencl_${RNAME}_devices MNAME=$(${TR} '[:lower:]' '[:upper:]' <<<"${VNAME}") NNAME=$(${TR} '[:lower:]' '[:upper:]' <<<"${DNAME}") if [ "${DEVICES}" ]; then echo echo "#define ${MNAME} ${VNAME}" echo "#define ${SNAME} \\" CSVLINES=$(for CSVFILE in "${CSVFILES[@]}"; do ${SED} "1d;/^[[:space:]]*$/d;s/[\r]*$/\\\n\" \\\/" "${CSVFILE}"; done) IFS=$'\n' for LINE in ${CSVLINES}; do I=0; IDEVICE=$(${SED} "${DEVPAT}" <<<"${LINE}") for DEVICE in ${DEVICES}; do if [ "${DEVICE}" = "${IDEVICE}" ]; then break; fi I=$((I+1)); done ${SED} "s/[^${DELIM}]*/ \"${I}/" <<<"${LINE}" done echo " \"\"" echo "static const char ${VNAME}[] = ${SNAME};" echo echo "#define ${NNAME} ${DNAME}" echo "static const char *const ${DNAME}[] = {" I=0; S=","; NDEVICES=$(${WC} -l <<<"${DEVICES}") for DEVICE in ${DEVICES}; do I=$((I+1)); if [ "0" != "$((NDEVICES==I))" ]; then S=""; fi echo " \"${DEVICE}\"${S}" done unset IFS echo "};" fi >>"${OFILE}" else echo "Usage: $0 infile.cl [infile2.cl .. infileN.cl] [infile.csv [.. infileN.csv]] outfile.h" echo " At least one OpenCL file and one header file must be supplied." echo " -k|--keep: do not strip include guards (stripped even if necessary)" echo " -b|--banner N: number of lines used as banner (default: 0)" echo " -p|--params P: directory-path to CSV-files (can be \"\")" echo " default: ${PARAMDIR}" echo " -c|-d|--debug|--comments: keep comments in source-code" echo " -v|--verbose: repeat command-line arguments" fi else >&2 echo "ERROR: missing prerequisites!" exit 1 fi ================================================ FILE: src/acc/opencl/acc_opencl_event.c ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #if defined(__OPENCL) # include "acc_opencl.h" # if defined(__cplusplus) extern "C" { # endif int c_dbcsr_acc_event_create(void** event_p) { int result = EXIT_SUCCESS; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif assert(NULL != c_dbcsr_acc_opencl_config.events && NULL != event_p); *event_p = c_dbcsr_acc_opencl_pmalloc( c_dbcsr_acc_opencl_config.lock_event, (void**)c_dbcsr_acc_opencl_config.events, &c_dbcsr_acc_opencl_config.nevents); if (NULL != *event_p) *(cl_event*)*event_p = NULL; else result = EXIT_FAILURE; # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_event_destroy(void* event) { int result = EXIT_SUCCESS; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif if (NULL != event) { const cl_event clevent = *ACC_OPENCL_EVENT(event); assert(NULL != c_dbcsr_acc_opencl_config.events); ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_event); c_dbcsr_acc_opencl_pfree(event, (void**)c_dbcsr_acc_opencl_config.events, &c_dbcsr_acc_opencl_config.nevents); if (NULL != clevent) { result = clReleaseEvent(clevent); # if !defined(NDEBUG) *(cl_event*)event = NULL; # endif } ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_event); } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_stream_wait_event(void* stream, void* event) { /* wait for an event (device-side) */ int result = EXIT_SUCCESS; const c_dbcsr_acc_opencl_stream_t* str = NULL; cl_event clevent = NULL; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream_default()); assert(NULL != str && NULL != str->queue && NULL != event); clevent = *ACC_OPENCL_EVENT(event); if (NULL != clevent) { # if defined(CL_VERSION_1_2) result = clEnqueueBarrierWithWaitList(str->queue, 1, &clevent, NULL); # else result = clEnqueueWaitForEvents(str->queue, 1, &clevent); # endif if (EXIT_SUCCESS != result) { ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(clevent)); *(cl_event*)event = NULL; } } else if (3 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) { fprintf(stderr, "WARN ACC/OpenCL: c_dbcsr_acc_stream_wait_event discovered an empty event.\n"); } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_event_record(void* event, void* stream) { int result = EXIT_SUCCESS; const c_dbcsr_acc_opencl_stream_t* str = NULL; cl_event clevent = NULL, clevent_result = NULL; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream_default()); assert(NULL != str && NULL != str->queue && NULL != event); clevent = *ACC_OPENCL_EVENT(event); # if defined(CL_VERSION_1_2) result = clEnqueueMarkerWithWaitList(str->queue, 0, NULL, &clevent_result); # else result = clEnqueueMarker(str->queue, &clevent_result); # endif if (NULL != clevent) { const int result_release = clReleaseEvent(clevent); if (EXIT_SUCCESS == result) result = result_release; } if (EXIT_SUCCESS == result) { assert(NULL != clevent_result); *(cl_event*)event = clevent_result; } else { if (NULL != clevent_result) ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(clevent_result)); *(cl_event*)event = NULL; } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_event_query(void* event, c_dbcsr_acc_bool_t* has_occurred) { cl_int status = CL_COMPLETE; int result; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif assert(NULL != event && NULL != has_occurred); result = clGetEventInfo(*ACC_OPENCL_EVENT(event), CL_EVENT_COMMAND_EXECUTION_STATUS, sizeof(cl_int), &status, NULL); if (EXIT_SUCCESS == result && 0 <= status) *has_occurred = (CL_COMPLETE == status ? 1 : 0); else { /* error state */ result = EXIT_SUCCESS; /* soft-error */ *has_occurred = 1; } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_event_synchronize(void* event) { /* waits on the host-side */ int result = EXIT_SUCCESS; cl_event clevent; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif assert(NULL != event); clevent = *ACC_OPENCL_EVENT(event); if (NULL != clevent) { if (0 == (32 & c_dbcsr_acc_opencl_config.wa)) { cl_int status = CL_COMPLETE + 1; if (64 & c_dbcsr_acc_opencl_config.xhints) { result = clGetEventInfo(clevent, CL_EVENT_COMMAND_EXECUTION_STATUS, sizeof(cl_int), &status, NULL); assert(EXIT_SUCCESS == result || CL_COMPLETE != status); } if (CL_COMPLETE != status) result = clWaitForEvents(1, &clevent); } else { cl_command_queue queue = NULL; result = clGetEventInfo(clevent, CL_EVENT_COMMAND_QUEUE, sizeof(cl_command_queue), &queue, NULL); if (EXIT_SUCCESS == result) result = clFinish(queue); } } else if (3 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) { fprintf(stderr, "WARN ACC/OpenCL: c_dbcsr_acc_event_synchronize discovered an empty event.\n"); } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } # if defined(__cplusplus) } # endif #endif /*__OPENCL*/ ================================================ FILE: src/acc/opencl/acc_opencl_mem.c ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #if defined(__OPENCL) # include "acc_opencl.h" # include # if defined(_WIN32) # include # else # if !defined(__linux__) && defined(__APPLE__) && defined(__MACH__) # include # include # endif # include # endif # if !defined(ACC_OPENCL_MEM_ALLOC) # if 1 # define ACC_OPENCL_MEM_ALLOC(SIZE, ALIGNMENT) libxsmm_aligned_malloc(SIZE, ALIGNMENT) # define ACC_OPENCL_MEM_FREE(PTR) libxsmm_free(PTR) # else # define ACC_OPENCL_MEM_ALLOC(SIZE, ALIGNMENT) aligned_alloc(ALIGNMENT, SIZE) # define ACC_OPENCL_MEM_FREE(PTR) free(PTR) # endif # endif # if !defined(ACC_OPENCL_MEM_ALIGNSCALE) # define ACC_OPENCL_MEM_ALIGNSCALE 8 # endif # if !defined(ACC_OPENCL_MEM_SVM_INTEL) && 0 # define ACC_OPENCL_MEM_SVM_INTEL # endif # if !defined(ACC_OPENCL_MEM_HST_INTEL) && 0 # define ACC_OPENCL_MEM_HST_INTEL # endif # if !defined(ACC_OPENCL_MEM_SVM_USM) && 0 # define ACC_OPENCL_MEM_SVM_USM # endif # if !defined(ACC_OPENCL_MEM_DEBUG) && 0 # if && !defined(NDEBUG) # define ACC_OPENCL_MEM_DEBUG # endif # endif # if defined(__cplusplus) extern "C" { # endif void c_dbcsr_acc_opencl_pmalloc_init(size_t size, size_t* num, void* pool[], void* storage) { char* p = (char*)storage; size_t i = 0; assert(0 < size && NULL != num && NULL != pool && NULL != storage); for (; i < *num; ++i, p += size) pool[i] = p; } void* c_dbcsr_acc_opencl_pmalloc(ACC_OPENCL_LOCKTYPE* lock, void* pool[], size_t* i) { void* pointer; assert(NULL != pool && NULL != i); if (NULL != lock) ACC_OPENCL_ACQUIRE(lock); pointer = (0 < *i ? pool[--(*i)] : NULL); if (NULL != lock) ACC_OPENCL_RELEASE(lock); assert(NULL != pointer); return pointer; } void c_dbcsr_acc_opencl_pfree(const void* pointer, void* pool[], size_t* i) { assert(NULL != pool && NULL != i); if (NULL != pointer) { LIBXSMM_ASSIGN127(pool + *i, &pointer); ++(*i); } } c_dbcsr_acc_opencl_info_memptr_t* c_dbcsr_acc_opencl_info_hostptr(const void* memory) { c_dbcsr_acc_opencl_info_memptr_t* result = NULL; if (NULL == c_dbcsr_acc_opencl_config.device.clHostMemAllocINTEL && # if (0 != ACC_OPENCL_USM) 0 == c_dbcsr_acc_opencl_config.device.usm && # endif NULL != memory) { assert(sizeof(c_dbcsr_acc_opencl_info_memptr_t) < (uintptr_t)memory); result = (c_dbcsr_acc_opencl_info_memptr_t*)((uintptr_t)memory - sizeof(c_dbcsr_acc_opencl_info_memptr_t)); } return result; } c_dbcsr_acc_opencl_info_memptr_t* c_dbcsr_acc_opencl_info_devptr_modify( ACC_OPENCL_LOCKTYPE* lock, void* memory, size_t elsize, const size_t* amount, size_t* offset) { c_dbcsr_acc_opencl_info_memptr_t* result = NULL; # if !defined(ACC_OPENCL_MEM_DEBUG) LIBXSMM_UNUSED(amount); # endif if (NULL != memory) { assert(NULL != c_dbcsr_acc_opencl_config.device.context); if (/* USM-pointer */ # if (0 != ACC_OPENCL_USM) 0 != c_dbcsr_acc_opencl_config.device.usm || # endif NULL != c_dbcsr_acc_opencl_config.device.clDeviceMemAllocINTEL) { /* assume only first item of c_dbcsr_acc_opencl_info_memptr_t is accessed */ assert(0 != c_dbcsr_acc_opencl_config.device.usm || NULL != c_dbcsr_acc_opencl_config.device.clDeviceMemAllocINTEL); result = NULL; /*(c_dbcsr_acc_opencl_info_memptr_t*)memory*/ if (NULL != offset) *offset = 0; } else { /* info-augmented pointer */ const char* const pointer = (const char*)memory; const size_t n = ACC_OPENCL_MAXNITEMS * c_dbcsr_acc_opencl_config.nthreads; size_t hit = (size_t)-1, i; assert(0 == c_dbcsr_acc_opencl_config.device.usm && NULL == c_dbcsr_acc_opencl_config.device.clDeviceMemAllocINTEL); assert(NULL != c_dbcsr_acc_opencl_config.memptrs); if (NULL != lock) ACC_OPENCL_ACQUIRE(lock); for (i = c_dbcsr_acc_opencl_config.nmemptrs; i < n; ++i) { c_dbcsr_acc_opencl_info_memptr_t* const info = c_dbcsr_acc_opencl_config.memptrs[i]; if (NULL != info) { char* const memptr = (char*)info->memptr; if (memptr == pointer) { /* fast-path */ if (NULL != offset) *offset = 0; result = info; break; } else if (memptr < pointer && NULL != offset) { size_t d = pointer - memptr, s = d; assert(0 < elsize && 0 != d); if (d < hit && (1 == elsize || 0 == (d % elsize)) && # if defined(ACC_OPENCL_MEM_DEBUG) /* TODO: verify enclosed conditions */ (EXIT_SUCCESS == clGetMemObjectInfo(info->memory, CL_MEM_SIZE, sizeof(size_t), &s, NULL)) && (NULL == amount || (*amount * elsize + d) <= s) && # endif (1 == elsize || 0 == (s % elsize)) && d <= s) { *offset = (1 == elsize ? d : (d / elsize)); result = info; hit = d; } # if defined(ACC_OPENCL_MEM_DEBUG) else if (d < hit && 0 != c_dbcsr_acc_opencl_config.debug && 0 != c_dbcsr_acc_opencl_config.verbosity) { fprintf(stderr, "ERROR ACC/OpenCL: memory=%p pointer=%p size=%llu offset=%llu info failed\n", (const void*)info->memory, info->memptr, (unsigned long long)s, (unsigned long long)(1 == elsize ? d : (d / elsize))); } # endif } } else break; } if (NULL != lock) ACC_OPENCL_RELEASE(lock); assert(NULL != result); } } return result; } int c_dbcsr_acc_opencl_info_devptr_lock(c_dbcsr_acc_opencl_info_memptr_t* info, ACC_OPENCL_LOCKTYPE* lock, const void* memory, size_t elsize, const size_t* amount, size_t* offset) { const c_dbcsr_acc_opencl_info_memptr_t* meminfo = NULL; int result = EXIT_SUCCESS; void* non_const; LIBXSMM_ASSIGN127(&non_const, &memory); meminfo = c_dbcsr_acc_opencl_info_devptr_modify(lock, non_const, elsize, amount, offset); assert(NULL != info); if (NULL == meminfo) { /* USM-pointer */ LIBXSMM_MEMZERO127(info); info->memory = (cl_mem)non_const; } else { /* info-augmented pointer */ assert(NULL != c_dbcsr_acc_opencl_config.device.context); LIBXSMM_ASSIGN127(info, meminfo); } return result; } int c_dbcsr_acc_opencl_info_devptr( c_dbcsr_acc_opencl_info_memptr_t* info, const void* memory, size_t elsize, const size_t* amount, size_t* offset) { ACC_OPENCL_LOCKTYPE* const lock_memory = (( # if (0 != ACC_OPENCL_USM) 0 != c_dbcsr_acc_opencl_config.device.usm || # endif NULL != c_dbcsr_acc_opencl_config.device.clSetKernelArgMemPointerINTEL) ? NULL /* no lock required */ : c_dbcsr_acc_opencl_config.lock_memory); return c_dbcsr_acc_opencl_info_devptr_lock(info, lock_memory, memory, elsize, amount, offset); } int c_dbcsr_acc_host_mem_deallocate_internal(void* /*host_ptr*/, cl_command_queue /*queue*/); int c_dbcsr_acc_host_mem_deallocate_internal(void* host_ptr, cl_command_queue queue) { const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; int result = EXIT_FAILURE; # if (1 >= ACC_OPENCL_USM) if (NULL != devinfo->clMemFreeINTEL) { # if defined(ACC_OPENCL_MEM_SVM_INTEL) || defined(ACC_OPENCL_MEM_HST_INTEL) result = devinfo->clMemFreeINTEL(devinfo->context, host_ptr); # else ACC_OPENCL_MEM_FREE(host_ptr); result = EXIT_SUCCESS; # endif } else # endif # if (0 != ACC_OPENCL_USM) && ((1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM)) if (0 != devinfo->usm && 0 != devinfo->unified) { if (0 == ((CL_DEVICE_SVM_FINE_GRAIN_BUFFER | CL_DEVICE_SVM_FINE_GRAIN_SYSTEM) & devinfo->usm)) { result = clEnqueueSVMUnmap(queue, host_ptr, 0, NULL, NULL); /* clSVMFree below synchronizes */ } else result = EXIT_SUCCESS; clSVMFree(devinfo->context, host_ptr); } else # endif { LIBXSMM_UNUSED(queue); ACC_OPENCL_MEM_FREE(host_ptr); result = EXIT_SUCCESS; } ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_host_mem_allocate(void** host_mem, size_t nbytes, void* stream) { int result = EXIT_SUCCESS; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif assert(NULL != host_mem); if (0 != nbytes) { const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; const c_dbcsr_acc_opencl_stream_t* const str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream_default()); int alignment = LIBXSMM_MAX(0x10000, sizeof(void*)); void* host_ptr = NULL; cl_mem memory = NULL; assert(NULL != str); if ((ACC_OPENCL_MEM_ALIGNSCALE * ACC_OPENCL_CACHELINE) <= nbytes) { const int a = ((ACC_OPENCL_MEM_ALIGNSCALE * ACC_OPENCL_MAXALIGN) <= nbytes ? ACC_OPENCL_MAXALIGN : ACC_OPENCL_CACHELINE); if (alignment < a) alignment = a; } # if !defined(ACC_OPENCL_ACTIVATE) if (NULL == devinfo->context) { ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_set_active_device( c_dbcsr_acc_opencl_config.lock_main, c_dbcsr_acc_opencl_config.device_id)); } # endif # if (1 >= ACC_OPENCL_USM) if (NULL != devinfo->clMemFreeINTEL) { # if defined(ACC_OPENCL_MEM_SVM_INTEL) const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id]; host_ptr = devinfo->clSharedMemAllocINTEL(devinfo->context, device_id, NULL /*properties*/, nbytes, 0 /*alignment*/, &result); # elif defined(ACC_OPENCL_MEM_HST_INTEL) host_ptr = devinfo->clHostMemAllocINTEL(devinfo->context, NULL /*properties*/, nbytes, 0 /*alignment*/, &result); # else host_ptr = ACC_OPENCL_MEM_ALLOC(nbytes, alignment); # endif assert(NULL != host_ptr || EXIT_SUCCESS != result); /*if (NULL != host_ptr)*/ *host_mem = host_ptr; } else # endif if (0 != devinfo->usm) { # if (0 != ACC_OPENCL_USM) # if ((1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM)) if (0 != devinfo->unified) { const int svmmem_fine = (0 != ((CL_DEVICE_SVM_FINE_GRAIN_BUFFER | CL_DEVICE_SVM_FINE_GRAIN_SYSTEM) & devinfo->usm) ? CL_MEM_SVM_FINE_GRAIN_BUFFER : 0); host_ptr = clSVMAlloc(devinfo->context, CL_MEM_READ_WRITE | svmmem_fine, nbytes, 0 /*alignment*/); if (NULL != host_ptr) { if (0 == svmmem_fine) { result = clEnqueueSVMMap( str->queue, CL_TRUE /*always block*/, CL_MAP_READ | CL_MAP_WRITE, host_ptr, nbytes, 0, NULL, NULL); } *host_mem = host_ptr; } else result = EXIT_FAILURE; } else # endif { host_ptr = ACC_OPENCL_MEM_ALLOC(nbytes, alignment); if (NULL != host_ptr) *host_mem = host_ptr; else result = EXIT_FAILURE; } # endif } else { const size_t size_meminfo = sizeof(c_dbcsr_acc_opencl_info_memptr_t); int memflags = CL_MEM_ALLOC_HOST_PTR; nbytes += alignment + size_meminfo - 1; # if defined(ACC_OPENCL_XHINTS) if (0 != (8 & c_dbcsr_acc_opencl_config.xhints) && (0 != devinfo->nv || NULL != (ACC_OPENCL_XHINTS))) { host_ptr = ACC_OPENCL_MEM_ALLOC(nbytes, alignment); if (NULL != host_ptr) memflags = CL_MEM_USE_HOST_PTR; } # endif memory = clCreateBuffer(devinfo->context, (cl_mem_flags)(CL_MEM_READ_WRITE | memflags), nbytes, host_ptr, &result); if (EXIT_SUCCESS == result) { void* mapped = host_ptr; if (NULL == host_ptr) { mapped = clEnqueueMapBuffer(str->queue, memory, CL_TRUE /*always block*/, # if defined(ACC_OPENCL_XHINTS) && (defined(CL_VERSION_1_2) || defined(CL_MAP_WRITE_INVALIDATE_REGION)) (32 & c_dbcsr_acc_opencl_config.xhints) ? CL_MAP_WRITE_INVALIDATE_REGION : # endif (CL_MAP_READ | CL_MAP_WRITE), 0 /*offset*/, nbytes, 0, NULL, NULL, &result); } assert(EXIT_SUCCESS == result || NULL == mapped); if (EXIT_SUCCESS == result) { const uintptr_t address = (uintptr_t)mapped; const uintptr_t aligned = LIBXSMM_UP2(address + size_meminfo, alignment); c_dbcsr_acc_opencl_info_memptr_t* const meminfo = (c_dbcsr_acc_opencl_info_memptr_t*)(aligned - size_meminfo); assert(address + size_meminfo <= aligned && NULL != meminfo); meminfo->memory = memory; meminfo->memptr = mapped; *host_mem = (void*)aligned; assert(meminfo == c_dbcsr_acc_opencl_info_hostptr(*host_mem)); } } } if (EXIT_SUCCESS != result) { if (NULL != memory) ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseMemObject(memory)); if (NULL != host_ptr) { ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_host_mem_deallocate_internal(host_ptr, str->queue)); } *host_mem = NULL; } } else *host_mem = NULL; /* consider warning */ assert(EXIT_SUCCESS == result || NULL == *host_mem); # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_host_mem_deallocate(void* host_mem, void* stream) { int result = EXIT_SUCCESS; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif if (NULL != host_mem) { const c_dbcsr_acc_opencl_stream_t* const str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream_default()); const c_dbcsr_acc_opencl_info_memptr_t* const meminfo = c_dbcsr_acc_opencl_info_hostptr(host_mem); assert(NULL != str); if (NULL == meminfo || NULL == meminfo->memory) { /* USM-pointer */ assert(0 != c_dbcsr_acc_opencl_config.device.usm || NULL != c_dbcsr_acc_opencl_config.device.clMemFreeINTEL); result = c_dbcsr_acc_host_mem_deallocate_internal(host_mem, str->queue); } else { /* info-augmented pointer */ const c_dbcsr_acc_opencl_info_memptr_t info = *meminfo; /* copy meminfo prior to unmap */ int result_release = EXIT_SUCCESS; void* host_ptr = NULL; assert(0 == c_dbcsr_acc_opencl_config.device.usm && NULL == c_dbcsr_acc_opencl_config.device.clMemFreeINTEL); if (EXIT_SUCCESS == clGetMemObjectInfo(info.memory, CL_MEM_HOST_PTR, sizeof(void*), &host_ptr, NULL) && NULL != host_ptr) { result = c_dbcsr_acc_host_mem_deallocate_internal(host_ptr, str->queue); } else { /* clReleaseMemObject later on synchronizes */ result = clEnqueueUnmapMemObject(str->queue, info.memory, info.memptr, 0, NULL, NULL); } result_release = clReleaseMemObject(info.memory); if (EXIT_SUCCESS == result) result = result_release; } } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } void CL_CALLBACK c_dbcsr_acc_memcpy_notify(cl_event /*event*/, cl_int /*event_status*/, void* /*data*/); void CL_CALLBACK c_dbcsr_acc_memcpy_notify(cl_event event, cl_int event_status, void* data) { int result = EXIT_SUCCESS; const double durdev = c_dbcsr_acc_opencl_duration(event, &result); cl_command_type type = CL_COMMAND_SVM_MEMCPY; LIBXSMM_UNUSED(event_status); assert(CL_COMPLETE == event_status && NULL != data && 8 == sizeof(data)); if (EXIT_SUCCESS == result && EXIT_SUCCESS == clGetEventInfo(event, CL_EVENT_COMMAND_TYPE, sizeof(type), &type, NULL)) { const size_t size = 0x3FFFFFFFFFFFFFFF & (size_t)data; const int kind = (int)(((size_t)data) >> 62); const double vals[] = {(double)size, durdev}; const int mb = (int)((size + (1 << 19)) >> 20); if (CL_COMMAND_WRITE_BUFFER != type && CL_COMMAND_READ_BUFFER != type && CL_COMMAND_COPY_BUFFER != type) { switch (kind) { case c_dbcsr_acc_event_kind_h2d: type = CL_COMMAND_WRITE_BUFFER; break; case c_dbcsr_acc_event_kind_d2h: type = CL_COMMAND_READ_BUFFER; break; case c_dbcsr_acc_event_kind_d2d: type = CL_COMMAND_COPY_BUFFER; break; default: assert(c_dbcsr_acc_event_kind_none == kind); /* should not happen */ } } switch (type) { case CL_COMMAND_WRITE_BUFFER: { assert(NULL != c_dbcsr_acc_opencl_config.hist_h2d && c_dbcsr_acc_event_kind_h2d == kind); c_dbcsr_acc_opencl_hist_set(c_dbcsr_acc_opencl_config.lock_memory, c_dbcsr_acc_opencl_config.hist_h2d, vals); if (0 > c_dbcsr_acc_opencl_config.profile) fprintf(stderr, "PROF ACC/OpenCL: H2D mb=%i us=%.0f\n", mb, durdev * 1E6); } break; case CL_COMMAND_READ_BUFFER: { assert(NULL != c_dbcsr_acc_opencl_config.hist_d2h && c_dbcsr_acc_event_kind_d2h == kind); c_dbcsr_acc_opencl_hist_set(c_dbcsr_acc_opencl_config.lock_memory, c_dbcsr_acc_opencl_config.hist_d2h, vals); if (0 > c_dbcsr_acc_opencl_config.profile) fprintf(stderr, "PROF ACC/OpenCL: D2H mb=%i us=%.0f\n", mb, durdev * 1E6); } break; case CL_COMMAND_COPY_BUFFER: { assert(NULL != c_dbcsr_acc_opencl_config.hist_d2d && c_dbcsr_acc_event_kind_d2d == kind); c_dbcsr_acc_opencl_hist_set(c_dbcsr_acc_opencl_config.lock_memory, c_dbcsr_acc_opencl_config.hist_d2d, vals); if (0 > c_dbcsr_acc_opencl_config.profile) fprintf(stderr, "PROF ACC/OpenCL: D2D mb=%i us=%.0f\n", mb, durdev * 1E6); } break; } } if (NULL != event) ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(event)); } int c_dbcsr_acc_dev_mem_allocate(void** dev_mem, size_t nbytes) { /* assume no lock is needed to protect against context/device changes */ const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; int result = EXIT_SUCCESS; void* memptr = NULL; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif # if !defined(ACC_OPENCL_ACTIVATE) if (NULL == devinfo->context) { ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_set_active_device( c_dbcsr_acc_opencl_config.lock_main, c_dbcsr_acc_opencl_config.device_id)); } # endif assert(NULL != dev_mem && NULL != devinfo->context); if (0 != nbytes) { cl_mem memory = NULL; # if (1 >= ACC_OPENCL_USM) if (NULL != devinfo->clMemFreeINTEL) { const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id]; # if defined(ACC_OPENCL_MEM_SVM_INTEL) memptr = devinfo->clSharedMemAllocINTEL(devinfo->context, device_id, NULL /*properties*/, nbytes, 0 /*alignment*/, &result); # else memptr = devinfo->clDeviceMemAllocINTEL(devinfo->context, device_id, NULL /*properties*/, nbytes, 0 /*alignment*/, &result); # endif *dev_mem = memptr; } else # endif # if (0 != ACC_OPENCL_USM) if (0 != devinfo->usm) { # if (1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM) const int svmflags = (0 != ((CL_DEVICE_SVM_FINE_GRAIN_BUFFER | CL_DEVICE_SVM_FINE_GRAIN_SYSTEM) & devinfo->usm) ? CL_MEM_SVM_FINE_GRAIN_BUFFER : 0); memptr = clSVMAlloc(devinfo->context, (cl_svm_mem_flags)(CL_MEM_READ_WRITE | svmflags), nbytes, 0 /*alignment*/); # else int alignment = LIBXSMM_MAX(0x10000, sizeof(void*)); if ((ACC_OPENCL_MEM_ALIGNSCALE * ACC_OPENCL_CACHELINE) <= nbytes) { const int a = ((ACC_OPENCL_MEM_ALIGNSCALE * ACC_OPENCL_MAXALIGN) <= nbytes ? ACC_OPENCL_MAXALIGN : ACC_OPENCL_CACHELINE); if (alignment < a) alignment = a; } memptr = ACC_OPENCL_MEM_ALLOC(nbytes, alignment); # endif *dev_mem = memptr; } else # endif { # if defined(ACC_OPENCL_XHINTS) const int devuid = devinfo->uid, devuids = (0x4905 == devuid || 0x020a == devuid || (0x0bd0 <= devuid && 0x0bdb >= devuid)); const int try_flag = ((0 != (16 & c_dbcsr_acc_opencl_config.xhints) && 0 != devinfo->intel && 0 == devinfo->unified && (devuids || NULL != (ACC_OPENCL_XHINTS))) ? (1u << 22) : 0); memory = clCreateBuffer(devinfo->context, (cl_mem_flags)(CL_MEM_READ_WRITE | try_flag), nbytes, NULL /*host_ptr*/, &result); if (0 != try_flag && EXIT_SUCCESS != result) /* retry without try_flag */ # endif { memory = clCreateBuffer(devinfo->context, CL_MEM_READ_WRITE, nbytes, NULL /*host_ptr*/, &result); } if (EXIT_SUCCESS == result) { const c_dbcsr_acc_opencl_stream_t* str = NULL; static cl_kernel kernel = NULL; const size_t size = 1; ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_memory); str = c_dbcsr_acc_opencl_stream(NULL /*lock*/, ACC_OPENCL_OMP_TID()); assert(NULL != str && NULL != memory); /* determine device-side value of device-memory object by running some kernel */ if (NULL == kernel) { /* generate kernel */ const char source[] = "kernel void memptr(global unsigned long* ptr) {\n" " const union { global unsigned long* p; unsigned long u; } cast = { ptr };\n" " const size_t i = get_global_id(0);\n" " ptr[i] = cast.u + i;\n" "}\n"; assert(sizeof(size_t) == sizeof(cl_ulong)); result = c_dbcsr_acc_opencl_kernel(0 /*source_kind*/, source, "memptr" /*kernel_name*/, NULL /*build_params*/, NULL /*build_options*/, NULL /*try_build_options*/, NULL /*try_ok*/, NULL /*extnames*/, 0 /*num_exts*/, &kernel); } /* TODO: backup/restore memory */ if (EXIT_SUCCESS == result) result = clSetKernelArg(kernel, 0, sizeof(cl_mem), &memory); if (EXIT_SUCCESS == result) { result = clEnqueueNDRangeKernel( str->queue, kernel, 1 /*work_dim*/, NULL /*offset*/, &size, NULL /*local_work_size*/, 0, NULL, NULL); } ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_memory); if (EXIT_SUCCESS == result) { result = clEnqueueReadBuffer( str->queue, memory, CL_TRUE /*blocking*/, 0 /*offset*/, sizeof(void*), &memptr, 0, NULL, NULL /*event*/); } assert(EXIT_SUCCESS != result || NULL != memptr); if (EXIT_SUCCESS == result) { c_dbcsr_acc_opencl_info_memptr_t* const info = (c_dbcsr_acc_opencl_info_memptr_t*)c_dbcsr_acc_opencl_pmalloc( c_dbcsr_acc_opencl_config.lock_memory, (void**)c_dbcsr_acc_opencl_config.memptrs, &c_dbcsr_acc_opencl_config.nmemptrs); if (NULL != info) { info->memory = memory; info->memptr = memptr; *dev_mem = memptr; } else result = EXIT_FAILURE; } } } if (EXIT_SUCCESS != result) { if (0 != c_dbcsr_acc_opencl_config.verbosity) { fprintf(stderr, "ERROR ACC/OpenCL: memory=%p pointer=%p size=%llu failed to allocate\n", (const void*)memory, memptr, (unsigned long long)nbytes); } if (NULL != memory) ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseMemObject(memory)); *dev_mem = NULL; } } else *dev_mem = NULL; assert(EXIT_SUCCESS == result || NULL == *dev_mem); # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_dev_mem_deallocate(void* dev_mem) { int result = EXIT_SUCCESS; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif if (NULL != dev_mem) { assert(NULL != c_dbcsr_acc_opencl_config.device.context); # if (1 >= ACC_OPENCL_USM) if (NULL != c_dbcsr_acc_opencl_config.device.clMemFreeINTEL) { result = c_dbcsr_acc_opencl_config.device.clMemFreeINTEL(c_dbcsr_acc_opencl_config.device.context, dev_mem); } else # endif # if (0 != ACC_OPENCL_USM) if (0 != c_dbcsr_acc_opencl_config.device.usm) { # if (1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM) clSVMFree(c_dbcsr_acc_opencl_config.device.context, dev_mem); # else ACC_OPENCL_MEM_FREE(dev_mem); # endif } else # endif { c_dbcsr_acc_opencl_info_memptr_t* info = NULL; ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_memory); info = c_dbcsr_acc_opencl_info_devptr_modify(NULL, dev_mem, 1 /*elsize*/, NULL /*amount*/, NULL /*offset*/); if (NULL != info && info->memptr == dev_mem && NULL != info->memory) { c_dbcsr_acc_opencl_info_memptr_t* const pfree = c_dbcsr_acc_opencl_config.memptrs[c_dbcsr_acc_opencl_config.nmemptrs]; result = clReleaseMemObject(info->memory); c_dbcsr_acc_opencl_pfree(pfree, (void**)c_dbcsr_acc_opencl_config.memptrs, &c_dbcsr_acc_opencl_config.nmemptrs); *info = *pfree; LIBXSMM_MEMZERO127(pfree); } else result = EXIT_FAILURE; ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_memory); } } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_dev_mem_set_ptr(void** dev_mem, void* other, size_t offset) { int result = EXIT_SUCCESS; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif assert(NULL != dev_mem); if (NULL != other || 0 == offset) { *dev_mem = (char*)other + offset; } else { result = EXIT_FAILURE; *dev_mem = NULL; } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_memcpy_h2d(const void* host_mem, void* dev_mem, size_t nbytes, void* stream) { const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; int result = EXIT_SUCCESS; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif assert((NULL != host_mem && NULL != dev_mem) || 0 == nbytes); assert(NULL != devinfo->context); if ( # if (0 != ACC_OPENCL_USM) host_mem != dev_mem && /* fast-path only sensible without offsets */ # endif NULL != host_mem && NULL != dev_mem && 0 != nbytes) { # if defined(ACC_OPENCL_ASYNC) const cl_bool finish = (0 == (1 & c_dbcsr_acc_opencl_config.async) || NULL == stream || (0 != (8 & c_dbcsr_acc_opencl_config.wa) && 0 != devinfo->intel && 0 != devinfo->unified)); # else const cl_bool finish = CL_TRUE; # endif const c_dbcsr_acc_opencl_stream_t* str; cl_event event = NULL; ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_memory); str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream(NULL, ACC_OPENCL_OMP_TID())); assert(NULL != str); # if (1 >= ACC_OPENCL_USM) if (NULL != devinfo->clEnqueueMemcpyINTEL) { result = devinfo->clEnqueueMemcpyINTEL( str->queue, finish, dev_mem, host_mem, nbytes, 0, NULL, NULL == c_dbcsr_acc_opencl_config.hist_h2d ? NULL : &event); } else # endif # if (0 != ACC_OPENCL_USM) if (0 != devinfo->usm) { # if (1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM) result = clEnqueueSVMMemcpy( str->queue, finish, dev_mem, host_mem, nbytes, 0, NULL, NULL == c_dbcsr_acc_opencl_config.hist_h2d ? NULL : &event); # else memcpy(dev_mem, host_mem, nbytes); # endif } else # endif { size_t offset = 0; c_dbcsr_acc_opencl_info_memptr_t* const info = c_dbcsr_acc_opencl_info_devptr_modify( NULL, dev_mem, 1 /*elsize*/, &nbytes, &offset); if (NULL != info) { result = clEnqueueWriteBuffer(str->queue, info->memory, finish, offset, nbytes, host_mem, 0, NULL, NULL == c_dbcsr_acc_opencl_config.hist_h2d ? NULL : &event); } else result = EXIT_FAILURE; } ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_memory); if (NULL != event) { /* c_dbcsr_acc_memcpy_notify must be outside of locked region */ if (EXIT_SUCCESS == result) { void* const data = (void*)(nbytes | ((size_t)c_dbcsr_acc_event_kind_h2d) << 62); assert(NULL != c_dbcsr_acc_opencl_config.hist_h2d); if (!finish) { /* asynchronous */ result = clSetEventCallback(event, CL_COMPLETE, c_dbcsr_acc_memcpy_notify, data); } else c_dbcsr_acc_memcpy_notify(event, CL_COMPLETE, data); /* synchronous */ } else ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(event)); } } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } /* like c_dbcsr_acc_memcpy_d2h, but apply some async workaround. */ int c_dbcsr_acc_opencl_memcpy_d2h(const void* /*dev_mem*/, void* /*host_mem*/, size_t /*offset*/, size_t /*nbytes*/, cl_command_queue /*queue*/, int /*blocking*/, cl_event* /*event*/); int c_dbcsr_acc_opencl_memcpy_d2h( const void* dev_mem, void* host_mem, size_t offset, size_t nbytes, cl_command_queue queue, int blocking, cl_event* event) { const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; # if defined(ACC_OPENCL_ASYNC) const cl_bool finish = (0 != blocking || 0 == (2 & c_dbcsr_acc_opencl_config.async) || (0 != (8 & c_dbcsr_acc_opencl_config.wa) && 0 != devinfo->intel && 0 != devinfo->unified)); # else const cl_bool finish = CL_TRUE; # endif int result = EXIT_SUCCESS; assert(NULL != dev_mem); # if (1 >= ACC_OPENCL_USM) if (NULL != devinfo->clEnqueueMemcpyINTEL) { result = devinfo->clEnqueueMemcpyINTEL(queue, finish, host_mem, (const char*)dev_mem + offset, nbytes, 0, NULL, event); } else # endif # if (0 != ACC_OPENCL_USM) if (0 != devinfo->usm) { # if (1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM) result = clEnqueueSVMMemcpy(queue, finish, host_mem, (const char*)dev_mem + offset, nbytes, 0, NULL, event); # else memcpy(host_mem, (const char*)dev_mem + offset, nbytes); # endif } else # endif { result = clEnqueueReadBuffer(queue, (cl_mem)(uintptr_t)dev_mem, finish, offset, nbytes, host_mem, 0, NULL, event); } if (EXIT_SUCCESS != result && !finish) { /* retry synchronously */ int result_sync = EXIT_FAILURE; # if (1 >= ACC_OPENCL_USM) if (NULL != devinfo->clEnqueueMemcpyINTEL) { result_sync = devinfo->clEnqueueMemcpyINTEL(queue, CL_TRUE, host_mem, (const char*)dev_mem + offset, nbytes, 0, NULL, event); } else # endif # if (0 != ACC_OPENCL_USM) if (0 != devinfo->usm) { # if (1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM) result_sync = clEnqueueSVMMemcpy(queue, CL_TRUE, host_mem, (const char*)dev_mem + offset, nbytes, 0, NULL, event); # else memcpy(host_mem, (const char*)dev_mem + offset, nbytes); # endif } else # endif { result_sync = clEnqueueReadBuffer(queue, (cl_mem)(uintptr_t)dev_mem, CL_TRUE, offset, nbytes, host_mem, 0, NULL, event); } if (EXIT_SUCCESS == result_sync) { c_dbcsr_acc_opencl_config.async &= ~2; /* retract async feature */ if (0 != c_dbcsr_acc_opencl_config.verbosity) { fprintf(stderr, "WARN ACC/OpenCL: falling back to synchronous readback (code=%i).\n", result); } result = EXIT_SUCCESS; } } return result; } int c_dbcsr_acc_memcpy_d2h(const void* dev_mem, void* host_mem, size_t nbytes, void* stream) { int result = EXIT_SUCCESS; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif assert((NULL != dev_mem && NULL != host_mem) || 0 == nbytes); if ( # if (0 != ACC_OPENCL_USM) host_mem != dev_mem && /* fast-path only sensible without offsets */ # endif NULL != host_mem && NULL != dev_mem && 0 != nbytes) { const cl_bool finish = (NULL != stream ? CL_FALSE : CL_TRUE); c_dbcsr_acc_opencl_info_memptr_t* info = NULL; cl_event event = NULL; size_t offset = 0; union { const void* input; void* ptr; } nconst = {dev_mem}; const c_dbcsr_acc_opencl_stream_t* str; ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_memory); str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream(NULL, ACC_OPENCL_OMP_TID())); assert(NULL != str); info = c_dbcsr_acc_opencl_info_devptr_modify(NULL, nconst.ptr, 1 /*elsize*/, &nbytes, &offset); if (NULL == info) { result = c_dbcsr_acc_opencl_memcpy_d2h( dev_mem, host_mem, offset, nbytes, str->queue, finish, NULL == c_dbcsr_acc_opencl_config.hist_d2h ? NULL : &event); } else { result = c_dbcsr_acc_opencl_memcpy_d2h( info->memory, host_mem, offset, nbytes, str->queue, finish, NULL == c_dbcsr_acc_opencl_config.hist_d2h ? NULL : &event); } ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_memory); if (NULL != event) { /* c_dbcsr_acc_memcpy_notify must be outside of locked region */ if (EXIT_SUCCESS == result) { void* const data = (void*)(nbytes | ((size_t)c_dbcsr_acc_event_kind_d2h) << 62); assert(NULL != c_dbcsr_acc_opencl_config.hist_d2h); if (!finish) { /* asynchronous */ result = clSetEventCallback(event, CL_COMPLETE, c_dbcsr_acc_memcpy_notify, data); } else c_dbcsr_acc_memcpy_notify(event, CL_COMPLETE, data); /* synchronous */ } else ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(event)); } } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_memcpy_d2d(const void* devmem_src, void* devmem_dst, size_t nbytes, void* stream) { int result = EXIT_SUCCESS; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif assert((NULL != devmem_src && NULL != devmem_dst) || 0 == nbytes); if (NULL != devmem_src && devmem_src != devmem_dst && 0 != nbytes) { # if defined(ACC_OPENCL_ASYNC) cl_event event = NULL, *const pevent = (0 == (4 & c_dbcsr_acc_opencl_config.async) || NULL == stream) ? &event : NULL; # else cl_event event = NULL, *const pevent = NULL; # endif const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; union { const void* input; void* ptr; } nconst = {devmem_src}; const c_dbcsr_acc_opencl_stream_t* str; ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_memory); str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream(NULL, ACC_OPENCL_OMP_TID())); assert(NULL != str && NULL != devinfo->context); # if (1 >= ACC_OPENCL_USM) if (NULL != devinfo->clEnqueueMemcpyINTEL) { result = devinfo->clEnqueueMemcpyINTEL(str->queue, CL_FALSE /*blocking*/, devmem_dst, devmem_src, nbytes, 0, NULL, NULL == c_dbcsr_acc_opencl_config.hist_d2d ? pevent : &event); } else # endif # if (0 != ACC_OPENCL_USM) if (0 != devinfo->usm) { # if (1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM) result = clEnqueueSVMMemcpy(str->queue, CL_FALSE /*blocking*/, devmem_dst, devmem_src, nbytes, 0, NULL, NULL == c_dbcsr_acc_opencl_config.hist_d2d ? pevent : &event); # else memcpy(devmem_dst, devmem_src, nbytes); # endif } else # endif { size_t offset_src = 0, offset_dst = 0; c_dbcsr_acc_opencl_info_memptr_t* const info_src = c_dbcsr_acc_opencl_info_devptr_modify( NULL, nconst.ptr, 1 /*elsize*/, &nbytes, &offset_src); c_dbcsr_acc_opencl_info_memptr_t* const info_dst = c_dbcsr_acc_opencl_info_devptr_modify( NULL, devmem_dst, 1 /*elsize*/, &nbytes, &offset_dst); if (NULL != info_src && NULL != info_dst) { result = clEnqueueCopyBuffer(str->queue, info_src->memory, info_dst->memory, offset_src, offset_dst, nbytes, 0, NULL, NULL == c_dbcsr_acc_opencl_config.hist_d2d ? pevent : &event); } else result = EXIT_FAILURE; } ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_memory); if (NULL != event) { /* c_dbcsr_acc_memcpy_notify must be outside of locked region */ if (EXIT_SUCCESS == result) { void* const data = (void*)(nbytes | ((size_t)c_dbcsr_acc_event_kind_d2d) << 62); if (NULL == pevent) { /* asynchronous */ assert(NULL != c_dbcsr_acc_opencl_config.hist_d2d); result = clSetEventCallback(event, CL_COMPLETE, c_dbcsr_acc_memcpy_notify, data); } else { /* synchronous */ result = clWaitForEvents(1, &event); if (EXIT_SUCCESS == result) { if (NULL != c_dbcsr_acc_opencl_config.hist_d2d) { c_dbcsr_acc_memcpy_notify(event, CL_COMPLETE, data); } else result = clReleaseEvent(event); } else ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(event)); } } else ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(event)); } } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_opencl_memset(void* dev_mem, int value, size_t offset, size_t nbytes, void* stream) { int result = EXIT_SUCCESS; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif assert(NULL != dev_mem || 0 == nbytes); if (0 != nbytes) { # if defined(ACC_OPENCL_ASYNC) cl_event event = NULL, *const pevent = (0 == (8 & c_dbcsr_acc_opencl_config.async) || NULL == stream) ? &event : NULL; # else cl_event event = NULL, *const pevent = NULL; # endif const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; const c_dbcsr_acc_opencl_stream_t* str; size_t base = 0, vsize = 1; if (0 == LIBXSMM_MOD2(nbytes, 4)) vsize = 4; else if (0 == LIBXSMM_MOD2(nbytes, 2)) vsize = 2; ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_memory); str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream(NULL, ACC_OPENCL_OMP_TID())); assert(NULL != str && NULL != devinfo->context); # if (1 >= ACC_OPENCL_USM) if (NULL != devinfo->clEnqueueMemFillINTEL) { result = devinfo->clEnqueueMemFillINTEL(str->queue, (char*)dev_mem + offset, &value, vsize, nbytes, 0, NULL, pevent); } else # endif # if (0 != ACC_OPENCL_USM) if (0 != devinfo->usm) { # if (1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM) result = clEnqueueSVMMemFill(str->queue, (char*)dev_mem + offset, &value, vsize, nbytes, 0, NULL, pevent); # else memset((char*)dev_mem + offset, value, nbytes); # endif } else # endif { const c_dbcsr_acc_opencl_info_memptr_t* const info = c_dbcsr_acc_opencl_info_devptr_modify( NULL, dev_mem, 1 /*elsize*/, &nbytes, &base); if (NULL != info) { result = clEnqueueFillBuffer(str->queue, info->memory, &value, vsize, base + offset, nbytes, 0, NULL, pevent); dev_mem = info->memptr; } else result = EXIT_FAILURE; } ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_memory); if (NULL != event) { int result_release; if (EXIT_SUCCESS == result) result = clWaitForEvents(1, &event); result_release = clReleaseEvent(event); if (EXIT_SUCCESS == result) result = result_release; } } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_memset_zero(void* dev_mem, size_t offset, size_t nbytes, void* stream) { return c_dbcsr_acc_opencl_memset(dev_mem, 0 /*value*/, offset, nbytes, stream); } int c_dbcsr_acc_opencl_info_devmem(cl_device_id device, size_t* mem_free, size_t* mem_total, size_t* mem_local, int* mem_unified) { int result = EXIT_SUCCESS, unified = 0; size_t size_free = 0, size_total = 0, size_local = 0; cl_device_local_mem_type cl_local_type = CL_GLOBAL; cl_ulong cl_size_total = 0, cl_size_local = 0; cl_bool cl_unified = CL_FALSE; # if !defined(_WIN32) # if defined(_SC_PAGE_SIZE) const long page_size = sysconf(_SC_PAGE_SIZE); # else const long page_size = 4096; # endif long pages_free = 0, pages_total = 0; # if defined(__linux__) # if defined(_SC_PHYS_PAGES) pages_total = sysconf(_SC_PHYS_PAGES); # else pages_total = 0; # endif # if defined(_SC_AVPHYS_PAGES) pages_free = sysconf(_SC_AVPHYS_PAGES); # else pages_free = pages_total; # endif # elif defined(__APPLE__) && defined(__MACH__) /*const*/ size_t size_pages_free = sizeof(const long), size_pages_total = sizeof(const long); ACC_OPENCL_EXPECT(0 == sysctlbyname("hw.memsize", &pages_total, &size_pages_total, NULL, 0)); if (0 < page_size) pages_total /= page_size; if (0 != sysctlbyname("vm.page_free_count", &pages_free, &size_pages_free, NULL, 0)) { pages_free = pages_total; } # endif if (0 < page_size && 0 <= pages_free && 0 <= pages_total) { const size_t size_page = (size_t)page_size; size_total = size_page * (size_t)pages_total; size_free = size_page * (size_t)pages_free; } # else MEMORYSTATUSEX mem_status; mem_status.dwLength = sizeof(mem_status); if (GlobalMemoryStatusEx(&mem_status)) { size_total = (size_t)mem_status.ullTotalPhys; size_free = (size_t)mem_status.ullAvailPhys; } # endif ACC_OPENCL_CHECK(result, clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(cl_ulong), &cl_size_total, NULL), "retrieve amount of global memory"); ACC_OPENCL_CHECK(result, clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_TYPE, sizeof(cl_device_local_mem_type), &cl_local_type, NULL), "retrieve kind of local memory"); if (CL_LOCAL == cl_local_type) { ACC_OPENCL_CHECK(result, clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(cl_ulong), &cl_size_local, NULL), "retrieve amount of local memory"); } ACC_OPENCL_CHECK(result, clGetDeviceInfo(device, CL_DEVICE_HOST_UNIFIED_MEMORY, sizeof(cl_bool), &cl_unified, NULL), "retrieve if host memory is unified"); if (EXIT_SUCCESS == result) { if (cl_size_total < size_total) size_total = cl_size_total; if (size_total < size_free) size_free = size_total; size_local = cl_size_local; unified = cl_unified; assert(size_free <= size_total); } assert(NULL != mem_local || NULL != mem_total || NULL != mem_free || NULL != mem_unified); if (NULL != mem_unified) *mem_unified = unified; if (NULL != mem_local) *mem_local = size_local; if (NULL != mem_total) *mem_total = size_total; if (NULL != mem_free) *mem_free = size_free; return result; } int c_dbcsr_acc_dev_mem_info(size_t* mem_free, size_t* mem_total) { const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id]; int result; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif result = c_dbcsr_acc_opencl_info_devmem(device_id, mem_free, mem_total, NULL /*mem_local*/, NULL /*mem_unified*/); # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } # if defined(__cplusplus) } # endif #endif /*__OPENCL*/ ================================================ FILE: src/acc/opencl/acc_opencl_stream.c ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #if defined(__OPENCL) # include "acc_opencl.h" # include # if defined(__cplusplus) extern "C" { # endif const c_dbcsr_acc_opencl_stream_t* c_dbcsr_acc_opencl_stream(ACC_OPENCL_LOCKTYPE* lock, int thread_id) { const c_dbcsr_acc_opencl_stream_t *result = NULL, *result_main = NULL; const size_t n = ACC_OPENCL_MAXNITEMS * c_dbcsr_acc_opencl_config.nthreads; size_t i; assert(NULL != c_dbcsr_acc_opencl_config.streams); assert(thread_id < c_dbcsr_acc_opencl_config.nthreads); if (NULL != lock) ACC_OPENCL_ACQUIRE(lock); for (i = c_dbcsr_acc_opencl_config.nstreams; i < n; ++i) { const c_dbcsr_acc_opencl_stream_t* const str = c_dbcsr_acc_opencl_config.streams[i]; if (NULL != str && NULL != str->queue) { if (str->tid == thread_id || 0 > thread_id) { /* hit */ result = str; break; } else if (NULL == result_main && 0 == str->tid) { result_main = str; } } else break; /* error */ } if (NULL == result) { /* fallback */ assert(NULL != c_dbcsr_acc_opencl_config.device.context); result = (NULL != result_main ? result_main : &c_dbcsr_acc_opencl_config.device.stream); } if (NULL != lock) ACC_OPENCL_RELEASE(lock); return result; } const c_dbcsr_acc_opencl_stream_t* c_dbcsr_acc_opencl_stream_default(void) { const c_dbcsr_acc_opencl_stream_t* result = NULL; result = c_dbcsr_acc_opencl_stream(c_dbcsr_acc_opencl_config.lock_stream, ACC_OPENCL_OMP_TID()); assert(NULL != result); return result; } int c_dbcsr_acc_stream_create(void** stream_p, const char* name, int priority) { const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; ACC_OPENCL_STREAM_PROPERTIES_TYPE properties[8] = { CL_QUEUE_PROPERTIES, 0 /*placeholder*/, 0 /* terminator */ }; int result, tid = 0, offset = 0; cl_command_queue queue = NULL; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif assert(NULL != stream_p); # if !defined(ACC_OPENCL_STREAM_PRIORITIES) LIBXSMM_UNUSED(priority); # else if (CL_QUEUE_PRIORITY_HIGH_KHR <= priority && CL_QUEUE_PRIORITY_LOW_KHR >= priority) { properties[3] = priority; } else { int least = -1, greatest = -1; if (0 != (1 & c_dbcsr_acc_opencl_config.priority) && EXIT_SUCCESS == c_dbcsr_acc_stream_priority_range(&least, &greatest) && least != greatest) { properties[3] = (0 != (2 & c_dbcsr_acc_opencl_config.priority) && (NULL != LIBXSMM_STRISTR(name, "calc") || (NULL != strstr(name, "priority")))) ? CL_QUEUE_PRIORITY_HIGH_KHR : CL_QUEUE_PRIORITY_MED_KHR; } else { properties[3] = least; } } if (CL_QUEUE_PRIORITY_HIGH_KHR <= properties[3] && CL_QUEUE_PRIORITY_LOW_KHR >= properties[3]) { priority = properties[3]; /* sanitize */ properties[2] = CL_QUEUE_PRIORITY_KHR; properties[4] = 0; /* terminator */ } # endif ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_stream); # if defined(_OPENMP) { static int c_dbcsr_acc_opencl_stream_counter_base = 0; static int c_dbcsr_acc_opencl_stream_counter = 0; if (1 < omp_get_num_threads()) { const int i = c_dbcsr_acc_opencl_stream_counter++; assert(0 < c_dbcsr_acc_opencl_config.nthreads); tid = (i < c_dbcsr_acc_opencl_config.nthreads ? i : (i % c_dbcsr_acc_opencl_config.nthreads)); } else offset = c_dbcsr_acc_opencl_stream_counter_base++; } # endif if (NULL == devinfo->context) # if defined(ACC_OPENCL_ACTIVATE) { result = EXIT_FAILURE; } else # else { result = c_dbcsr_acc_opencl_set_active_device(NULL /*lock*/, c_dbcsr_acc_opencl_config.device_id); } if (NULL != devinfo->context) # endif { const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id]; if (NULL != c_dbcsr_acc_opencl_config.hist_h2d || NULL != c_dbcsr_acc_opencl_config.hist_d2h || NULL != c_dbcsr_acc_opencl_config.hist_d2d) { properties[1] |= CL_QUEUE_PROFILING_ENABLE; } # if defined(ACC_OPENCL_XHINTS) if ((2 & c_dbcsr_acc_opencl_config.xhints) && 0 != devinfo->intel) { properties[1] |= (((ACC_OPENCL_STREAM_PROPERTIES_TYPE)1) << 31); /* CL_QUEUE_THREAD_LOCAL_EXEC_ENABLE_INTEL */ } if ((4 & c_dbcsr_acc_opencl_config.xhints) && 0 != devinfo->intel) { struct { cl_command_queue_properties properties; cl_bitfield capabilities; cl_uint count; char name[64 /*CL_QUEUE_FAMILY_MAX_NAME_SIZE_INTEL*/]; } intel_qfprops[16]; const int j = (0 /*terminator*/ == properties[2] ? 2 : 4); size_t nbytes = 0, i; if (EXIT_SUCCESS == clGetDeviceInfo(device_id, 0x418B /*CL_DEVICE_QUEUE_FAMILY_PROPERTIES_INTEL*/, sizeof(intel_qfprops), intel_qfprops, &nbytes)) { /* enable queue families */ for (i = 0; (i * sizeof(*intel_qfprops)) < nbytes; ++i) { if (0 /*CL_QUEUE_DEFAULT_CAPABILITIES_INTEL*/ == intel_qfprops[i].capabilities && 1 < intel_qfprops[i].count) { properties[j + 0] = 0x418C; /* CL_QUEUE_FAMILY_INTEL */ properties[j + 1] = (int)i; properties[j + 2] = 0x418D; /* CL_QUEUE_INDEX_INTEL */ properties[j + 3] = (i + offset) % intel_qfprops[i].count; properties[j + 4] = 0; /* terminator */ break; } } } } # endif queue = ACC_OPENCL_CREATE_COMMAND_QUEUE(devinfo->context, device_id, properties, &result); } if (EXIT_SUCCESS == result) { /* register stream */ assert(NULL != c_dbcsr_acc_opencl_config.streams && NULL != queue); *stream_p = c_dbcsr_acc_opencl_pmalloc( NULL /*lock*/, (void**)c_dbcsr_acc_opencl_config.streams, &c_dbcsr_acc_opencl_config.nstreams); if (NULL != *stream_p) { c_dbcsr_acc_opencl_stream_t* const str = (c_dbcsr_acc_opencl_stream_t*)*stream_p; # if !defined(NDEBUG) LIBXSMM_MEMZERO127(str); # endif str->queue = queue; str->tid = tid; # if defined(ACC_OPENCL_STREAM_PRIORITIES) str->priority = priority; # endif } else result = EXIT_FAILURE; } ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_stream); if (EXIT_SUCCESS != result && NULL != queue) { clReleaseCommandQueue(queue); *stream_p = NULL; } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result, name); } int c_dbcsr_acc_stream_destroy(void* stream) { int result = EXIT_SUCCESS; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif if (NULL != stream) { const c_dbcsr_acc_opencl_stream_t* const str = ACC_OPENCL_STREAM(stream); const cl_command_queue queue = str->queue; assert(NULL != c_dbcsr_acc_opencl_config.streams); ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_stream); c_dbcsr_acc_opencl_pfree(stream, (void**)c_dbcsr_acc_opencl_config.streams, &c_dbcsr_acc_opencl_config.nstreams); if (NULL != queue) { result = clReleaseCommandQueue(queue); # if !defined(NDEBUG) LIBXSMM_MEMZERO127((c_dbcsr_acc_opencl_stream_t*)stream); # endif } ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_stream); } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_stream_priority_range(int* least, int* greatest) { int result = ((NULL != least || NULL != greatest) ? EXIT_SUCCESS : EXIT_FAILURE); int priohi = -1, priolo = -1; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif assert(least != greatest); /* no alias */ # if defined(ACC_OPENCL_STREAM_PRIORITIES) if (0 < c_dbcsr_acc_opencl_config.ndevices) { const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id]; const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; char buffer[ACC_OPENCL_BUFFERSIZE]; cl_platform_id platform = NULL; assert(NULL != devinfo->context); ACC_OPENCL_CHECK(result, clGetDeviceInfo(device_id, CL_DEVICE_PLATFORM, sizeof(cl_platform_id), &platform, NULL), "retrieve platform associated with active device"); ACC_OPENCL_CHECK(result, clGetPlatformInfo(platform, CL_PLATFORM_EXTENSIONS, ACC_OPENCL_BUFFERSIZE, buffer, NULL), "retrieve platform extensions"); if (EXIT_SUCCESS == result) { if (NULL != strstr(buffer, "cl_khr_priority_hints") || EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(device_id, "nvidia", 0 /*use_platform_name*/)) { priohi = CL_QUEUE_PRIORITY_HIGH_KHR; priolo = CL_QUEUE_PRIORITY_LOW_KHR; } } } # endif if (NULL != greatest) *greatest = priohi; if (NULL != least) *least = priolo; # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_stream_sync(void* stream) { const c_dbcsr_acc_opencl_stream_t* str = NULL; int result = EXIT_SUCCESS; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); } # endif str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream_default()); assert(NULL != str && NULL != str->queue); if (0 == (16 & c_dbcsr_acc_opencl_config.wa)) result = clFinish(str->queue); else { cl_event event = NULL; # if defined(CL_VERSION_1_2) result = clEnqueueMarkerWithWaitList(str->queue, 0, NULL, &event); # else result = clEnqueueMarker(str->queue, &event); # endif if (EXIT_SUCCESS == result) { assert(NULL != event); result = clWaitForEvents(1, &event); } if (NULL != event) ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(event)); } # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } int c_dbcsr_acc_opencl_device_synchronize(ACC_OPENCL_LOCKTYPE* lock, int thread_id) { int result = EXIT_SUCCESS; const size_t n = ACC_OPENCL_MAXNITEMS * c_dbcsr_acc_opencl_config.nthreads; size_t i; assert(thread_id < c_dbcsr_acc_opencl_config.nthreads); assert(NULL != c_dbcsr_acc_opencl_config.streams); if (NULL != lock) ACC_OPENCL_ACQUIRE(lock); for (i = c_dbcsr_acc_opencl_config.nstreams; i < n; ++i) { const c_dbcsr_acc_opencl_stream_t* const str = c_dbcsr_acc_opencl_config.streams[i]; if (NULL != str && NULL != str->queue) { if (0 > thread_id || str->tid == thread_id) { /* hit */ result = clFinish(str->queue); if (EXIT_SUCCESS != result) break; } } else { /* error */ result = EXIT_FAILURE; break; } } if (NULL != lock) ACC_OPENCL_RELEASE(lock); return result; } int c_dbcsr_acc_device_synchronize(void) { int result = EXIT_SUCCESS; # if defined(ACC_OPENCL_PROFILE_DBCSR) int routine_handle; if (0 != c_dbcsr_acc_opencl_config.profile) { const char** routine_name_ptr; const int* routine_name_len; # if defined(_OPENMP) if (1 == omp_get_num_threads()) { static const char* routine_name_ptr_all = "c_dbcsr_acc_device_synchronize_all" + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len_all = (int)sizeof("c_dbcsr_acc_device_synchronize_all") - (ACC_OPENCL_PROFILE_DBCSR + 1); routine_name_ptr = (const char**)&routine_name_ptr_all; routine_name_len = &routine_name_len_all; } else # endif { static const char* routine_name_ptr_any = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR; static const int routine_name_len_any = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1); routine_name_ptr = (const char**)&routine_name_ptr_any; routine_name_len = &routine_name_len_any; } c_dbcsr_timeset(routine_name_ptr, routine_name_len, &routine_handle); } # endif # if defined(_OPENMP) if (1 == omp_get_num_threads()) { result = c_dbcsr_acc_opencl_device_synchronize(c_dbcsr_acc_opencl_config.lock_stream, -1 /*all*/); } else { result = c_dbcsr_acc_opencl_device_synchronize(NULL /*lock*/, omp_get_thread_num()); } # else result = c_dbcsr_acc_opencl_device_synchronize(NULL /*lock*/, /*main*/ 0); # endif # if defined(ACC_OPENCL_PROFILE_DBCSR) if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle); # endif ACC_OPENCL_RETURN(result); } # if defined(__cplusplus) } # endif #endif /*__OPENCL*/ ================================================ FILE: src/acc/opencl/common/opencl_atomics.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #ifndef OPENCL_ATOMICS_H #define OPENCL_ATOMICS_H #include "opencl_common.h" #if (2 == TAN /*c_dbcsr_acc_opencl_atomic_fp_64*/) # if !defined(T) # define T double # endif # define ZERO 0.0 #elif (1 == TAN /*c_dbcsr_acc_opencl_atomic_fp_32*/) # if !defined(T) # define T float # endif # define ZERO 0.f #elif defined(T) /*c_dbcsr_acc_opencl_atomic_fp_no*/ # define ZERO 0 #endif #define GLOBAL_VOLATILE(A) global volatile A #if defined(ATOMIC_PROTOTYPES) || defined(__opencl_c_ext_fp64_global_atomic_add) # if defined(__opencl_c_ext_fp64_global_atomic_add) # undef ATOMIC_ADD_GLOBAL # if defined(TF) # define ATOMIC_ADD_GLOBAL(A, B) \ atomic_fetch_add_explicit((GLOBAL_VOLATILE(TF)*)A, B, memory_order_relaxed, memory_scope_work_group) # else # define ATOMIC_ADD_GLOBAL(A, B) atomic_add(A, B) # endif # elif (2 < ATOMIC_PROTOTYPES) && defined(TF) # undef ATOMIC_ADD_GLOBAL # define ATOMIC_ADD_GLOBAL(A, B) \ __opencl_atomic_fetch_add((GLOBAL_VOLATILE(TF)*)A, B, memory_order_relaxed, memory_scope_work_group) # else # if defined(TF) && (!defined(ATOMIC_PROTOTYPES) || 1 < ATOMIC_PROTOTYPES) __attribute__((overloadable)) T atomic_fetch_add_explicit(GLOBAL_VOLATILE(TF) *, T, memory_order, memory_scope); # else __attribute__((overloadable)) T atomic_add(GLOBAL_VOLATILE(T) *, T); # endif # endif #endif #define ACCUMULATE(A, B) ATOMIC_ADD_GLOBAL(A, B) #if !defined(cl_intel_global_float_atomics) || (2 == TAN /*c_dbcsr_acc_opencl_atomic_fp_64*/) # if defined(ATOMIC32_ADD64) __attribute__((always_inline)) inline void atomic32_add64_global(GLOBAL_VOLATILE(double) * dst, double inc) { *dst += inc; /* TODO */ } # endif #endif #if !defined(cl_intel_global_float_atomics) || (2 == TAN /*c_dbcsr_acc_opencl_atomic_fp_64*/) # if defined(CMPXCHG) __attribute__((always_inline)) inline void atomic_add_global_cmpxchg(GLOBAL_VOLATILE(T) * dst, T inc) { # if !defined(ATOMIC32_ADD64) union { T f; TA a; } exp_val, try_val, cur_val = {.f = *dst}; do { exp_val.a = cur_val.a; try_val.f = exp_val.f + inc; # if defined(TA2) if (0 == atomic_compare_exchange_weak_explicit((GLOBAL_VOLATILE(TA2)*)dst, &cur_val.a, try_val.a, memory_order_relaxed, memory_order_relaxed, memory_scope_work_group)) continue; # else cur_val.a = CMPXCHG((GLOBAL_VOLATILE(TA)*)dst, exp_val.a, try_val.a); # endif } while (cur_val.a != exp_val.a); # else atomic32_add64_global(dst, inc); # endif } # endif #endif #if !defined(cl_intel_global_float_atomics) || (2 == TAN /*c_dbcsr_acc_opencl_atomic_fp_64*/) # if defined(ATOMIC_ADD2_GLOBAL) && (1 == TAN /*c_dbcsr_acc_opencl_atomic_fp_32*/) __attribute__((always_inline)) inline void atomic_add_global_cmpxchg2(GLOBAL_VOLATILE(float) * dst, float2 inc) { union { float2 f; long a; } exp_val, try_val, cur_val = {.f = (float2)(dst[0], dst[1])}; do { exp_val.a = cur_val.a; try_val.f = exp_val.f + inc; # if defined(TA2) if (0 == atomic_compare_exchange_weak_explicit((GLOBAL_VOLATILE(atomic_long)*)dst, &cur_val.a, try_val.a, memory_order_relaxed, memory_order_relaxed, memory_scope_work_group)) continue; # else cur_val.a = atom_cmpxchg((GLOBAL_VOLATILE(long)*)dst, exp_val.a, try_val.a); # endif } while (cur_val.a != exp_val.a); } # endif #endif #if !defined(cl_intel_global_float_atomics) || (2 == TAN /*c_dbcsr_acc_opencl_atomic_fp_64*/) # if defined(XCHG) || (defined(__NV_CL_C_VERSION) && !defined(CMPXCHG) && !defined(ATOMIC_PROTOTYPES)) __attribute__((always_inline)) inline void atomic_add_global_xchg(GLOBAL_VOLATILE(T) * dst, T inc) { # if !defined(ATOMIC32_ADD64) # if (defined(__NV_CL_C_VERSION) && !defined(XCHG)) && (1 == TAN /*c_dbcsr_acc_opencl_atomic_fp_32*/) asm("{ .reg .f32 t; atom.global.add.f32 t, [%0], %1; }" ::"l"(dst), "f"(inc)); # elif (defined(__NV_CL_C_VERSION) && !defined(XCHG)) && (2 == TAN /*c_dbcsr_acc_opencl_atomic_fp_64*/) asm("{ .reg .f64 t; atom.global.add.f64 t, [%0], %1; }" ::"l"(dst), "d"(inc)); # else union { T f; TA a; } exp_val = {.f = inc}, try_val, cur_val = {/*.f = ZERO*/ .a = 0}; do { # if defined(TA2) try_val.a = atomic_exchange_explicit((GLOBAL_VOLATILE(TA2)*)dst, cur_val.a, memory_order_relaxed, memory_scope_work_group); # else try_val.a = XCHG((GLOBAL_VOLATILE(TA)*)dst, cur_val.a); # endif try_val.f += exp_val.f; # if defined(TA2) exp_val.a = atomic_exchange_explicit((GLOBAL_VOLATILE(TA2)*)dst, try_val.a, memory_order_relaxed, memory_scope_work_group); # else exp_val.a = XCHG((GLOBAL_VOLATILE(TA)*)dst, try_val.a); # endif } while (cur_val.a != exp_val.a); # endif # else atomic32_add64_global(dst, inc); # endif } # endif #endif #endif /*OPENCL_ATOMICS_H*/ ================================================ FILE: src/acc/opencl/common/opencl_common.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #ifndef OPENCL_COMMON_H #define OPENCL_COMMON_H #if !defined(ACC_OPENCL_C_VERSION) # define ACC_OPENCL_C_VERSION __OPENCL_C_VERSION__ #endif #if !defined(ACC_OPENCL_VERSION) # define ACC_OPENCL_VERSION __OPENCL_VERSION__ #endif #if (200 /*CL_VERSION_2_0*/ <= ACC_OPENCL_C_VERSION) || defined(__NV_CL_C_VERSION) # define UNROLL_FORCE(N) __attribute__((opencl_unroll_hint(N))) # define UNROLL_AUTO __attribute__((opencl_unroll_hint)) #else # define UNROLL_FORCE(N) # define UNROLL_AUTO #endif #if !defined(LU) || (-1 == LU) # define UNROLL_OUTER(N) # define UNROLL(N) #else /* (-2) full, (-1) no hints, (0) inner, (1) outer-dehint, (2) block-m */ # if (1 <= LU) /* outer-dehint */ # define UNROLL_OUTER(N) UNROLL_FORCE(1) # elif (-1 > LU) /* full */ # define UNROLL_OUTER(N) UNROLL_FORCE(N) # else /* inner */ # define UNROLL_OUTER(N) # endif # define UNROLL(N) UNROLL_FORCE(N) #endif #define BCST_NO(V, I) (V) #if defined(WG) && (0 < WG) && defined(GPU) && (200 <= ACC_OPENCL_VERSION) # define BCST_WG(V, I) work_group_broadcast(V, I) #endif #if defined(SG) && (0 < SG) && defined(GPU) && (200 <= ACC_OPENCL_VERSION) # define BCST_SG(V, I) sub_group_broadcast(V, I) #endif #if !defined(MIN) # define MIN(A, B) ((A) < (B) ? (A) : (B)) #endif #if !defined(MAX) # define MAX(A, B) ((A) < (B) ? (B) : (A)) #endif #if !defined(MAD) # define MAD fma #endif #define DIVUP(A, B) (((A) + (B) - 1) / (B)) #define NUP(N, UP) (DIVUP(N, UP) * (UP)) #define BLR(N, BN) (NUP(N, BN) - (N)) #define IDX(I, J, M, N) ((int)(I) * (N) + (J)) #define IDT(I, J, M, N) IDX(J, I, N, M) #endif /*OPENCL_COMMON_H*/ ================================================ FILE: src/acc/opencl/smm/.gitignore ================================================ opencl_kernels.h .with_gpu ================================================ FILE: src/acc/opencl/smm/CMakeLists.txt ================================================ set(DBCSR_OPENCL_PARAMS_WITHGPU ${CMAKE_CURRENT_SOURCE_DIR}/params/tune_multiply_${WITH_GPU}.csv) set(DBCSR_OPENCL_PARAMS_CUSTOM ${CMAKE_CURRENT_SOURCE_DIR}/tune_multiply.csv) if (EXISTS ${DBCSR_OPENCL_PARAMS_WITHGPU}) set(DBCSR_OPENCL_SCRIPT_MSG "ACC/LIBSMM OpenCL: using parameters for ${WITH_GPU}") set(DBCSR_OPENCL_PARAMS ${DBCSR_OPENCL_PARAMS_WITHGPU}) elseif (WITH_GPU MATCHES "none") set(DBCSR_OPENCL_SCRIPT_MSG "ACC/LIBSMM OpenCL: no tuned parameters used") set(DBCSR_OPENCL_SCRIPT_ARGS -p \"\") elseif (EXISTS ${DBCSR_OPENCL_PARAMS_CUSTOM}) set(DBCSR_OPENCL_SCRIPT_MSG "ACC/LIBSMM OpenCL: using custom parameters") set(DBCSR_OPENCL_PARAMS ${DBCSR_OPENCL_PARAMS_CUSTOM}) else () set(DBCSR_OPENCL_SCRIPT_MSG "ACC/LIBSMM OpenCL: using all tuned parameters") endif () message(STATUS ${DBCSR_OPENCL_SCRIPT_MSG}) set(DBCSR_OPENCL_KERNELS kernels/multiply.cl kernels/transpose.cl) list(TRANSFORM DBCSR_OPENCL_KERNELS PREPEND ${CMAKE_CURRENT_SOURCE_DIR}/) list(APPEND DBCSR_OPENCL_DEPENDS ${DBCSR_ACC_HEADER} ${DBCSR_OPENCL_COMMON}) list(TRANSFORM DBCSR_OPENCL_DEPENDS PREPEND ${DBCSR_SOURCE_DIR}/) set(DBCSR_OPENCL_KHEADER opencl_kernels.h) add_custom_command( COMMAND ${DBCSR_OPENCL_SCRIPT} ${DBCSR_OPENCL_SCRIPT_ARGS} ${DBCSR_OPENCL_KERNELS} ${DBCSR_OPENCL_PARAMS} ${CMAKE_CURRENT_SOURCE_DIR}/${DBCSR_OPENCL_KHEADER} DEPENDS ${DBCSR_OPENCL_DEPENDS} ${DBCSR_OPENCL_KERNELS} ${DBCSR_OPENCL_SCRIPT} ${DBCSR_OPENCL_PARAMS} OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${DBCSR_OPENCL_KHEADER} COMMENT ${DBCSR_OPENCL_SCRIPT_MSG}) add_custom_target(${DBCSR_OPENCL_KHEADER} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${DBCSR_OPENCL_KHEADER}) add_dependencies(dbcsr ${DBCSR_OPENCL_KHEADER}) target_include_directories(dbcsr PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) ================================================ FILE: src/acc/opencl/smm/PACKAGE ================================================ { "description": "OpenCL-accelerated library for small matrix multiplications", "archive": "libdbcsr", "requires": ["..", "../.."] } ================================================ FILE: src/acc/opencl/smm/README-autotune.md ================================================ # Auto Tuning Auto tuning code for performance is a practical way to find the "best" setting for parameterized code (e.g., GPU kernels). Introducing effective parameters is a prerequisite, and exploring the (potentially) high-dimensional parameter space in an efficient way is an art. It is desirable to have reasonable defaults even without auto-tuning the parameters. It would be even better to avoid auto-tuning if best performance was possible right away. For the OpenCL based LIBSMM, a variety of parameters are explored using [OpenTuner](http://opentuner.org/). The script [tune_multiply.py](https://github.com/cp2k/dbcsr/blob/develop/src/acc/opencl/smm/tune_multiply.py) (or tune_multiply.sh) leverages the `acc_bench` by parsing console output (timing, data type, etc.). This way, the tuning is implemented without being intermingled with the subject being tuned. The "communication" between the tuner and the executable is solely based on environment variables. **NOTE**: If `tune_multiply.py` (or `tune_multiply.sh`) is called with an environment variable already set, the respective parameter (e.g., `OPENCL_LIBSMM_SMM_BM` or `OPENCL_LIBSMM_SMM_BN`) is considered fixed (and not tuned automatically). This way, the parameter space is reduced in size and effort can be directed more intensely towards the remaining parameters. To toggle the benchmarks between tuning single precision (SP) and double precision (DP), `make ELEM_TYPE=float` can be used when building the benchmark driver (`ELEM_TYPE` can be also directly edited in [acc_bench.c](https://github.com/cp2k/dbcsr/blob/develop/src/acc/acc_bench.c)). Auto-tuned parameters for SP and DP can be embedded into the same final application and are considered correctly at runtime. To build the benchmarks in double precision (`ELEM_TYPE=double` is default): ```bash cd src/acc/opencl make ``` To build the benchmarks in single precision (SP): ```bash cd src/acc/opencl make ELEM_TYPE=float ``` To auto-tune, please install the Python `wheel` and `opentuner` packages: ```bash cd src/acc/opencl/smm pip install -r requirements.txt ``` The OpenTuner script supports several command line arguments (`tune_multiply.py --help`). For example, `--stop-after=300` can be of interest to finish in five minutes (without limit, OpenTuner decides when the auto-tuning process is finished). A single kernel can be selected by M, N, and K parameters (GEMM), e.g., `M=15`, `N=5`, and `K=7`: ```bash ./tune_multiply.py 13x5x7 ``` **NOTE**: If multiple different kernels are tuned using `tune_multiply.py`, it is advisable to delete the `opentuner.db` directory prior to tuning a different kernel since otherwise auto-tuning is potentially (mis-)guided by information which was collected for a different kernel (`tune_multiply.sh` does this automatically). The OpenTuner script implements multiple objectives ("cost"), primarily "accuracy" (maximized) and a secondary objective "size" (minimized). The former represents the achieved performance (GFLOPS/s) while the latter represents an artificial kernel requirement (just to prefer one parameter set over another in case of similar performance). The console output looks like ("accuracy" denotes performance in GFLOPS/s): ```text [ 15s] INFO opentuner.search.plugin.DisplayPlugin: tests=8, best {'BS': 32, 'BM': 6, 'BN': 1}, cost accuracy=28.80000000, size=1.0, found by UniformGreedyMutation [ 27s] INFO opentuner.search.plugin.DisplayPlugin: tests=19, best {'BS': 48, 'BM': 8, 'BN': 1}, cost accuracy=32.20000000, size=1.0, found by UniformGreedyMutation [ 40s] INFO opentuner.search.plugin.DisplayPlugin: tests=31, best {'BS': 48, 'BM': 8, 'BN': 1}, cost accuracy=32.20000000, size=1.0, found by UniformGreedyMutation [ 54s] INFO opentuner.search.plugin.DisplayPlugin: tests=43, best {'BS': 48, 'BM': 8, 'BN': 1}, cost accuracy=32.20000000, size=1.0, found by UniformGreedyMutation [ 67s] INFO opentuner.search.plugin.DisplayPlugin: tests=53, best {'BS': 48, 'BM': 8, 'BN': 1}, cost accuracy=32.20000000, size=1.0, found by UniformGreedyMutation ``` The script finally writes a JSON-file with a filename like `tune_multiply-float-12x12x12-s15-60gflops.json` which is encoding the benchmark ("multiply"), the precision ("float"), the kernel ("12x12x12"), the number of bits necessary to represent the size of the problem, i.e., log2 of the problem-size ("s15"), and the achieved performance ("60gflops"). The script handles SIGINT (like Ctrl-C), and output is still written despite of abnormally terminating (can be abused to tune interactively). Tuning starts from an internal default that is supposed to match LIBSMM's internal default parameters. However, tuning can be (re-)started with specific parameters (e.g., `-bs 64`, `-bm 13`, `-bn 1` for `OPENCL_LIBSMM_SMM_BS`, `OPENCL_LIBSMM_SMM_BM`, and `OPENCL_LIBSMM_SMM_BN` respectively), or partially fixed for a subset of parameters. **NOTE**: The `acc_bench` executable is potentially started many times when auto-tuning parameters, therefore it is advisable to keep the state of the GPU driver stack persistent (if the setup would otherwise unload the driver configuration), e.g., `nvidia-smi -pm ENABLED`. This can happen in cases where the GPU is only for compute and not used for graphics (no X-Window system, e.g., in case of a "headless" system). Time needed for tuning parameters is not only impacted by accessing and readying the device, but also by the time needed to compile a kernel at runtime aka Just-In-Time (JIT). ================================================ FILE: src/acc/opencl/smm/README-bulktune.md ================================================ # Optimized Kernels Optimized kernel parameters are stored in JSON-files and are automatically summarized into a CSV-file. Further and beyond auto-tuning kernels, [tune_multiply.py](https://github.com/cp2k/dbcsr/blob/develop/src/acc/opencl/smm/tune_multiply.py) can be used to perform basic operations on collected data: explicitly merging all JSON-files into a CSV-file (`tune_multiply.py -m`), and updating the device name in all JSON-files according to current driver version (`tune_multiply.py -u`). Collected or auto-tuned parameters achieved with single precision (SP), double precision (DP), or from different devices can be safely combined. Practically, `acc_opencl.sh` transforms the CSV-file into source code compiled into the final binary, which is independent of `OPENCL_LIBSMM_SMM_PARAMS` accepting a CSV-file (path/filename). However, `acc_opencl.sh` currently limits the origin of parameters to a single device. Care must still be taken to not summarize unrelated results, e.g., after (major) source code changes. The CSV-file is automatically incorporated into LIBSMM by the next clean (re-)build. The format of the CSV-file is assumed to contain column names in the first row (header). Different problem sizes (like "s15"; see above) are not represented individually, but are instead collected into a maximum value. In turn, this means tuning for a non-default problem-size must be manually kept pure since the result achieved with a larger problem may dominate (maximum value). ```bash cd src/acc/opencl make realclean make ``` This way auto-tuned kernels just work and can be of course exercised using the afore mentioned benchmark: ```bash cd src/acc ./acc_bench 5 30000 13 5 7 ``` Tuned parameters can be also disabled at runtime like: ```bash cd src/acc OPENCL_LIBSMM_SMM_PARAMS=0 ./acc_bench 5 30000 13 5 7 ``` By supplying a CSV-file at runtime, embedded parameters and defaults are overriden, and given parameters are applied even if the current device is different from what would match the given parameters: ```bash cd src/acc OPENCL_LIBSMM_SMM_PARAMS=opencl/smm/tune_multiply.csv ./acc_bench 5 30000 13 5 7 ``` To tune multiple kernels in a convenient fashion, a triplet specification can be supplied to the [tune_multiply.sh](https://github.com/cp2k/dbcsr/blob/develop/src/acc/opencl/smm/tune_multiply.sh) wrapper script. This script estimates the total runtime for auto-tuning kernels, cleans up intermediate results (`opentuner.db`), allows to specify triplets, and splits work to auto-tune in parallel. Triplets are used to conveniently describe multiple kernels. A triplet specification consists of comma-separated groups of (M,N,K)-extents, i.e., matrix shapes according to GEMM. For example: ```text 4 10 15, 6 7 8, 23 ``` This triplet specification expands to 55 kernels using the Cartesian product within each group and concatenating the result of such expanded groups followed by removing duplicate triplets. Further, the wrapper script allows to limit the time spent for tuning a single kernel and to partition the number of kernels to be tuned, e.g., among a cluster of eight systems (below the first partition out of eight would be processed with five minutes per kernel and about 35 minutes in total per partition). ```bash cd src/acc/opencl/smm ./tune_multiply.sh -t 300 -j 8 -i 1 4 10 15, 6 7 8, 23 ``` The script `tune_multiply.sh` is tuning 1266 kernels by default (`./tune_multiply.sh -t 300 -j 8 -i 1` takes approximately 13 hours per part). If the process is interrupted earlier (per SIGINT or Ctrl-C), the execution terminates for all requested kernels (triplet specification) unless `--continue` is given (or `-c`, or an environment variable `CONTINUE=1`). For convenience, it is possible to "update" an existing set of JSON-files (path can be given with `-p`), i.e., to parse the (M,N,K)-triplet denoted by the JSON filename and to re-tune with an almost unconstrained tuning-level (`-a 1` by default) as well as a limited duration (160 seconds per kernel by default). ```bash cd src/acc/opencl make realclean echo "Rebuild and embed smm/params/tune_multiply_P100.csv" make WITH_GPU=P100 echo "Retune original parameters" smm/tune_multiply.sh -p smm/params/p100 -u echo "Override original parameters" cp tune_multiply.csv smm/params/tune_multiply_P100.csv ``` Tuning kernels further is only sensible if the previously tuned parameters are embedded into the binary (such that the process does not start from scratch). Retuned parameters are captured with JSON-files as usual. # Advanced Tuning To utilize multiple devices per system and to accelerate tuning kernels, `tune_multiply.py` comes with built-in support for running under MPI (SPMD execution model). The basic assumption is to spawn one process per device usually with different kernels tuned per device (SPMD). Of course, tuning the same kernels in parallel on multiple devices is possible but it is a waste of resources. Tuning on multiple devices per system can be also more realistic given the common power budget of all devices and less room for an increased operating frequency per device (Turbo clock speed). For example, a single dual-socket system with two PVC cards (modules) per socket exposes eight GPU devices (two GPU stacks or tiles per card). Then 350 kernels can be tuned in less than 2 1/2 hours with a duration of 200 seconds for tuning each kernel. ```bash MAXTIME=200 NPARTS=8 UPDATE=1 JSONDIR=params/pvc mpirun \ ./tune_multiply.sh -i 1 : \ ./tune_multiply.sh -i 2 : \ ./tune_multiply.sh -i 3 : \ ./tune_multiply.sh -i 4 : \ ./tune_multiply.sh -i 5 : \ ./tune_multiply.sh -i 6 : \ ./tune_multiply.sh -i 7 : \ ./tune_multiply.sh -i 8 \ >out.log 2>&1 ``` **NOTE**: The above shown example prefers environment variables over command-line options that would be common to the eight launches of `tune_multiply.sh`. ================================================ FILE: src/acc/opencl/smm/README.md ================================================ # LIBSMM The LIBSMM library implements the [ACC LIBSMM interface](https://github.com/cp2k/dbcsr/blob/develop/src/acc/acc_libsmm.h), and depends on the [OpenCL backend](https://github.com/cp2k/dbcsr/blob/develop/src/acc/opencl/README.md). Compile-time settings are (implicitly) documented and can be adjusted by editing [opencl_libsmm.h](https://github.com/cp2k/dbcsr/blob/develop/src/acc/opencl/smm/opencl_libsmm.h), e.g., `OPENCL_LIBSMM_VALIDATE` is disabled by default but can be enabled for debug purpose. The `OPENCL_LIBSMM_VALIDATE` compile-time setting enables side-by-side validation of matrix transpose and multiply operations between device and host. For example, running DBCSR's unit tests with `OPENCL_LIBSMM_VALIDATE` enabled produces console output that allows to pin-point a kernel which misses validation. Runtime settings are made by the means of environment variables. The OpenCL backend provides `acc_getenv.sh` to list all occurrences of `getenv` categorized into "OpenCL Backend environment variables" and "OpenCL LIBSMM environment variables". There are two categories for the two domains in LIBSMM, i.e., matrix transpose (`OPENCL_LIBSMM_TRANS_*`) and matrix multiplication (`OPENCL_LIBSMM_SMM_*`). For transposing matrices, the settings are: * `OPENCL_LIBSMM_TRANS_BUILDOPTS`: character string with build options (compile and link) supplied to the OpenCL runtime compiler. * `OPENCL_LIBSMM_TRANS_INPLACE`: Boolean value (zero or non-zero integer) for in-place matrix transpose (no local memory needed). * `OPENCL_LIBSMM_TRANS_BM`: non-negative integer number (less/equal than the M-extent) denoting the blocksize in M-direction. The most common settings for multiplying matrices are: * `OPENCL_LIBSMM_SMM_BUILDOPTS`: character string with build options (compile and link) supplied to the OpenCL runtime compiler. * `OPENCL_LIBSMM_SMM_PARAMS`: Disable embedded/auto-tuned parameters (`0`), or load CSV-file (e.g., `path/to/tune_multiply.csv`). * `OPENCL_LIBSMM_SMM_BS`: non-negative integer number denoting the intra-kernel (mini-)batchsize mainly used to amortize atomic updates of data in global/main memory. The remainder with respect to the "stacksize" is handled by the kernel. * `OPENCL_LIBSMM_SMM_BM`: non-negative integer number (less/equal than the M-extent) denoting the blocksize in M-direction. * `OPENCL_LIBSMM_SMM_BN`: non-negative integer number (less/equal than the N-extent) denoting the blocksize in N-direction. * `OPENCL_LIBSMM_SMM_AP`: specifies access to array of parameters (batch or "stack"). * `OPENCL_LIBSMM_SMM_AA`: specifies access to array of A-matrices. * `OPENCL_LIBSMM_SMM_AB`: specifies access to array of B-matrices. * `OPENCL_LIBSMM_SMM_AC`: specifies access to array of C-matrices. The full list of tunable parameters and some explanation can be received with `smm/tune_multiply.py --help`, i.e., short description, default settings, and accepted values. **NOTE**: LIBSMM's tunable runtime settings can be non-smooth like producing distinct code-paths, e.g., `OPENCL_LIBSMM_SMM_BS=1` vs. `OPENCL_LIBSMM_SMM_BS=2`. # Auto Tuning To tune and optimize a kernel and generating kernel parameters, please refer to the [Auto Tuning](https://cp2k.github.io/dbcsr/develop/page/3-developer-guide/3-programming/2-accelerator-backend/3-libsmm_ocl/1-autotune.html) guide. To update or retune an entire set of kernels (optimized parameters), please refer to the [Bulk Tuning](https://cp2k.github.io/dbcsr/develop/page/3-developer-guide/3-programming/2-accelerator-backend/3-libsmm_ocl/2-bulktune.html) guide. ================================================ FILE: src/acc/opencl/smm/kernels/multiply.cl ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #include "../../common/opencl_atomics.h" #if !defined(AL) || (SM != SN) || (SM != BM) || (SN != SK) || (1 == BS) # define ADX(M, K) adata[IDT(M, K, SM, SK) + a0] /* transposed */ # define BDX(K, N) bdata[IDX(K, N, SK, SN) + b0] /* linear */ # define CDX(M, N) cdata[IDT(M, N, SM, SN) + c0] /* transposed */ #else # define ADX(M, K) adata[IDX(M, K, SM, SK) + a0] /* linear */ # define BDX(K, N) bdata[IDT(K, N, SK, SN) + b0] /* transposed */ # define CDX(M, N) cdata[IDX(M, N, SM, SN) + c0] /* linear */ #endif #if defined(SLM_A) # if (1 != BK || BM < SM || 1 != BN) # define AMK(M, K) amk[M][K] # else # define AMK(M, K) amk[M] # endif #elif defined(REG_A) # if (1 != BK) # define AMK(M, K) amk[K] # else # define AMK(M, K) amk[M] # endif #else # define AMK(M, K) ADX(M, K) #endif #if defined(SLM_B) # define BNK(N, K) bnk[N][K] #elif defined(REG_B) # if (BM < SM && 1 != BN) # define BNK(N, K) bnk[N][K] # else # define BNK(N, K) bnk[K] # endif #else # define BNK(N, K) BDX(K, N) #endif #if (1 < BS) && (defined(SLM_C) || (BM < SM && 1 != BN)) # define CNM(N, M) cnm[N][M] #else # define CNM(N, M) cnm[M] #endif #if !defined(SINT) /* covers matrix shape */ # define SINT signed char #endif #if !defined(REPEAT) # define REPEAT 1 #endif #define NBM DIVUP(SM, BM) #define NBN DIVUP(SN, BN) #define WRK (NBM * NBN) #define UM (SM / BK) #define VM (SM % UM) __attribute__((reqd_work_group_size(WG, 1, 1))) #if (0 < SG) __attribute__((intel_reqd_sub_group_size(SG))) #endif kernel void FN(global T* restrict cdata, CONSTANT const T* restrict adata, CONSTANT const T* restrict bdata, CONSTANT const int* restrict param_stack, #if (1 < BS) int param_format, int stack_size, int bs) { const int gid = get_group_id(0), idx = get_local_id(0); #else int param_format) { const int gid = get_group_id(0), idx = get_local_id(0), bs = 1; #endif const SINT pzero = (0 == param_format ? 1 : 0), pnext = (0 == param_format ? 3 : 6); /* param_stack/indexes can be one-based (Fortran) depending on param_format */ CONSTANT const int* restrict param_base = param_stack + gid * (pnext * bs) + (0 == param_format ? 0 : 3); #if defined(SLM_P) && (1 < BS) local int params[3 * BS]; /* bs <= BS */ #else CONSTANT const int* restrict params = param_base; #endif #if defined(SLM_A) # if (1 != BK || BM < SM || 1 != BN) local T amk[SM][SK + SLM_A - 1]; # else local T amk[SM]; # endif #elif defined(REG_A) && (1 != BK) T amk[SK]; #endif #if defined(SLM_B) local T bnk[SN][SK + SLM_B - 1]; /* tile */ #endif #if (BM < SM || 1 != BN) # if defined(REG_A) && !defined(SLM_A) && (1 == BK) T amk[BM]; # endif # if defined(REG_B) && !defined(SLM_B) # if (1 != BN) T bnk[BN][SK]; /* rows */ # else T bnk[SK]; /* row */ # endif # endif # if !defined(SLM_C) && (1 < BS) # if (1 != BN) T cnm[BN][BM]; /* general tile */ # else T cnm[BM]; /* column-block */ # endif # endif const int m0 = (idx / NBN) * BM, n0 = (idx % NBN) * BN; #else # if defined(REG_A) && !defined(SLM_A) && (1 == BK) T amk[SM]; # endif # if defined(REG_B) && !defined(SLM_B) T bnk[SK]; /* row */ # endif # if !defined(SLM_C) && (1 < BS) T cnm[SM]; /* column */ # endif #endif #if defined(TRACK_B) && (1 < BS) && defined(REG_B) && !defined(SLM_B) int b1 = -1; #endif #if (1 < BS) /* intra-kernel mini-batch of SMMs */ const int batchsize = min(bs, stack_size - bs * gid); int c0; # if defined(SLM_C) local T cnm[SN][SM + SLM_C - 1]; /* tile in SLM */ UNROLL_AUTO for (SINT n = (SINT)idx; n < SN; n += WG) { UNROLL_FORCE(SM) for (SINT m = 0; m < SM; ++m) cnm[n][m] = ZERO; } # elif (BM < SM || 1 != BN) # if (1 != BN) UNROLL(BN) for (SINT bn = 0; bn < BN; ++bn) # endif { UNROLL_FORCE(BM) for (SINT bm = 0; bm < BM; ++bm) CNM(bn, bm) = ZERO; } # else UNROLL_FORCE(SM) for (SINT m = 0; m < SM; ++m) cnm[m] = ZERO; # endif # if defined(SLM_P) UNROLL_AUTO for (int i = idx; i < batchsize; i += WG) { UNROLL_FORCE(3) for (int j = 0; j < 3; ++j) { params[3 * i + j] = param_base[pnext * i + j] - pzero; } } # endif # if defined(BARRIER) && (MAX(1, SG) < WG) && (defined(SLM_C) || defined(SLM_P)) BARRIER(CLK_LOCAL_MEM_FENCE); # endif # if (WRK < WG) if (WRK <= idx) return; /* WRK <= idx */ # endif # if defined(SLM_P) c0 = params[2]; # else c0 = params[2] - pzero; # endif # if defined(BSC) && (1 != BK) && (1 != UM) UNROLL_OUTER(REPEAT * BS) # else UNROLL_FORCE(1) # endif # if (1 < REPEAT) for (int item = 0; item < (REPEAT * batchsize); ++item) { const int i = item % batchsize; # else for (int item = 0; item < (REPEAT * batchsize); ++item) { const int i = item; # endif # if defined(SLM_P) const int idxstride = 3, idxbase = 0; # else const int idxstride = pnext, idxbase = pzero; # endif const int a0 = params[idxstride * i] - idxbase, b0 = params[idxstride * i + 1] - idxbase; const int c1 = ((i + 1) < batchsize ? (params[idxstride * i + idxstride + 2] - idxbase) : -1); #else # if (WRK < WG) if (WRK > idx) /* WRK > idx */ # endif { const int a0 = params[0] - pzero, b0 = params[1] - pzero, c0 = params[2] - pzero; #endif #if defined(SLM_A) && (1 != BK || BM < SM || 1 != BN) { /* copy or transpose A-matrix into SLM */ int m = idx; # if (WRK != SM) UNROLL_AUTO for (; m < SM; m += WRK) # endif { UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) amk[m][k] = ADX(m, k); } } #endif #if defined(SLM_B) { /* copy or transpose B-matrix into SLM */ int n = idx; # if (WRK != SN) UNROLL_AUTO for (; n < SN; n += WRK) # endif { UNROLL(SK) for (SINT k = 0; k < SK; ++k) bnk[n][k] = BDX(k, n); } } #elif defined(REG_B) # if defined(TRACK_B) && (1 < BS) if (b0 != b1) { b1 = b0; # else { /* copy or transpose B-matrix into registers */ # endif UNROLL(SK) for (SINT k = 0; k < SK; ++k) { # if (BM < SM || 1 != BN) SINT bn = 0; # if (1 != BN) UNROLL_FORCE(BN) for (; bn < BN; ++bn) # endif { # if (SN % BN) const int n = min(bn + n0, SN - 1); # else const int n = bn + n0; # endif BNK(bn, k) = BDX(k, n); } # else bnk[k] = BDX(k, idx); # endif } } #endif #if defined(BARRIER) && (MAX(1, SG) < WG) && (defined(SLM_B) || ((1 != BK || BM < SM || 1 != BN) && defined(SLM_A))) /* finish transpose/copy */ BARRIER(CLK_LOCAL_MEM_FENCE); #endif #if (BM < SM || 1 != BN) { /* calculate result-tile using general tiles */ # if defined(REG_A) && !defined(SLM_A) && (1 != BK) # if (1 == BS) T cnm[BN]; /* row */ UNROLL_FORCE(BN) for (SINT n = 0; n < BN; ++n) cnm[n] = ZERO; # endif # if (SM % BM) UNROLL(BM) for (SINT bm = 0, m = m0; bm < BM && m < SM; m = ++bm + m0) # else UNROLL(BM) for (SINT bm = 0, m = m0; bm < BM; m = ++bm + m0) # endif { /* general BK, A in registers */ SINT bn = 0; UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) amk[k] = ADX(m, k); # if (1 != BN) UNROLL(BN) for (; bn < BN; ++bn) # endif { # if (SN % BN) || (defined(SLM_C) && (1 < BS)) || !defined(REG_B) const int n = bn + n0; # endif # if (SN % BN) if (n < SN) /* n < SN */ # endif { # if defined(SLM_C) && (1 < BS) const int mc = m, nc = n; # elif (1 < BS) const int mc = bm, nc = bn; # else const int mc = bn, nc = idx; # endif UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) { CNM(nc, mc) = MAD(AMK(m, k), # if defined(REG_B) BNK(bn, k), # else BNK(n, k), # endif CNM(nc, mc)); } } } # if (1 == BS) bn = 0; # if (1 != BN) UNROLL(BN) for (; bn < BN; ++bn) # endif { # if defined(ATOMIC_INC_NZ) if (ZERO != CNM(idx, bn)) # endif { ACCUMULATE(&CDX(m, bn + n0), CNM(idx, bn)); CNM(idx, bn) = ZERO; /* reset */ } } # endif } # elif (1 == BK) # if (1 == BS) T cnm[BM]; /* column-block */ UNROLL_FORCE(BM) for (SINT m = 0; m < BM; ++m) cnm[m] = ZERO; # endif UNROLL(SK) for (SINT k = 0; k < SK; ++k) { # if (SN % BN) || !defined(REG_B) || (defined(SLM_C) && (1 < BS)) || (1 == BS) || (1 != BN) SINT bn = 0; # endif # if defined(REG_A) && !defined(SLM_A) UNROLL_FORCE(BM) for (SINT bm = 0; bm < BM; ++bm) amk[bm] = ADX(bm + m0, k); # endif # if (1 != BN) UNROLL(BN) for (; bn < BN; ++bn) # endif { /* BK=1 */ # if (SN % BN) || !defined(REG_B) || (defined(SLM_C) && (1 < BS)) || (1 == BS) const int n = bn + n0; # endif # if (SN % BN) if (n < SN) /* n < SN */ # endif { # if defined(REG_B) const T b = BNK(bn, k); # else const T b = BNK(n, k); # endif # if (SM % BM) UNROLL(BM) for (SINT bm = 0, m = m0; bm < BM && m < SM; m = ++bm + m0) # else UNROLL_FORCE(BM) for (SINT bm = 0, m = m0; bm < BM; m = ++bm + m0) # endif { # if defined(REG_A) && !defined(SLM_A) const T a = AMK(bm, k); # else const T a = AMK(m, k); # endif # if defined(SLM_C) && (1 < BS) CNM(n, m) = MAD(a, b, CNM(n, m)); # else CNM(bn, bm) = MAD(a, b, CNM(bn, bm)); # endif } # if (1 == BS) UNROLL(BM) for (SINT bm = 0; bm < BM; ++bm) { # if defined(ATOMIC_INC_NZ) if (ZERO != CNM(idx, bm)) # endif { ACCUMULATE(&CDX(bm + m0, n), CNM(idx, bm)); CNM(idx, bm) = ZERO; /* reset */ } } # endif } } } # else /* general BK */ SINT bn = 0; # if (1 != BN) UNROLL(BN) for (; bn < BN; ++bn) # endif { # if (SN % BN) || !defined(REG_B) || (defined(SLM_C) && (1 < BS)) || (1 == BS) const int n = bn + n0; # endif # if (SN % BN) if (n < SN) /* n < SN */ # endif { /* general BK */ # if (1 == BS) T cnm[BM]; /* column-block */ UNROLL_FORCE(BM) for (SINT m = 0; m < BM; ++m) cnm[m] = ZERO; # endif # if (SM % BM) UNROLL(BM) for (SINT bm = 0, m = m0; bm < BM && m < SM; m = ++bm + m0) # else UNROLL(BM) for (SINT bm = 0, m = m0; bm < BM; m = ++bm + m0) # endif { # if defined(SLM_C) && (1 < BS) # if (1 < BS) && (defined(SLM_C) || (BM < SM && 1 != BN)) const int mc = m, nc = n; # else const int mc = m; # endif # else # if (1 < BS) && (defined(SLM_C) || (BM < SM && 1 != BN)) const int mc = bm, nc = bn; # else const int mc = bm; # endif # endif # if defined(REG_B) const int nb = bn; # else const int nb = n; # endif UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) CNM(nc, mc) = MAD(AMK(m, k), BNK(nb, k), CNM(nc, mc)); } # if (1 == BS) UNROLL(BM) for (SINT bm = 0; bm < BM; ++bm) { # if defined(ATOMIC_INC_NZ) if (ZERO != CNM(idx, bm)) # endif { ACCUMULATE(&CDX(bm + m0, n), CNM(idx, bm)); CNM(idx, bm) = ZERO; /* reset */ } } # endif } } # endif } #else /* BM == SM && 1 == BN */ { /* calculate result-tile using columns */ # if (1 == BS) T cnm[UM]; /* column-block */ UNROLL_FORCE(UM) for (SINT m = 0; m < UM; ++m) cnm[m] = ZERO; # endif # if (1 == BK) UNROLL_OUTER(SK) for (SINT k = 0; k < SK; ++k) { const T b = BNK(idx, k); # if defined(SLM_A) # if (WRK != SM) UNROLL_AUTO for (SINT m = (SINT)idx; m < SM; m += WRK) amk[m] = ADX(m, k); # else amk[idx] = ADX(idx, k); # endif # elif defined(REG_A) UNROLL_FORCE(SM) for (SINT m = 0; m < SM; ++m) amk[m] = ADX(m, k); # endif # if defined(BARRIER) && (MAX(1, SG) < WG) && defined(SLM_A) BARRIER(CLK_LOCAL_MEM_FENCE); # endif # if defined(ACC_OPENCL_VERSION) && (200 /*2.0*/ <= ACC_OPENCL_VERSION) && (!defined(GPU) || (0 != GPU)) && !defined(SLM_A) && \ !defined(REG_A) && (WRK == SM) && (SM <= SG || SM <= WG) /* use ACC_OPENCL_VERSION rather than ACC_OPENCL_C_VERSION */ const T a = AMK(idx, k); UNROLL_FORCE(SM) for (SINT m = 0; m < SM; ++m) { # if (SM <= SG) CNM(idx, m) = MAD(sub_group_broadcast(a, m), b, CNM(idx, m)); /* size of subgroup is sufficient */ # else CNM(idx, m) = MAD(work_group_broadcast(a, m), b, CNM(idx, m)); /* size of workgroup is sufficient */ # endif } # else UNROLL_FORCE(SM) for (SINT m = 0; m < SM; ++m) CNM(idx, m) = MAD(AMK(m, k), b, CNM(idx, m)); /* fallback */ # endif # if defined(BARRIER) && (MAX(1, SG) < WG) && defined(SLM_A) BARRIER(CLK_LOCAL_MEM_FENCE); # endif } # if (1 == BS) UNROLL(SM) for (SINT m = 0; m < SM; ++m) { # if defined(ATOMIC_INC_NZ) if (ZERO != CNM(idx, m)) # endif { ACCUMULATE(&CDX(m, idx), CNM(idx, m)); CNM(idx, m) = ZERO; /* reset */ } } # endif # else SINT m = 0, u; # if (1 == UM) UNROLL_OUTER(SM) # else UNROLL_AUTO # endif for (; m < (SM - UM + 1); m += UM) { u = 0; # if (1 < UM) UNROLL(UM) for (; u < UM; ++u) # endif { const int um = u + m; # if (1 < BS) const int vm = um; # else const int vm = u; # endif # if defined(REG_A) && !defined(SLM_A) UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) amk[k] = ADX(um, k); # endif UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) { CNM(idx, vm) = MAD(AMK(um, k), BNK(idx, k), CNM(idx, vm)); } } # if (1 == BS) u = 0; # if (1 < UM) UNROLL(UM) for (; u < UM; ++u) # endif # if defined(ATOMIC_INC_NZ) if (ZERO != CNM(idx, u)) # endif { ACCUMULATE(&CDX(u + m, idx), CNM(idx, u)); CNM(idx, u) = ZERO; /* reset */ } # endif } # if (0 < VM) /* calculate remainder */ u = 0; # if (1 < VM) UNROLL(VM) for (; u < VM; ++u) # endif { const int um = u + m; # if (1 < BS) const int vm = um; # else const int vm = u; # endif # if defined(REG_A) && !defined(SLM_A) UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) amk[k] = ADX(um, k); # endif UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) { CNM(idx, vm) = MAD(AMK(um, k), BNK(idx, k), CNM(idx, vm)); } } # if (1 == BS) u = 0; # if (1 < VM) UNROLL(VM) for (; u < VM; ++u) # endif # if defined(ATOMIC_INC_NZ) if (ZERO != CNM(idx, u)) # endif { ACCUMULATE(&CDX(u + m, idx), CNM(idx, u)); CNM(idx, u) = ZERO; /* reset */ } # endif # endif # endif } #endif #if (1 < BS) # if defined(TRACK_C) if (c0 != c1) # endif # if (BM < SM || 1 != BN) { /* atomically commit C-tile to global memory */ SINT bn = 0; # if (1 != BN) UNROLL(BN) for (; bn < BN; ++bn) # endif { const int n = bn + n0; # if (SN % BN) if (n < SN) /* n < SN */ # endif { # if (SM % BM) UNROLL(BM) for (SINT bm = 0, m = m0; bm < BM && m < SM; m = ++bm + m0) # else UNROLL_FORCE(BM) for (SINT bm = 0, m = m0; bm < BM; m = ++bm + m0) # endif { # if defined(SLM_C) # if (1 < BS) && (defined(SLM_C) || (BM < SM && 1 != BN)) const int mc = m, nc = n; # else const int mc = m; # endif # else # if (1 < BS) && (defined(SLM_C) || (BM < SM && 1 != BN)) const int mc = bm, nc = bn; # else const int mc = bm; # endif # endif # if defined(ATOMIC_INC_NZ) if (ZERO != CNM(nc, mc)) # endif { ACCUMULATE(&CDX(m, n), CNM(nc, mc)); CNM(nc, mc) = ZERO; /* reset */ } } } } # else { /* atomically commit C-column to global memory */ SINT m = 0; # if defined(ATOMIC_ADD2_GLOBAL) UNROLL_AUTO for (; m < (SM - 1); m += 2) { # if defined(ATOMIC_INC_NZ) if (ZERO != CNM(idx, m) && ZERO != CNM(idx, m + 1)) # endif { const float2 r2 = (float2)(CNM(idx, m), CNM(idx, m + 1)); ATOMIC_ADD2_GLOBAL(&CDX(m, idx), r2); CNM(idx, m) = CNM(idx, m + 1) = ZERO; /* reset */ } } # else UNROLL(SM) # endif # if !defined(ATOMIC_ADD2_GLOBAL) || (SM & 1) for (; m < SM; ++m) { # if defined(ATOMIC_INC_NZ) if (ZERO != CNM(idx, m)) # endif { ACCUMULATE(&CDX(m, idx), CNM(idx, m)); CNM(idx, m) = ZERO; /* reset */ } } # endif # endif /* next iteration */ c0 = c1; } #endif #if defined(BARRIER) && (MAX(1, SG) < WG) && defined(SLM_A) && (BM <= SM || 1 != BN || 1 != BK) BARRIER(CLK_LOCAL_MEM_FENCE); #endif } } ================================================ FILE: src/acc/opencl/smm/kernels/transpose.cl ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ __attribute__((reqd_work_group_size(WG, 1, 1))) kernel void FN( int trs_offset, CONSTANT const int* restrict trs_stack, global T* restrict matrix) { /* offset in the transpose-stack that this block ID should handle */ const int offset = trs_stack[trs_offset + get_group_id(0)]; /* matrix according to the index (transpose-stack) */ global T* const restrict mat = matrix + offset; const int idx = get_local_id(0); #if (SM != SN) || (0 == INPLACE) /* local memory buffer */ local T buf[SM][SN]; #endif #if (WG == SM) const int m = idx; # if (SM != SN) || (0 == INPLACE) /* copy matrix elements into local buffer */ for (int n = 0; n < SN; ++n) buf[m][n] = mat[SM * n + m]; barrier(CLK_LOCAL_MEM_FENCE); /* overwrite matrix elements (gather) */ for (int n = 0; n < SN; ++n) mat[SN * m + n] = buf[m][n]; # else for (int n = 0; n < m; ++n) { const int i = SM * n + m; const int j = SN * m + n; const T tmp = mat[i]; mat[i] = mat[j]; mat[j] = tmp; } # endif #else T prv[SN]; /* private buffer */ # if (SM != SN) || (0 == INPLACE) /* copy matrix elements into local buffer */ for (int m = idx; m < SM; m += WG) { for (int n = 0; n < SN; ++n) buf[m][n] = mat[SM * n + m]; } barrier(CLK_LOCAL_MEM_FENCE); # endif for (int m = idx; m < SM; m += WG) { # if (SM != SN) || (0 == INPLACE) for (int n = 0; n < SN; ++n) prv[n] = buf[m][n]; /* overwrite matrix elements (gather) */ for (int n = 0; n < SN; ++n) mat[SN * m + n] = prv[n]; # else for (int n = 0; n < SN; ++n) prv[n] = mat[SM * n + m]; for (int n = 0; n < m; ++n) { const int i = SM * n + m; const int j = SN * m + n; mat[i] = mat[j]; mat[j] = prv[n]; } # endif } #endif } ================================================ FILE: src/acc/opencl/smm/opencl_libsmm.c ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #if defined(__OPENCL) # include "opencl_libsmm.h" /* Header opencl_kernels.h is generated by the build system using acc_opencl.sh */ # include "opencl_kernels.h" # include "../../acc_bench.h" # include # if !defined(OPENCL_KERNELS_SOURCE_TRANSPOSE) # error "OpenCL transpose-kernel code not found!" # endif # if !defined(OPENCL_KERNELS_SOURCE_MULTIPLY) # error "OpenCL SMM-kernel code not found!" # endif # if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER # define OPENCL_LIBSMM_DESCINIT(BLOB, PREC, M, N, K, LDA, LDB, LDC, FLAGS, PREFETCH) \ libxsmm_gemm_descriptor_init(BLOB, PREC, PREC, PREC, PREC, M, N, K, LDA, LDB, LDC, FLAGS, PREFETCH) # else # define OPENCL_LIBSMM_DESCINIT(BLOB, PREC, M, N, K, LDA, LDB, LDC, FLAGS, PREFETCH) \ libxsmm_gemm_descriptor_dinit(BLOB, PREC, M, N, K, LDA, LDB, LDC, 1.0, 1.0, FLAGS, PREFETCH) # endif # if !defined(OPENCL_LIBSMM_KERNELNAME_TRANS) # define OPENCL_LIBSMM_KERNELNAME_TRANS "trans" # endif # if !defined(OPENCL_LIBSMM_KERNELNAME_SMM) # define OPENCL_LIBSMM_KERNELNAME_SMM "smm" # endif # if !defined(OPENCL_LIBSMM_NLOCKS_TRANS) # define OPENCL_LIBSMM_NLOCKS_TRANS 16 # endif # if !defined(OPENCL_LIBSMM_NLOCKS_SMM) # define OPENCL_LIBSMM_NLOCKS_SMM 16 # endif # if !defined(OPENCL_LIBSMM_TODO) && 0 # define OPENCL_LIBSMM_TODO # endif /* default: decompose C-matrix into column-vectors (BMxBN) */ # if !defined(OPENCL_LIBSMM_DEFAULT_BM) # define OPENCL_LIBSMM_DEFAULT_BM INT_MAX # endif # if !defined(OPENCL_LIBSMM_DEFAULT_BN) # define OPENCL_LIBSMM_DEFAULT_BN 1 # endif # if !defined(OPENCL_LIBSMM_DEFAULT_BK) # if 1 # define OPENCL_LIBSMM_DEFAULT_BK INT_MAX # else # define OPENCL_LIBSMM_DEFAULT_BK 1 # endif # endif # if !defined(OPENCL_LIBSMM_DEFAULT_BS) # define OPENCL_LIBSMM_DEFAULT_BS 8 # endif # if !defined(OPENCL_LIBSMM_BS_MIN) && 1 # define OPENCL_LIBSMM_BS_MIN 32 # endif # if !defined(OPENCL_LIBSMM_SMM_S) # define OPENCL_LIBSMM_SMM_S 64 # endif # if !defined(OPENCL_LIBSMM_VMIN) # define OPENCL_LIBSMM_VMIN 8 # endif /* approximate arithmetic intensity for SMMs like C += Ai * Bi (beta=1) */ # define OPENCL_LIBSMM_AI(M, N, K, TYPESIZE) ((2.0 * (M) * (N) * (K)) / ((TYPESIZE) * (K) * ((M) + (N)))) /* determine type-size of a given type-ID */ # define OPENCL_LIBSMM_TYPESIZE(TYPEID) \ (dbcsr_type_real_8 == (TYPEID) ? ((int)sizeof(double)) : (dbcsr_type_real_4 == (TYPEID) ? ((int)sizeof(float)) : 0 /*unknown*/)) # define OPENCL_LIBSMM_TRANSENV(KEY) opencl_libsmm_getenv("OPENCL_LIBSMM_TRANS", KEY) # define OPENCL_LIBSMM_SMMENV(KEY) opencl_libsmm_getenv("OPENCL_LIBSMM_SMM", KEY) # if defined(__cplusplus) extern "C" { # endif /* Pointer to DBM kernel-launch function (optional, can be NULL) */ opencl_libsmm_acc_dbm_launch_fn_t opencl_libsmm_acc_dbm_launch_fn; /* track initialization status of LIBSMM */ int opencl_libsmm_initialized; int opencl_libsmm_write_trans_params(FILE* stream, int only_key, const opencl_libsmm_transkey_t* key, const opencl_libsmm_trans_t* config, const char* delim, const char* begin, const char* close) { int result = 0; if (NULL != stream) { const char d = (NULL == delim ? *ACC_OPENCL_DELIMS : *delim); if (NULL != key || 0 == only_key) result += fprintf(stream, "%c", NULL == begin ? '{' : *begin); if (NULL != config) { if (NULL != key) { result += fprintf(stream, "%i%c%i%c%i", (int)key->type, d, key->m, d, key->n); /*if (0 == only_key) result += fprintf(stream, "%c", d);*/ } } else { if (NULL != key) { result += fprintf(stream, "t%cm%cn", d, d); /*if (0 == only_key) result += fprintf(stream, "%c", d);*/ } } if (NULL != key || 0 == only_key) result += fprintf(stream, "%c", NULL == close ? '}' : *close); } else result = -1; assert(0 < result); return result; } int opencl_libsmm_write_smm_params(FILE* stream, int only_key, const opencl_libsmm_smmkey_t* key, const opencl_libsmm_smm_t* config, const char* delim, const char* begin, const char* close) { int result = 0; if (NULL != stream) { const char d = (NULL == delim ? *ACC_OPENCL_DELIMS : *delim); if (NULL != key || 0 == only_key) result += fprintf(stream, "%c", NULL == begin ? '{' : *begin); if (NULL != config) { if (NULL != key) { result += fprintf(stream, "%i%c%i%c%i%c%i", (int)key->type, d, key->m, d, key->n, d, key->k); if (0 == only_key) result += fprintf(stream, "%c ", d); } if (0 == only_key) { result += fprintf(stream, "%i%c%i%c%i%c%i%c %i%c%i%c %i%c%i%c%i%c %i%c%i%c %i%c%i%c%i%c%i", config->bs, d, config->bm, d, config->bn, d, config->bk, d, config->ws, d, config->wg, d, config->lu, d, config->nz, d, config->al, d, config->tb, d, config->tc, d, config->ap, d, config->aa, d, config->ab, d, config->ac); if (0 != config->flags) result += fprintf(stream, "%c %i", d, config->flags); } } else { if (NULL != key) { result += fprintf(stream, "t%cm%cn%ck", d, d, d); if (0 == only_key) result += fprintf(stream, "%c ", d); } if (0 == only_key) { result += fprintf( stream, "bs%cbm%cbn%cbk%c ws%cwg%c lu%cnz%cal%c tb%ctc%c ap%caa%cab%cac", d, d, d, d, d, d, d, d, d, d, d, d, d, d); } } if (NULL != key || 0 == only_key) result += fprintf(stream, "%c", NULL == close ? '}' : *close); } else result = -1; assert(0 < result); return result; } int opencl_libsmm_read_smm_params(char* parambuf, opencl_libsmm_smmkey_t* key, opencl_libsmm_smm_t* value, opencl_libsmm_perfest_t* perfest, char* device, int* key_ok) { const char* const end = parambuf + strlen(parambuf); /* before strtok */ char* s = strtok(parambuf, ACC_OPENCL_DELIMS); const int opt_consumed = (NULL != perfest ? 2 : 0) + (NULL != device ? 1 : 0); int result = EXIT_SUCCESS, i = 0, ivalue, consumed = 0, c = 0, max_consumed = opt_consumed + 19; double gflops; assert(NULL != key && NULL != value); LIBXSMM_MEMZERO127(key); /* potentially heterogeneous key-data (alignment gaps) */ memset(value, 0, sizeof(opencl_libsmm_smm_t)); for (; NULL != s; ++i, s = (c != consumed ? ((s + 1) < end ? strtok((s + 1) + strlen(s), ACC_OPENCL_DELIMS) : NULL) : s), c = consumed) { switch (i) { case 0: if (NULL != device && 1 == sscanf(s, "%[^" ACC_OPENCL_DELIMS "]", device)) { ++consumed; /* optional device name */ } break; case 1: if (1 == sscanf(s, "%i", &ivalue)) { key->type = (libsmm_acc_data_t)ivalue; ++consumed; } break; case 2: if (1 == sscanf(s, "%i", &ivalue) && 0 < ivalue) { key->m = ivalue; ++consumed; } break; case 3: if (1 == sscanf(s, "%i", &ivalue) && 0 < ivalue) { key->n = ivalue; ++consumed; } break; case 4: if (1 == sscanf(s, "%i", &ivalue) && 0 < ivalue) { key->k = ivalue; ++consumed; } break; case 5: if (NULL != perfest && 1 == sscanf(s, "%i", &ivalue)) { value->s = ivalue; ++consumed; /* optional "S" param */ } break; case 6: if (NULL != perfest && 1 == sscanf(s, "%lf", &gflops) && 0 <= gflops) { value->gflops = gflops; ++consumed; /* optional "GFLOPS" param */ } break; case 7: if (1 == sscanf(s, "%i", &ivalue)) { value->bs = ivalue; ++consumed; } break; case 8: if (1 == sscanf(s, "%i", &ivalue)) { value->bm = ivalue; ++consumed; } break; case 9: if (1 == sscanf(s, "%i", &ivalue)) { value->bn = ivalue; ++consumed; } break; case 10: if (1 == sscanf(s, "%i", &ivalue)) { value->bk = ivalue; ++consumed; } break; case 11: if (1 == sscanf(s, "%i", &ivalue)) { value->ws = ivalue; ++consumed; } break; case 12: if (1 == sscanf(s, "%i", &ivalue)) { value->wg = ivalue; ++consumed; } break; case 13: if (1 == sscanf(s, "%i", &ivalue)) { value->lu = ivalue; ++consumed; } break; case 14: if (1 == sscanf(s, "%i", &ivalue)) { value->nz = ivalue; ++consumed; } break; case 15: if (1 == sscanf(s, "%i", &ivalue)) { value->al = ivalue; ++consumed; } break; case 16: if (1 == sscanf(s, "%i", &ivalue)) { value->tb = ivalue; ++consumed; } break; case 17: if (1 == sscanf(s, "%i", &ivalue)) { value->tc = ivalue; ++consumed; } break; case 18: if (1 == sscanf(s, "%i", &ivalue)) { value->ap = ivalue; ++consumed; } break; case 19: if (1 == sscanf(s, "%i", &ivalue)) { value->aa = ivalue; ++consumed; } break; case 20: if (1 == sscanf(s, "%i", &ivalue)) { value->ab = ivalue; ++consumed; } break; case 21: if (1 == sscanf(s, "%i", &ivalue)) { value->ac = ivalue; ++consumed; } break; case 22: if (1 == sscanf(s, "%i", &ivalue)) { value->flags = ivalue; ++max_consumed; ++consumed; } break; default: s = NULL; /* break */ } } if (max_consumed == consumed) { switch (key->type) { case dbcsr_type_real_8: if (NULL != perfest && 0 < gflops) { const double ratio = gflops / OPENCL_LIBSMM_AI(key->m, key->n, key->k, sizeof(double)); # if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER libxsmm_kahan_sum(log(ratio), &perfest->gf_ai_dratio_sumlog, &perfest->gf_ai_dratio_kahan); # else perfest->gf_ai_dratio_sumlog += log(ratio); # endif if (perfest->gf_ai_dratio_max < ratio) perfest->gf_ai_dratio_max = ratio; ++perfest->dcount; } break; case dbcsr_type_real_4: if (NULL != perfest && 0 < gflops) { const double ratio = gflops / OPENCL_LIBSMM_AI(key->m, key->n, key->k, sizeof(float)); # if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER libxsmm_kahan_sum(log(ratio), &perfest->gf_ai_sratio_sumlog, &perfest->gf_ai_sratio_kahan); # else perfest->gf_ai_sratio_sumlog += log(ratio); # endif if (perfest->gf_ai_sratio_max < ratio) perfest->gf_ai_sratio_max = ratio; ++perfest->scount; } break; default: result = EXIT_FAILURE; } } else result = EXIT_FAILURE; if (NULL != key_ok && 4 <= consumed) *key_ok = 1; return result; } int libsmm_acc_init(void) { # if defined(_OPENMP) /* initialization/finalization is not meant to be thread-safe */ int result = ((0 == omp_in_parallel() || /*main*/ 0 == omp_get_thread_num()) ? EXIT_SUCCESS : EXIT_FAILURE); # pragma omp critical(opencl_libsmm_initialized) # else int result = EXIT_SUCCESS; # endif ++opencl_libsmm_initialized; /* multiple calls to libsmm_acc_init are not considered as an error */ if (1 == opencl_libsmm_initialized) { # if !defined(__DBCSR_ACC) /* DBCSR shall call c_dbcsr_acc_init as well as libsmm_acc_init (since both interfaces are used). * Also, libsmm_acc_init may privately call c_dbcsr_acc_init (as it depends on the ACC interface). * The implementation of c_dbcsr_acc_init should hence be safe against "over initialization". * However, DBCSR only calls c_dbcsr_acc_init (and expects an implicit libsmm_acc_init). */ if (EXIT_SUCCESS == result) result = c_dbcsr_acc_init(); # endif libxsmm_init(); if (EXIT_SUCCESS == result) { opencl_libsmm_perfest_t perfest; char* const env_params = getenv("OPENCL_LIBSMM_SMM_PARAMS"); /* !opencl_libsmm_getenv */ memset(&perfest, 0, sizeof(perfest)); if (NULL == env_params || '0' != *env_params) { char buffer[ACC_OPENCL_BUFFERSIZE], bufname[ACC_OPENCL_BUFFERSIZE]; # if defined(OPENCL_KERNELS_DEVICES) const int ndevices_params = (int)(sizeof(OPENCL_KERNELS_DEVICES) / sizeof(*OPENCL_KERNELS_DEVICES)); # endif opencl_libsmm_smm_t config; opencl_libsmm_smmkey_t key, key_direct; int key_direct_skip = 0, ntuned = 0; if (NULL != env_params && '\0' != *env_params) { /* filename */ FILE* const file = fopen(env_params, "r"); if (NULL != file) { /* consume first line, check for device entry, and skip CSV header */ if (NULL != fgets(buffer, ACC_OPENCL_BUFFERSIZE, file)) { char* const device = (NULL != LIBXSMM_STRISTR(buffer, "device") ? bufname : NULL); opencl_libsmm_perfest_t* const gflops = (NULL != LIBXSMM_STRISTR(buffer, "gflops") ? &perfest : NULL); while (NULL != fgets(buffer, ACC_OPENCL_BUFFERSIZE, file)) { /* read params from CSV-file */ if (EXIT_SUCCESS == opencl_libsmm_read_smm_params(buffer, &key, &config, gflops, device, NULL /*key_ok*/)) { opencl_libsmm_smm_t* config_init; c_dbcsr_acc_opencl_config.devmatch = 0; /* disable device-match */ key.devuid = 0; config_init = (opencl_libsmm_smm_t*)libxsmm_xdispatch(&key, sizeof(key)); if (NULL == config_init) { if (NULL == libxsmm_xregister(&key, sizeof(key), sizeof(config), &config)) { result = EXIT_FAILURE; break; } else ++ntuned; } else if (config_init->gflops < config.gflops) { /* update */ memcpy(config_init, &config, sizeof(config)); } } else { if (0 != c_dbcsr_acc_opencl_config.verbosity) { fprintf(stderr, "WARN LIBSMM: failed to load tuned parameters from CSV-file!\n"); } break; /* invalid entry */ } } } else { /* invalid header */ result = EXIT_FAILURE; } fclose(file); } else if (EXIT_SUCCESS == opencl_libsmm_read_smm_params( env_params, &key_direct, &config, NULL /*perfest*/, NULL /*device*/, &key_direct_skip)) { /* try OPENCL_LIBSMM_SMM_PARAMS as string of kernel parameters (not device-specific) */ assert(0 == key_direct.devuid && 0 != key_direct_skip); if (NULL != libxsmm_xregister(&key_direct, sizeof(key_direct), sizeof(config), &config)) { c_dbcsr_acc_opencl_config.devmatch = 0; /* disable device-match */ ntuned = 1; } else result = EXIT_FAILURE; } else if (0 == key_direct_skip && 0 != c_dbcsr_acc_opencl_config.verbosity) { /* soft-error */ fprintf(stderr, "WARN LIBSMM: failed to open parameter file!\n"); } } # if defined(OPENCL_KERNELS_PARAMS_SMM) && defined(OPENCL_KERNELS_DEVICES) if (EXIT_SUCCESS == result && (0 == ntuned || 0 != key_direct_skip)) { const char *line = OPENCL_KERNELS_PARAMS_SMM, *next; # if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id]; unsigned int default_uid = c_dbcsr_acc_opencl_config.device.uid; int active_match = -1; if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_name( device_id, bufname, ACC_OPENCL_BUFFERSIZE, NULL /*platform*/, 0 /*platform_maxlen*/, /*cleanup*/ 1)) { /* determine best-matching parameters based on name of device */ int i = 0, count = 0; double best = 0; if (1 >= c_dbcsr_acc_opencl_config.devmatch) { c_dbcsr_acc_opencl_device_uid(device_id, bufname, &default_uid); } for (; i < ndevices_params; ++i) { const int n = c_dbcsr_acc_opencl_strimatch(bufname, OPENCL_KERNELS_DEVICES[i], NULL, &count); if (0 != n && 0 != count) { const double score = (double)n / count; unsigned int uid; if (best < score || (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_uid(NULL /*device*/, OPENCL_KERNELS_DEVICES[i], &uid) && uid == default_uid)) { active_match = i; best = score; } } } } # endif do { next = strchr(line, '\n'); if (NULL != next && next < (line + ACC_OPENCL_BUFFERSIZE)) { const int len = next - line; memcpy(buffer, line, len); buffer[len] = '\0'; if (EXIT_SUCCESS == opencl_libsmm_read_smm_params(/* read params from embedded params */ buffer, &key, &config, &perfest, bufname /*consume name/id*/, NULL /*key_ok*/)) { if (0 == key_direct_skip || 0 != memcmp(&key_direct, &key, (const char*)&key.k - (const char*)&key)) { opencl_libsmm_smm_t* config_init; const int i = atoi(bufname); if (0 >= ndevices_params || 0 == c_dbcsr_acc_opencl_config.devmatch || 0 > i || ndevices_params <= i || EXIT_SUCCESS != c_dbcsr_acc_opencl_device_uid(NULL /*device*/, OPENCL_KERNELS_DEVICES[i], &key.devuid)) { key.devuid = 0; } config_init = (opencl_libsmm_smm_t*)libxsmm_xdispatch(&key, sizeof(key)); /* duplicate? */ if (NULL == config_init) { if (NULL != libxsmm_xregister(&key, sizeof(key), sizeof(config), &config)) ++ntuned; else { /* failed to register */ result = EXIT_FAILURE; break; } } else if (config_init->gflops < config.gflops) { /* update */ memcpy(config_init, &config, sizeof(config)); } # if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER if (active_match == i && 0 != default_uid) { key.devuid = default_uid; config_init = (opencl_libsmm_smm_t*)libxsmm_xdispatch(&key, sizeof(key)); if (NULL != config_init || NULL != libxsmm_xregister(&key, sizeof(key), sizeof(config), &config)) { static int info = 0; if (0 == info && 0 == c_dbcsr_acc_opencl_config.nrank && 0 != c_dbcsr_acc_opencl_config.verbosity && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_name(device_id, bufname, ACC_OPENCL_BUFFERSIZE, NULL /*platform*/, 0 /*platform_maxlen*/, /*cleanup*/ 0)) { assert(i < ndevices_params); if (default_uid != key.devuid) { fprintf(/* print best-matching device */ stderr, "INFO ACC/LIBSMM: PARAMS of \"%s\" used for \"%s\"\n", OPENCL_KERNELS_DEVICES[i], bufname); } else { fprintf( stderr, "INFO ACC/LIBSMM: PARAMS of \"%s\" used to instantiate kernels\n", OPENCL_KERNELS_DEVICES[i]); } info = 1; } } } # endif } } else { if (0 != c_dbcsr_acc_opencl_config.verbosity) { fprintf(stderr, "WARN LIBSMM: failed to load embedded parameters!\n"); } break; } line = ++next; } } while (NULL != next); } # endif # if defined(OPENCL_KERNELS_DEVICES) if (EXIT_SUCCESS == result && 0 != ntuned && 0 == c_dbcsr_acc_opencl_config.nrank && (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity)) { fprintf(stderr, "INFO ACC/LIBSMM: PARAMS in %i set%s loaded targeting ", ntuned, 1 != ntuned ? "s" : ""); if (0 != c_dbcsr_acc_opencl_config.devmatch) { fprintf(stderr, "%i device%s\n", ndevices_params, 1 != ndevices_params ? "s" : ""); if (3 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) { unsigned int i = 0; for (; i < (unsigned int)ndevices_params; ++i) { fprintf(stderr, "INFO ACC/LIBSMM: PARAMS -> \"%s\"\n", OPENCL_KERNELS_DEVICES[i]); } } } else fprintf(stderr, "any device\n"); } # endif } } } ACC_OPENCL_RETURN(result); } int libsmm_acc_finalize(void) { /* Routine libsmm_acc_init is called in master thread inside of parallel region * However, libsmm_acc_finalize is indirectly called (c_dbcsr_acc_finalize) * inside of a parallel region (not just the master thread). */ # if defined(_OPENMP) /* initialization/finalization is not meant to be thread-safe */ int result = ((0 == omp_in_parallel() || /*main*/ 0 == omp_get_thread_num()) ? EXIT_SUCCESS : EXIT_FAILURE); # pragma omp critical(opencl_libsmm_initialized) # else int result = EXIT_SUCCESS; # endif --opencl_libsmm_initialized; /* multiple calls to libsmm_acc_finalize are not considered as an error */ if (0 == opencl_libsmm_initialized) { # if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER char fname[ACC_OPENCL_MAXSTRLEN]; const void* regentry = libxsmm_get_registry_begin(LIBXSMM_KERNEL_KIND_USER, NULL /*key*/); for (; NULL != regentry; regentry = libxsmm_get_registry_next(regentry, NULL /*key*/)) { /* opencl_libsmm_trans_t/opencl_libsmm_smm_t carry cl_kernel as 1st data member */ cl_kernel kernel = *(const cl_kernel*)regentry; if (NULL == kernel) kernel = ((const opencl_libsmm_smm_t*)regentry)->kernel[1]; if (NULL != kernel) { /* only consider user-entry if clGetKernelInfo succeeded */ int result_entry = clGetKernelInfo(kernel, CL_KERNEL_FUNCTION_NAME, sizeof(fname), fname, NULL); if (EXIT_SUCCESS == result_entry) { if (NULL != strstr(fname, OPENCL_LIBSMM_KERNELNAME_TRANS)) { /* trans-kernel */ result_entry = clReleaseKernel(kernel); } else if (NULL != strstr(fname, OPENCL_LIBSMM_KERNELNAME_SMM)) { /* SMM-kernel */ result_entry = clReleaseKernel(kernel); if (EXIT_SUCCESS == result_entry && kernel != ((const opencl_libsmm_smm_t*)regentry)->kernel[1]) { kernel = ((const opencl_libsmm_smm_t*)regentry)->kernel[1]; /* release 2nd kernel */ if (NULL != kernel) result_entry = clReleaseKernel(kernel); } } if (EXIT_SUCCESS != result_entry) result = result_entry; } } } # endif # if !defined(__DBCSR_ACC) /* DBCSR shall call c_dbcsr_acc_init as well as libsmm_acc_init (since both interfaces are used). * Also, libsmm_acc_init may privately call c_dbcsr_acc_init (as it depends on the ACC interface). * The implementation of c_dbcsr_acc_init should hence be safe against "over initialization". * However, DBCSR only calls c_dbcsr_acc_init (and expects an implicit libsmm_acc_init). */ if (EXIT_SUCCESS == result) result = c_dbcsr_acc_finalize(); # endif libxsmm_finalize(); } /* c_dbcsr_acc_finalize is not called since it can be used independently */ return result; } c_dbcsr_acc_bool_t libsmm_acc_is_thread_safe(void) { /* match DBCSR's threading level */ # if defined(_OPENMP) return 1; # else return 0; # endif } const char* opencl_libsmm_getenv(const char domain[], const char key[]) { char buffer[ACC_OPENCL_BUFFERSIZE]; const size_t keylen = strlen(key); const char* result = NULL; int nchar; if (2 != keylen) { nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), "%s_%s", domain, key); if (0 < nchar && (int)sizeof(buffer) > nchar) result = getenv(buffer); } else { nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), "%s_PARAMS", domain); if (0 < nchar && (int)sizeof(buffer) > nchar) result = getenv(buffer); if (NULL == result || '0' != *result) { nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), "%s_%s", domain, key); result = (0 < nchar && (int)sizeof(buffer) > nchar) ? getenv(buffer) : NULL; } else { result = NULL; } } return result; } int libsmm_acc_transpose(const int* dev_trs_stack, int offset, int stack_size, void* dev_data, libsmm_acc_data_t datatype, int m, int n, int max_kernel_dim, void* stream) { c_dbcsr_acc_opencl_info_memptr_t info_stack, info_mdata; int result = EXIT_SUCCESS; const int mn = m * n; assert((NULL != dev_trs_stack && NULL != stream && NULL != dev_data && 0 <= offset && 0 < stack_size) || 0 == stack_size); assert(0 < m && 0 < n); if (0 == stack_size || 1 == mn) return EXIT_SUCCESS; result |= c_dbcsr_acc_opencl_info_devptr(&info_stack, dev_trs_stack, sizeof(int), NULL /*amount*/, NULL /*offset*/); result |= c_dbcsr_acc_opencl_info_devptr(&info_mdata, dev_data, 1 /*elsize*/, NULL /*amount*/, NULL /*offset*/); if (EXIT_SUCCESS == result && ( # if defined(OPENCL_LIBSMM_F64) dbcsr_type_real_8 == datatype # else 0 # endif || # if defined(OPENCL_LIBSMM_F32) dbcsr_type_real_4 == datatype # else 0 # endif ) && mn <= (max_kernel_dim * max_kernel_dim)) { const libxsmm_timer_tickint start = libxsmm_timer_tick(); const c_dbcsr_acc_opencl_stream_t* const str = ACC_OPENCL_STREAM(stream); opencl_libsmm_trans_t* config; opencl_libsmm_transkey_t key; LIBXSMM_MEMZERO127(&key); /* potentially heterogeneous key-data (alignment gaps) */ key.type = datatype; key.m = m; key.n = n; /* initialize key */ config = (opencl_libsmm_trans_t*)libxsmm_xdispatch(&key, sizeof(key)); if (NULL == config) { char buffer[ACC_OPENCL_BUFFERSIZE], build_params[ACC_OPENCL_BUFFERSIZE]; char fname[ACC_OPENCL_MAXSTRLEN]; int nchar = LIBXSMM_SNPRINTF(fname, sizeof(fname), /* kernel name are meant to be unambiguous (BLAS-typeprefix and kernelsize) */ "x" OPENCL_LIBSMM_KERNELNAME_TRANS "%ix%i", m, n); # if defined(__DBCSR_ACC) int routine_handle; c_dbcsr_timeset(LIBSMM_ACC_TRANSPOSE_ROUTINE_NAME_STRPTR, LIBSMM_ACC_TRANSPOSE_ROUTINE_NAME_LENPTR, &routine_handle); # endif if (0 < nchar && (int)sizeof(fname) > nchar) { const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id]; const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; const char *const env_cl = OPENCL_LIBSMM_TRANSENV("BUILDOPTS"), *const env_bm = OPENCL_LIBSMM_TRANSENV("BM"); const char* const cmem = (EXIT_SUCCESS != c_dbcsr_acc_opencl_use_cmem(devinfo) ? "global" : "constant"); const char* const build_format = "-DCONSTANT=%s -DINPLACE=%i -DFN=%s -DSM=%i -DSN=%i -DWG=%i -DT=%s"; const char *const env_inplace = OPENCL_LIBSMM_TRANSENV("INPLACE"), *tname = ""; # if defined(OPENCL_LIBSMM_TRANS_INPLACE) const int inplace = ((m == n) && (NULL == env_inplace ? 1 : ('0' != *env_inplace))); # else const int inplace = ((m == n) && (NULL == env_inplace ? 0 : ('0' != *env_inplace))); # endif const int blockm = ((NULL == env_bm || '\0' == *env_bm) ? 0 : atoi(env_bm)); const int bm = (0 >= blockm ? m : LIBXSMM_MIN(blockm, m)); opencl_libsmm_trans_t new_config; memset(&new_config, 0, sizeof(new_config)); switch (datatype) { case dbcsr_type_real_8: { tname = "char8"; /* double */ fname[0] = 'd'; } break; case dbcsr_type_real_4: { tname = "float"; fname[0] = 's'; } break; default: assert('\0' == *tname); } new_config.wgsize = LIBXSMM_MIN((size_t)((m == bm || 0 == (m % bm)) ? bm : m), devinfo->wgsize[0]); nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), "%s", NULL == env_cl ? "" : env_cl); if (0 <= /*<*/ nchar && (int)sizeof(buffer) > nchar) { nchar = LIBXSMM_SNPRINTF( build_params, sizeof(build_params), build_format, cmem, inplace, fname, m, n, (int)new_config.wgsize, tname); } if ('\0' != *tname && 0 < nchar && (int)sizeof(build_params) > nchar) { result = c_dbcsr_acc_opencl_kernel(0 /*source_kind*/, OPENCL_KERNELS_SOURCE_TRANSPOSE, fname, build_params, buffer, NULL /*try*/, NULL /*try_ok*/, NULL /*extnames*/, 0 /*num_exts*/, &new_config.kernel); if (EXIT_SUCCESS == result) { size_t wgsize_max; assert(NULL != new_config.kernel); result = clGetKernelWorkGroupInfo( new_config.kernel, device_id, CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &wgsize_max, NULL); if (EXIT_SUCCESS == result) { assert(0 < wgsize_max); if (wgsize_max < new_config.wgsize) { new_config.wgsize = wgsize_max; nchar = LIBXSMM_SNPRINTF( build_params, sizeof(build_params), build_format, cmem, inplace, fname, m, n, (int)new_config.wgsize, tname); if (0 < nchar && (int)sizeof(build_params) > nchar) { result = c_dbcsr_acc_opencl_kernel(0 /*source_kind*/, OPENCL_KERNELS_SOURCE_TRANSPOSE, fname, build_params, buffer, NULL /*try*/, NULL /*try_ok*/, NULL /*extnames*/, 0 /*num_exts*/, &new_config.kernel); } else result = EXIT_FAILURE; } if (EXIT_SUCCESS == result) { config = (opencl_libsmm_trans_t*)libxsmm_xregister(&key, sizeof(key), sizeof(new_config), &new_config); if (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) { const double duration = libxsmm_timer_duration(start, libxsmm_timer_tick()); LIBXSMM_STDIO_ACQUIRE(); fprintf(stderr, "INFO ACC/LIBSMM: TRANS-kernel "); opencl_libsmm_write_trans_params( stderr, 0 /*only_key*/, &key, NULL /*config*/, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); fprintf(stderr, "="); opencl_libsmm_write_trans_params( stderr, 0 /*only_key*/, &key, config, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); fprintf(stderr, " gen=%.1f ms\n", 1E3 * duration); LIBXSMM_STDIO_RELEASE(); } } } } } else if (EXIT_SUCCESS == result) { result = EXIT_FAILURE; } } else { result = EXIT_FAILURE; } # if defined(__DBCSR_ACC) c_dbcsr_timestop(&routine_handle); # endif } assert((NULL != config && NULL != config->kernel && 0 < config->wgsize) || EXIT_SUCCESS != result); if (EXIT_SUCCESS == result) { const size_t work_size = config->wgsize * stack_size; assert(!(OPENCL_LIBSMM_NLOCKS_TRANS & (OPENCL_LIBSMM_NLOCKS_TRANS - 1))); /* POT */ { /* calling clSetKernelArg/clEnqueueNDRangeKernel must be consistent */ static ACC_OPENCL_ATOMIC_LOCKTYPE locks[OPENCL_LIBSMM_NLOCKS_TRANS]; # if (1 < OPENCL_LIBSMM_NLOCKS_TRANS) const unsigned int hash = libxsmm_hash(&config->kernel, sizeof(cl_kernel), 25071975 /*seed*/); const unsigned int lidx = LIBXSMM_MOD2(hash, OPENCL_LIBSMM_NLOCKS_TRANS); ACC_OPENCL_ATOMIC_LOCKTYPE* const lock = locks + lidx; # else ACC_OPENCL_ATOMIC_LOCKTYPE* const lock = locks; # endif ACC_OPENCL_ATOMIC_ACQUIRE(lock); ACC_OPENCL_CHECK( result, clSetKernelArg(config->kernel, 0, sizeof(int), &offset), "set offset argument of transpose kernel"); ACC_OPENCL_CHECK(result, c_dbcsr_acc_opencl_set_kernel_ptr(config->kernel, 1, info_stack.memory), "set batch-list argument of transpose kernel"); ACC_OPENCL_CHECK(result, c_dbcsr_acc_opencl_set_kernel_ptr(config->kernel, 2, info_mdata.memory), "set matrix-data argument of transpose kernel"); ACC_OPENCL_CHECK(result, clEnqueueNDRangeKernel( str->queue, config->kernel, 1 /*work_dim*/, NULL /*offset*/, &work_size, &config->wgsize, 0, NULL, NULL), "launch transpose kernel"); /* eventually update performance counters inside of locked region */ if ((3 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) && EXIT_SUCCESS == result) { LIBXSMM_STDIO_ACQUIRE(); fprintf(stderr, "INFO ACC/LIBSMM: TRANS-kernel "); opencl_libsmm_write_trans_params( stderr, 1 /*only_key*/, &key, NULL /*config*/, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); fprintf(stderr, "="); opencl_libsmm_write_trans_params(stderr, 1 /*only_key*/, &key, config, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); fprintf(stderr, " ss=%i\n", stack_size); LIBXSMM_STDIO_RELEASE(); } ACC_OPENCL_ATOMIC_RELEASE(lock); } } } else if (EXIT_SUCCESS == result) result = EXIT_FAILURE; ACC_OPENCL_RETURN(result); } c_dbcsr_acc_bool_t libsmm_acc_process_suitable( c_dbcsr_acc_bool_t def_mnk, libsmm_acc_data_t datatype, int stack_size, int m_max, int n_max, int k_max, int max_kernel_dim) { c_dbcsr_acc_bool_t result = 0; /* false */ const int mn = m_max * n_max; if (0 < mn && 0 < k_max && 0 < stack_size && 0 != def_mnk /*homogeneous*/ /* allow k_max to exceed max_kernel_dim, TODO: BLAS for large kernels (m,n) */ && mn <= (max_kernel_dim * max_kernel_dim)) { switch (datatype) { # if defined(OPENCL_LIBSMM_F64) case dbcsr_type_real_8: { result = 1; /* true */ } break; # endif # if defined(OPENCL_LIBSMM_F32) case dbcsr_type_real_4: { result = 1; /* true */ } break; # endif default: assert(/*false*/ 0 == result); } } if ((/*false*/ 0 == result) && (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity)) { opencl_libsmm_smmkey_t key; opencl_libsmm_smm_t dummy; key.type = datatype; key.m = m_max; key.n = n_max; key.k = k_max; /* initialize key */ memset(&dummy, 0, sizeof(dummy)); /* mute warnings about potentially uninitialized data */ LIBXSMM_STDIO_ACQUIRE(); fprintf(stderr, "INFO ACC/LIBSMM: SMM-kernel "); opencl_libsmm_write_smm_params(stderr, 1 /*only_key*/, &key, NULL /*config*/, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); fprintf(stderr, "="); opencl_libsmm_write_smm_params(stderr, 1 /*only_key*/, &key, &dummy, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); fprintf(stderr, " ss=%i", stack_size); if (mn <= (max_kernel_dim * max_kernel_dim)) { fprintf(stderr, 0 != def_mnk ? " is ignored\n" : " is inhomogeneous\n"); } else fprintf(stderr, " is too large\n"); LIBXSMM_STDIO_RELEASE(); } return result; } # if defined(OPENCL_LIBSMM_PFORMAT) && (0 < OPENCL_LIBSMM_PFORMAT) void opencl_libsmm_acc_set_dbm_launch_fn(opencl_libsmm_acc_dbm_launch_fn_t launch_fn) { opencl_libsmm_acc_dbm_launch_fn = launch_fn; } # else int opencl_libsmm_acc_process(const int* host_param_stack, const int* dev_param_stack, int stack_size, libsmm_acc_data_t datatype, const void* dev_a_data, const void* dev_b_data, void* dev_c_data, int m_max, int n_max, int k_max, int max_kernel_dim, c_dbcsr_acc_bool_t def_mnk, void* stream, void* c_stream, int param_format, cl_event* event); # endif int opencl_libsmm_acc_process(const int* host_param_stack, const int* dev_param_stack, int stack_size, libsmm_acc_data_t datatype, const void* dev_a_data, const void* dev_b_data, void* dev_c_data, int m_max, int n_max, int k_max, int max_kernel_dim, c_dbcsr_acc_bool_t def_mnk, void* stream, void* c_stream, int param_format, cl_event* event) { int result = EXIT_SUCCESS; LIBXSMM_UNUSED(host_param_stack); /* TODO */ LIBXSMM_UNUSED(c_stream); /* TODO */ assert(0 == stack_size || (NULL != dev_a_data && NULL != dev_b_data && NULL != dev_c_data && NULL != dev_param_stack)); assert(0 < max_kernel_dim && NULL != stream && 0 <= stack_size && 0 <= m_max && 0 <= n_max && 0 <= k_max); if (0 != libsmm_acc_process_suitable(def_mnk, datatype, stack_size, m_max, n_max, k_max, max_kernel_dim)) { const libxsmm_timer_tickint start = libxsmm_timer_tick(); const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device; c_dbcsr_acc_opencl_info_memptr_t info_stack, info_adata, info_bdata, info_cdata; opencl_libsmm_smmkey_t key; const c_dbcsr_acc_opencl_stream_t* const str = ACC_OPENCL_STREAM(stream); LIBXSMM_MEMZERO127(&key); /* potentially heterogeneous key-data */ key.devuid = ((1 != c_dbcsr_acc_opencl_config.devmatch && ((unsigned int)-1) != c_dbcsr_acc_opencl_config.devmatch) ? c_dbcsr_acc_opencl_config.devmatch : devinfo->uid); key.type = datatype; key.m = m_max; key.n = n_max; key.k = k_max; result |= c_dbcsr_acc_opencl_info_devptr(&info_stack, dev_param_stack, sizeof(int), NULL /*amount*/, NULL /*offset*/); result |= c_dbcsr_acc_opencl_info_devptr(&info_adata, dev_a_data, 1 /*elsize*/, NULL /*amount*/, NULL /*offset*/); result |= c_dbcsr_acc_opencl_info_devptr(&info_bdata, dev_b_data, 1 /*elsize*/, NULL /*amount*/, NULL /*offset*/); result |= c_dbcsr_acc_opencl_info_devptr(&info_cdata, dev_c_data, 1 /*elsize*/, NULL /*amount*/, NULL /*offset*/); if (EXIT_SUCCESS == result) { static ACC_OPENCL_ATOMIC_LOCKTYPE locks[OPENCL_LIBSMM_NLOCKS_SMM]; const char *const env_s = OPENCL_LIBSMM_SMMENV("S"), *const env_bs = OPENCL_LIBSMM_SMMENV("BS"); const int s = ((NULL == env_s || '\0' == *env_s) ? OPENCL_LIBSMM_SMM_S : atoi(env_s)); int kernel_idx = 0, bs = ((NULL == env_bs || '\0' == *env_bs) ? 0 : atoi(env_bs)); opencl_libsmm_smm_t* config; ACC_OPENCL_ATOMIC_LOCKTYPE* lock = locks; # if (1 < OPENCL_LIBSMM_NLOCKS_SMM) assert(!(OPENCL_LIBSMM_NLOCKS_SMM & (OPENCL_LIBSMM_NLOCKS_SMM - 1))); /* POT */ lock += LIBXSMM_MOD2(libxsmm_hash(&key, sizeof(key), 25071975 /*seed*/), OPENCL_LIBSMM_NLOCKS_SMM); # endif ACC_OPENCL_ATOMIC_ACQUIRE(lock); /* calling clSetKernelArg/clEnqueueNDRangeKernel must be consistent */ config = (opencl_libsmm_smm_t*)libxsmm_xdispatch(&key, sizeof(key)); if (0 >= bs) bs = ((NULL != config && 0 < config->bs) ? config->bs : OPENCL_LIBSMM_DEFAULT_BS); /* determine kernel-kind (mini-batch vs. mini-kernel) */ if (1 == bs || 0 > s || (bs * s) > stack_size) kernel_idx = bs = 1; if (NULL == config || NULL == config->kernel[kernel_idx]) { char buffer[ACC_OPENCL_BUFFERSIZE], build_params[ACC_OPENCL_BUFFERSIZE], fname[ACC_OPENCL_MAXSTRLEN]; int nchar = LIBXSMM_SNPRINTF(fname, sizeof(fname), /* kernel name are meant to be unambiguous (BLAS-typeprefix and kernelsize) */ "x" OPENCL_LIBSMM_KERNELNAME_SMM "%ix%ix%i", m_max, n_max, k_max); # if defined(__DBCSR_ACC) int routine_handle; c_dbcsr_timeset(LIBSMM_ACC_PROCESS_ROUTINE_NAME_STRPTR, LIBSMM_ACC_PROCESS_ROUTINE_NAME_LENPTR, &routine_handle); # endif result = ((0 < nchar && (int)sizeof(fname) > nchar) ? EXIT_SUCCESS : EXIT_FAILURE); if (EXIT_SUCCESS == result) { c_dbcsr_acc_opencl_atomic_fp_t tkind = c_dbcsr_acc_opencl_atomic_fp_no; const char* tname = NULL; switch (datatype) { case dbcsr_type_real_8: { tkind = c_dbcsr_acc_opencl_atomic_fp_64; tname = "double"; fname[0] = 'd'; } break; case dbcsr_type_real_4: { tkind = c_dbcsr_acc_opencl_atomic_fp_32; tname = "float"; fname[0] = 's'; } break; default: assert(NULL == tname); } if (NULL != tname) { const char *extensions[] = {NULL, NULL}, *const env_devid = OPENCL_LIBSMM_SMMENV("DEVID"); const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id]; const unsigned int devuid = (NULL == env_devid || '\0' == *env_devid) ? devinfo->uid : (unsigned int)strtoul(env_devid, NULL, 0); size_t nextensions = sizeof(extensions) / sizeof(*extensions), sgs = 0, wgsize_prf = 1; const char *const env_bm = OPENCL_LIBSMM_SMMENV("BM"), *const env_bn = OPENCL_LIBSMM_SMMENV("BN"); const char *const env_bk = OPENCL_LIBSMM_SMMENV("BK"), *const env_ws = OPENCL_LIBSMM_SMMENV("WS"); const char *const env_wg = OPENCL_LIBSMM_SMMENV("WG"), *const env_lu = OPENCL_LIBSMM_SMMENV("LU"); const char *const env_nz = OPENCL_LIBSMM_SMMENV("NZ"), *const env_al = OPENCL_LIBSMM_SMMENV("AL"); const char *const env_tb = OPENCL_LIBSMM_SMMENV("TB"), *const env_tc = OPENCL_LIBSMM_SMMENV("TC"); const char *const env_ap = OPENCL_LIBSMM_SMMENV("AP"), *const env_aa = OPENCL_LIBSMM_SMMENV("AA"); const char *const env_ab = OPENCL_LIBSMM_SMMENV("AB"), *const env_ac = OPENCL_LIBSMM_SMMENV("AC"); const char *const env_xf = OPENCL_LIBSMM_SMMENV("XF"), *const env_cl = OPENCL_LIBSMM_SMMENV("BUILDOPTS"); const char* const intel_xf = "-cl-intel-256-GRF-per-thread"; const int blockn = ((NULL == env_bn || '\0' == *env_bn) ? 0 : atoi(env_bn)); const int blockk = ((NULL == env_bk || '\0' == *env_bk) ? 0 : atoi(env_bk)); const int wgmin = ((NULL == env_ws || '\0' == *env_ws) ? 0 : atoi(env_ws)); const int default_aa = (((0x0bd0 > devuid || 0x0bdb < devuid)) ? ((k_max % OPENCL_LIBSMM_VMIN) ? 1 : 2) : 0); const int default_ab = (((0x0bd0 > devuid || 0x0bdb < devuid) && 0x020a != devuid) ? 3 : 0), default_ac = 0; const int default_bk = (((0x0bd0 > devuid || 0x0bdb < devuid || n_max < k_max) && 0x020a != devuid) ? (0 == kernel_idx ? LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BK, m_max) : LIBXSMM_MIN(OPENCL_LIBSMM_VMIN, m_max)) : 1); const int default_wg = (((0x0bd0 > devuid || 0x0bdb < devuid)) ? (0 == kernel_idx ? 0 : -2) : -1); const int default_lu = (0 != devinfo->intel ? -1 : 0); int defaults, blockm, nbm, nbn; opencl_libsmm_smm_t new_config; if (NULL == config) { memset(&new_config, 0, sizeof(new_config)); } else { /* preserve kernels, performance counters, etc. */ memcpy(&new_config, config, sizeof(opencl_libsmm_smm_t)); } if (NULL == env_xf || '\0' == *env_xf) { if (0 != devinfo->intel && CL_DEVICE_TYPE_GPU == devinfo->type && NULL != env_cl && NULL != strstr(env_cl, intel_xf)) { new_config.flags = 1; } } else new_config.flags = atoi(env_xf); defaults = ((NULL == config || 0 != kernel_idx || (NULL != config && new_config.flags != config->flags)) ? 1 : 0); new_config.lu = LIBXSMM_MAX(-2, (NULL == env_lu || '\0' == *env_lu) ? (0 != defaults ? default_lu : config->lu) : atoi(env_lu)); /* populate only lower bound */ blockm = ((NULL == env_bm || '\0' == *env_bm || 1 < new_config.lu) /* 1= new_config.lu ? 0 : LIBXSMM_UP(m_max / new_config.lu, OPENCL_LIBSMM_VMIN)) : atoi(env_bm)); /* two defaults for new_config parameters: 1st - regular, 2nd - BS=1 kernel */ new_config.bm = (0 >= blockm ? (0 == kernel_idx ? (0 != defaults ? LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BM, m_max) : LIBXSMM_CLMP(config->bm, 1, m_max)) : LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BM, m_max)) : LIBXSMM_MIN(blockm, m_max)); new_config.bn = (0 >= blockn ? (0 == kernel_idx ? (0 != defaults ? LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BN, n_max) : LIBXSMM_CLMP(config->bn, 1, n_max)) : LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BN, n_max)) : LIBXSMM_MIN(blockn, n_max)); new_config.bk = (0 >= blockk ? (0 != defaults ? default_bk : LIBXSMM_CLMP(config->bk, 1, m_max)) : LIBXSMM_MIN(blockk, m_max)); new_config.ws = (0 >= wgmin ? (0 == kernel_idx ? (0 != defaults ? LIBXSMM_MAX(m_max, n_max) : LIBXSMM_CLMP(config->ws, 1, n_max * m_max)) : LIBXSMM_MAX(m_max, n_max)) : LIBXSMM_MIN(wgmin, n_max * m_max)); new_config.wg = LIBXSMM_CLMP( (NULL == env_wg || '\0' == *env_wg) ? (0 != defaults ? default_wg : config->wg) : atoi(env_wg), -2, 2); new_config.nz = LIBXSMM_CLMP( (NULL == env_nz || '\0' == *env_nz) ? (0 != defaults ? /*default*/ 0 : config->nz) : atoi(env_nz), 0, 1); # if defined(OPENCL_LIBSMM_TODO) new_config.al = LIBXSMM_CLMP(/* bug with AL=1 and XF=1? */ (NULL == env_al || '\0' == *env_al) ? (0 != defaults ? /*default*/ 0 : config->al) : atoi(env_al), 0, 1); # else LIBXSMM_UNUSED(env_al); new_config.al = 0; # endif new_config.tb = LIBXSMM_CLMP( (NULL == env_tb || '\0' == *env_tb) ? (0 != defaults ? /*default*/ 0 : config->tb) : atoi(env_tb), 0, 1); new_config.tc = LIBXSMM_CLMP( (NULL == env_tc || '\0' == *env_tc) ? (0 != defaults ? /*default*/ 1 : config->tc) : atoi(env_tc), 0, 1); new_config.ap = LIBXSMM_CLMP( (NULL == env_ap || '\0' == *env_ap) ? (0 != defaults ? /*default*/ 0 : config->ap) : atoi(env_ap), 0, 1); new_config.aa = LIBXSMM_CLMP(/* bug with AA=2 and XF=1? */ (NULL == env_aa || '\0' == *env_aa) ? (0 != defaults ? default_aa : config->aa) : atoi(env_aa), 0, 2); new_config.ab = LIBXSMM_CLMP( (NULL == env_ab || '\0' == *env_ab) ? (0 != defaults ? default_ab : config->ab) : atoi(env_ab), 0, 2); new_config.ac = LIBXSMM_CLMP( (NULL == env_ac || '\0' == *env_ac) ? (0 != defaults ? default_ac : config->ac) : atoi(env_ac), 0, 1); if (0 >= new_config.s) new_config.s = stack_size; if (0 == kernel_idx || 1 >= new_config.bs) new_config.bs = bs; nbm = (m_max + new_config.bm - 1) / new_config.bm; nbn = (n_max + new_config.bn - 1) / new_config.bn; new_config.wgsize[kernel_idx] = LIBXSMM_MAX(nbm * nbn, new_config.ws); if (0 != new_config.wg) { if (1 < devinfo->wgsize[2]) { /* subgroups supported */ if (new_config.wgsize[kernel_idx] <= devinfo->wgsize[2]) { sgs = devinfo->wgsize[2]; } else if (new_config.wgsize[kernel_idx] <= devinfo->wgsize[1]) { sgs = devinfo->wgsize[1]; } } wgsize_prf = LIBXSMM_UP(new_config.wgsize[kernel_idx], 0 != sgs ? sgs : devinfo->wgsize[1]); } else { /* cover exactly */ wgsize_prf = new_config.wgsize[kernel_idx]; } if (2 <= new_config.wg) wgsize_prf = LIBXSMM_UP2POT(wgsize_prf); if (wgsize_prf < (2 * new_config.wgsize[kernel_idx])) new_config.wgsize[kernel_idx] = wgsize_prf; /* limit */ assert(1 <= bs && 0 < new_config.wgsize[kernel_idx] && 0 < wgsize_prf); /* ensure minimum requested WG-size */ while ((nbm * nbn) < new_config.ws && (nbm < m_max || nbn < n_max)) { if (nbn < n_max) ++nbn; else if (nbm < m_max) ++nbm; } if ((nbm * nbn) < new_config.ws) { new_config.bn = (n_max + nbn - 1) / nbn; new_config.bm = (m_max + nbm - 1) / nbm; new_config.wgsize[kernel_idx] = (2 > new_config.wg ? (nbm * nbn) : ((int)LIBXSMM_UP2POT(nbm * nbn))); } else { /* reset */ nbm = (m_max + new_config.bm - 1) / new_config.bm; nbn = (n_max + new_config.bn - 1) / new_config.bn; } /* limit WG-size to maximum WG-size */ while (devinfo->wgsize[0] < new_config.wgsize[kernel_idx] && (new_config.bm < m_max || new_config.bn < n_max)) { if (new_config.bn < n_max) { ++new_config.bn; nbn = (n_max + new_config.bn - 1) / new_config.bn; } else if (new_config.bm < m_max) { ++new_config.bm; nbm = (m_max + new_config.bm - 1) / new_config.bm; } new_config.wgsize[kernel_idx] = (2 > new_config.wg ? (nbm * nbn) : ((int)LIBXSMM_UP2POT(nbm * nbn))); } if (new_config.wgsize[kernel_idx] <= devinfo->wgsize[0]) { /* SMM can be handled by device */ const char* const cmem = (EXIT_SUCCESS != c_dbcsr_acc_opencl_use_cmem(devinfo) ? "global" : "constant"); const char* const env_nrepeat = getenv("NREPEAT_SMM"); const int typesize = OPENCL_LIBSMM_TYPESIZE(datatype); const int slm_a = (1 != new_config.aa ? 0 : (LIBXSMM_ISPOT(k_max * typesize) + 1)); const int slm_b = (1 != new_config.ab ? 0 : (LIBXSMM_ISPOT(k_max * typesize) + 1)); const int slm_c = (1 != new_config.ac ? 0 : (LIBXSMM_ISPOT(m_max * typesize) + 1)); /* compose build parameters and flags */ nchar = LIBXSMM_SNPRINTF(build_params, sizeof(build_params), "-DT=%s -DGPU=%u -DCONSTANT=%s -DWG=%i -DSG=%i -DFN=%s -DREPEAT=%i -DLU=%i " "-DSM=%i -DSN=%i -DSK=%i -DBS=%i -DVL=%i %s -DBM=%i -DBN=%i -DBK=%i " "%s %s %s %s %s %s %s %s ", /* space! */ tname, CL_DEVICE_TYPE_GPU == devinfo->type, cmem, (int)new_config.wgsize[kernel_idx], (int)sgs, fname, NULL == env_nrepeat ? 1 : atoi(env_nrepeat), new_config.lu, m_max, n_max, k_max, bs, OPENCL_LIBSMM_VMIN, bs == new_config.bs ? "-DBSC" : "", new_config.bm, new_config.bn, new_config.bk, 0 == new_config.tb ? "" : "-DTRACK_B", 0 != new_config.tc ? "-DTRACK_C" : "", 0 == new_config.nz ? "" : "-DATOMIC_INC_NZ", 0 == new_config.al ? "" : "-DAL", 0 == new_config.ap ? "" : "-DSLM_P", 0 == new_config.aa ? "" : (1 == slm_a ? "-DSLM_A=1" : (0 != slm_a ? "-DSLM_A=2" : "-DREG_A")), 0 == new_config.ab ? "" : (1 == slm_b ? "-DSLM_B=1" : (0 != slm_b ? "-DSLM_B=2" : "-DREG_B")), 0 == new_config.ac ? "" : (1 == slm_c ? "-DSLM_C=1" : "-DSLM_C=2")); /* apply support for FP-atomics */ if (0 < nchar && (int)sizeof(build_params) > nchar) { nchar = c_dbcsr_acc_opencl_flags_atomics(&c_dbcsr_acc_opencl_config.device, tkind, extensions, &nextensions, build_params + nchar, sizeof(build_params) - nchar); } else result = EXIT_FAILURE; if (0 < nchar && (int)sizeof(build_params) > nchar) { nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), "%s %s%s", (0 == new_config.flags || 0 == devinfo->intel || CL_DEVICE_TYPE_GPU != devinfo->type) ? "" : intel_xf, 0 == c_dbcsr_acc_opencl_config.debug ? "-cl-fast-relaxed-math -cl-denorms-are-zero " : "", NULL == env_cl ? "" : env_cl); if (0 >= nchar || (int)sizeof(buffer) <= nchar) result = EXIT_FAILURE; } else result = EXIT_FAILURE; } else { /* matrix-size causes too large WG-size */ result = EXIT_FAILURE; } if (EXIT_SUCCESS == result) { const char* const env_kernel = OPENCL_LIBSMM_SMMENV("KERNEL"); result = c_dbcsr_acc_opencl_kernel(NULL == env_kernel ? 0 : 1, NULL == env_kernel ? OPENCL_KERNELS_SOURCE_MULTIPLY : env_kernel, fname, build_params, buffer, NULL /*cl_try*/, NULL /*cl_try_ok*/, extensions, nextensions, new_config.kernel + kernel_idx); if (EXIT_SUCCESS == result) { size_t wgsize_max_kernel = devinfo->wgsize[0]; result = clGetKernelWorkGroupInfo( new_config.kernel[kernel_idx], device_id, CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &wgsize_max_kernel, NULL); if (EXIT_SUCCESS == result) { assert(0 < new_config.wgsize[kernel_idx] && 0 < wgsize_max_kernel); assert(wgsize_max_kernel <= devinfo->wgsize[0]); if (new_config.wgsize[kernel_idx] <= wgsize_max_kernel) { /* check planned WG-size vs kernel-specific WG-size */ if (NULL == config || NULL == config->kernel[kernel_idx]) { config = (opencl_libsmm_smm_t*)libxsmm_xregister(&key, sizeof(key), sizeof(new_config), &new_config); } if (NULL != config) { if (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) { const double duration = libxsmm_timer_duration(start, libxsmm_timer_tick()); LIBXSMM_STDIO_ACQUIRE(); fprintf(stderr, "INFO ACC/LIBSMM: SMM-kernel "); opencl_libsmm_write_smm_params( stderr, 0 /*only_key*/, &key, NULL /*config*/, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); fprintf(stderr, "="); opencl_libsmm_write_smm_params( stderr, 0 /*only_key*/, &key, &new_config, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); fprintf(stderr, " gen=%.1f ms\n", 1E3 * duration); LIBXSMM_STDIO_RELEASE(); } } /* failed to register config */ else result = EXIT_FAILURE; } else { if (0 != c_dbcsr_acc_opencl_config.verbosity) { fprintf(stderr, "ERROR LIBSMM: tile-size causes too large WG-size (min(%u,%u) < %u)!\n", (unsigned int)wgsize_max_kernel, (unsigned int)devinfo->wgsize[0], (unsigned int)new_config.wgsize[kernel_idx]); } result = EXIT_FAILURE; /* tile-size causes too large WG-size */ } } } # if defined(NDEBUG) else if (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) { LIBXSMM_STDIO_ACQUIRE(); fprintf(stderr, "WARNING: SMM-kernel "); opencl_libsmm_write_smm_params( stderr, 0 /*only_key*/, &key, NULL /*config*/, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); fprintf(stderr, "="); opencl_libsmm_write_smm_params( stderr, 0 /*only_key*/, &key, &new_config, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); fprintf(stderr, " failed to compile!\n"); LIBXSMM_STDIO_RELEASE(); } # endif } } /* insufficient device capabilities */ else result = EXIT_FAILURE; } /* remove configuration from registry to avoid infinitely retrying code generation */ if (EXIT_SUCCESS != result && NULL != config) { libxsmm_xrelease(&key, sizeof(key)); } # if defined(__DBCSR_ACC) c_dbcsr_timestop(&routine_handle); # endif } assert(EXIT_SUCCESS != result || (NULL != config && NULL != config->kernel[kernel_idx])); assert(EXIT_SUCCESS != result || (1 <= config->bm && config->bm <= m_max)); assert(EXIT_SUCCESS != result || (1 <= config->bn && config->bn <= n_max)); assert(EXIT_SUCCESS != result || (1 <= config->bk && config->bk <= m_max)); assert(EXIT_SUCCESS != result || (1 <= config->ws && config->ws <= (m_max * n_max))); assert(EXIT_SUCCESS != result || (-2 <= config->wg && 2 >= config->wg)); assert(EXIT_SUCCESS != result || (-2 <= config->lu /*&& 2 >= config->lu*/)); assert(EXIT_SUCCESS != result || (0 <= config->nz && 1 >= config->nz)); assert(EXIT_SUCCESS != result || (0 <= config->al && 1 >= config->al)); assert(EXIT_SUCCESS != result || (0 <= config->tb && 1 >= config->tb)); assert(EXIT_SUCCESS != result || (0 <= config->tc && 1 >= config->tc)); assert(EXIT_SUCCESS != result || (0 <= config->ap && 1 >= config->ap)); assert(EXIT_SUCCESS != result || (0 <= config->aa && 2 >= config->aa)); assert(EXIT_SUCCESS != result || (0 <= config->ab && 2 >= config->ab)); assert(EXIT_SUCCESS != result || (0 <= config->ac && 1 >= config->ac)); assert(EXIT_SUCCESS != result || (1 <= config->wgsize[kernel_idx])); assert(EXIT_SUCCESS != result || (1 <= config->s && 1 <= config->bs)); if (EXIT_SUCCESS == result) { size_t work_size; /* scale intra-kernel batchsize according to stacksize */ if (0 == kernel_idx && 1 < config->bs && stack_size < config->s) { # if defined(OPENCL_LIBSMM_BS_MIN) const int config_bs = LIBXSMM_MAX(config->bs, OPENCL_LIBSMM_BS_MIN); # else const int config_bs = config->bs; # endif bs = (stack_size * config_bs + config->s - 1) / (config->s - 1); if (config->bs < bs) bs = config->bs; } /* adjust launchsize according to intra-kernel batchsize */ work_size = ((stack_size + bs - 1) / bs) * config->wgsize[kernel_idx]; /* calling clSetKernelArg/clEnqueueNDRangeKernel must be consistent */ ACC_OPENCL_CHECK(result, c_dbcsr_acc_opencl_set_kernel_ptr(config->kernel[kernel_idx], 0, info_cdata.memory), "set C-matrix argument of SMM-kernel"); ACC_OPENCL_CHECK(result, c_dbcsr_acc_opencl_set_kernel_ptr(config->kernel[kernel_idx], 1, info_adata.memory), "set A-matrix argument of SMM-kernel"); ACC_OPENCL_CHECK(result, c_dbcsr_acc_opencl_set_kernel_ptr(config->kernel[kernel_idx], 2, info_bdata.memory), "set B-matrix argument of SMM-kernel"); ACC_OPENCL_CHECK(result, c_dbcsr_acc_opencl_set_kernel_ptr(config->kernel[kernel_idx], 3, info_stack.memory), "set batch-list argument of SMM-kernel"); ACC_OPENCL_CHECK(result, clSetKernelArg(config->kernel[kernel_idx], 4, sizeof(int), ¶m_format), "set batch-format argument of SMM-kernel"); if (0 == kernel_idx) { assert(bs <= config->bs); ACC_OPENCL_CHECK(result, clSetKernelArg(config->kernel[kernel_idx], 5, sizeof(int), &stack_size), "set stacksize argument of SMM-kernel"); ACC_OPENCL_CHECK( result, clSetKernelArg(config->kernel[kernel_idx], 6, sizeof(int), &bs), "set minibatch argument of SMM-kernel"); } ACC_OPENCL_CHECK(result, clEnqueueNDRangeKernel(str->queue, config->kernel[kernel_idx], 1 /*work_dim*/, NULL /*offset*/, &work_size, config->wgsize + kernel_idx, 0, NULL, event), "launch SMM-kernel"); /* eventually update performance counters inside of locked region */ if ((3 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) && 0 == param_format && EXIT_SUCCESS == result) { LIBXSMM_STDIO_ACQUIRE(); fprintf(stderr, "INFO ACC/LIBSMM: SMM-kernel "); opencl_libsmm_write_smm_params( stderr, 1 /*only_key*/, &key, NULL /*config*/, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); fprintf(stderr, "="); opencl_libsmm_write_smm_params(stderr, 1 /*only_key*/, &key, config, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); fprintf(stderr, " ss=%i\n", stack_size); LIBXSMM_STDIO_RELEASE(); } } ACC_OPENCL_ATOMIC_RELEASE(lock); } } else if (0 < stack_size) { /* inhomogeneous, large kernel, or unsupported datatype */ return -1; /* TODO: document result code to trigger host-fallback */ } return result; } int libsmm_acc_process(const int* host_param_stack, const int* dev_param_stack, int stack_size, libsmm_acc_data_t datatype, const void* dev_a_data, const void* dev_b_data, void* dev_c_data, int m_max, int n_max, int k_max, int max_kernel_dim, c_dbcsr_acc_bool_t def_mnk, void* stream, void* c_stream) { int result = EXIT_SUCCESS; # if defined(OPENCL_LIBSMM_PFORMAT) && (0 < OPENCL_LIBSMM_PFORMAT) assert(LIBXSMM_MAX(LIBXSMM_MAX(m_max, n_max), k_max) < (1 << (OPENCL_LIBSMM_PFORMAT - 1))); if (dbcsr_type_real_8 == datatype && 0 != def_mnk && NULL != opencl_libsmm_acc_dbm_launch_fn) { result = opencl_libsmm_acc_dbm_launch_fn(stream, 1.0 /*alpha*/, stack_size, m_max | (n_max << OPENCL_LIBSMM_PFORMAT) | (k_max << (OPENCL_LIBSMM_PFORMAT * 2)), host_param_stack, dev_param_stack, (const double*)dev_a_data, (const double*)dev_b_data, (double*)dev_c_data); } else # endif { result = opencl_libsmm_acc_process(host_param_stack, dev_param_stack, stack_size, datatype, dev_a_data, dev_b_data, dev_c_data, m_max, n_max, k_max, max_kernel_dim, def_mnk, stream, c_stream, 0 /*param_format*/, NULL /*event*/); } ACC_OPENCL_RETURN(result); } int c_calculate_norms(const double* mat, int nblks, const int* offsets, const int* nelems, float* norms, void* stream_ptr) { LIBXSMM_UNUSED(mat); LIBXSMM_UNUSED(nblks); LIBXSMM_UNUSED(offsets); LIBXSMM_UNUSED(nelems); LIBXSMM_UNUSED(norms); LIBXSMM_UNUSED(stream_ptr); return -1; } # if defined(__cplusplus) } # endif #endif /*__OPENCL*/ ================================================ FILE: src/acc/opencl/smm/opencl_libsmm.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #ifndef OPENCL_LIBSMM_H #define OPENCL_LIBSMM_H #include "../../acc_libsmm.h" #include "../acc_opencl.h" /* Inplace-transpose by default (corresponding environment variable exists also) */ #if !defined(OPENCL_LIBSMM_TRANS_INPLACE) && 0 # define OPENCL_LIBSMM_TRANS_INPLACE #endif #if !defined(OPENCL_LIBSMM_F32_OFF) && defined(__DBCSR_ACC) && 0 # define OPENCL_LIBSMM_F32_OFF #endif #if !defined(OPENCL_LIBSMM_F32) && !defined(OPENCL_LIBSMM_F32_OFF) # define OPENCL_LIBSMM_F32 #endif #if !defined(OPENCL_LIBSMM_F64) && !defined(OPENCL_LIBSMM_F64_OFF) # define OPENCL_LIBSMM_F64 #endif #if !defined(OPENCL_LIBSMM_PFORMAT) && 1 # define OPENCL_LIBSMM_PFORMAT 8 #endif #if defined(__cplusplus) extern "C" { #endif /** Type for querying transpose kernel configuration. */ typedef struct opencl_libsmm_transkey_t { libsmm_acc_data_t type; /* must be the 1st data member */ int m, n; } opencl_libsmm_transkey_t; /** Type for transpose kernel configuration. */ typedef struct opencl_libsmm_trans_t { cl_kernel kernel; /* must be the 1st data member */ size_t wgsize; } opencl_libsmm_trans_t; /** Type for querying SMM-kernel configuration. */ typedef struct opencl_libsmm_smmkey_t { libsmm_acc_data_t type; /* must be the 1st data member */ int m, n, k; /* device matching configuration (parameters) */ unsigned int devuid; } opencl_libsmm_smmkey_t; /** Type for SMM-kernel configuration. */ typedef struct opencl_libsmm_smm_t { cl_kernel kernel[2]; /* must be the 1st data member */ size_t wgsize[2]; double gflops; /* (pseudo-)parameters (either pretuned or determined) */ int s, bs, bm, bn, bk, ws, wg, lu, nz, al, tb, tc, ap, aa, ab, ac, flags; } opencl_libsmm_smm_t; /** Type to collect statistics about tuned SMM-kernels */ typedef struct opencl_libsmm_perfest_t { double gf_ai_sratio_max, gf_ai_sratio_sumlog, gf_ai_sratio_kahan; double gf_ai_dratio_max, gf_ai_dratio_sumlog, gf_ai_dratio_kahan; size_t scount, dcount; } opencl_libsmm_perfest_t; /** Returns environment variable's value for given domain and key. */ const char* opencl_libsmm_getenv(const char domain[], const char key[]); /** * TRANS-kernel: write key and tunables into a (file-)stream. * If config=NULL, key/parameter names are written. The arguments * delim, begin, and close are optional as well (can be NULL). * With only the key being written the config still controls * if values or names are written. * Returns the number of characters written (negative if error). */ int opencl_libsmm_write_trans_params(FILE* stream, int only_key, const opencl_libsmm_transkey_t* key, const opencl_libsmm_trans_t* config, const char* delim, const char* begin, const char* close); /** * SMM-kernel: write key and tunables into a (file-)stream. * The environment variable OPENCL_LIBSMM_SMM_PARAMS="" * reproduces a configuration. If config=NULL, key/parameter * names are written. The arguments delim, begin, and close * are optional as well (can be NULL). * With only the key being written the config still controls * if values or names are written. * Returns the number of characters written (negative if error). */ int opencl_libsmm_write_smm_params(FILE* stream, int only_key, const opencl_libsmm_smmkey_t* key, const opencl_libsmm_smm_t* config, const char* delim, const char* begin, const char* close); /** Tokenize parambuf and initialize key/value pair. */ int opencl_libsmm_read_smm_params(char* parambuf, opencl_libsmm_smmkey_t* key, opencl_libsmm_smm_t* value, opencl_libsmm_perfest_t* perfest, char* device, int* key_ok); c_dbcsr_acc_bool_t libsmm_acc_process_suitable( c_dbcsr_acc_bool_t def_mnk, libsmm_acc_data_t datatype, int stack_size, int m_max, int n_max, int k_max, int max_kernel_dim); #if defined(OPENCL_LIBSMM_PFORMAT) && (0 < OPENCL_LIBSMM_PFORMAT) typedef int (*opencl_libsmm_acc_dbm_launch_fn_t)(void* stream, double alpha, int ntasks, int param_format, const int* params_host, const int* params, const double* pack_a_data, const double* pack_b_data, double* shard_c_data); /** Enables DBM-kernel for LIBSMM (revsere reuse). */ void opencl_libsmm_acc_set_dbm_launch_fn(opencl_libsmm_acc_dbm_launch_fn_t launch_fn); /** Backend-specific variant of libsmm_acc_process, which allows to easier reuse LIBSMM kernels. */ int opencl_libsmm_acc_process(const int* host_param_stack, const int* dev_param_stack, int stack_size, libsmm_acc_data_t datatype, const void* dev_a_data, const void* dev_b_data, void* dev_c_data, int m_max, int n_max, int k_max, int max_kernel_dim, c_dbcsr_acc_bool_t def_mnk, void* stream, void* c_stream, int param_format, cl_event* event); #endif #if defined(__cplusplus) } #endif #endif /*OPENCL_LIBSMM_H*/ ================================================ FILE: src/acc/opencl/smm/opencl_test.sh ================================================ #!/usr/bin/env bash #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: BSD-3-Clause # #################################################################################################### HERE="$(cd "$(dirname "$0")" && pwd -P)" TEST=acc_bench EXE=${HERE}/../../${TEST} if [ ! -e "$1" ]; then >&2 echo "USAGE: $0 logfile" exit 1 fi if [ ! -e "${EXE}" ]; then >&2 echo "ERROR: please build ${TEST}!" exit 1 fi sed -n "s/FAILED\[..*\] \(..*\): \(..*\)/\1 \2/p" "$1" | while read -r LINE; do read -r MNK KEYVALS <<<"${LINE}" EXPORT="" for KEYVAL in ${KEYVALS}; do EXPORT="${EXPORT} OPENCL_LIBSMM_SMM_${KEYVAL}" done if [ "${EXPORT}" ]; then echo "${MNK}: ${KEYVALS}" eval "${EXPORT} ${EXE} ${MNK} 2>&1" | sed "s/^/ /" fi done ================================================ FILE: src/acc/opencl/smm/params/README.md ================================================ # Tuned Parameters The OpenCL based implementation of LIBSMM supports default kernel-parameters, i.e., kernels can be successfuly generated for every requested multiplication/matrix shape (M, N, K) within the definition of a "Small Matrix Multiplication" (maximum M, N, and K). Tuned parameters targeting different devices can co-exist and can be embeded into the same executable, i.e., the executable does not depend on a particular build-path or location of parameter-files. Parameters are selected by matching against a device-ID with fallback to the "best-matching" parameters. The device-ID can be based on a vendor-specific function to identify a certain device or is generated from device's name as exposed by the OpenCL API. Parameters can be loaded from a CSV-file at runtime (`OPENCL_LIBSMM_SMM_PARAMS` environment variable) and thereby disable matching devices, i.e., parameters loaded this way will take precedence. ================================================ FILE: src/acc/opencl/smm/params/tune_multiply_A100.csv ================================================ DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC NVIDIA A100 80GB PCIe [0x1f79];3;2;2;2;30000;0;9;2;1;2;0;1;-1;0;0;0;1;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;3;3;3;30000;0;9;3;1;3;1;-1;-2;0;0;0;1;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;4;4;30000;0;9;1;1;2;1;-1;-2;0;1;0;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;4;5;30000;0;6;1;1;4;0;1;-1;1;0;0;1;1;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;4;7;30000;0;7;4;1;2;1;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;4;9;30000;0;5;4;1;2;1;-1;0;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;4;10;30000;0;6;4;1;4;0;0;-1;1;1;1;1;0;1;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;4;13;30000;0;4;1;1;4;1;-1;0;0;0;0;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;4;15;30000;0;14;4;1;2;0;-2;-1;1;0;1;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;4;17;30000;0;5;4;1;4;0;-2;-1;1;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;4;25;30000;0;14;4;1;2;0;0;1;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;4;26;30000;0;14;4;1;3;0;-2;-1;1;0;1;1;1;1;0;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;4;28;30000;0;6;4;1;2;0;-1;-1;0;1;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;4;32;30000;0;3;4;1;4;0;1;-1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;5;4;30000;0;12;4;1;4;1;1;-1;0;0;0;1;0;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;5;5;30000;0;9;1;1;1;0;-1;1;1;1;0;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;5;7;30000;0;6;4;1;2;1;1;0;0;1;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;5;9;30000;0;6;4;1;2;1;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;5;13;30000;0;4;4;1;4;0;-1;-2;1;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;5;17;30000;0;5;4;1;2;0;1;-1;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;5;25;30000;0;6;4;1;3;0;-1;-1;0;0;1;0;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;5;32;30000;0;2;1;1;2;1;-2;1;0;0;0;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;7;4;30000;0;24;4;1;3;1;0;0;0;0;0;1;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;7;5;30000;0;14;4;1;2;1;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;7;7;30000;0;10;4;1;1;0;-1;-1;0;1;1;1;1;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;7;9;30000;0;6;4;1;3;0;-2;0;0;1;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;7;13;30000;0;4;4;1;3;0;1;-2;1;0;0;1;0;1;0;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;9;4;30000;0;15;4;1;4;0;0;-2;0;0;0;1;1;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;9;5;30000;0;10;4;1;2;1;0;-1;0;1;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;9;7;30000;0;14;4;1;4;0;0;-1;0;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;9;9;30000;0;10;4;1;4;0;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;9;13;30000;0;5;4;1;4;0;0;0;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;10;4;30000;0;24;4;1;4;1;-2;-1;0;1;0;1;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;10;10;30000;0;14;4;1;4;1;0;0;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;13;4;30000;0;12;2;1;3;0;1;0;0;1;0;1;0;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;13;5;30000;0;16;2;2;4;0;-2;-1;0;1;1;1;0;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;13;7;30000;0;14;4;1;1;0;2;0;0;0;0;1;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;13;9;30000;0;7;4;1;3;0;1;-2;1;1;0;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;13;13;30000;0;10;4;1;3;0;-2;-2;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;13;17;30000;0;10;4;1;2;0;-2;1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;13;32;30000;0;15;4;1;4;0;-1;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;15;4;30000;0;20;4;1;1;0;0;0;0;0;1;1;0;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;17;4;30000;0;22;4;1;2;0;-1;-1;1;0;0;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;17;5;30000;0;12;4;1;3;0;1;-2;1;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;17;13;30000;0;10;4;1;4;0;0;-2;0;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;17;17;30000;0;10;4;1;3;0;-1;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;17;32;30000;0;15;4;1;3;0;1;0;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;25;4;30000;0;23;4;1;1;0;0;0;0;0;0;1;1;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;25;5;30000;0;21;4;1;2;0;0;0;0;0;1;1;0;2;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;26;4;30000;0;22;4;1;1;0;-2;0;1;0;1;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;28;4;30000;0;18;4;1;1;0;-2;0;0;1;1;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;32;4;30000;0;19;4;1;1;0;0;-2;1;0;0;1;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;32;5;30000;0;19;4;1;2;1;1;-2;0;1;0;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;32;13;30000;0;12;4;1;3;0;1;-1;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;32;17;30000;0;13;4;1;3;0;1;1;0;0;0;1;1;1;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;4;32;32;30000;0;25;4;1;4;0;1;-1;0;1;0;1;1;1;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;4;4;30000;0;9;1;1;5;1;0;-1;0;1;1;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;4;5;30000;0;12;1;1;3;1;0;-2;0;1;0;1;0;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;4;7;30000;0;15;1;1;1;0;-2;0;0;0;0;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;4;9;30000;0;12;1;1;5;1;0;0;0;0;0;1;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;4;13;30000;0;10;1;1;2;0;0;-1;0;1;0;0;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;4;17;30000;0;4;1;1;1;1;0;-2;0;1;0;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;4;25;30000;0;5;5;1;4;0;1;-2;0;0;0;0;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;4;32;30000;0;2;1;1;2;1;0;0;0;0;0;1;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;5;4;30000;0;10;1;1;2;1;0;0;1;1;0;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;5;5;30000;0;18;5;1;2;1;1;-1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;5;7;30000;0;7;5;1;5;1;-1;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;5;9;30000;0;25;5;1;5;0;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;5;13;30000;0;10;1;1;2;1;0;-1;0;0;0;1;0;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;5;17;30000;0;4;1;1;3;1;0;1;0;0;0;1;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;5;32;30000;0;5;5;1;2;0;-2;-1;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;7;4;30000;0;12;5;1;2;1;1;0;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;7;5;30000;0;14;5;1;2;1;1;-2;0;1;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;7;7;30000;0;14;5;1;4;0;-2;0;1;0;1;1;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;7;9;30000;0;16;5;1;4;0;-1;-1;1;0;1;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;7;13;30000;0;12;5;1;5;0;-1;-2;1;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;9;4;30000;0;18;5;1;4;1;0;-2;0;0;0;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;9;5;30000;0;24;5;1;3;0;1;-2;0;0;1;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;9;7;30000;0;15;5;1;2;0;1;-1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;9;9;30000;0;12;5;1;1;0;1;0;1;1;1;1;0;0;0;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;13;4;30000;0;12;5;1;4;0;0;0;0;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;13;5;30000;0;14;5;1;3;0;-1;0;1;0;1;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;13;7;30000;0;24;5;1;2;0;1;0;1;0;0;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;13;13;30000;0;10;5;1;2;0;-1;0;0;0;0;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;13;17;30000;0;10;5;1;4;0;-2;-1;1;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;13;32;30000;0;15;5;1;4;0;-2;-1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;17;4;30000;0;22;5;1;5;0;-1;0;0;0;0;1;1;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;17;5;30000;0;12;5;1;4;0;-2;0;1;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;17;13;30000;0;10;5;1;3;0;0;-1;1;0;1;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;17;17;30000;0;10;5;1;5;0;1;-1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;17;32;30000;0;15;5;1;4;0;1;0;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;25;4;30000;0;29;5;1;1;0;1;-2;0;0;0;1;1;0;0;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;32;4;30000;0;24;5;1;5;0;-2;-1;1;0;1;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;32;5;30000;0;20;5;1;5;0;-1;-1;0;0;1;1;1;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;32;13;30000;0;13;5;1;5;0;1;-1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;32;17;30000;0;10;5;1;2;0;1;0;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;5;32;32;30000;0;15;5;1;2;0;-1;0;1;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;6;6;6;30000;0;10;6;1;2;1;-2;0;0;1;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;6;6;7;30000;0;19;6;1;6;0;-2;-1;1;1;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;6;6;8;30000;0;10;6;1;2;0;1;1;0;0;1;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;6;7;6;30000;0;28;6;1;5;0;-2;0;1;0;0;1;1;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;6;7;7;30000;0;11;6;1;2;0;1;-1;1;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;6;7;8;30000;0;14;6;1;4;0;-1;0;1;0;0;1;0;1;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;6;8;6;30000;0;14;6;1;3;0;0;0;0;0;0;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;6;8;7;30000;0;12;6;1;4;0;-1;-1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;6;8;8;30000;0;26;6;1;4;0;0;-1;0;1;1;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;4;4;30000;0;9;1;1;3;1;-2;0;1;0;0;1;0;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;4;5;30000;0;10;1;1;2;0;-2;-2;0;0;1;1;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;4;7;30000;0;9;1;1;5;0;-1;-1;0;0;0;1;0;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;4;9;30000;0;6;1;1;5;0;0;-2;0;0;0;1;0;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;4;13;30000;0;19;7;1;2;0;-1;-2;0;1;1;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;5;4;30000;0;16;7;1;3;1;1;0;0;1;0;1;0;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;5;5;30000;0;10;7;1;2;1;-1;1;0;0;0;1;0;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;5;7;30000;0;14;7;1;2;0;-2;0;0;0;1;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;5;9;30000;0;10;7;1;4;0;1;0;0;1;1;1;0;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;5;13;30000;0;10;1;2;3;0;1;-2;1;0;1;1;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;6;6;30000;0;14;7;1;7;0;0;-1;0;0;0;1;1;0;0;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;6;7;30000;0;14;2;1;3;0;1;-2;1;0;1;1;1;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;6;8;30000;0;20;7;1;2;0;0;-1;0;1;1;1;1;0;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;7;4;30000;0;24;7;1;2;1;0;-2;0;1;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;7;5;30000;0;13;7;1;6;0;-2;0;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;7;6;30000;0;35;7;1;3;0;0;1;1;0;1;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;7;7;30000;0;18;7;1;2;0;2;0;0;0;1;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;7;8;30000;0;21;7;1;3;0;-2;1;0;0;0;1;0;1;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;7;9;30000;0;7;7;1;4;0;-2;-1;0;0;1;1;0;1;1;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;7;13;30000;0;20;7;1;2;0;1;0;1;0;1;1;1;1;1;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;8;6;30000;0;19;7;1;3;0;1;-1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;8;7;30000;0;12;7;1;4;0;0;-2;0;1;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;8;8;30000;0;10;7;1;6;0;1;-1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;9;4;30000;0;16;7;1;2;0;-2;0;0;0;1;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;9;5;30000;0;13;7;1;3;0;0;-2;1;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;9;7;30000;0;12;7;1;4;0;0;0;0;0;0;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;13;4;30000;0;21;7;1;6;0;0;-2;0;0;1;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;13;5;30000;0;9;7;1;4;0;1;0;1;0;1;1;1;1;1;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;13;7;30000;0;22;7;1;2;0;0;0;1;0;1;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;7;13;13;30000;0;5;1;2;3;0;0;-2;1;1;1;1;0;2;0;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;8;6;6;30000;0;12;1;2;8;1;-1;0;0;0;0;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;8;6;7;30000;0;13;8;1;8;0;-2;-1;0;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;8;6;8;30000;0;18;8;1;8;0;1;1;0;0;0;1;0;0;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;8;7;6;30000;0;15;8;1;2;0;0;-1;0;1;0;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;8;7;7;30000;0;10;2;1;2;0;-2;0;0;0;0;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;8;7;8;30000;0;12;2;1;6;0;-1;-1;1;0;1;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;8;8;6;30000;0;18;8;1;2;0;-2;-1;1;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;8;8;7;30000;0;14;8;1;3;0;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;8;8;8;30000;0;12;8;1;5;0;0;-1;0;0;1;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;4;4;30000;0;14;9;1;4;1;-1;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;4;5;30000;0;14;9;1;4;1;1;0;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;4;7;30000;0;9;2;1;4;1;1;1;0;0;0;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;4;9;30000;0;9;1;2;8;1;0;-2;0;1;0;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;4;13;30000;0;10;9;1;2;0;1;0;0;0;1;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;5;4;30000;0;14;9;1;7;1;-2;-2;0;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;5;5;30000;0;12;2;1;3;1;0;0;0;0;0;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;5;7;30000;0;18;9;1;4;0;-2;-1;0;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;5;9;30000;0;14;2;1;3;0;0;-2;0;0;0;1;1;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;7;4;30000;0;18;9;1;3;0;-1;0;1;0;1;1;1;1;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;7;5;30000;0;18;9;1;3;0;0;-2;0;0;1;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;7;7;30000;0;10;9;1;3;0;1;-1;0;0;0;1;0;1;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;9;4;30000;0;24;9;1;7;0;-2;0;0;0;1;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;9;5;30000;0;15;9;1;2;0;0;-2;1;0;1;1;1;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;9;9;30000;0;14;9;1;9;0;1;-1;0;1;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;9;16;30000;0;10;9;1;6;0;1;-1;1;1;1;1;0;1;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;9;22;30000;0;10;9;1;2;0;-2;1;0;1;1;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;9;32;30000;0;12;9;1;3;0;-1;-1;0;1;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;13;4;30000;0;17;9;1;3;0;-1;0;1;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;16;9;30000;0;12;9;1;2;1;-1;-2;0;1;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;16;16;30000;0;2;1;8;8;0;-2;-1;0;0;0;0;0;2;1;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;16;22;30000;0;8;9;1;2;0;-1;0;0;1;0;1;1;1;1;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;22;9;30000;0;15;9;1;2;0;1;-2;1;0;0;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;22;16;30000;0;10;9;1;5;0;-2;-2;1;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;22;22;30000;0;10;9;1;5;0;-1;-1;1;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;22;32;30000;0;15;9;1;5;0;1;-2;1;1;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;32;9;30000;0;13;9;1;4;0;1;-1;1;1;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;32;22;30000;0;12;9;1;7;0;-1;-2;1;1;1;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;9;32;32;30000;0;12;9;1;9;0;-1;-2;1;1;1;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;10;4;4;30000;0;12;1;2;4;0;-2;-1;0;0;0;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;10;4;10;30000;0;10;1;2;6;0;0;-2;0;0;1;1;1;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;10;10;4;30000;0;24;10;1;5;0;1;1;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;10;10;10;30000;0;3;10;1;3;0;-2;-1;1;0;0;1;1;1;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;4;4;30000;0;16;1;2;5;0;1;1;0;0;0;1;1;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;4;5;30000;0;9;13;1;9;0;-1;0;1;0;1;1;1;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;4;7;30000;0;10;2;1;10;1;1;0;0;0;0;1;0;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;4;9;30000;0;9;2;1;2;0;0;-1;1;0;1;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;4;13;30000;0;12;13;1;12;0;0;-2;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;4;17;30000;0;10;13;1;1;0;-1;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;4;32;30000;0;15;13;1;2;0;-1;-1;1;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;5;4;30000;0;9;1;3;13;1;-1;-1;0;1;0;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;5;5;30000;0;14;3;1;8;1;0;1;0;0;0;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;5;7;30000;0;4;13;1;12;0;1;-1;1;1;1;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;5;13;30000;0;10;3;1;9;0;-1;-1;0;0;1;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;5;17;30000;0;14;2;2;5;0;-1;0;0;1;0;1;0;0;1;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;5;32;30000;0;40;2;2;7;0;-1;0;0;1;0;1;0;0;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;7;4;30000;0;14;13;1;10;0;1;-2;0;0;1;1;0;1;1;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;7;5;30000;0;18;13;1;4;0;-1;0;1;1;1;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;7;7;30000;0;17;13;1;3;0;-2;1;1;1;1;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;7;13;30000;0;10;1;4;4;0;-1;-2;1;0;1;1;0;2;1;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;9;4;30000;0;18;13;1;12;0;-1;0;1;0;1;1;1;1;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;13;4;30000;0;18;13;1;12;0;0;-2;1;0;1;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;13;5;30000;0;24;13;1;3;0;0;0;1;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;13;7;30000;0;20;13;1;8;0;0;0;1;0;1;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;13;13;30000;0;9;13;1;4;0;-2;1;1;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;13;17;30000;0;7;13;1;12;0;1;-1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;13;32;30000;0;9;13;1;13;0;0;0;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;17;4;30000;0;18;13;1;11;0;-2;-1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;17;5;30000;0;19;13;1;13;0;-1;-1;1;0;0;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;17;13;30000;0;15;13;1;9;0;-2;0;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;17;17;30000;0;15;13;1;5;0;1;-2;0;0;1;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;17;32;30000;0;26;13;1;11;0;-2;0;1;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;32;4;30000;0;26;13;1;8;0;-2;-1;1;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;32;5;30000;0;18;13;1;4;0;-1;0;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;32;13;30000;0;20;13;1;13;0;1;-1;0;0;0;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;32;17;30000;0;26;13;1;9;0;-1;-1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;13;32;32;30000;0;12;13;1;13;1;-1;0;1;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;15;4;4;30000;0;9;2;1;2;1;-1;-2;0;0;0;1;0;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;15;15;15;30000;0;15;15;1;2;0;-1;0;1;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;16;9;9;30000;0;10;16;1;8;0;0;0;1;1;1;1;0;1;1;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;16;9;16;30000;0;10;16;1;4;0;0;0;0;0;0;1;0;1;0;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;16;9;22;30000;0;20;16;1;7;0;0;-1;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;16;16;9;30000;0;15;16;1;2;0;0;0;1;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;16;16;16;30000;0;12;16;1;2;0;-1;-1;1;0;0;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;16;16;22;30000;0;11;16;1;14;0;1;-1;1;1;0;1;1;1;0;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;16;22;9;30000;0;13;16;1;14;0;1;0;1;0;0;1;1;1;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;16;22;16;30000;0;23;16;1;3;0;-2;-2;1;0;0;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;16;22;22;30000;0;31;16;1;7;0;-1;-1;1;0;1;1;1;1;0;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;4;4;30000;0;10;17;1;15;0;-2;0;1;0;0;1;0;0;0;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;4;5;30000;0;9;2;2;9;0;-1;-1;1;1;0;1;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;4;13;30000;0;9;3;1;15;0;-2;-1;0;1;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;4;17;30000;0;10;17;1;3;0;1;1;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;4;32;30000;0;7;17;1;1;0;1;-2;1;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;5;4;30000;0;14;3;1;3;0;0;-2;0;0;0;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;5;5;30000;0;24;17;1;11;0;-1;0;0;0;0;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;5;13;30000;0;10;1;5;13;0;-1;-2;0;1;1;1;1;2;1;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;5;17;30000;0;10;17;1;17;0;-1;0;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;5;32;30000;0;4;17;1;17;0;-2;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;13;4;30000;0;19;9;1;5;0;0;-1;0;0;0;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;13;5;30000;0;14;17;1;16;0;-2;-2;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;13;13;30000;0;12;17;1;17;0;0;0;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;13;17;30000;0;8;17;1;1;0;-2;-2;1;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;13;32;30000;0;26;17;1;4;0;-1;-2;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;17;4;30000;0;24;17;1;14;0;0;-2;0;1;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;17;5;30000;0;18;17;1;15;0;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;17;13;30000;0;15;17;1;9;0;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;17;17;30000;0;24;17;1;17;0;0;0;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;17;32;30000;0;7;17;1;16;0;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;32;4;30000;0;18;17;1;6;0;-2;-2;1;1;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;32;5;30000;0;18;17;1;17;0;-1;-2;1;1;0;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;32;13;30000;0;20;17;1;10;0;-1;0;1;0;1;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;32;17;30000;0;20;17;1;14;0;1;0;0;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;17;32;32;30000;0;24;17;1;2;1;0;-2;1;1;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;20;20;20;30000;0;24;20;1;17;0;1;-1;0;0;1;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;22;9;9;30000;0;18;22;1;11;0;1;-1;0;1;1;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;22;9;16;30000;0;18;22;1;6;0;-1;-1;1;1;1;1;0;1;1;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;22;9;22;30000;0;7;22;1;3;0;-1;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;22;9;32;30000;0;1;22;1;14;0;-2;-2;1;1;0;1;0;2;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;22;16;9;30000;0;13;22;1;10;0;1;0;0;1;1;1;1;1;1;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;22;16;16;30000;0;7;22;1;3;0;1;-1;1;1;0;1;0;1;0;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;22;16;22;30000;0;24;22;1;9;0;1;0;1;1;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;22;22;9;30000;0;24;22;1;5;0;0;0;1;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;22;22;16;30000;0;15;22;1;15;0;-1;0;1;0;0;1;1;1;0;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;22;22;22;30000;0;24;22;1;22;0;0;-2;1;0;1;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;22;22;32;30000;0;24;22;1;13;1;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;22;32;9;30000;0;15;22;1;9;0;-1;1;1;1;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;22;32;22;30000;0;24;22;1;19;0;0;-2;1;0;1;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;22;32;32;30000;0;24;22;1;15;1;-2;-2;0;1;1;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;23;23;23;30000;0;24;23;1;15;1;0;-2;0;0;0;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;24;24;24;30000;0;18;24;1;17;1;-1;2;1;1;0;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;25;4;4;30000;0;19;25;1;10;0;1;1;0;0;1;1;0;1;1;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;25;4;5;30000;0;1;25;1;15;0;0;1;0;1;0;0;1;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;25;5;4;30000;0;5;25;1;14;0;-2;0;0;1;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;25;25;25;30000;0;24;25;1;13;1;1;-2;1;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;26;4;4;30000;0;18;26;1;3;0;0;-2;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;28;4;4;30000;0;14;28;1;16;1;1;4;0;0;0;1;0;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;28;28;28;30000;0;25;28;1;3;1;1;-2;1;0;1;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;30;30;30;30000;0;41;30;1;16;1;-2;-2;1;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;4;4;30000;0;19;2;2;32;0;-1;-1;0;1;0;1;0;0;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;4;5;30000;0;10;1;4;26;0;1;0;0;0;0;1;1;2;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;4;13;30000;0;9;32;1;5;0;-2;0;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;4;17;30000;0;13;32;1;22;0;-2;0;1;0;1;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;4;32;30000;0;24;4;1;6;0;-2;1;1;0;1;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;5;4;30000;0;34;2;2;13;0;0;0;1;1;1;1;0;0;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;5;5;30000;0;20;1;5;14;0;1;0;1;1;1;1;0;2;0;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;5;13;30000;0;10;1;5;19;0;-2;-1;0;0;1;1;1;0;1;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;5;17;30000;0;20;32;1;20;0;-1;1;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;5;32;30000;0;30;32;1;7;0;1;0;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;9;9;30000;0;24;3;5;26;0;-1;0;0;1;0;1;1;2;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;9;22;30000;0;25;3;6;23;0;-2;0;0;0;1;1;1;2;1;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;9;32;30000;0;11;5;1;4;0;0;-1;1;1;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;13;4;30000;0;18;32;1;30;0;0;-1;1;0;0;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;13;5;30000;0;13;1;13;32;0;0;1;0;1;0;1;1;0;1;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;13;13;30000;0;6;1;7;31;0;-1;-1;1;0;1;1;0;2;1;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;13;17;30000;0;8;32;1;25;0;-2;0;1;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;13;32;30000;0;35;32;1;4;1;-1;4;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;17;4;30000;0;24;32;1;13;0;1;1;0;0;1;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;17;5;30000;0;18;32;1;10;0;-1;-2;1;0;0;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;17;13;30000;0;25;32;1;27;0;-2;0;1;0;1;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;17;17;30000;0;25;32;1;11;0;0;0;0;0;0;1;1;1;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;17;32;30000;0;8;32;1;32;1;0;0;1;0;1;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;22;9;30000;0;28;32;1;11;0;-1;1;1;1;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;22;22;30000;0;36;32;1;7;1;-1;-1;0;0;0;1;1;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;22;32;30000;0;28;32;1;31;1;-2;4;1;0;1;1;1;1;1;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;32;4;30000;0;38;32;1;17;0;1;0;1;0;1;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;32;5;30000;0;26;32;1;22;0;1;-2;1;0;1;1;0;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;32;9;30000;0;41;32;1;2;0;0;0;1;0;1;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;32;13;30000;0;40;32;1;6;1;0;-2;1;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;32;17;30000;0;24;32;1;16;1;-2;0;1;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;32;22;30000;0;24;32;1;8;1;0;-2;1;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;32;32;32;30000;0;24;32;1;30;1;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;35;35;35;30000;0;10;35;1;35;1;0;0;1;0;0;1;1;1;2;1;0 NVIDIA A100 80GB PCIe [0x1f79];3;36;36;36;30000;0;41;36;1;9;1;-1;4;1;0;1;1;1;1;0;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;40;40;40;30000;0;13;40;1;40;1;1;0;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;45;45;45;30000;0;35;45;1;39;45;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA A100 80GB PCIe [0x1f79];3;64;64;64;30000;0;10;64;1;9;64;1;2;0;1;0;1;0;1;0;0;0 ================================================ FILE: src/acc/opencl/smm/params/tune_multiply_BMG.csv ================================================ DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC Intel(R) Graphics [0xe223];3;5;5;5;30000;0;24;5;1;1;5;1;0;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;5;5;13;30000;0;30;5;1;1;1;1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;5;5;16;30000;0;15;5;1;1;5;1;-2;0;0;0;1;0;2;2;0;0 Intel(R) Graphics [0xe223];3;5;5;24;30000;0;17;5;1;1;1;0;1;0;0;0;1;0;2;2;0;0 Intel(R) Graphics [0xe223];3;5;5;26;30000;0;15;5;1;1;1;0;-1;0;0;0;1;0;2;0;0;0 Intel(R) Graphics [0xe223];3;5;13;5;30000;0;30;5;1;1;1;-1;0;0;0;0;1;0;0;2;0;0 Intel(R) Graphics [0xe223];3;5;13;13;30000;0;40;5;1;1;13;-1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Graphics [0xe223];3;5;13;16;30000;0;30;5;1;1;13;-2;-2;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;5;13;24;30000;0;31;5;1;1;13;0;1;0;0;0;1;0;2;2;0;1 Intel(R) Graphics [0xe223];3;5;13;26;30000;0;24;5;1;4;1;-1;-1;0;0;0;1;0;1;0;0;0 Intel(R) Graphics [0xe223];3;5;16;5;30000;0;41;5;1;1;1;0;-1;0;0;0;1;0;0;2;0;0 Intel(R) Graphics [0xe223];3;5;16;13;30000;0;31;5;1;1;16;0;0;0;0;0;1;0;0;2;0;1 Intel(R) Graphics [0xe223];3;5;16;16;30000;0;30;5;1;1;16;0;-1;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;5;16;24;30000;0;24;5;1;1;16;0;0;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;5;16;26;30000;0;46;5;1;1;16;-2;-1;0;0;0;1;0;2;2;0;1 Intel(R) Graphics [0xe223];3;5;24;5;30000;0;30;5;1;1;1;-1;-2;0;0;0;1;0;2;2;0;0 Intel(R) Graphics [0xe223];3;5;24;13;30000;0;30;5;1;1;1;-2;-1;0;0;0;1;0;2;0;0;0 Intel(R) Graphics [0xe223];3;5;24;16;30000;0;30;5;1;1;24;-1;1;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;5;24;24;30000;0;40;5;1;1;24;0;1;0;0;0;1;0;0;2;0;1 Intel(R) Graphics [0xe223];3;5;24;26;30000;0;42;5;1;1;24;-1;1;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;5;26;5;30000;0;30;5;1;1;1;-1;-2;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;5;26;13;30000;0;30;5;1;1;26;1;-2;0;0;0;1;0;0;2;0;1 Intel(R) Graphics [0xe223];3;5;26;16;30000;0;24;5;1;1;26;-2;-2;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;5;26;24;30000;0;30;5;1;4;26;1;1;0;0;0;1;0;1;0;0;1 Intel(R) Graphics [0xe223];3;5;26;26;30000;0;30;5;1;1;26;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Graphics [0xe223];3;6;6;6;30000;0;30;6;1;1;1;-2;0;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;9;9;9;30000;0;30;9;1;1;1;0;0;0;0;0;1;0;2;0;0;0 Intel(R) Graphics [0xe223];3;9;9;16;30000;0;15;9;1;1;9;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Graphics [0xe223];3;9;9;22;30000;0;40;9;1;1;9;-2;1;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;9;16;9;30000;0;59;9;1;1;16;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Graphics [0xe223];3;9;16;16;30000;0;30;9;1;7;16;-1;-1;0;0;0;1;0;0;1;0;1 Intel(R) Graphics [0xe223];3;9;16;22;30000;0;30;9;1;1;1;-2;-1;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;9;22;9;30000;0;30;9;1;1;22;-1;-2;0;0;0;1;0;0;2;0;1 Intel(R) Graphics [0xe223];3;9;22;16;30000;0;30;9;1;1;22;-1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Graphics [0xe223];3;9;22;22;30000;0;30;9;1;1;22;0;1;0;0;0;1;0;2;0;0;1 Intel(R) Graphics [0xe223];3;13;5;5;30000;0;30;13;1;12;13;1;2;0;0;0;1;0;1;1;0;1 Intel(R) Graphics [0xe223];3;13;5;13;30000;0;20;13;1;11;1;-1;2;0;0;0;1;0;1;0;0;0 Intel(R) Graphics [0xe223];3;13;5;16;30000;0;30;13;1;3;13;-1;2;0;0;0;1;0;1;1;0;1 Intel(R) Graphics [0xe223];3;13;5;24;30000;0;24;13;1;2;13;0;2;0;0;0;1;0;1;1;0;0 Intel(R) Graphics [0xe223];3;13;5;26;30000;0;24;13;1;13;13;0;2;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;13;13;5;30000;0;30;13;1;1;13;-2;1;0;0;0;1;0;0;2;0;0 Intel(R) Graphics [0xe223];3;13;13;13;30000;0;24;13;1;1;1;1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;13;13;16;30000;0;24;13;1;10;13;1;-1;0;0;0;1;0;1;0;0;0 Intel(R) Graphics [0xe223];3;13;13;24;30000;0;30;13;1;1;13;-2;1;0;0;0;1;0;0;0;0;1 Intel(R) Graphics [0xe223];3;13;13;26;30000;0;41;13;1;1;13;-1;1;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;13;16;5;30000;0;40;13;1;3;16;0;1;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;13;16;13;30000;0;30;13;1;12;16;1;1;0;0;0;1;0;2;1;0;0 Intel(R) Graphics [0xe223];3;13;16;16;30000;0;31;13;1;11;16;-2;-2;0;0;0;1;0;1;0;0;0 Intel(R) Graphics [0xe223];3;13;16;24;30000;0;31;13;1;7;16;0;0;0;0;0;1;0;1;0;0;0 Intel(R) Graphics [0xe223];3;13;16;26;30000;0;25;13;1;7;16;-1;-1;0;0;0;1;0;1;2;0;0 Intel(R) Graphics [0xe223];3;13;24;5;30000;0;40;13;1;1;24;-2;1;0;0;0;1;0;0;2;0;1 Intel(R) Graphics [0xe223];3;13;24;13;30000;0;30;13;1;7;24;1;0;0;0;0;1;0;1;0;0;1 Intel(R) Graphics [0xe223];3;13;24;16;30000;0;47;13;1;1;24;0;-2;0;0;0;1;0;0;1;0;0 Intel(R) Graphics [0xe223];3;13;24;24;30000;0;30;13;1;1;24;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Graphics [0xe223];3;13;24;26;30000;0;15;13;1;1;24;0;0;0;0;0;1;0;0;0;0;1 Intel(R) Graphics [0xe223];3;13;26;5;30000;0;30;13;1;1;26;0;0;0;0;0;1;0;0;2;0;1 Intel(R) Graphics [0xe223];3;13;26;13;30000;0;30;13;1;1;26;0;-1;0;0;0;1;0;2;2;0;1 Intel(R) Graphics [0xe223];3;13;26;16;30000;0;49;13;1;10;26;0;-2;0;0;0;1;0;2;1;0;0 Intel(R) Graphics [0xe223];3;13;26;24;30000;0;30;13;1;10;26;-2;0;0;0;0;1;0;1;0;0;1 Intel(R) Graphics [0xe223];3;13;26;26;30000;0;40;13;1;1;26;-1;1;0;0;0;1;0;2;0;0;1 Intel(R) Graphics [0xe223];3;14;14;14;30000;0;40;14;1;1;14;-1;-2;0;0;0;1;0;0;2;0;0 Intel(R) Graphics [0xe223];3;14;14;16;30000;0;40;14;1;1;14;-1;0;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;14;14;29;30000;0;30;14;1;1;14;-2;-1;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;14;16;14;30000;0;42;14;1;2;16;-1;0;0;0;0;1;0;1;0;0;1 Intel(R) Graphics [0xe223];3;14;16;16;30000;0;40;14;1;12;16;1;0;0;0;0;1;0;1;0;0;1 Intel(R) Graphics [0xe223];3;14;16;29;30000;0;15;14;1;1;16;-1;-2;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;14;29;14;30000;0;30;14;1;6;29;-1;1;0;0;0;1;0;1;2;0;1 Intel(R) Graphics [0xe223];3;14;29;16;30000;0;30;14;1;4;29;-2;0;0;0;0;1;0;1;2;0;1 Intel(R) Graphics [0xe223];3;14;29;29;30000;0;15;14;1;1;29;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Graphics [0xe223];3;16;5;5;30000;0;30;16;1;14;16;-1;2;0;0;0;1;0;0;2;0;0 Intel(R) Graphics [0xe223];3;16;5;13;30000;0;30;16;1;16;16;-2;2;0;0;0;1;0;1;0;0;1 Intel(R) Graphics [0xe223];3;16;5;16;30000;0;40;16;1;15;16;-1;2;0;0;0;1;0;1;2;0;1 Intel(R) Graphics [0xe223];3;16;5;24;30000;0;15;16;1;9;1;-2;2;0;0;0;1;0;0;1;0;0 Intel(R) Graphics [0xe223];3;16;5;26;30000;0;25;16;1;4;16;0;2;0;0;0;1;0;0;2;0;0 Intel(R) Graphics [0xe223];3;16;9;9;30000;0;30;16;1;10;16;0;-2;0;0;0;1;0;2;2;0;1 Intel(R) Graphics [0xe223];3;16;9;16;30000;0;30;16;1;10;16;-2;-2;0;0;0;1;0;1;0;0;1 Intel(R) Graphics [0xe223];3;16;9;22;30000;0;15;16;1;1;16;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Graphics [0xe223];3;16;13;5;30000;0;24;16;1;15;1;1;0;0;0;0;1;0;2;0;0;0 Intel(R) Graphics [0xe223];3;16;13;13;30000;0;24;16;1;8;16;-1;0;0;0;0;1;0;1;2;0;0 Intel(R) Graphics [0xe223];3;16;13;16;30000;0;17;16;1;5;16;0;1;0;0;0;1;0;0;1;0;0 Intel(R) Graphics [0xe223];3;16;13;24;30000;0;24;16;1;1;16;1;1;0;0;0;1;0;2;0;0;0 Intel(R) Graphics [0xe223];3;16;13;26;30000;0;60;16;1;12;16;-2;1;0;0;0;1;0;1;0;0;0 Intel(R) Graphics [0xe223];3;16;14;14;30000;0;31;16;1;1;16;-2;-2;0;0;0;1;0;0;2;0;1 Intel(R) Graphics [0xe223];3;16;14;16;30000;0;40;16;1;14;16;-1;0;0;0;0;1;0;1;0;0;1 Intel(R) Graphics [0xe223];3;16;14;29;30000;0;15;16;1;1;16;-2;0;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;16;16;5;30000;0;30;16;1;1;1;1;0;0;0;0;1;0;0;2;0;0 Intel(R) Graphics [0xe223];3;16;16;9;30000;0;30;16;1;1;16;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Graphics [0xe223];3;16;16;13;30000;0;30;16;1;12;16;-2;1;0;0;0;1;0;1;2;0;0 Intel(R) Graphics [0xe223];3;16;16;14;30000;0;40;16;1;1;16;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Graphics [0xe223];3;16;16;16;30000;0;15;16;1;1;16;-2;0;0;0;0;1;0;0;2;0;1 Intel(R) Graphics [0xe223];3;16;16;22;30000;0;15;16;1;1;1;-2;-2;0;0;0;1;0;0;2;0;1 Intel(R) Graphics [0xe223];3;16;16;24;30000;0;24;16;1;9;16;-2;0;0;0;0;1;0;1;2;0;0 Intel(R) Graphics [0xe223];3;16;16;26;30000;0;60;16;1;5;16;0;-1;0;0;0;1;0;1;0;0;0 Intel(R) Graphics [0xe223];3;16;16;29;30000;0;60;16;1;1;16;-2;0;0;0;0;1;0;0;2;0;0 Intel(R) Graphics [0xe223];3;16;16;55;30000;0;30;16;1;1;16;1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Graphics [0xe223];3;16;22;9;30000;0;59;16;1;5;22;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Graphics [0xe223];3;16;22;16;30000;0;40;16;1;14;22;1;-2;0;0;0;1;0;1;0;0;1 Intel(R) Graphics [0xe223];3;16;22;22;30000;0;15;16;1;1;22;0;1;0;0;0;1;0;0;0;0;1 Intel(R) Graphics [0xe223];3;23;23;23;30000;0;15;23;1;1;1;1;1;0;0;0;1;0;0;0;0;0 ================================================ FILE: src/acc/opencl/smm/params/tune_multiply_GH200.csv ================================================ DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC NVIDIA GH200 480GB [0x3528];3;1;1;1;30000;0;9;1;1;1;1;-2;-2;0;0;0;1;0;2;1;0;0 NVIDIA GH200 480GB [0x3528];3;2;2;2;30000;0;11;2;1;2;2;0;0;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;3;3;3;30000;0;12;3;1;2;3;1;0;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;4;4;30000;0;16;4;1;1;4;0;0;0;1;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;4;5;30000;0;11;4;1;2;4;-1;-1;0;1;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;4;7;30000;0;12;4;1;3;4;-2;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;4;9;30000;0;12;4;1;4;4;0;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;4;10;30000;0;5;4;1;4;4;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;4;13;30000;0;4;4;1;3;4;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;4;15;30000;0;4;4;1;3;4;0;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;4;17;30000;0;4;4;1;4;4;0;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;4;25;30000;0;19;4;1;3;4;-2;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;4;26;30000;0;3;4;1;2;4;0;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;4;28;30000;0;3;4;1;2;4;-1;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;4;32;30000;0;3;4;1;2;4;-2;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;5;4;30000;0;10;4;1;1;5;-2;-2;0;1;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;5;5;30000;0;11;4;1;3;5;1;-2;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;5;7;30000;0;13;4;1;4;5;1;-1;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;5;9;30000;0;13;4;1;2;5;1;-1;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;5;13;30000;0;5;4;1;2;5;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;5;17;30000;0;4;4;1;4;5;-1;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;5;25;30000;0;12;4;1;2;5;-1;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;5;32;30000;0;3;4;1;4;5;-1;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;7;4;30000;0;10;4;1;2;7;-1;0;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;7;5;30000;0;11;4;1;3;7;0;0;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;7;7;30000;0;13;4;1;2;7;0;0;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;7;9;30000;0;5;4;1;4;7;1;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;7;13;30000;0;4;4;1;4;7;-2;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;9;4;30000;0;11;4;1;2;9;-2;-1;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;9;5;30000;0;11;4;1;2;9;-2;1;0;1;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;9;7;30000;0;13;4;1;4;9;0;0;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;9;9;30000;0;10;4;1;2;9;-2;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;9;13;30000;0;5;4;1;4;9;-2;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;10;4;30000;0;12;4;1;4;10;0;-1;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;10;10;30000;0;10;4;1;4;10;1;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;13;4;30000;0;11;4;1;2;13;-1;-1;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;13;5;30000;0;11;4;1;2;13;-2;0;0;1;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;13;7;30000;0;15;4;1;1;1;0;0;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;13;9;30000;0;10;4;1;2;1;0;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;13;13;30000;0;12;4;1;4;1;0;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;13;17;30000;0;10;4;1;4;1;-2;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;13;32;30000;0;12;4;1;2;1;-1;1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;15;4;30000;0;11;4;1;2;1;-1;0;0;1;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;17;4;30000;0;16;4;1;3;1;1;-1;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;17;5;30000;0;13;4;1;2;1;0;-1;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;17;13;30000;0;14;4;1;2;1;-1;-2;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;17;17;30000;0;9;4;1;4;1;-1;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;17;32;30000;0;12;4;1;4;1;1;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;25;4;30000;0;14;4;1;3;1;0;-1;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;25;5;30000;0;14;4;1;2;25;-2;1;0;1;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;26;4;30000;0;13;4;1;2;1;-1;1;0;1;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;28;4;30000;0;14;4;1;3;1;-1;-2;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;32;4;30000;0;18;4;1;1;1;0;-2;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;4;32;5;30000;0;14;4;1;1;1;-1;0;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;32;13;30000;0;11;4;1;2;1;1;1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;32;17;30000;0;8;4;1;2;1;0;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;4;32;32;30000;0;13;4;1;4;1;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;4;4;30000;0;14;5;1;2;1;-1;-1;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;4;5;30000;0;13;5;1;4;1;-2;-1;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;4;7;30000;0;13;5;1;2;1;0;-2;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;4;9;30000;0;11;5;1;1;1;-2;0;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;4;13;30000;0;12;5;1;4;5;-1;-1;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;4;17;30000;0;12;5;1;2;5;1;0;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;4;25;30000;0;12;5;1;4;5;0;-1;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;4;32;30000;0;12;5;1;2;5;-1;1;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;5;4;30000;0;11;5;1;1;1;1;-1;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;5;5;30000;0;12;5;1;4;1;1;-2;0;1;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;5;7;30000;0;12;5;1;3;1;-1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;5;9;30000;0;12;5;1;2;1;-2;1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;5;13;30000;0;5;5;1;4;1;-2;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;5;16;30000;0;8;5;1;2;5;1;-2;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;5;17;30000;0;4;5;1;4;1;0;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;5;24;30000;0;10;5;1;4;5;-1;0;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;5;26;30000;0;12;5;1;5;5;-1;0;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;5;28;30000;0;19;5;1;3;5;-1;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;5;32;30000;0;3;5;1;3;1;1;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;7;4;30000;0;15;5;1;2;1;-2;-1;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;7;5;30000;0;13;5;1;4;1;-2;-2;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;7;7;30000;0;10;5;1;2;1;-1;1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;7;9;30000;0;10;5;1;2;1;0;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;7;13;30000;0;10;5;1;3;1;-1;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;9;4;30000;0;11;5;1;5;1;-1;0;0;1;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;9;5;30000;0;13;5;1;1;1;1;-2;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;9;7;30000;0;9;5;1;2;1;0;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;9;9;30000;0;10;5;1;2;1;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;13;4;30000;0;13;5;1;2;1;-1;-1;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;13;5;30000;0;13;5;1;1;1;0;-1;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;13;7;30000;0;8;5;1;3;1;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;13;13;30000;0;10;5;1;2;1;1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;13;16;30000;0;10;5;1;1;13;-1;-1;0;1;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;13;17;30000;0;12;5;1;2;1;0;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;13;24;30000;0;8;5;1;5;13;0;-1;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;13;26;30000;0;14;5;1;3;13;-2;-1;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;13;28;30000;0;5;5;1;2;13;-2;-1;0;1;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;13;32;30000;0;4;5;1;5;1;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;16;5;30000;0;11;5;1;2;16;-2;1;0;1;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;16;13;30000;0;11;5;1;4;16;-2;0;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;16;16;30000;0;11;5;1;2;16;1;0;0;1;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;16;24;30000;0;8;5;1;5;16;0;-1;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;16;26;30000;0;8;5;1;2;16;0;1;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;17;4;30000;0;14;5;1;2;1;0;0;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;17;5;30000;0;13;5;1;5;1;-2;-1;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;17;13;30000;0;10;5;1;2;1;-2;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;17;17;30000;0;16;5;1;2;1;-2;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;17;32;30000;0;10;5;1;2;1;-1;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;24;5;30000;0;16;5;1;1;24;-2;-1;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;24;13;30000;0;10;5;1;3;24;-2;-1;0;1;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;24;16;30000;0;8;5;1;5;24;1;-1;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;24;24;30000;0;8;5;1;2;24;0;1;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;24;26;30000;0;12;5;1;4;24;-2;1;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;25;4;30000;0;18;5;1;2;1;-2;-1;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;26;5;30000;0;17;5;1;1;26;-2;-1;0;1;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;26;13;30000;0;14;5;1;2;26;-2;-1;0;1;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;26;16;30000;0;8;5;1;5;26;-2;0;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;26;24;30000;0;8;5;1;5;26;0;0;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;26;26;30000;0;8;5;1;2;26;-2;1;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;32;4;30000;0;15;5;1;2;1;1;-1;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;5;32;5;30000;0;13;5;1;1;1;0;-1;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;32;13;30000;0;11;5;1;4;1;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;32;17;30000;0;11;5;1;5;1;0;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;5;32;32;30000;0;12;5;1;4;1;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;6;6;6;30000;0;10;6;1;2;1;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;6;6;7;30000;0;12;6;1;6;1;-1;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;6;6;8;30000;0;12;6;1;3;1;-1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;6;7;6;30000;0;10;6;1;4;1;1;-2;0;1;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;6;7;7;30000;0;10;6;1;2;1;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;6;7;8;30000;0;10;6;1;3;1;-2;1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;6;8;6;30000;0;9;6;1;2;1;-2;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;6;8;7;30000;0;10;6;1;6;1;1;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;6;8;8;30000;0;10;6;1;2;1;0;1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;7;4;4;30000;0;13;7;1;2;1;1;0;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;7;4;5;30000;0;13;7;1;4;1;-2;0;0;1;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;7;4;7;30000;0;13;7;1;2;1;-2;-1;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;7;4;9;30000;0;11;7;1;3;1;-1;2;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;7;4;13;30000;0;12;7;1;7;7;0;-1;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;7;5;4;30000;0;12;7;1;3;1;-2;-1;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;7;5;5;30000;0;11;7;1;3;1;0;0;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;7;5;7;30000;0;12;7;1;4;7;-2;0;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;7;5;9;30000;0;12;7;1;3;1;-2;-1;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;7;5;13;30000;0;12;7;1;3;1;-1;-2;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;7;6;6;30000;0;11;7;1;4;1;0;-2;0;1;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;7;6;7;30000;0;12;7;1;3;1;-1;2;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;7;6;8;30000;0;12;7;1;2;1;1;-2;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;7;7;4;30000;0;15;7;1;4;1;-1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;7;7;5;30000;0;12;7;1;5;1;-2;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;7;7;6;30000;0;10;7;1;4;1;-2;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;7;7;7;30000;0;10;7;1;6;1;0;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;7;7;8;30000;0;12;7;1;5;1;0;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;7;7;9;30000;0;10;7;1;4;1;-1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;7;7;13;30000;0;12;7;1;7;1;-2;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;7;8;6;30000;0;10;7;1;2;1;-2;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;7;8;7;30000;0;12;7;1;3;1;0;4;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;7;8;8;30000;0;10;7;1;7;1;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;7;9;4;30000;0;14;7;1;1;1;-2;-2;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;7;9;5;30000;0;10;7;1;4;1;-1;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;7;9;7;30000;0;12;7;1;5;1;1;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;7;13;4;30000;0;14;7;1;4;1;1;-1;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;7;13;5;30000;0;13;7;1;5;1;-1;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;7;13;7;30000;0;12;7;1;4;1;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;7;13;13;30000;0;10;7;1;6;1;-2;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;8;6;6;30000;0;11;8;1;7;1;1;0;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;8;6;7;30000;0;12;8;1;6;1;-1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;8;6;8;30000;0;11;8;1;1;1;-1;-2;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;8;7;6;30000;0;12;8;1;7;1;-1;-1;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;8;7;7;30000;0;12;8;1;7;1;-1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;8;7;8;30000;0;11;8;1;1;1;-1;0;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;8;8;6;30000;0;10;8;1;2;1;0;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;8;8;7;30000;0;12;8;1;2;1;0;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;8;8;8;30000;0;12;8;1;2;1;-2;1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;9;4;4;30000;0;13;9;1;2;1;0;-1;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;9;4;5;30000;0;13;9;1;7;1;0;0;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;9;4;7;30000;0;12;9;1;7;1;-2;0;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;9;4;9;30000;0;10;8;1;7;9;1;-2;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;9;4;13;30000;0;12;9;1;9;9;-1;-2;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;9;5;4;30000;0;11;9;1;4;1;-2;-1;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;9;5;5;30000;0;13;9;1;9;1;0;0;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;9;5;7;30000;0;10;8;1;2;9;1;1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;9;5;9;30000;0;5;9;1;8;1;1;2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;9;7;4;30000;0;12;9;1;2;1;-2;-1;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;9;7;5;30000;0;8;8;1;9;1;1;1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;9;7;7;30000;0;10;8;1;3;1;-1;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;9;9;4;30000;0;17;9;1;7;1;-1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;9;9;5;30000;0;17;9;1;4;1;-2;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;9;9;9;30000;0;12;9;1;4;1;-2;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;9;9;16;30000;0;19;9;1;8;1;0;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;9;9;22;30000;0;12;8;1;7;1;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;9;9;32;30000;0;6;9;1;8;1;-2;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;9;13;4;30000;0;13;9;1;2;1;-2;1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;9;16;9;30000;0;16;9;1;7;1;-1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;9;16;16;30000;0;10;8;1;2;1;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;9;16;22;30000;0;6;8;1;2;1;-2;2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;9;22;9;30000;0;16;9;1;7;1;0;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;9;22;16;30000;0;12;9;1;5;1;-2;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;9;22;22;30000;0;15;9;1;8;1;1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;9;22;32;30000;0;15;9;1;7;1;-1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;9;32;9;30000;0;16;9;1;6;32;1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;9;32;22;30000;0;15;9;1;9;32;-1;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;9;32;32;30000;0;12;9;1;2;32;0;1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;10;4;4;30000;0;8;8;1;5;1;0;1;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;10;4;10;30000;0;10;8;1;3;10;0;3;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;10;10;4;30000;0;17;10;1;7;1;0;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;10;10;10;30000;0;12;10;1;7;1;1;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;4;4;30000;0;8;8;1;7;1;1;-1;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;4;5;30000;0;8;8;1;2;13;-1;2;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;4;7;30000;0;10;8;1;2;1;0;1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;4;9;30000;0;9;8;1;10;13;0;2;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;4;13;30000;0;6;8;1;9;13;-2;6;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;4;17;30000;0;5;8;1;7;13;0;4;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;4;32;30000;0;12;8;1;13;1;0;2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;5;4;30000;0;8;8;1;8;1;-2;3;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;5;5;30000;0;8;8;1;3;1;1;2;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;5;7;30000;0;9;8;1;10;1;0;0;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;5;13;30000;0;9;8;1;5;13;1;-2;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;5;16;30000;0;8;13;1;11;13;1;0;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;5;17;30000;0;12;8;1;7;1;-1;-1;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;5;24;30000;0;6;13;1;12;13;-2;2;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;5;26;30000;0;6;13;1;13;13;-2;2;0;1;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;5;28;30000;0;3;13;1;3;13;-2;2;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;5;32;30000;0;3;8;1;3;1;0;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;7;4;30000;0;11;8;1;4;1;1;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;7;5;30000;0;9;8;1;4;1;0;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;7;7;30000;0;13;8;1;13;1;-2;1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;7;13;30000;0;12;8;1;4;1;0;1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;9;4;30000;0;12;8;1;11;1;1;2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;13;4;30000;0;17;13;1;11;1;-2;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;13;5;30000;0;17;13;1;9;1;-1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;13;7;30000;0;16;13;1;4;13;-2;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;13;13;30000;0;12;13;1;6;1;-1;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;13;16;30000;0;10;13;1;11;13;1;2;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;13;17;30000;0;15;13;1;10;1;1;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;13;24;30000;0;13;13;1;9;13;-2;2;0;1;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;13;26;30000;0;18;13;1;7;13;-2;2;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;13;28;30000;0;19;13;1;13;13;-1;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;13;32;30000;0;19;13;1;9;1;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;16;5;30000;0;13;13;1;12;16;1;0;0;1;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;16;13;30000;0;10;13;1;9;16;1;-2;0;1;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;16;16;30000;0;8;13;1;13;16;0;-1;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;16;24;30000;0;21;13;1;13;16;-2;2;0;1;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;16;26;30000;0;15;8;1;13;16;0;2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;17;4;30000;0;17;13;1;10;1;1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;17;5;30000;0;17;13;1;6;1;-1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;17;13;30000;0;16;13;1;6;1;1;1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;17;17;30000;0;15;13;1;3;1;0;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;17;32;30000;0;20;13;1;3;1;1;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;24;5;30000;0;14;13;1;9;24;0;2;0;1;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;24;13;30000;0;8;13;1;9;24;-1;-2;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;24;16;30000;0;8;13;1;10;24;0;0;0;1;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;24;24;30000;0;16;13;1;6;24;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;24;26;30000;0;30;13;1;4;24;-2;2;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;26;5;30000;0;16;13;1;12;26;-2;2;0;1;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;26;13;30000;0;17;13;1;2;26;0;2;0;1;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;26;16;30000;0;8;13;1;13;26;0;-1;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;26;24;30000;0;15;13;1;2;26;-1;1;0;1;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;26;26;30000;0;8;13;1;9;26;0;0;0;1;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;32;4;30000;0;21;8;1;13;1;1;2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;32;5;30000;0;17;13;1;5;1;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;32;13;30000;0;18;13;1;2;1;-1;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;13;32;17;30000;0;19;8;1;4;1;0;3;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;13;32;32;30000;0;15;13;1;11;1;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;14;14;14;30000;0;16;14;1;14;14;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;14;14;16;30000;0;14;14;1;11;14;1;2;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;14;14;29;30000;0;9;14;1;4;14;0;2;0;1;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;14;14;55;30000;0;20;14;1;7;14;-1;2;0;1;0;1;0;1;1;0;0 NVIDIA GH200 480GB [0x3528];3;14;16;14;30000;0;8;14;1;13;16;0;-2;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;14;16;16;30000;0;12;14;1;9;16;-1;2;0;1;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;14;16;29;30000;0;9;14;1;11;16;0;2;0;1;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;14;29;14;30000;0;19;8;1;14;29;-1;-1;0;1;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;14;55;14;30000;0;26;14;1;7;55;-2;1;0;1;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;14;55;55;30000;0;60;14;1;10;55;0;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;15;4;4;30000;0;8;8;1;3;1;1;2;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;15;15;15;30000;0;21;15;1;10;1;-1;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;16;9;9;30000;0;12;8;1;16;1;-2;3;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;16;9;16;30000;0;10;8;1;14;16;1;0;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;16;9;22;30000;0;12;8;1;14;16;-2;0;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;16;16;9;30000;0;16;8;1;3;1;0;2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;16;16;16;30000;0;12;8;1;13;1;1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;16;16;22;30000;0;21;16;1;13;1;-2;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;16;16;55;30000;0;30;8;1;2;16;1;2;0;1;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;16;22;9;30000;0;16;16;1;8;1;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;16;22;16;30000;0;20;16;1;14;1;-1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;16;22;22;30000;0;15;16;1;9;1;0;0;0;1;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;16;29;55;30000;0;38;8;1;13;29;0;-2;0;1;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;16;55;16;30000;0;23;16;1;6;55;-1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;16;55;29;30000;0;60;8;1;9;55;0;2;0;1;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;16;55;55;30000;0;5;8;1;5;55;-2;0;0;1;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;4;4;30000;0;8;8;1;9;1;-2;0;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;4;5;30000;0;10;8;1;14;1;0;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;17;4;13;30000;0;5;8;1;3;17;0;1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;4;17;30000;0;12;8;1;14;17;0;-2;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;4;32;30000;0;3;8;1;2;17;-1;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;17;5;4;30000;0;8;8;1;15;1;1;2;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;5;5;30000;0;8;8;1;15;17;-2;-2;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;17;5;13;30000;0;10;8;1;7;17;0;-2;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;17;5;17;30000;0;12;8;1;9;17;-2;-1;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;5;32;30000;0;16;8;1;2;17;-1;0;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;13;4;30000;0;14;17;1;11;1;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;13;5;30000;0;13;17;1;5;1;-1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;13;13;30000;0;19;8;1;16;1;-1;2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;17;13;17;30000;0;17;17;1;7;1;1;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;17;13;32;30000;0;19;17;1;16;1;-1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;17;4;30000;0;23;17;1;7;1;-2;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;17;17;5;30000;0;23;17;1;15;1;-1;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;17;17;13;30000;0;21;17;1;8;1;-1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;17;17;30000;0;16;17;1;9;1;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;17;32;30000;0;5;17;1;3;1;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;32;4;30000;0;23;17;1;11;1;-2;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;32;5;30000;0;22;17;1;6;1;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;32;13;30000;0;15;17;1;9;1;-2;-1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;17;32;17;30000;0;15;17;1;13;1;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;17;32;32;30000;0;20;17;1;17;1;-2;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;20;20;20;30000;0;19;20;1;8;1;1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;22;9;9;30000;0;10;8;1;9;1;0;3;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;22;9;16;30000;0;10;8;1;21;1;-1;1;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;22;9;22;30000;0;12;8;1;6;22;1;0;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;22;9;32;30000;0;20;8;1;20;22;0;1;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;22;16;9;30000;0;19;8;1;5;1;-2;4;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;22;16;16;30000;0;19;8;1;15;1;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;22;16;22;30000;0;12;8;1;3;1;0;2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;22;22;9;30000;0;23;22;1;17;1;0;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;22;22;16;30000;0;20;22;1;5;1;1;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;22;22;22;30000;0;23;22;1;14;1;-1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;22;22;32;30000;0;30;22;1;7;1;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;22;32;9;30000;0;17;22;1;20;32;-1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;22;32;22;30000;0;20;22;1;9;32;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;22;32;32;30000;0;40;8;1;3;32;-1;3;0;1;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;23;23;23;30000;0;20;23;1;17;23;1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;24;24;24;30000;0;20;24;1;16;1;-2;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;24;24;26;30000;0;30;8;1;18;24;1;2;0;1;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;24;26;24;30000;0;19;8;1;24;26;0;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;24;26;26;30000;0;30;24;1;2;26;-1;1;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;25;4;4;30000;0;8;8;1;13;25;0;-2;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;25;4;5;30000;0;8;8;1;18;25;0;5;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;25;5;4;30000;0;8;8;1;21;1;-2;1;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;25;25;25;30000;0;24;25;1;21;1;-1;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;26;4;4;30000;0;10;8;1;6;26;-1;3;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;26;24;24;30000;0;11;8;1;2;26;-2;-2;0;1;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;26;24;26;30000;0;46;8;1;14;26;-1;0;0;1;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;26;26;24;30000;0;29;26;1;12;26;-1;0;0;1;0;1;0;1;1;0;0 NVIDIA GH200 480GB [0x3528];3;26;26;26;30000;0;32;8;1;22;26;-1;2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;28;4;4;30000;0;11;8;1;12;1;-1;5;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;28;28;28;30000;0;6;16;1;8;1;-2;2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;29;16;55;30000;0;21;16;1;15;29;0;2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;29;29;29;30000;0;46;8;1;2;29;-2;-2;0;1;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;29;29;55;30000;0;19;16;1;24;29;-2;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;29;55;16;30000;0;58;8;1;26;55;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;29;55;29;30000;0;19;8;1;25;55;-2;4;0;1;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;29;55;55;30000;0;13;29;1;8;55;0;0;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;30;30;30;30000;0;30;30;1;11;1;0;-2;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;32;4;4;30000;0;11;8;1;15;32;-1;-2;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;32;4;5;30000;0;11;8;1;16;32;1;0;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;4;13;30000;0;10;8;1;1;32;1;0;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;32;4;17;30000;0;12;8;1;9;32;1;0;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;4;32;30000;0;6;8;1;21;32;1;4;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;5;4;30000;0;14;8;1;14;1;1;-2;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;32;5;5;30000;0;15;8;1;10;1;-2;-2;0;0;0;1;0;2;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;5;13;30000;0;10;8;1;31;32;1;-2;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;5;17;30000;0;12;8;1;3;32;0;4;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;5;32;30000;0;15;8;1;25;32;0;0;0;0;0;1;0;2;0;0;0 NVIDIA GH200 480GB [0x3528];3;32;13;4;30000;0;23;8;1;4;1;-1;-2;0;0;0;1;0;0;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;13;5;30000;0;23;8;1;4;1;-1;-2;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;32;13;13;30000;0;20;8;1;18;1;-1;5;0;0;0;1;0;0;0;0;0 NVIDIA GH200 480GB [0x3528];3;32;13;17;30000;0;30;8;1;5;1;-2;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;13;32;30000;0;13;8;1;16;1;-1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;17;4;30000;0;23;32;1;17;1;-1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;17;5;30000;0;18;32;1;14;1;-1;1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;17;13;30000;0;20;32;1;11;1;0;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;17;17;30000;0;20;32;1;4;1;-2;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;17;32;30000;0;10;8;1;23;1;1;4;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;32;4;30000;0;26;32;1;4;1;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;32;5;30000;0;29;32;1;11;1;1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;32;9;30000;0;23;32;1;21;32;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;32;13;30000;0;30;32;1;6;1;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;32;17;30000;0;23;32;1;22;1;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;32;22;30000;0;20;32;1;27;32;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;32;32;32;30000;0;30;32;1;6;32;0;-1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;35;35;35;30000;0;57;24;1;17;1;0;2;0;1;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;36;36;36;30000;0;15;16;1;23;1;0;1;0;1;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;40;40;40;30000;0;57;16;1;6;1;-1;1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;55;14;14;30000;0;23;55;1;29;55;-1;4;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;55;14;55;30000;0;8;55;1;2;55;1;7;0;0;0;1;0;1;1;0;0 NVIDIA GH200 480GB [0x3528];3;55;16;16;30000;0;30;16;1;45;55;-2;-2;0;1;0;1;0;1;1;0;0 NVIDIA GH200 480GB [0x3528];3;55;16;29;30000;0;46;16;1;18;55;1;7;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;55;16;55;30000;0;19;8;1;38;55;0;7;0;0;0;1;0;1;1;0;0 NVIDIA GH200 480GB [0x3528];3;55;29;16;30000;0;29;8;1;35;55;0;-1;0;1;0;1;0;1;1;0;0 NVIDIA GH200 480GB [0x3528];3;55;29;29;30000;0;57;8;1;45;55;-2;-2;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;55;29;55;30000;0;7;16;1;17;55;-1;1;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;55;55;14;30000;0;26;55;1;15;55;-2;4;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;55;55;16;30000;0;38;16;1;16;55;0;3;0;1;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;55;55;29;30000;0;23;55;1;17;55;1;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;55;55;55;30000;0;13;55;1;5;55;0;0;0;0;0;1;0;1;2;0;0 NVIDIA GH200 480GB [0x3528];3;64;64;64;30000;0;5;64;1;18;64;0;6;0;0;0;1;0;1;0;0;0 NVIDIA GH200 480GB [0x3528];3;78;78;78;30000;0;61;78;1;6;78;-2;0;0;1;0;1;0;1;2;0;0 ================================================ FILE: src/acc/opencl/smm/params/tune_multiply_H100.csv ================================================ DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC NVIDIA H100 PCIe [0xa32d];3;2;2;2;30000;0;11;2;1;1;1;-2;0;0;1;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;3;3;3;30000;0;14;3;1;3;1;-1;-1;0;1;0;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;4;4;30000;0;17;4;1;4;1;1;-1;0;1;0;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;4;5;30000;0;14;4;1;1;1;1;-1;0;0;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;4;7;30000;0;16;4;1;1;1;-2;-2;1;1;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;4;9;30000;0;6;4;1;2;1;0;-2;0;1;1;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;4;10;30000;0;5;4;1;4;1;-1;0;1;0;1;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;4;13;30000;0;6;4;1;4;1;-1;-2;1;1;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;4;15;30000;0;14;4;1;4;1;-1;-1;0;0;0;0;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;4;17;30000;0;6;4;1;2;1;1;-2;0;1;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;4;25;30000;0;6;4;1;2;1;-1;1;1;1;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;4;26;30000;0;6;4;1;4;1;-1;0;0;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;4;28;30000;0;6;4;1;4;1;0;0;0;1;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;4;32;30000;0;6;4;1;4;1;-1;-2;0;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;5;4;30000;0;15;4;1;2;1;-2;-1;0;1;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;5;5;30000;0;14;4;1;3;1;-2;-1;1;1;1;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;5;7;30000;0;15;4;1;1;1;0;0;0;0;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;5;9;30000;0;12;4;1;1;1;-1;0;1;1;0;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;5;13;30000;0;6;4;1;4;1;0;-2;0;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;5;17;30000;0;6;4;1;3;1;1;-2;0;1;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;5;25;30000;0;6;4;1;4;1;0;2;1;0;0;1;0;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;5;32;30000;0;3;4;1;3;1;0;0;1;1;0;1;0;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;7;4;30000;0;17;4;1;2;1;-1;0;0;1;1;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;7;5;30000;0;14;4;1;4;1;1;0;1;1;1;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;7;7;30000;0;15;4;1;1;1;-1;0;0;0;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;7;9;30000;0;15;4;1;2;1;0;-2;0;1;0;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;7;13;30000;0;14;4;1;2;1;0;0;0;0;0;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;9;4;30000;0;15;4;1;2;1;-2;-2;0;1;0;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;9;5;30000;0;12;4;1;2;1;-2;-1;0;1;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;9;7;30000;0;15;4;1;2;1;-2;0;1;1;0;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;9;9;30000;0;12;4;1;3;1;1;-1;0;0;0;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;9;13;30000;0;6;4;1;2;1;-2;-1;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;10;4;30000;0;18;4;1;4;1;-2;-1;0;1;1;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;10;10;30000;0;11;4;1;3;1;1;-2;1;0;0;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;13;4;30000;0;17;4;1;3;1;0;-1;0;0;1;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;13;5;30000;0;15;4;1;3;1;-2;0;1;0;1;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;13;7;30000;0;14;4;1;2;1;-1;2;0;0;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;13;9;30000;0;14;4;1;4;1;-2;0;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;13;13;30000;0;6;4;1;3;1;1;-2;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;13;17;30000;0;6;4;1;4;1;-1;0;0;0;1;1;0;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;13;32;30000;0;12;4;1;2;1;-1;1;1;0;0;1;0;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;15;4;30000;0;19;4;1;2;1;1;1;0;1;1;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;17;4;30000;0;17;4;1;3;1;-2;-2;0;0;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;17;5;30000;0;18;4;1;3;1;-2;-1;0;1;0;1;1;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;4;17;13;30000;0;14;4;1;2;1;1;2;1;1;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;17;17;30000;0;12;4;1;4;1;-2;-2;0;0;0;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;17;32;30000;0;15;4;1;2;1;-1;-2;1;1;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;25;4;30000;0;17;4;1;1;1;1;0;1;0;1;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;25;5;30000;0;14;4;1;4;25;0;0;0;0;0;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;26;4;30000;0;19;4;1;1;1;0;-1;1;0;1;1;1;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;28;4;30000;0;20;4;1;3;1;-1;-1;0;1;1;1;1;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;32;4;30000;0;19;4;1;1;1;0;-2;1;0;0;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;32;5;30000;0;18;4;1;1;1;0;-2;0;1;1;1;1;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;32;13;30000;0;12;4;1;2;1;-1;1;0;1;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;4;32;17;30000;0;12;4;1;2;1;0;4;0;0;0;1;1;1;0;1;0 NVIDIA H100 PCIe [0xa32d];3;4;32;32;30000;0;15;4;1;4;1;0;1;0;0;0;1;0;1;2;1;0 NVIDIA H100 PCIe [0xa32d];3;5;4;4;30000;0;17;5;1;3;1;-2;-1;1;0;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;4;5;30000;0;14;5;1;2;1;-1;1;0;0;0;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;4;7;30000;0;14;5;1;2;1;-1;-1;1;0;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;4;9;30000;0;14;5;1;4;1;1;0;0;0;0;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;4;13;30000;0;11;5;1;2;5;0;-2;0;1;0;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;4;17;30000;0;11;5;1;2;5;0;3;0;0;0;0;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;4;25;30000;0;15;5;1;5;5;0;0;0;1;1;0;1;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;4;32;30000;0;12;5;1;5;5;-1;0;0;0;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;5;4;30000;0;15;5;1;2;1;1;-2;0;1;1;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;5;5;30000;0;14;5;1;5;1;1;-2;0;0;0;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;5;7;30000;0;6;5;1;5;1;0;-2;1;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;5;9;30000;0;5;5;1;2;1;0;-2;1;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;5;13;30000;0;5;5;1;4;1;1;-2;1;1;1;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;5;17;30000;0;6;5;1;5;1;-2;-2;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;5;32;30000;0;6;5;1;4;1;-2;0;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;7;4;30000;0;16;5;1;2;1;0;-1;0;0;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;7;5;30000;0;14;5;1;3;1;-2;-2;0;1;0;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;7;7;30000;0;5;5;1;4;1;-2;-1;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;7;9;30000;0;12;5;1;2;1;-2;0;0;1;0;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;7;13;30000;0;6;5;1;5;1;-2;-1;0;1;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;9;4;30000;0;18;5;1;2;1;-1;4;0;0;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;9;5;30000;0;14;5;1;3;1;-1;0;0;1;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;9;7;30000;0;14;5;1;1;1;1;0;0;0;1;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;9;9;30000;0;10;5;1;2;1;1;2;0;0;1;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;13;4;30000;0;21;5;1;2;1;-1;-1;0;1;0;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;13;5;30000;0;15;5;1;1;1;1;-1;0;0;0;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;13;7;30000;0;14;5;1;1;1;0;-2;1;0;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;13;13;30000;0;10;5;1;4;1;1;0;0;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;13;17;30000;0;10;5;1;4;1;-2;0;0;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;13;32;30000;0;5;5;1;5;1;-1;-2;0;1;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;17;4;30000;0;17;5;1;4;1;-1;-2;1;0;0;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;17;5;30000;0;16;5;1;4;1;1;0;0;1;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;17;13;30000;0;10;5;1;4;1;-1;-1;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;17;17;30000;0;11;5;1;3;1;-1;-1;0;0;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;17;32;30000;0;10;5;1;4;1;1;-2;0;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;25;4;30000;0;21;5;1;3;1;-1;0;1;0;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;5;32;4;30000;0;19;5;1;2;1;-2;1;1;0;1;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;32;5;30000;0;18;5;1;4;1;-2;-2;1;0;1;1;1;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;32;13;30000;0;12;5;1;3;1;0;-1;1;1;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;32;17;30000;0;12;5;1;3;1;0;-2;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;5;32;32;30000;0;15;5;1;5;1;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;6;6;6;30000;0;6;6;1;5;1;1;0;0;1;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;6;6;7;30000;0;11;6;1;2;1;-1;-2;0;1;1;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;6;6;8;30000;0;10;6;1;3;1;0;1;1;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;6;7;6;30000;0;6;6;1;5;1;1;0;0;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;6;7;7;30000;0;10;6;1;3;1;-2;-1;0;0;1;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;6;7;8;30000;0;15;6;1;6;1;-2;-1;0;1;0;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;6;8;6;30000;0;10;6;1;3;1;1;-1;0;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;6;8;7;30000;0;10;6;1;5;1;1;0;0;1;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;6;8;8;30000;0;6;6;1;3;1;-1;-1;0;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;4;4;30000;0;15;7;1;1;1;0;0;0;0;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;4;5;30000;0;11;7;1;2;1;0;3;0;1;1;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;4;7;30000;0;14;7;1;7;1;-2;-1;0;0;0;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;4;9;30000;0;11;7;1;3;1;1;2;0;1;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;4;13;30000;0;11;7;1;6;7;0;-2;0;1;0;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;7;5;4;30000;0;15;7;1;1;1;-1;-2;0;1;0;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;5;5;30000;0;11;7;1;1;1;-2;0;0;0;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;5;7;30000;0;14;7;1;4;7;0;0;0;0;0;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;5;9;30000;0;11;7;1;2;1;1;-1;0;0;1;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;5;13;30000;0;12;7;1;2;1;1;-2;0;0;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;6;6;30000;0;15;7;1;2;1;-2;0;0;1;1;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;7;6;7;30000;0;15;7;1;2;1;0;4;0;0;0;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;7;6;8;30000;0;14;7;1;2;1;-2;0;0;1;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;7;4;30000;0;9;7;1;3;1;-1;1;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;7;7;5;30000;0;10;7;1;7;1;-2;-1;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;7;7;6;30000;0;10;7;1;3;1;-1;2;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;7;7;7;30000;0;14;7;1;4;1;1;-2;0;1;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;7;8;30000;0;22;7;1;6;1;-2;0;0;0;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;7;7;9;30000;0;14;7;1;2;1;0;2;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;7;7;13;30000;0;10;7;1;3;1;-1;-2;0;1;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;8;6;30000;0;10;7;1;2;1;0;-1;0;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;8;7;30000;0;10;7;1;2;1;1;4;0;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;8;8;30000;0;11;7;1;5;1;-1;-2;0;1;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;7;9;4;30000;0;15;7;1;3;1;-2;-2;0;0;0;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;9;5;30000;0;10;7;1;2;1;1;1;0;1;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;9;7;30000;0;14;7;1;4;1;-1;-2;1;1;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;13;4;30000;0;17;7;1;6;1;0;-2;0;1;0;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;13;5;30000;0;11;7;1;2;1;1;-1;1;0;0;1;0;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;13;7;30000;0;14;7;1;2;1;1;-1;1;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;7;13;13;30000;0;14;7;1;6;1;-2;-1;0;1;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;8;6;6;30000;0;11;8;1;1;1;0;-2;0;1;1;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;8;6;7;30000;0;15;8;1;4;1;1;-1;0;0;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;8;6;8;30000;0;11;8;1;3;1;-1;-1;0;0;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;8;7;6;30000;0;14;8;1;4;1;-1;-1;0;0;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;8;7;7;30000;0;14;8;1;5;1;-2;-2;0;1;0;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;8;7;8;30000;0;14;8;1;5;1;-1;0;0;1;1;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;8;8;6;30000;0;10;8;1;2;1;1;1;1;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;8;8;7;30000;0;14;8;1;4;1;-1;-1;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;8;8;8;30000;0;14;8;1;6;1;0;-1;0;0;1;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;9;4;4;30000;0;16;9;1;4;1;0;1;0;0;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;4;5;30000;0;11;9;1;1;1;-1;0;0;0;1;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;4;7;30000;0;11;9;1;4;1;-1;0;0;1;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;4;9;30000;0;11;8;1;9;9;1;-1;0;0;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;4;13;30000;0;11;9;1;7;9;-1;-2;0;1;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;5;4;30000;0;15;9;1;1;1;-2;-2;0;0;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;5;5;30000;0;14;9;1;7;1;-1;-1;0;0;1;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;5;7;30000;0;11;8;1;2;9;0;-1;0;1;1;1;0;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;5;9;30000;0;15;9;1;5;1;1;-2;0;0;0;1;1;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;9;7;4;30000;0;14;9;1;2;1;-2;1;0;1;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;7;5;30000;0;10;8;1;9;1;1;0;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;9;7;7;30000;0;11;8;1;5;1;1;2;0;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;9;4;30000;0;17;9;1;7;1;-1;-2;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;9;9;5;30000;0;22;9;1;4;1;-1;-1;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;9;9;9;30000;0;18;9;1;5;1;1;-1;0;1;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;9;16;30000;0;22;9;1;9;1;1;-1;0;1;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;9;22;30000;0;6;9;1;3;1;-2;-2;0;1;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;9;9;32;30000;0;22;9;1;7;1;0;-2;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;9;13;4;30000;0;14;9;1;4;1;-2;-1;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;9;16;9;30000;0;17;9;1;7;1;0;-1;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;9;16;16;30000;0;10;9;1;4;1;-2;3;1;1;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;16;22;30000;0;10;9;1;2;1;1;1;0;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;22;9;30000;0;18;9;1;6;1;0;0;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;9;22;16;30000;0;12;9;1;3;1;-2;0;1;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;22;22;30000;0;13;9;1;7;1;-1;0;1;1;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;9;22;32;30000;0;24;9;1;8;1;-1;-1;1;0;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;10;4;4;30000;0;15;10;1;6;1;0;0;0;1;0;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;10;4;10;30000;0;11;8;1;3;10;-2;3;0;0;1;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;10;10;4;30000;0;14;10;1;9;1;1;-1;1;1;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;10;10;10;30000;0;17;10;1;3;1;1;-1;0;1;1;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;13;4;4;30000;0;9;8;1;13;1;1;0;0;1;1;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;4;5;30000;0;10;8;1;6;13;0;2;0;1;1;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;13;4;7;30000;0;11;8;1;12;1;-2;6;0;0;1;1;0;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;4;9;30000;0;6;8;1;11;13;-2;1;0;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;4;13;30000;0;6;8;1;4;13;-1;6;0;1;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;4;17;30000;0;6;8;1;10;13;1;4;0;1;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;4;32;30000;0;17;8;1;6;1;0;-1;0;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;5;4;30000;0;9;8;1;5;1;-2;3;0;1;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;5;5;30000;0;9;8;1;7;1;0;2;0;1;1;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;13;5;7;30000;0;11;8;1;10;1;1;1;1;0;0;1;1;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;13;5;13;30000;0;10;8;1;4;13;1;4;0;1;1;1;1;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;5;17;30000;0;10;8;1;4;1;-2;0;0;0;1;1;1;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;5;32;30000;0;6;8;1;9;1;1;-2;0;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;7;4;30000;0;11;8;1;2;1;1;2;0;0;0;1;0;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;7;5;30000;0;14;13;1;10;1;1;3;0;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;7;7;30000;0;14;8;1;13;1;-1;3;1;1;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;7;13;30000;0;14;8;1;2;1;-1;1;0;1;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;9;4;30000;0;14;8;1;11;1;1;2;0;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;13;4;30000;0;25;13;1;10;1;0;-2;0;0;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;13;13;5;30000;0;22;13;1;12;1;-2;-1;1;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;13;7;30000;0;18;13;1;3;13;-2;-2;1;1;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;13;13;30000;0;5;13;1;4;1;0;-2;0;1;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;13;17;30000;0;17;13;1;10;1;1;0;0;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;13;32;30000;0;24;13;1;7;1;-2;-1;1;0;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;13;17;4;30000;0;18;13;1;10;1;1;-1;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;13;17;5;30000;0;17;13;1;2;1;1;-1;1;1;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;17;13;30000;0;18;13;1;9;1;1;0;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;13;17;17;30000;0;17;13;1;2;1;-2;1;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;13;17;32;30000;0;22;13;1;12;1;1;-2;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;13;32;4;30000;0;25;13;1;13;1;-2;-2;1;1;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;13;32;5;30000;0;26;13;1;11;1;1;-1;1;0;0;1;0;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;13;32;13;30000;0;22;13;1;13;1;1;-2;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;13;32;17;30000;0;25;8;1;4;1;0;4;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;13;32;32;30000;0;15;13;1;11;1;-1;-1;1;0;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;15;4;4;30000;0;9;8;1;11;1;0;2;1;0;0;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;15;15;15;30000;0;12;15;1;9;1;-2;-1;0;0;1;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;16;9;9;30000;0;14;8;1;9;1;0;4;0;0;0;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;16;9;16;30000;0;14;8;1;2;16;-2;5;0;1;1;1;1;1;2;1;0 NVIDIA H100 PCIe [0xa32d];3;16;9;22;30000;0;15;8;1;6;16;1;0;0;1;0;1;0;0;2;1;0 NVIDIA H100 PCIe [0xa32d];3;16;16;9;30000;0;18;16;1;8;1;0;0;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;16;16;16;30000;0;13;16;1;3;1;1;-1;0;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;16;16;22;30000;0;24;16;1;10;1;-2;-1;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;16;22;9;30000;0;17;16;1;10;1;1;-1;1;0;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;16;22;16;30000;0;18;16;1;9;1;0;-2;1;0;1;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;16;22;22;30000;0;15;16;1;12;1;0;0;0;0;1;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;4;4;30000;0;9;8;1;11;1;-1;-1;0;1;1;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;17;4;5;30000;0;13;8;1;4;1;-2;6;0;1;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;4;13;30000;0;10;8;1;5;17;1;0;0;1;0;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;17;4;17;30000;0;12;8;1;5;17;-1;1;0;1;1;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;4;32;30000;0;3;8;1;10;17;0;3;0;1;0;1;0;1;0;1;0 NVIDIA H100 PCIe [0xa32d];3;17;5;4;30000;0;14;8;1;16;1;-1;-1;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;5;5;30000;0;10;17;1;16;17;-2;4;0;0;1;1;1;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;17;5;13;30000;0;11;8;1;5;17;0;-2;0;0;0;1;0;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;17;5;17;30000;0;15;8;1;15;17;-2;0;0;1;0;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;5;32;30000;0;20;8;1;13;17;-2;6;1;1;0;1;1;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;13;4;30000;0;15;17;1;13;1;1;-2;0;0;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;13;5;30000;0;18;17;1;8;1;-2;-2;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;13;13;30000;0;19;8;1;14;1;-1;4;1;1;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;17;13;17;30000;0;10;17;1;12;1;-1;-2;1;0;0;1;1;1;2;1;0 NVIDIA H100 PCIe [0xa32d];3;17;13;32;30000;0;22;17;1;14;1;-1;0;1;1;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;17;4;30000;0;24;17;1;14;1;-2;-2;0;0;1;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;17;5;30000;0;24;17;1;11;1;0;0;0;0;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;17;13;30000;0;18;17;1;16;1;1;0;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;17;17;30000;0;22;17;1;9;1;-1;-1;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;17;32;30000;0;11;17;1;15;1;1;-1;0;1;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;32;4;30000;0;22;17;1;16;1;-2;-2;1;1;1;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;32;5;30000;0;26;17;1;2;1;1;-2;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;32;13;30000;0;12;17;1;9;1;-1;0;1;0;0;1;0;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;17;32;17;30000;0;22;17;1;13;1;-2;-2;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;17;32;32;30000;0;24;17;1;17;1;-2;-1;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;20;20;20;30000;0;22;20;1;18;1;1;-2;1;0;1;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;22;9;9;30000;0;12;8;1;7;1;-1;4;0;0;1;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;22;9;16;30000;0;18;8;1;15;1;-2;5;0;1;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;22;9;22;30000;0;20;22;1;13;22;-1;5;0;1;0;1;1;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;22;9;32;30000;0;20;8;1;18;22;-1;3;0;0;0;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;22;16;9;30000;0;22;8;1;5;1;-1;5;0;1;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;22;16;16;30000;0;22;8;1;8;1;-1;3;0;1;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;22;16;22;30000;0;34;8;1;12;1;1;6;0;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;22;22;9;30000;0;17;22;1;11;0;-2;-1;1;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;22;22;16;30000;0;24;22;1;11;1;0;-1;0;1;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;22;22;22;30000;0;24;22;1;15;0;-1;-2;0;0;1;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;22;22;32;30000;0;22;22;1;17;1;0;-1;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;23;23;23;30000;0;22;23;1;20;1;1;-2;0;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;24;24;24;30000;0;24;24;1;22;0;-2;-2;0;0;1;1;1;1;0;1;0 NVIDIA H100 PCIe [0xa32d];3;25;4;4;30000;0;10;8;1;8;25;1;4;0;0;1;1;1;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;25;4;5;30000;0;9;25;1;11;25;-1;6;0;1;0;1;1;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;25;5;4;30000;0;9;8;1;21;1;-1;1;0;0;1;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;25;25;25;30000;0;25;25;1;2;1;-1;-1;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;26;4;4;30000;0;9;8;1;26;26;-2;4;1;0;1;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;28;4;4;30000;0;13;8;1;20;1;-2;5;0;1;0;1;0;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;28;28;28;30000;0;24;28;1;19;0;0;0;0;0;1;1;0;1;0;1;0 NVIDIA H100 PCIe [0xa32d];3;30;30;30;30000;0;25;30;1;18;1;0;0;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;32;4;4;30000;0;11;8;1;15;32;1;4;1;1;0;1;1;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;32;4;5;30000;0;16;8;1;32;32;1;6;1;0;1;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;32;4;13;30000;0;12;8;1;11;32;1;4;0;1;0;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;32;4;17;30000;0;13;8;1;24;32;0;4;0;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;32;4;32;30000;0;24;8;1;29;32;-2;5;0;1;0;1;1;0;0;1;0 NVIDIA H100 PCIe [0xa32d];3;32;5;4;30000;0;18;8;1;26;1;1;4;0;0;1;1;1;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;32;5;5;30000;0;18;8;1;14;1;0;4;1;0;0;1;0;2;2;0;0 NVIDIA H100 PCIe [0xa32d];3;32;5;13;30000;0;11;8;1;27;32;-2;6;0;1;1;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;32;5;17;30000;0;22;8;1;16;32;-2;0;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;32;5;32;30000;0;24;32;1;9;32;-1;6;0;0;1;1;1;2;0;1;0 NVIDIA H100 PCIe [0xa32d];3;32;13;4;30000;0;24;8;1;1;1;-2;6;1;1;0;1;1;0;2;0;0 NVIDIA H100 PCIe [0xa32d];3;32;13;5;30000;0;22;8;1;10;1;0;6;1;0;0;1;1;2;0;0;0 NVIDIA H100 PCIe [0xa32d];3;32;13;13;30000;0;20;8;1;18;1;1;5;0;1;0;1;0;0;0;0;0 NVIDIA H100 PCIe [0xa32d];3;32;13;17;30000;0;22;8;1;9;1;-1;6;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;32;13;32;30000;0;11;8;1;16;1;-1;1;0;1;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;32;17;4;30000;0;22;32;1;5;1;-2;0;0;0;0;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;32;17;5;30000;0;22;32;1;9;0;-1;1;0;0;1;1;1;1;0;0;0 NVIDIA H100 PCIe [0xa32d];3;32;17;13;30000;0;22;32;1;22;0;-1;0;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;32;17;17;30000;0;22;32;1;7;0;0;1;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;32;17;32;30000;0;22;32;1;28;1;-1;0;0;1;1;1;1;1;1;0;0 NVIDIA H100 PCIe [0xa32d];3;32;32;4;30000;0;33;32;1;10;0;1;1;0;0;1;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;32;32;5;30000;0;33;32;1;11;0;0;-1;1;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;32;32;13;30000;0;34;32;1;7;1;0;1;0;0;0;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;32;32;17;30000;0;24;32;1;28;1;0;-1;1;0;1;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;32;32;32;30000;0;25;32;1;29;1;-1;-2;1;0;1;1;1;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;35;35;35;30000;0;22;35;1;23;1;1;0;0;0;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;36;36;36;30000;0;22;36;1;23;0;0;0;0;0;0;1;0;1;2;0;0 NVIDIA H100 PCIe [0xa32d];3;40;40;40;30000;0;44;40;1;22;1;-1;0;0;0;0;1;0;1;2;0;0 ================================================ FILE: src/acc/opencl/smm/params/tune_multiply_Mi250.csv ================================================ DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC gfx90a [0x989f];3;1;1;1;30000;0;8;1;1;1;1;1;0;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;3;3;3;30000;0;10;3;1;3;1;-1;0;0;1;1;1;0;2;0;0;0 gfx90a [0x989f];3;3;3;4;30000;0;25;3;1;2;1;0;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;3;3;5;30000;0;29;3;1;2;1;-1;-2;0;1;0;1;0;2;2;1;0 gfx90a [0x989f];3;3;3;6;30000;0;29;3;1;2;1;-2;-2;0;1;1;1;0;0;0;0;0 gfx90a [0x989f];3;3;3;7;30000;0;29;3;1;2;1;-1;0;0;1;1;1;0;2;2;1;0 gfx90a [0x989f];3;3;3;8;30000;0;9;3;1;2;1;-2;-1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;3;3;9;30000;0;9;3;1;2;1;-2;0;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;3;3;10;30000;0;37;3;1;1;1;0;0;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;3;3;11;30000;0;8;3;1;3;1;1;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;3;3;12;30000;0;6;3;1;3;1;-2;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;3;3;16;30000;0;9;3;1;1;1;1;-1;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;3;3;23;30000;0;3;3;1;1;1;-1;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;3;4;3;30000;0;21;3;1;1;1;0;-1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;3;4;4;30000;0;25;3;1;2;1;0;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;3;5;3;30000;0;18;3;1;1;1;1;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;3;5;5;30000;0;25;3;1;2;1;-1;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;3;6;3;30000;0;15;3;1;1;1;1;0;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;3;6;6;30000;0;25;3;1;3;1;-1;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;3;7;3;30000;0;15;3;1;2;1;-1;0;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;3;7;7;30000;0;29;3;1;1;1;-1;0;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;3;8;3;30000;0;15;3;1;2;1;1;-1;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;3;8;8;30000;0;29;3;1;1;1;0;0;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;3;9;3;30000;0;15;3;1;1;1;-1;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;3;9;9;30000;0;25;3;1;3;1;0;-2;0;1;1;1;0;0;2;1;0 gfx90a [0x989f];3;3;10;3;30000;0;15;3;1;1;1;-2;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;3;10;10;30000;0;25;3;1;1;1;0;-2;0;0;1;1;0;2;2;0;0 gfx90a [0x989f];3;3;11;3;30000;0;15;3;1;3;1;0;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;3;11;11;30000;0;30;3;1;1;1;1;0;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;3;12;3;30000;0;15;3;1;1;1;-1;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;3;12;12;30000;0;25;3;1;2;1;-2;-1;0;0;0;1;0;2;1;0;0 gfx90a [0x989f];3;3;16;3;30000;0;15;3;1;2;1;0;0;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;3;16;16;30000;0;40;3;1;1;1;-2;0;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;3;23;3;30000;0;15;3;1;3;1;0;0;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;3;23;23;30000;0;50;3;1;3;1;-1;0;0;1;0;1;1;0;0;1;0 gfx90a [0x989f];3;4;3;3;30000;0;18;4;1;3;1;1;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;4;3;4;30000;0;25;4;1;2;1;-1;-1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;4;4;3;30000;0;21;4;1;2;1;-2;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;4;4;4;30000;0;16;4;1;2;1;1;3;1;1;1;1;0;0;0;0;0 gfx90a [0x989f];3;4;4;5;30000;0;9;4;1;2;1;-1;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;4;4;6;30000;0;29;4;1;3;1;0;0;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;4;4;7;30000;0;29;4;1;2;1;-1;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;4;4;8;30000;0;9;4;1;2;1;-2;0;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;4;4;9;30000;0;25;4;1;3;1;1;-1;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;4;4;10;30000;0;25;4;1;2;1;0;-1;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;4;4;11;30000;0;25;4;1;4;1;0;-1;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;4;4;12;30000;0;29;4;1;4;1;1;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;4;4;16;30000;0;4;4;1;2;1;-1;-1;0;1;0;1;0;0;0;0;0 gfx90a [0x989f];3;4;4;23;30000;0;30;4;1;3;1;0;0;0;1;0;1;0;0;2;1;0 gfx90a [0x989f];3;4;5;4;30000;0;25;4;1;2;1;0;3;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;4;5;5;30000;0;25;4;1;1;1;-1;0;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;4;6;4;30000;0;21;4;1;2;1;-1;1;0;1;1;1;0;0;2;0;0 gfx90a [0x989f];3;4;6;6;30000;0;25;4;1;3;1;1;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;4;7;4;30000;0;21;4;1;1;1;-2;0;0;1;1;1;0;0;0;0;0 gfx90a [0x989f];3;4;7;7;30000;0;25;4;1;4;1;0;-2;0;1;0;1;0;2;2;1;0 gfx90a [0x989f];3;4;8;4;30000;0;25;4;1;3;1;1;-1;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;4;8;8;30000;0;9;4;1;2;1;0;-1;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;4;9;4;30000;0;20;4;1;4;1;1;0;0;1;0;1;0;2;0;1;0 gfx90a [0x989f];3;4;9;9;30000;0;26;4;1;3;1;1;-1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;4;10;4;30000;0;20;4;1;4;1;0;-1;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;4;10;10;30000;0;25;4;1;2;1;0;0;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;4;11;4;30000;0;18;4;1;1;1;0;-1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;4;11;11;30000;0;30;4;1;4;1;0;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;4;12;4;30000;0;20;4;1;3;1;-1;-2;0;1;0;1;0;2;2;0;0 gfx90a [0x989f];3;4;12;12;30000;0;40;4;1;4;1;1;-1;0;1;1;1;1;2;0;1;0 gfx90a [0x989f];3;4;16;4;30000;0;20;4;1;1;1;1;-1;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;4;16;16;30000;0;30;4;1;1;1;1;-1;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;4;23;4;30000;0;24;4;1;2;1;-2;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;4;23;23;30000;0;25;4;1;1;1;-2;-1;0;0;0;1;0;0;1;0;0 gfx90a [0x989f];3;5;3;3;30000;0;18;5;1;5;1;0;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;5;3;5;30000;0;12;5;1;2;1;1;0;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;5;4;4;30000;0;24;5;1;4;1;0;0;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;5;4;5;30000;0;9;5;1;5;1;0;-1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;5;5;3;30000;0;20;5;1;2;1;-1;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;5;5;4;30000;0;9;5;1;2;1;0;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;5;5;5;30000;0;10;5;1;2;1;0;-1;0;1;1;1;1;0;0;0;0 gfx90a [0x989f];3;5;5;6;30000;0;9;5;1;4;1;-2;-1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;5;5;7;30000;0;20;5;1;2;1;0;1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;5;5;8;30000;0;24;5;1;3;1;-1;-1;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;5;5;9;30000;0;25;5;1;5;1;0;0;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;5;5;10;30000;0;25;5;1;2;1;1;-1;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;5;5;11;30000;0;25;5;1;2;1;0;1;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;5;5;12;30000;0;12;5;1;3;1;-2;0;0;1;1;1;0;2;0;0;0 gfx90a [0x989f];3;5;5;16;30000;0;25;5;1;5;1;1;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;5;5;23;30000;0;30;5;1;3;5;0;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;5;6;5;30000;0;20;5;1;4;1;-1;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;5;6;6;30000;0;9;5;1;5;1;0;-1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;5;7;5;30000;0;9;5;1;1;1;1;-1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;5;7;7;30000;0;20;5;1;3;1;0;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;5;8;5;30000;0;12;5;1;5;1;-1;0;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;5;8;8;30000;0;20;5;1;5;1;1;0;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;5;9;5;30000;0;20;5;1;2;1;1;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;5;9;9;30000;0;25;5;1;2;1;1;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;5;10;5;30000;0;20;5;1;4;1;-1;-1;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;5;10;10;30000;0;25;5;1;2;1;-1;0;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;5;11;5;30000;0;20;5;1;5;1;1;0;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;5;11;11;30000;0;25;5;1;3;1;-1;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;5;12;5;30000;0;20;5;1;4;1;-1;0;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;5;12;12;30000;0;25;5;1;5;1;0;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;5;16;5;30000;0;20;5;1;4;1;-1;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;5;16;16;30000;0;26;5;1;4;1;0;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;5;23;5;30000;0;24;5;1;2;1;-2;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;5;23;23;30000;0;24;5;1;1;1;-2;-1;0;0;1;1;1;0;1;0;0 gfx90a [0x989f];3;6;3;3;30000;0;16;6;1;4;1;-2;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;6;3;6;30000;0;15;6;1;6;1;-1;0;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;6;4;4;30000;0;18;6;1;4;1;-1;-1;0;1;0;1;0;0;0;0;0 gfx90a [0x989f];3;6;4;6;30000;0;15;6;1;3;1;0;0;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;6;5;5;30000;0;12;6;1;2;1;1;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;6;5;6;30000;0;15;6;1;5;1;-1;0;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;6;6;3;30000;0;15;6;1;3;1;-1;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;6;6;4;30000;0;15;6;1;2;1;-1;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;6;6;5;30000;0;9;6;1;6;1;1;-1;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;6;6;6;30000;0;12;6;1;6;1;-2;-1;0;1;1;1;1;2;0;0;0 gfx90a [0x989f];3;6;6;7;30000;0;12;6;1;4;1;-1;-1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;6;6;8;30000;0;20;6;1;4;1;-2;-2;0;1;0;1;0;2;0;0;0 gfx90a [0x989f];3;6;6;9;30000;0;20;6;1;6;1;0;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;6;6;10;30000;0;15;6;1;1;1;-2;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;6;6;11;30000;0;24;6;1;5;1;-1;0;1;0;1;1;1;2;2;0;0 gfx90a [0x989f];3;6;6;12;30000;0;20;6;1;6;1;-1;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;6;6;16;30000;0;25;6;1;4;1;0;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;6;6;23;30000;0;15;6;1;1;1;0;-2;0;0;1;1;0;2;2;0;0 gfx90a [0x989f];3;6;7;6;30000;0;15;6;1;3;1;1;0;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;6;7;7;30000;0;15;6;1;4;1;1;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;6;8;6;30000;0;15;6;1;5;1;-1;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;6;8;8;30000;0;20;6;1;5;1;-2;0;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;6;9;6;30000;0;15;6;1;4;1;-2;0;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;6;9;9;30000;0;9;6;1;1;1;-1;-1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;6;10;6;30000;0;15;6;1;4;1;-2;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;6;10;10;30000;0;25;6;1;1;1;0;-1;0;1;1;1;1;0;0;0;0 gfx90a [0x989f];3;6;11;6;30000;0;15;6;1;2;1;-1;0;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;6;11;11;30000;0;25;6;1;1;1;-2;-2;0;1;1;1;1;2;0;0;0 gfx90a [0x989f];3;6;12;6;30000;0;15;6;1;6;1;-2;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;6;12;12;30000;0;24;6;1;2;1;-2;-1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;6;16;6;30000;0;20;6;1;6;1;1;-1;1;1;0;1;1;0;0;0;0 gfx90a [0x989f];3;6;16;16;30000;0;26;6;1;1;1;0;0;1;1;0;1;1;2;2;1;0 gfx90a [0x989f];3;6;23;6;30000;0;24;6;1;6;1;1;0;1;0;1;1;1;0;0;0;0 gfx90a [0x989f];3;6;23;23;30000;0;24;6;1;5;1;0;-2;0;0;0;1;0;2;1;0;0 gfx90a [0x989f];3;7;3;3;30000;0;15;7;1;2;1;-1;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;7;3;7;30000;0;12;7;1;4;1;-2;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;7;4;4;30000;0;15;7;1;3;1;0;-2;0;1;1;1;0;0;2;0;0 gfx90a [0x989f];3;7;4;7;30000;0;12;7;1;2;1;0;0;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;7;5;5;30000;0;12;7;1;3;1;-1;1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;7;5;7;30000;0;12;7;1;3;1;1;0;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;7;6;6;30000;0;12;7;1;3;1;-1;1;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;7;6;7;30000;0;12;7;1;2;1;0;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;7;7;3;30000;0;15;7;1;4;1;0;-1;0;1;0;1;0;0;2;0;0 gfx90a [0x989f];3;7;7;4;30000;0;18;7;1;3;1;1;1;0;0;0;1;1;2;2;0;0 gfx90a [0x989f];3;7;7;5;30000;0;12;7;1;6;1;1;-2;0;1;1;1;0;2;0;0;0 gfx90a [0x989f];3;7;7;6;30000;0;15;7;1;6;1;-1;0;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;7;7;7;30000;0;12;7;1;2;1;1;0;0;1;0;1;1;0;0;0;0 gfx90a [0x989f];3;7;7;8;30000;0;13;7;1;6;1;-1;-2;1;1;1;1;1;0;0;0;0 gfx90a [0x989f];3;7;7;9;30000;0;15;7;1;1;1;-2;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;7;7;10;30000;0;15;7;1;7;1;-1;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;7;7;11;30000;0;15;7;1;1;1;-1;-2;0;0;1;1;1;2;2;0;0 gfx90a [0x989f];3;7;7;12;30000;0;12;7;1;1;1;1;-2;1;1;1;1;1;2;2;1;0 gfx90a [0x989f];3;7;7;16;30000;0;15;7;1;1;1;-1;-2;1;1;0;1;1;2;1;0;0 gfx90a [0x989f];3;7;7;23;30000;0;12;7;1;1;7;-2;0;0;0;1;1;1;2;1;0;0 gfx90a [0x989f];3;7;8;7;30000;0;15;7;1;3;1;-2;1;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;7;8;8;30000;0;20;7;1;7;1;-1;-1;0;1;0;1;1;0;2;1;0 gfx90a [0x989f];3;7;9;7;30000;0;20;7;1;6;1;-2;0;0;1;1;1;1;2;0;1;0 gfx90a [0x989f];3;7;9;9;30000;0;15;7;1;1;1;1;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;7;10;7;30000;0;20;7;1;4;1;1;0;0;1;0;1;1;2;0;0;0 gfx90a [0x989f];3;7;10;10;30000;0;15;7;1;1;1;-2;0;1;0;0;1;0;2;2;1;0 gfx90a [0x989f];3;7;11;7;30000;0;20;7;1;6;1;-2;0;0;1;0;1;1;2;2;0;0 gfx90a [0x989f];3;7;11;11;30000;0;15;7;1;1;1;1;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;7;12;7;30000;0;24;7;1;2;1;1;-1;1;0;0;1;1;0;0;0;0 gfx90a [0x989f];3;7;12;12;30000;0;13;7;1;7;1;0;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;7;16;7;30000;0;24;7;1;7;1;0;-2;1;1;0;1;1;2;2;1;0 gfx90a [0x989f];3;7;16;16;30000;0;24;7;1;7;1;0;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;7;23;7;30000;0;25;7;1;3;1;-2;1;1;1;1;1;1;0;0;0;0 gfx90a [0x989f];3;7;23;23;30000;0;24;7;1;1;1;1;-2;1;0;1;1;1;2;0;1;0 gfx90a [0x989f];3;8;3;3;30000;0;15;8;1;4;1;1;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;8;3;8;30000;0;15;8;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;8;4;4;30000;0;9;8;1;1;1;-2;-1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;8;4;8;30000;0;7;8;1;1;1;1;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;8;5;5;30000;0;12;8;1;2;1;-1;4;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;8;5;8;30000;0;15;8;1;1;1;1;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;8;6;6;30000;0;12;8;1;8;1;-2;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;8;6;8;30000;0;15;8;1;1;1;-2;-1;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;8;7;7;30000;0;13;8;1;5;1;1;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;8;7;8;30000;0;20;8;1;6;1;-1;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;8;8;3;30000;0;15;8;1;1;1;1;-1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;8;8;4;30000;0;15;8;1;7;1;0;-1;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;8;8;5;30000;0;15;8;1;8;1;0;-1;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;8;8;6;30000;0;15;8;1;4;1;0;0;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;8;8;7;30000;0;15;8;1;4;1;1;-1;1;1;1;1;1;0;0;1;0 gfx90a [0x989f];3;8;8;8;30000;0;10;8;1;3;1;-1;0;0;1;1;1;1;0;2;1;0 gfx90a [0x989f];3;8;8;16;30000;0;12;8;1;1;1;-1;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;8;8;23;30000;0;12;8;1;1;1;1;-2;1;1;0;1;1;2;1;0;0 gfx90a [0x989f];3;8;16;8;30000;0;24;8;1;2;1;-1;1;1;1;1;1;1;0;2;1;0 gfx90a [0x989f];3;8;16;16;30000;0;20;8;1;1;1;1;-2;1;1;0;1;1;0;2;1;0 gfx90a [0x989f];3;8;23;8;30000;0;26;8;1;8;1;1;-1;1;1;1;1;1;2;2;1;0 gfx90a [0x989f];3;8;23;23;30000;0;24;8;1;8;1;0;-2;0;0;0;1;0;0;1;0;0 gfx90a [0x989f];3;9;3;3;30000;0;9;9;1;9;1;-1;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;9;3;9;30000;0;10;9;1;1;1;-2;0;0;1;1;1;1;2;2;0;0 gfx90a [0x989f];3;9;4;4;30000;0;12;9;1;1;1;1;0;0;0;1;1;0;2;2;0;0 gfx90a [0x989f];3;9;4;9;30000;0;15;9;1;6;1;1;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;9;5;5;30000;0;13;9;1;9;1;-2;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;9;5;9;30000;0;10;9;1;1;1;-2;0;1;1;0;1;1;2;0;0;0 gfx90a [0x989f];3;9;6;6;30000;0;15;9;1;4;1;-1;1;0;1;1;1;1;0;0;1;0 gfx90a [0x989f];3;9;6;9;30000;0;10;9;1;1;1;0;-2;1;1;1;1;1;0;2;0;0 gfx90a [0x989f];3;9;7;7;30000;0;13;9;1;1;1;1;-2;0;1;0;1;1;2;0;0;0 gfx90a [0x989f];3;9;7;9;30000;0;13;9;1;1;1;-2;0;1;1;1;1;1;2;0;1;0 gfx90a [0x989f];3;9;9;3;30000;0;15;9;1;4;1;1;-1;0;1;0;1;1;0;0;0;0 gfx90a [0x989f];3;9;9;4;30000;0;15;9;1;4;1;-1;-1;0;1;0;1;1;2;2;0;0 gfx90a [0x989f];3;9;9;5;30000;0;15;9;1;2;1;0;1;0;1;0;1;1;2;0;0;0 gfx90a [0x989f];3;9;9;6;30000;0;24;9;1;2;1;1;-2;0;0;1;1;1;0;0;1;0 gfx90a [0x989f];3;9;9;7;30000;0;9;9;1;9;1;-1;0;1;1;1;1;1;0;0;1;0 gfx90a [0x989f];3;9;9;9;30000;0;10;9;1;3;1;0;-1;0;1;1;1;1;0;2;1;0 gfx90a [0x989f];3;9;9;16;30000;0;12;9;1;1;1;1;-2;0;0;1;1;1;2;2;0;0 gfx90a [0x989f];3;9;9;23;30000;0;15;9;1;1;1;-1;-1;0;1;1;1;1;2;2;0;0 gfx90a [0x989f];3;9;16;9;30000;0;24;9;1;8;1;0;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;9;16;16;30000;0;12;9;1;1;1;1;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;9;23;9;30000;0;26;9;1;8;1;0;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;9;23;23;30000;0;3;8;1;5;1;0;2;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;10;3;3;30000;0;10;10;1;8;1;0;-2;0;1;0;1;1;2;0;0;0 gfx90a [0x989f];3;10;3;10;30000;0;12;10;1;1;1;-1;-2;0;0;1;1;1;2;0;0;0 gfx90a [0x989f];3;10;4;4;30000;0;13;10;1;3;1;-2;-1;1;1;0;1;1;0;2;0;0 gfx90a [0x989f];3;10;4;10;30000;0;12;10;1;1;1;0;0;0;1;1;1;1;2;2;0;0 gfx90a [0x989f];3;10;5;5;30000;0;15;10;1;3;1;-1;-2;0;1;1;1;1;0;0;1;0 gfx90a [0x989f];3;10;5;10;30000;0;10;10;1;1;1;-2;0;1;0;1;1;1;2;2;0;0 gfx90a [0x989f];3;10;6;6;30000;0;9;10;1;1;1;-1;-1;1;1;1;1;1;2;0;1;0 gfx90a [0x989f];3;10;6;10;30000;0;12;10;1;1;1;0;0;1;1;0;1;1;0;0;0;0 gfx90a [0x989f];3;10;7;7;30000;0;20;10;1;8;1;1;0;0;1;1;1;1;2;2;0;0 gfx90a [0x989f];3;10;7;10;30000;0;9;10;1;1;1;1;-2;0;1;0;1;1;2;0;0;0 gfx90a [0x989f];3;10;10;3;30000;0;15;10;1;10;0;1;-1;1;1;1;1;1;0;0;0;0 gfx90a [0x989f];3;10;10;4;30000;0;20;10;1;5;1;0;1;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;10;10;5;30000;0;15;10;1;3;0;0;0;0;0;0;1;1;2;2;1;0 gfx90a [0x989f];3;10;10;6;30000;0;25;10;1;7;1;0;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;10;10;7;30000;0;15;10;1;1;1;0;0;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;10;10;10;30000;0;10;10;1;9;1;0;-2;0;1;1;1;1;0;1;0;0 gfx90a [0x989f];3;10;10;16;30000;0;12;10;1;1;1;-2;0;0;1;1;1;0;2;0;0;0 gfx90a [0x989f];3;10;10;23;30000;0;15;10;1;1;1;1;0;0;1;1;1;1;2;2;0;0 gfx90a [0x989f];3;10;16;10;30000;0;13;10;1;1;1;-2;0;1;1;0;1;1;2;0;0;0 gfx90a [0x989f];3;10;16;16;30000;0;15;10;1;1;1;-1;0;0;0;1;1;1;2;2;1;0 gfx90a [0x989f];3;10;23;10;30000;0;24;10;1;4;1;-1;-1;0;1;1;1;1;0;0;1;0 gfx90a [0x989f];3;10;23;23;30000;0;3;10;1;4;1;-2;2;0;0;0;1;0;1;0;0;0 gfx90a [0x989f];3;11;3;3;30000;0;9;11;1;6;1;0;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;11;3;11;30000;0;10;11;1;1;1;-1;-2;0;1;1;1;1;0;2;1;0 gfx90a [0x989f];3;11;4;4;30000;0;13;11;1;3;1;0;-1;0;1;0;1;1;0;2;0;0 gfx90a [0x989f];3;11;4;11;30000;0;12;11;1;1;1;-2;0;0;1;1;1;1;2;2;0;0 gfx90a [0x989f];3;11;5;5;30000;0;10;11;1;1;1;0;-2;0;1;1;1;1;0;0;0;0 gfx90a [0x989f];3;11;5;11;30000;0;10;11;1;1;1;0;0;0;0;0;1;1;0;2;0;0 gfx90a [0x989f];3;11;6;6;30000;0;12;11;1;6;1;1;0;0;1;1;1;1;2;1;0;0 gfx90a [0x989f];3;11;6;11;30000;0;12;11;1;1;1;-1;0;0;1;1;1;1;2;2;0;0 gfx90a [0x989f];3;11;7;7;30000;0;13;11;1;1;1;-1;0;0;1;1;1;1;2;0;0;0 gfx90a [0x989f];3;11;7;11;30000;0;5;8;1;7;1;-1;2;0;0;0;1;0;1;0;0;0 gfx90a [0x989f];3;11;11;3;30000;0;22;11;1;2;1;-1;1;0;1;0;1;1;2;0;1;0 gfx90a [0x989f];3;11;11;4;30000;0;20;11;1;2;1;-1;-2;0;1;1;1;1;0;0;0;0 gfx90a [0x989f];3;11;11;5;30000;0;20;11;1;5;1;-2;1;0;1;1;1;1;2;0;1;0 gfx90a [0x989f];3;11;11;6;30000;0;24;11;1;1;1;-2;0;0;0;0;1;1;2;2;0;0 gfx90a [0x989f];3;11;11;7;30000;0;9;8;1;9;1;1;1;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;11;11;11;30000;0;12;11;1;10;1;-2;-2;0;1;0;1;1;2;0;0;0 gfx90a [0x989f];3;11;11;16;30000;0;3;8;1;11;1;1;-1;1;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;11;11;23;30000;0;15;11;1;1;1;1;-1;0;1;1;1;1;2;2;0;0 gfx90a [0x989f];3;11;16;11;30000;0;15;11;1;1;1;0;-2;0;1;0;1;1;2;2;0;0 gfx90a [0x989f];3;11;16;16;30000;0;3;8;1;1;1;-1;-1;1;1;0;1;0;1;2;0;0 gfx90a [0x989f];3;11;23;11;30000;0;40;11;1;1;1;-1;-2;1;0;0;1;1;2;0;1;0 gfx90a [0x989f];3;11;23;23;30000;0;3;8;1;7;1;-1;2;0;1;0;1;0;1;2;1;0 gfx90a [0x989f];3;12;3;3;30000;0;15;12;1;2;1;-1;-2;0;1;0;1;0;0;0;0;0 gfx90a [0x989f];3;12;3;12;30000;0;10;12;1;1;1;1;-2;0;0;1;1;1;0;2;1;0 gfx90a [0x989f];3;12;4;4;30000;0;11;12;1;12;1;0;0;0;1;0;1;1;0;0;0;0 gfx90a [0x989f];3;12;4;12;30000;0;12;12;1;1;12;1;0;0;0;1;1;1;0;2;1;0 gfx90a [0x989f];3;12;5;5;30000;0;10;12;1;7;1;0;0;0;1;1;1;1;2;0;0;0 gfx90a [0x989f];3;12;5;12;30000;0;12;12;1;1;1;0;-2;0;1;1;1;1;2;0;0;0 gfx90a [0x989f];3;12;6;6;30000;0;13;12;1;1;1;1;-2;0;1;0;1;1;0;0;1;0 gfx90a [0x989f];3;12;6;12;30000;0;12;12;1;1;1;-1;-2;1;1;1;1;1;2;0;1;0 gfx90a [0x989f];3;12;7;7;30000;0;15;12;1;1;1;0;0;1;1;1;1;1;2;0;1;0 gfx90a [0x989f];3;12;7;12;30000;0;12;12;1;1;1;-1;0;0;1;1;1;1;0;2;1;0 gfx90a [0x989f];3;12;12;3;30000;0;20;12;1;12;0;-2;-2;0;1;0;1;0;2;2;0;0 gfx90a [0x989f];3;12;12;4;30000;0;20;12;1;9;0;0;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;12;12;5;30000;0;9;12;1;2;1;-1;2;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;12;12;6;30000;0;15;12;1;12;1;-2;-2;0;0;0;1;0;0;0;0;0 gfx90a [0x989f];3;12;12;7;30000;0;15;12;1;1;1;-2;-2;0;0;0;1;0;2;0;0;0 gfx90a [0x989f];3;12;12;12;30000;0;12;12;1;8;1;0;0;0;1;0;1;1;0;1;0;0 gfx90a [0x989f];3;12;12;16;30000;0;12;12;1;1;1;-1;-2;0;0;0;1;0;2;1;0;0 gfx90a [0x989f];3;12;12;23;30000;0;4;8;1;2;1;1;2;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;12;16;12;30000;0;4;8;1;5;1;0;1;0;0;0;1;0;1;0;0;0 gfx90a [0x989f];3;12;16;16;30000;0;15;12;1;1;1;1;0;0;0;1;1;1;2;2;0;0 gfx90a [0x989f];3;12;23;12;30000;0;20;12;1;1;1;0;-2;0;0;1;1;1;2;2;1;0 gfx90a [0x989f];3;12;23;23;30000;0;3;8;1;8;1;-2;-2;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;13;13;13;30000;0;12;13;1;11;1;0;-1;0;1;0;1;1;0;2;1;0 gfx90a [0x989f];3;13;13;23;30000;0;12;13;1;1;1;-2;-2;0;1;0;1;1;2;0;1;0 gfx90a [0x989f];3;13;13;32;30000;0;3;13;1;9;13;0;2;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;13;23;13;30000;0;30;8;1;10;1;1;2;0;0;0;1;0;1;0;0;0 gfx90a [0x989f];3;13;23;23;30000;0;3;8;1;6;1;-1;2;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;14;14;14;30000;0;10;14;1;10;1;0;0;0;1;1;1;1;0;2;0;0 gfx90a [0x989f];3;14;14;23;30000;0;15;14;1;1;1;-2;0;0;1;1;1;1;2;0;1;0 gfx90a [0x989f];3;14;14;29;30000;0;4;8;1;5;14;0;1;0;0;0;1;0;1;0;0;0 gfx90a [0x989f];3;14;14;32;30000;0;3;8;1;9;1;1;2;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;14;23;14;30000;0;26;8;1;2;1;-2;1;0;0;0;1;0;1;0;0;0 gfx90a [0x989f];3;14;23;23;30000;0;40;8;1;3;1;1;2;0;0;0;1;0;1;0;0;0 gfx90a [0x989f];3;14;29;14;30000;0;40;8;1;14;1;-1;1;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;14;29;29;30000;0;3;8;1;7;1;1;1;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;14;29;32;30000;0;3;8;1;4;1;1;1;0;1;1;1;0;1;2;1;0 gfx90a [0x989f];3;14;32;14;30000;0;50;8;1;14;1;1;3;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;14;32;29;30000;0;3;8;1;2;1;1;4;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;14;32;32;30000;0;40;8;1;4;1;1;4;0;1;0;1;1;1;0;1;0 gfx90a [0x989f];3;15;15;15;30000;0;5;8;1;3;1;0;0;0;1;1;1;0;1;0;1;0 gfx90a [0x989f];3;15;15;23;30000;0;4;8;1;15;1;0;0;1;1;1;1;0;1;0;1;0 gfx90a [0x989f];3;15;23;15;30000;0;4;8;1;11;1;0;-2;1;1;1;1;0;1;2;1;0 gfx90a [0x989f];3;15;23;23;30000;0;4;8;1;6;1;-1;3;1;1;0;1;0;1;2;1;0 gfx90a [0x989f];3;16;3;3;30000;0;15;16;1;10;0;-1;-2;0;1;0;1;1;0;0;0;0 gfx90a [0x989f];3;16;3;16;30000;0;15;16;1;1;1;-2;0;0;1;0;1;1;2;0;1;0 gfx90a [0x989f];3;16;4;4;30000;0;12;16;1;6;1;0;-1;0;1;0;1;1;0;0;1;0 gfx90a [0x989f];3;16;4;16;30000;0;4;8;1;7;1;0;-1;1;0;0;1;0;1;0;0;0 gfx90a [0x989f];3;16;5;5;30000;0;21;8;1;7;1;-2;-2;0;0;1;1;0;1;2;0;0 gfx90a [0x989f];3;16;5;16;30000;0;8;8;1;6;1;-1;2;0;1;0;1;0;1;0;0;0 gfx90a [0x989f];3;16;6;6;30000;0;9;16;1;1;1;1;-2;1;0;1;1;1;2;0;1;0 gfx90a [0x989f];3;16;6;16;30000;0;12;16;1;1;1;1;0;0;1;1;1;1;2;0;1;0 gfx90a [0x989f];3;16;7;7;30000;0;10;16;1;1;0;-2;0;0;1;1;1;1;2;2;1;0 gfx90a [0x989f];3;16;7;16;30000;0;24;16;1;13;1;0;0;0;1;0;1;1;2;2;0;0 gfx90a [0x989f];3;16;8;8;30000;0;24;16;1;3;0;-2;-1;0;0;0;1;1;2;2;1;0 gfx90a [0x989f];3;16;8;16;30000;0;7;8;1;4;1;0;0;1;0;1;1;0;1;2;0;0 gfx90a [0x989f];3;16;9;9;30000;0;6;8;1;3;1;-2;1;1;1;0;1;1;1;0;0;0 gfx90a [0x989f];3;16;9;16;30000;0;4;8;1;5;1;-2;2;1;1;1;1;0;1;2;0;0 gfx90a [0x989f];3;16;10;10;30000;0;30;16;1;9;0;-1;2;0;1;0;1;0;1;0;0;0 gfx90a [0x989f];3;16;10;16;30000;0;5;8;1;5;1;-2;0;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;16;11;11;30000;0;25;8;1;4;1;0;-1;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;16;11;16;30000;0;30;8;1;14;1;-1;1;0;0;0;1;0;1;0;0;0 gfx90a [0x989f];3;16;12;12;30000;0;5;8;1;1;1;1;2;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;16;12;16;30000;0;5;16;1;14;1;0;2;0;0;0;1;0;1;0;0;0 gfx90a [0x989f];3;16;16;3;30000;0;24;16;1;11;1;-1;-2;0;0;0;1;0;0;2;0;0 gfx90a [0x989f];3;16;16;4;30000;0;24;16;1;1;1;0;2;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;16;16;5;30000;0;20;16;1;1;1;0;-2;1;0;0;1;1;2;2;1;0 gfx90a [0x989f];3;16;16;6;30000;0;25;8;1;15;1;-1;2;1;0;0;1;1;1;0;0;0 gfx90a [0x989f];3;16;16;7;30000;0;25;16;1;9;1;-2;2;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;16;16;8;30000;0;25;16;1;10;1;0;2;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;16;16;9;30000;0;25;8;1;6;1;-2;2;1;1;1;1;0;1;2;0;0 gfx90a [0x989f];3;16;16;10;30000;0;25;8;1;4;1;0;3;1;1;0;1;0;1;2;0;0 gfx90a [0x989f];3;16;16;11;30000;0;25;8;1;8;1;1;2;1;1;0;1;0;1;2;0;0 gfx90a [0x989f];3;16;16;12;30000;0;25;8;1;7;1;-2;-2;1;0;1;1;0;1;2;0;0 gfx90a [0x989f];3;16;16;16;30000;0;12;16;1;2;1;1;-1;0;1;1;1;1;2;0;1;0 gfx90a [0x989f];3;16;16;23;30000;0;4;8;1;4;1;0;-1;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;16;23;16;30000;0;40;8;1;4;1;-2;-1;1;1;1;1;0;1;2;0;0 gfx90a [0x989f];3;16;23;23;30000;0;50;8;1;15;1;-1;-1;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;17;17;17;30000;0;12;17;1;12;1;-2;-2;0;1;0;1;0;0;2;0;0 gfx90a [0x989f];3;17;17;23;30000;0;3;8;1;11;1;-1;1;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;17;17;32;30000;0;3;8;1;17;17;-1;-2;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;17;17;35;30000;0;3;8;1;17;17;-1;0;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;17;23;17;30000;0;15;17;1;1;1;-2;-2;0;0;0;1;0;2;2;0;0 gfx90a [0x989f];3;17;23;23;30000;0;24;17;1;1;1;-1;0;1;0;0;1;1;2;1;0;0 gfx90a [0x989f];3;17;32;17;30000;0;20;17;1;1;1;0;-2;1;0;0;1;1;2;0;0;0 gfx90a [0x989f];3;17;32;35;30000;0;3;8;1;11;1;1;1;0;1;0;1;0;1;0;1;0 gfx90a [0x989f];3;17;35;17;30000;0;25;17;1;5;1;-2;-1;1;1;0;1;0;1;2;0;0 gfx90a [0x989f];3;17;35;32;30000;0;3;17;1;16;1;0;0;1;1;0;1;0;1;2;0;0 gfx90a [0x989f];3;17;35;35;30000;0;20;17;1;1;1;1;0;1;1;1;1;0;0;0;0;0 gfx90a [0x989f];3;18;18;18;30000;0;4;8;1;6;1;-2;-2;0;0;0;1;0;1;0;0;0 gfx90a [0x989f];3;18;18;23;30000;0;3;8;1;14;1;0;-2;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;18;23;18;30000;0;4;18;1;4;1;1;3;0;0;0;1;0;1;0;0;0 gfx90a [0x989f];3;18;23;23;30000;0;4;8;1;16;1;0;3;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;19;19;19;30000;0;40;8;1;10;1;1;3;0;0;0;1;0;1;2;0;0 gfx90a [0x989f];3;19;19;23;30000;0;40;8;1;15;1;-1;-2;0;0;0;1;0;1;0;0;0 gfx90a [0x989f];3;23;23;23;30000;0;20;23;1;10;23;-2;-2;0;1;1;1;1;2;2;0;0 gfx90a [0x989f];3;28;28;28;30000;0;3;28;1;28;28;-2;2;0;0;0;1;0;1;0;0;0 gfx90a [0x989f];3;32;32;32;30000;0;25;32;1;20;1;-2;0;0;1;0;1;0;2;0;0;0 gfx90a [0x989f];3;35;17;17;30000;0;15;35;1;29;1;1;0;0;1;0;1;0;2;1;0;0 gfx90a [0x989f];3;35;17;32;30000;0;20;35;1;1;1;0;-2;1;1;0;1;1;2;0;0;0 gfx90a [0x989f];3;35;17;35;30000;0;7;35;1;31;1;-2;4;1;0;0;1;1;1;2;1;0 gfx90a [0x989f];3;35;32;17;30000;0;39;35;1;35;1;1;4;0;1;1;1;1;1;0;0;0 gfx90a [0x989f];3;35;32;35;30000;0;3;35;1;31;1;-2;0;1;1;0;1;1;1;2;0;0 gfx90a [0x989f];3;35;35;17;30000;0;33;35;1;20;1;1;4;1;1;1;1;0;1;0;0;0 gfx90a [0x989f];3;35;35;32;30000;0;15;35;1;35;35;-2;0;0;1;0;1;1;2;2;0;0 gfx90a [0x989f];3;35;35;35;30000;0;2;35;1;30;0;1;-1;0;1;0;1;0;1;2;0;0 ================================================ FILE: src/acc/opencl/smm/params/tune_multiply_P100.csv ================================================ DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC Tesla P100-PCIE-16GB [0x2f6c];3;2;2;2;30000;23.4;17;2;1;2;0;-2;0;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;3;3;1;30000;33.4;20;3;1;2;0;-2;-2;0;1;0;1;1;2;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;3;3;3;30000;61.7;20;3;1;2;0;-2;-2;0;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;4;4;4;30000;144.3;17;4;1;2;0;0;0;0;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;5;5;30000;184.7;30;5;1;3;0;0;0;0;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;5;7;30000;190.1;31;5;1;3;0;-1;-2;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;5;13;30000;218.9;60;5;1;4;0;-2;-1;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;5;16;30000;217.4;60;5;1;4;0;-2;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;5;24;30000;222.9;30;5;1;5;0;0;-2;1;1;1;1;1;1;2;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;5;26;30000;227.5;40;5;1;4;0;-1;-2;0;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;7;5;30000;246.9;20;5;1;2;0;0;-2;0;1;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;7;7;30000;270.9;25;5;1;3;0;-2;-2;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;7;13;30000;294.2;30;5;1;5;0;0;-1;0;1;1;1;1;1;0;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;13;5;30000;396.8;20;5;1;4;0;0;-2;1;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;13;7;30000;449.7;26;5;1;4;0;1;-2;1;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;13;13;30000;498.4;40;5;1;2;0;0;-2;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;13;16;30000;461.2;20;5;1;3;0;0;-2;1;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;13;24;30000;494.4;60;5;1;4;0;-1;-1;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;13;26;30000;486.0;30;5;1;4;0;-1;-1;1;1;0;1;1;1;2;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;16;5;30000;454.9;24;5;1;3;0;-2;0;1;1;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;16;13;30000;578.2;25;5;1;2;0;1;0;1;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;16;16;30000;597.7;30;5;1;2;0;-2;-2;0;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;16;24;30000;597.0;30;5;1;3;0;-2;-2;1;1;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;16;26;30000;594.9;30;5;1;4;0;-2;-1;1;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;24;5;30000;553.6;24;5;1;3;0;0;0;1;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;24;13;30000;677.3;40;5;1;4;0;-1;-2;0;0;0;1;1;1;2;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;24;16;30000;664.1;50;5;1;3;0;1;-1;0;1;1;1;1;1;0;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;24;24;30000;734.9;50;5;1;5;0;-1;-1;0;1;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;24;26;30000;724.8;50;5;1;2;0;-1;0;0;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;26;5;30000;556.3;24;5;1;2;0;-2;0;0;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;26;13;30000;753.2;60;5;1;2;0;1;1;1;1;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;26;16;30000;744.1;30;5;1;4;0;1;-2;1;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;26;24;30000;658.7;60;5;1;4;0;-1;0;0;0;1;1;1;1;2;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;5;26;26;30000;521.7;7;5;1;3;0;-1;-2;1;1;1;1;1;1;1;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;6;6;6;30000;272.0;25;6;1;5;0;1;0;0;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;7;5;5;30000;158.7;30;7;1;5;0;0;-1;0;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;7;5;7;30000;165.6;30;7;1;7;0;-2;-1;0;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;7;5;13;30000;190.0;1;7;1;5;0;-1;-1;1;0;0;1;0;1;2;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;7;7;5;30000;331.1;25;7;1;2;0;-2;0;0;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;7;7;7;30000;354.4;26;7;1;4;0;-1;-2;0;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;7;7;13;30000;394.8;30;7;1;5;0;0;-2;0;0;1;1;1;1;0;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;7;13;5;30000;494.5;25;7;1;6;0;-1;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;7;13;7;30000;571.0;26;7;1;3;0;-2;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;7;13;13;30000;654.0;30;7;1;2;0;1;0;0;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;8;8;8;30000;471.1;30;8;1;7;0;0;-1;1;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;9;9;9;30000;545.1;30;9;1;6;0;0;-2;0;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;9;9;16;30000;577.2;30;9;1;8;0;0;-1;0;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;9;9;22;30000;566.3;40;9;1;4;0;-1;-1;0;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;9;9;32;30000;546.8;50;9;1;5;0;0;0;0;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;9;16;9;30000;791.8;30;9;1;7;0;0;-2;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;9;16;16;30000;856.2;30;9;1;8;0;-1;0;1;1;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;9;16;22;30000;879.6;50;9;1;4;0;0;0;0;1;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;9;22;9;30000;945.7;40;9;1;8;0;-2;0;0;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;9;22;16;30000;1062.4;40;9;1;3;0;-2;-1;1;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;9;22;22;30000;1065.8;60;9;1;5;0;0;0;0;1;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;9;22;32;30000;1072.5;60;9;1;2;0;0;-2;0;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;9;32;9;30000;1113.6;50;9;1;6;0;1;0;1;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;9;32;22;30000;1351.2;60;9;1;3;0;-2;0;1;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;9;32;32;30000;1398.1;60;9;1;8;0;-2;0;1;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;10;10;10;30000;637.6;30;10;1;2;0;-1;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;5;5;30000;245.9;20;13;1;2;0;1;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;5;7;30000;262.0;24;13;1;12;0;-1;0;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;5;8;30000;268.9;25;13;1;11;0;-1;-1;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;5;13;30000;278.8;30;13;1;4;0;-1;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;5;16;30000;457.6;30;13;1;9;0;-2;-1;0;1;0;1;1;1;2;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;5;24;30000;464.2;40;13;1;13;0;-1;0;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;5;26;30000;437.1;53;13;1;6;0;1;-2;0;0;1;1;1;1;2;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;7;5;30000;347.6;25;13;1;12;0;-1;-2;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;7;7;30000;364.8;24;13;1;5;0;-2;-2;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;7;13;30000;433.8;30;13;1;13;0;1;0;0;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;8;5;30000;388.2;25;13;1;11;0;-2;-1;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;13;5;30000;716.0;26;13;1;12;0;-1;-2;0;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;13;7;30000;808.8;40;13;1;6;0;0;-2;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;13;13;30000;838.5;50;13;1;5;0;-2;-2;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;13;16;30000;875.5;50;13;1;8;0;1;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;13;24;30000;749.0;17;13;1;10;0;-1;0;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;13;26;30000;746.5;5;13;1;6;0;-2;-1;1;0;1;1;1;1;0;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;16;5;30000;770.1;25;13;1;12;0;1;-2;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;16;13;30000;982.7;50;13;1;13;0;-1;-1;1;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;16;16;30000;973.6;60;13;1;7;0;0;-1;0;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;16;24;30000;1050.2;60;13;1;8;0;0;0;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;16;26;30000;975.0;53;13;1;2;0;-1;0;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;24;5;30000;825.2;50;13;1;6;0;-1;-1;0;1;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;24;13;30000;1175.7;40;13;1;6;0;-1;-2;1;1;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;24;16;30000;1263.4;40;13;1;4;0;-2;1;1;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;24;24;30000;1356.1;60;13;1;7;0;1;-1;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;24;26;30000;1209.2;53;13;1;6;0;-1;-1;0;1;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;26;5;30000;874.1;30;13;1;11;0;-2;-1;0;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;26;13;30000;1295.5;60;13;1;13;0;-2;-2;1;1;1;1;1;1;1;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;26;16;30000;1376.1;60;13;1;4;0;1;-2;1;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;26;24;30000;1084.3;54;13;1;8;0;-1;-1;0;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;13;26;26;30000;1427.8;60;13;1;11;0;1;0;0;1;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;14;14;14;30000;908.2;50;14;1;3;0;1;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;14;14;16;30000;947.5;30;14;1;14;0;0;0;0;1;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;14;14;29;30000;834.1;5;14;1;6;0;0;0;0;0;0;1;1;1;1;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;14;16;14;30000;987.5;40;14;1;13;0;-1;-2;1;0;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;14;16;16;30000;1013.9;60;14;1;7;0;-2;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;14;16;29;30000;893.9;4;14;1;4;0;0;0;1;1;1;1;1;1;0;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;14;29;14;30000;1441.8;60;14;1;7;0;-2;-2;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;14;29;16;30000;1521.6;60;14;1;13;0;1;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;14;29;29;30000;1489.4;50;14;1;9;0;0;-1;1;1;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;15;15;15;30000;973.0;30;15;1;12;0;-2;-2;0;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;5;5;0;194.0;23;16;1;0;0;0;0;0;0;0;1;0;0;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;5;13;30000;581.2;50;16;1;16;0;-1;1;0;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;5;16;30000;592.4;40;16;1;12;0;-1;0;0;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;5;24;30000;439.1;6;16;1;14;0;1;1;0;0;1;1;1;1;1;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;5;26;30000;581.3;60;16;1;15;0;0;0;0;0;1;1;1;1;2;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;8;5;30000;462.6;25;16;1;8;0;-2;-2;0;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;8;8;30000;511.4;30;16;1;15;0;0;-2;0;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;9;9;30000;562.2;30;16;1;16;0;1;0;0;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;9;16;30000;634.9;40;16;1;7;0;0;-1;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;9;22;30000;632.4;50;16;1;10;0;-2;-2;0;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;13;5;30000;786.7;24;16;1;15;0;-2;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;13;13;30000;1056.9;25;16;1;2;0;1;1;1;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;13;16;30000;1147.4;30;16;1;4;0;0;-2;0;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;13;24;30000;852.4;5;16;1;10;0;-1;-2;1;0;0;1;1;1;1;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;13;26;30000;1097.1;40;16;1;15;0;1;-1;1;0;1;1;0;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;14;14;30000;1136.9;25;16;1;12;0;1;-2;0;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;14;16;30000;1169.5;30;16;1;14;0;-1;-1;0;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;14;29;30000;901.8;7;16;1;10;0;1;0;0;0;0;1;0;1;1;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;16;5;30000;860.6;25;16;1;16;0;-1;-2;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;16;9;30000;1044.8;50;16;1;7;0;0;0;0;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;16;13;30000;1059.9;50;16;1;15;0;-2;0;0;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;16;14;30000;1083.5;40;16;1;15;0;0;-1;0;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;16;16;30000;1099.0;40;16;1;14;0;-1;0;0;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;16;22;30000;1128.1;60;16;1;10;0;1;-2;0;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;16;24;30000;1110.8;40;16;1;15;0;0;-2;0;1;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;16;26;30000;1104.1;50;16;1;11;0;0;-2;1;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;16;29;30000;977.5;5;16;1;6;0;1;-2;0;1;1;1;1;1;1;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;16;55;30000;1030.9;1;16;1;7;0;1;1;0;0;1;1;0;1;0;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;22;9;30000;1267.6;30;16;1;2;0;0;-1;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;22;16;30000;1382.6;50;16;1;8;0;1;1;1;1;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;22;22;30000;1411.9;60;16;1;12;0;1;-2;1;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;24;5;30000;877.9;25;16;1;11;0;0;-2;1;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;24;13;30000;1361.4;40;16;1;13;0;1;-2;1;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;24;16;30000;1463.5;60;16;1;4;0;-2;-2;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;24;24;30000;1164.1;36;16;1;10;0;-1;0;0;0;1;1;0;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;24;26;30000;1158.0;7;16;1;15;0;1;0;0;0;1;1;1;1;1;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;26;5;30000;969.1;30;16;1;10;0;-1;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;26;13;30000;1469.9;50;16;1;5;0;1;0;1;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;26;16;30000;1548.9;60;16;1;6;0;-1;0;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;26;24;30000;1554.5;60;16;1;11;0;0;-1;0;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;26;26;30000;1486.2;50;16;1;11;0;0;-1;0;1;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;29;14;30000;1578.2;50;16;1;4;0;-1;1;1;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;29;16;30000;1569.0;50;16;1;9;0;0;0;0;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;29;29;30000;1555.2;50;16;1;10;0;-1;-2;0;0;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;29;55;30000;1359.1;17;16;1;15;0;1;0;0;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;55;16;30000;1411.0;45;16;1;3;0;-2;1;1;0;1;1;1;1;1;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;55;29;30000;1505.1;23;16;1;13;0;0;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;16;55;55;30000;1634.4;36;16;1;13;0;-1;0;0;1;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;20;20;20;30000;1396.9;50;20;1;8;0;-2;-2;0;0;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;22;9;9;30000;620.0;30;22;1;14;0;1;0;0;0;0;1;1;1;1;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;22;9;16;30000;635.4;40;22;1;21;0;-2;-2;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;22;9;22;30000;642.7;60;22;1;18;0;-2;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;22;9;32;30000;603.6;27;22;1;17;0;-1;0;0;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;22;16;9;30000;955.7;50;22;1;12;0;-2;-2;1;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;22;16;16;30000;1124.4;50;22;1;11;0;-1;-2;0;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;22;16;22;30000;1161.8;60;22;1;21;0;0;0;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;22;22;9;30000;1371.4;60;22;1;8;0;0;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;22;22;16;30000;1475.2;50;22;1;8;0;-1;-2;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;22;22;22;30000;1550.1;60;22;1;19;0;0;-1;0;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;22;22;32;30000;1421.8;40;22;1;1;0;-2;0;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;22;32;9;30000;1594.6;50;22;1;3;0;0;1;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;22;32;22;30000;2044.8;60;22;1;10;0;-2;0;0;1;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;22;32;32;30000;2052.0;60;22;1;15;0;0;0;0;1;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;23;23;23;30000;1657.8;50;23;1;17;0;0;0;0;0;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;5;5;30000;557.5;24;24;1;1;0;-1;-1;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;5;13;30000;657.2;40;24;1;22;0;0;0;1;1;0;1;1;1;2;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;5;16;30000;652.6;50;24;1;13;0;0;-1;1;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;5;24;30000;600.1;53;24;1;1;0;-2;1;0;1;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;5;26;30000;621.4;60;24;1;20;0;0;-2;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;13;5;30000;857.0;30;24;1;20;0;1;-1;1;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;13;13;30000;1145.1;25;24;1;22;0;1;1;1;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;13;16;30000;991.2;45;24;1;19;0;-1;0;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;13;24;30000;1111.6;50;24;1;6;0;-1;-1;0;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;13;26;30000;1022.9;25;24;1;22;0;-2;-1;0;1;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;16;5;30000;980.0;40;24;1;10;0;-1;0;0;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;16;13;30000;1524.4;50;24;1;21;0;-2;-1;0;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;16;16;30000;1541.4;60;24;1;12;0;0;-1;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;16;24;30000;1506.5;50;24;1;24;0;-1;-1;0;1;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;16;26;30000;1178.7;26;24;1;24;0;0;0;1;0;1;1;1;1;1;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;24;5;30000;1051.1;50;24;1;23;0;1;-2;1;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;24;13;30000;1584.1;50;24;1;7;0;-1;-1;1;1;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;24;16;30000;1630.0;60;24;1;5;0;0;-2;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;24;24;30000;1606.4;50;24;1;1;0;1;0;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;24;26;30000;1483.6;46;24;1;4;0;-1;0;0;1;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;26;5;30000;1069.4;40;24;1;20;0;0;-1;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;26;13;30000;1516.6;40;24;1;23;0;-1;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;26;16;30000;1617.3;40;24;1;21;0;1;0;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;26;24;30000;1806.5;60;24;1;13;0;-2;0;0;0;0;1;0;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;24;26;26;30000;1777.9;60;24;1;17;0;1;0;1;0;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;25;25;25;30000;1779.6;60;25;1;12;0;-2;-1;0;0;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;5;5;30000;534.8;20;26;1;1;0;-1;0;1;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;5;13;30000;691.2;40;26;1;13;0;-1;-2;1;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;5;16;30000;693.3;40;26;1;21;0;0;-1;0;1;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;5;24;30000;520.0;25;26;1;23;0;1;-2;0;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;5;26;30000;524.8;3;26;1;25;0;1;1;1;1;0;1;1;1;2;1;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;13;5;30000;939.0;40;26;1;9;0;-1;-1;0;1;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;13;13;30000;1240.9;40;26;1;7;0;-2;0;0;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;13;16;30000;1178.2;50;26;1;22;0;0;-2;1;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;13;24;30000;1030.6;24;26;1;26;0;1;-1;0;1;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;13;26;30000;1253.7;60;26;1;1;0;1;0;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;16;5;30000;976.2;40;26;1;11;0;0;-2;1;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;16;13;30000;1571.2;50;26;1;26;0;1;1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;16;16;30000;1174.4;47;26;1;4;0;-1;-1;1;0;1;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;16;24;30000;1579.9;60;26;1;23;0;1;-1;0;1;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;16;26;30000;1195.7;25;26;1;18;0;-2;-2;0;1;1;1;0;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;24;5;30000;1085.3;50;26;1;26;0;0;0;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;24;13;30000;1443.2;50;26;1;1;0;1;-1;1;1;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;24;16;30000;1652.9;60;26;1;9;0;0;0;0;0;1;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;24;24;30000;1443.9;30;26;1;15;0;0;-1;0;0;0;1;0;1;1;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;24;26;30000;1482.0;36;26;1;23;0;1;0;0;1;0;1;1;1;1;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;26;5;30000;1076.0;50;26;1;23;0;0;-1;0;0;0;1;0;1;1;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;26;13;30000;1654.9;60;26;1;23;0;0;-2;0;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;26;16;30000;1613.0;53;26;1;26;0;-1;0;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;26;24;30000;1521.5;25;26;1;17;0;1;-1;0;0;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;26;26;26;30000;1825.8;60;26;1;22;0;1;0;0;0;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;28;28;28;30000;2017.4;60;28;1;25;0;0;0;0;0;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;29;14;14;30000;1063.5;50;29;1;28;0;0;-1;0;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;29;14;16;30000;1124.0;60;29;1;27;0;0;0;1;1;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;29;14;29;30000;1086.7;7;29;1;26;0;-2;0;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;29;16;14;30000;1190.2;55;29;1;1;0;1;-1;1;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;29;16;16;30000;1402.8;50;29;1;5;0;1;0;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;29;16;29;30000;1226.1;30;29;1;14;0;-2;0;1;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;29;16;55;30000;1096.1;9;29;1;22;0;0;0;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;29;29;14;30000;1676.4;40;29;1;24;0;-1;0;1;1;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;29;29;16;30000;1869.9;60;29;1;10;0;1;-1;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;29;29;29;30000;1741.8;40;29;1;25;0;-2;0;0;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;29;29;55;30000;1646.8;37;29;1;28;0;1;-2;1;1;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;29;55;16;30000;1872.0;40;29;1;27;0;0;0;0;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;29;55;29;30000;2156.0;31;29;1;17;0;0;0;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;29;55;55;30000;2066.8;5;29;1;25;0;0;0;0;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;30;30;30;30000;1919.2;40;30;1;1;0;-2;0;0;0;0;1;1;1;0;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;32;32;9;30000;1831.3;60;32;1;6;0;-1;1;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;32;32;22;30000;2073.6;40;32;1;1;0;-1;-1;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;32;32;32;30000;2187.8;50;32;1;1;0;1;0;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;35;35;35;30000;1744.5;18;35;1;33;0;2;0;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;36;36;36;30000;1823.8;36;36;1;24;0;-1;-2;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;40;40;40;0;1912.2;34;40;1;0;0;0;0;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;55;16;16;30000;1311.0;25;55;1;32;0;0;0;1;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;55;16;29;30000;1499.1;22;55;1;19;0;-1;0;1;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;55;16;55;30000;1080.8;8;55;1;19;0;-1;0;1;0;1;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;55;29;16;30000;1699.5;34;55;1;19;0;-1;-1;0;1;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;55;29;29;30000;1710.1;9;55;1;52;0;0;0;0;0;0;1;1;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;55;29;55;30000;1030.0;8;55;1;33;0;0;0;0;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;55;55;16;30000;2125.2;46;55;1;51;0;0;-2;0;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;55;55;29;30000;2243.0;8;55;1;29;0;0;0;0;1;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;55;55;55;30000;1768.7;8;55;1;42;0;0;0;0;0;0;1;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;64;64;64;30000;1239.7;55;64;1;1;0;0;0;0;0;0;0;0;1;2;0;0 Tesla P100-PCIE-16GB [0x2f6c];3;78;78;78;30000;524.9;1;78;1;43;0;-1;1;0;1;0;1;1;0;2;1;0 ================================================ FILE: src/acc/opencl/smm/params/tune_multiply_PVC.csv ================================================ DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC Intel(R) Data Center GPU Max 1550 [0x0bd5];3;1;1;1;30000;0;4;1;1;1;1;1;0;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;2;2;2;30000;0;10;2;1;1;2;-1;1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;3;3;1;30000;0;10;3;1;1;3;-1;-1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;3;3;3;30000;0;10;3;1;1;1;-2;0;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;4;30000;0;15;4;1;1;4;-1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;5;30000;0;10;4;1;4;1;-2;-2;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;7;30000;0;10;4;1;1;1;-1;-1;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;9;30000;0;10;4;1;4;1;1;-2;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;10;30000;0;10;4;1;2;1;-1;-2;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;13;30000;0;8;4;1;1;1;-1;-1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;15;30000;0;8;4;1;1;1;-2;-1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;17;30000;0;8;4;1;1;1;-2;1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;25;30000;0;8;4;1;1;1;-1;1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;26;30000;0;8;4;1;1;1;-1;0;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;28;30000;0;8;4;1;1;1;-1;1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;32;30000;0;8;4;1;1;1;1;-1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;45;30000;0;8;4;1;1;4;-2;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;4;30000;0;15;4;1;1;5;-2;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;5;30000;0;15;4;1;4;5;-1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;7;30000;0;15;4;1;3;5;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;9;30000;0;8;4;1;1;1;1;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;13;30000;0;8;4;1;1;1;-2;-1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;17;30000;0;9;4;1;1;5;-1;-2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;25;30000;0;9;4;1;1;5;1;-1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;26;30000;0;8;4;1;1;5;0;-1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;28;30000;0;8;4;1;1;5;-2;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;32;30000;0;8;4;1;1;5;-1;0;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;45;30000;0;8;4;1;1;5;1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;4;30000;0;10;4;1;3;1;1;-2;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;5;30000;0;10;4;1;3;1;1;-1;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;7;30000;0;10;4;1;3;1;1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;9;30000;0;10;4;1;2;7;1;-2;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;13;30000;0;8;4;1;1;7;-2;-1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;25;30000;0;8;4;1;1;7;-1;1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;26;30000;0;15;4;1;1;7;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;28;30000;0;8;4;1;1;7;0;-1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;32;30000;0;8;4;1;1;7;1;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;45;30000;0;8;4;1;1;7;1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;4;30000;0;11;4;1;2;1;-1;0;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;5;30000;0;16;4;1;2;9;-2;-2;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;7;30000;0;10;4;1;3;1;1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;9;30000;0;11;4;1;2;1;-1;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;13;30000;0;10;4;1;1;1;1;-2;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;25;30000;0;8;4;1;1;9;0;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;26;30000;0;8;4;1;1;9;0;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;28;30000;0;8;4;1;1;9;0;-1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;32;30000;0;8;4;1;1;9;0;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;45;30000;0;4;4;1;1;9;-2;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;10;4;30000;0;15;4;1;2;10;-2;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;10;10;30000;0;10;4;1;2;1;-2;1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;10;15;30000;0;8;4;1;1;10;-2;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;4;30000;0;15;4;1;3;13;-1;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;5;30000;0;12;4;1;3;13;-2;-1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;7;30000;0;11;4;1;1;1;1;-1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;9;30000;0;15;4;1;4;13;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;13;30000;0;15;4;1;1;13;-1;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;17;30000;0;15;4;1;1;13;1;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;25;30000;0;15;4;1;1;13;-2;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;26;30000;0;15;4;1;1;13;-1;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;28;30000;0;8;4;1;1;13;0;0;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;32;30000;0;8;4;1;1;13;0;0;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;45;30000;0;8;4;1;1;13;0;1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;15;4;30000;0;15;4;1;2;15;-2;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;15;10;30000;0;15;4;1;3;15;-1;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;15;15;30000;0;15;4;1;1;15;1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;17;4;30000;0;12;4;1;3;1;1;0;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;17;5;30000;0;15;4;1;4;17;-2;1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;17;13;30000;0;15;4;1;1;17;1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;17;17;30000;0;15;4;1;1;17;1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;17;32;30000;0;8;4;1;1;1;1;0;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;4;30000;0;15;4;1;3;1;-1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;5;30000;0;15;4;1;3;1;-2;-1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;7;30000;0;15;4;1;1;25;-2;-2;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;9;30000;0;15;4;1;3;25;-2;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;13;30000;0;15;4;1;1;25;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;25;30000;0;15;4;1;1;25;-1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;26;30000;0;15;4;1;1;25;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;28;30000;0;15;4;1;1;25;1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;32;30000;0;15;4;1;1;25;-1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;45;30000;0;15;4;1;1;25;1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;4;30000;0;15;4;1;2;1;-2;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;5;30000;0;15;4;1;1;26;-1;0;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;7;30000;0;15;4;1;3;26;1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;9;30000;0;15;4;1;2;26;1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;13;30000;0;15;4;1;1;26;-2;-2;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;25;30000;0;15;4;1;1;26;1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;26;30000;0;15;4;1;1;26;-2;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;28;30000;0;15;4;1;1;26;-2;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;32;30000;0;15;4;1;1;26;0;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;45;30000;0;8;4;1;1;26;-2;0;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;4;30000;0;15;4;1;1;1;-1;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;5;30000;0;15;4;1;1;28;-2;0;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;7;30000;0;15;4;1;4;28;1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;9;30000;0;16;4;1;3;28;-1;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;13;30000;0;15;4;1;1;28;1;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;25;30000;0;8;4;1;1;28;0;1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;26;30000;0;15;4;1;1;28;-2;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;28;30000;0;15;4;1;1;28;-1;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;32;30000;0;15;4;1;1;28;0;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;45;30000;0;8;4;1;1;28;0;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;4;30000;0;17;4;1;1;1;0;1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;5;30000;0;16;4;1;2;1;0;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;7;30000;0;15;4;1;4;32;1;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;9;30000;0;15;4;1;1;32;-1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;13;30000;0;15;4;1;1;32;0;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;17;30000;0;15;4;1;1;32;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;25;30000;0;15;4;1;2;32;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;26;30000;0;15;4;1;1;32;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;28;30000;0;15;4;1;4;32;0;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;32;30000;0;8;4;1;1;32;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;45;30000;0;8;4;1;1;32;-2;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;4;30000;0;30;4;1;1;45;0;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;5;30000;0;15;4;1;4;45;-2;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;7;30000;0;15;4;1;2;45;-2;-1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;9;30000;0;15;4;1;3;45;0;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;13;30000;0;6;4;1;1;45;1;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;25;30000;0;6;4;1;1;45;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;26;30000;0;7;4;1;1;45;-2;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;28;30000;0;7;4;1;1;45;-2;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;32;30000;0;6;4;1;1;45;1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;45;30000;0;5;4;1;1;45;1;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;4;30000;0;11;5;1;1;1;1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;5;30000;0;12;5;1;1;1;1;1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;7;30000;0;8;5;1;1;1;1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;9;30000;0;10;5;1;1;1;-1;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;13;30000;0;8;5;1;1;1;1;0;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;17;30000;0;8;5;1;1;1;-1;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;25;30000;0;8;5;1;1;1;0;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;26;30000;0;8;5;1;1;5;0;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;28;30000;0;8;5;1;1;5;-1;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;32;30000;0;15;5;1;1;5;-2;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;45;30000;0;8;5;1;1;5;-1;-1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;4;30000;0;12;5;1;1;1;1;-2;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;5;30000;0;15;5;1;2;5;-1;1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;7;30000;0;10;5;1;1;1;-1;-1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;9;30000;0;15;5;1;1;5;-2;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;13;30000;0;10;5;1;1;1;1;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;16;30000;0;16;5;1;1;5;-2;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;17;30000;0;8;5;1;1;1;-1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;20;30000;0;8;5;1;1;5;-1;0;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;24;30000;0;8;5;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;26;30000;0;8;5;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;28;30000;0;8;5;1;1;5;1;-2;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;32;30000;0;15;5;1;1;5;-2;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;6;20;30000;0;8;5;1;1;6;1;0;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;6;32;30000;0;15;5;1;1;6;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;7;4;30000;0;11;5;1;1;1;-2;1;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;7;5;30000;0;15;5;1;1;7;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;7;7;30000;0;10;5;1;1;1;-1;1;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;7;9;30000;0;10;5;1;1;1;-1;-1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;7;13;30000;0;8;5;1;1;1;-2;0;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;9;4;30000;0;15;5;1;1;9;-1;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;9;5;30000;0;15;5;1;1;9;-2;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;9;7;30000;0;12;5;1;1;1;1;-2;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;9;9;30000;0;15;5;1;1;9;-2;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;4;30000;0;15;5;1;1;13;-2;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;5;30000;0;15;5;1;1;1;-2;0;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;7;30000;0;15;5;1;1;13;1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;13;30000;0;15;5;1;1;13;-2;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;16;30000;0;15;5;1;1;13;-1;-2;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;17;30000;0;15;5;1;1;13;-2;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;20;30000;0;15;5;1;1;13;1;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;24;30000;0;15;5;1;1;13;1;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;26;30000;0;8;5;1;1;1;-2;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;32;30000;0;15;5;1;1;13;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;45;30000;0;8;5;1;1;13;-1;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;14;28;30000;0;15;5;1;1;14;-2;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;16;5;30000;0;15;5;1;1;1;-1;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;16;13;30000;0;15;5;1;1;16;-1;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;16;16;30000;0;15;5;1;1;16;1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;16;24;30000;0;15;5;1;1;16;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;16;26;30000;0;15;5;1;1;16;-1;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;17;4;30000;0;15;5;1;1;1;-1;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;17;5;30000;0;17;5;1;1;1;-1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;17;13;30000;0;15;5;1;1;17;-2;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;17;17;30000;0;15;5;1;1;17;1;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;17;32;30000;0;15;5;1;1;17;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;20;5;30000;0;15;5;1;1;20;1;-1;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;20;6;30000;0;15;5;1;1;20;1;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;20;13;30000;0;15;5;1;1;20;1;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;20;20;30000;0;15;5;1;1;20;-2;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;20;32;30000;0;15;5;1;1;20;1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;5;30000;0;15;5;1;5;1;-1;-1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;13;30000;0;15;5;1;1;1;0;1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;16;30000;0;15;5;1;1;24;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;24;30000;0;15;5;1;1;24;1;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;26;30000;0;15;5;1;1;24;-1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;32;30000;0;15;5;1;1;24;-2;-2;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;4;30000;0;15;5;1;1;25;-2;-2;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;5;30000;0;18;5;1;1;25;-1;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;7;30000;0;15;5;1;1;25;1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;9;30000;0;15;5;1;1;25;-2;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;13;30000;0;15;5;1;1;25;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;25;30000;0;15;5;1;1;25;-2;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;26;30000;0;15;5;1;1;25;1;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;28;30000;0;15;5;1;1;25;0;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;32;30000;0;15;5;1;1;25;-2;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;45;30000;0;15;5;1;1;25;0;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;4;30000;0;15;5;1;1;26;-1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;5;30000;0;15;5;1;1;1;-2;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;7;30000;0;15;5;1;1;26;0;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;9;30000;0;15;5;1;1;26;0;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;13;30000;0;15;5;1;1;26;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;16;30000;0;15;5;1;1;26;0;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;24;30000;0;15;5;1;1;26;1;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;25;30000;0;15;5;1;1;26;-2;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;26;30000;0;15;5;1;1;26;1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;28;30000;0;15;5;1;1;26;0;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;32;30000;0;15;5;1;1;26;-1;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;45;30000;0;1;5;1;1;26;-1;1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;4;30000;0;15;5;1;1;28;-2;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;5;30000;0;15;5;1;3;28;0;1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;7;30000;0;15;5;1;1;28;-1;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;9;30000;0;15;5;1;1;28;-2;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;13;30000;0;15;5;1;1;28;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;14;30000;0;15;5;1;1;28;-2;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;25;30000;0;15;5;1;1;28;-2;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;26;30000;0;15;5;1;1;28;0;-2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;28;30000;0;15;5;1;1;28;-2;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;32;30000;0;15;5;1;1;28;-2;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;45;30000;0;15;5;1;1;28;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;4;30000;0;15;5;1;1;32;1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;5;30000;0;15;5;1;1;32;-2;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;6;30000;0;25;5;1;1;32;-2;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;7;30000;0;15;5;1;4;32;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;9;30000;0;15;5;1;2;32;-1;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;13;30000;0;15;5;1;1;32;-2;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;17;30000;0;15;5;1;1;32;-1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;20;30000;0;15;5;1;1;32;0;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;24;30000;0;15;5;1;1;32;1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;25;30000;0;15;5;1;1;32;1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;26;30000;0;15;5;1;4;32;1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;28;30000;0;15;5;1;1;32;-1;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;32;30000;0;15;5;1;1;32;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;45;30000;0;15;5;1;1;32;1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;4;30000;0;30;5;1;1;45;-2;0;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;5;30000;0;30;5;1;1;45;0;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;7;30000;0;30;5;1;1;45;-1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;9;30000;0;15;5;1;1;45;-2;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;13;30000;0;15;5;1;3;45;-1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;25;30000;0;8;5;1;1;45;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;26;30000;0;8;5;1;1;45;1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;28;30000;0;8;5;1;1;45;1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;32;30000;0;7;5;1;1;45;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;45;30000;0;7;5;1;1;45;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;5;20;30000;0;8;6;1;1;6;0;-1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;5;32;30000;0;8;6;1;1;6;-2;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;6;6;30000;0;8;6;1;2;1;-2;0;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;6;7;30000;0;16;6;1;1;6;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;6;8;30000;0;15;6;1;1;6;-2;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;6;20;30000;0;15;6;1;1;6;-1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;6;32;30000;0;15;6;1;1;6;1;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;7;6;30000;0;15;6;1;1;7;1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;7;7;30000;0;15;6;1;1;7;1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;7;8;30000;0;15;6;1;1;7;-2;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;8;6;30000;0;15;6;1;1;1;-1;0;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;8;7;30000;0;15;6;1;1;8;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;8;8;30000;0;15;6;1;1;8;-2;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;13;20;30000;0;15;6;1;1;13;-2;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;13;32;30000;0;15;6;1;1;13;-1;1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;20;5;30000;0;15;6;1;6;20;-1;-2;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;20;6;30000;0;22;6;1;1;20;1;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;20;13;30000;0;16;6;1;1;20;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;20;20;30000;0;15;6;1;1;20;-2;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;20;32;30000;0;16;6;1;1;20;-2;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;32;5;30000;0;25;6;1;1;32;-1;-2;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;32;6;30000;0;28;6;1;1;32;-1;1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;32;13;30000;0;15;6;1;1;32;-1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;32;20;30000;0;15;6;1;1;32;-2;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;32;32;30000;0;15;6;1;6;32;1;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;4;30000;0;15;7;1;1;1;-2;-1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;5;30000;0;11;7;1;1;1;1;-1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;7;30000;0;15;7;1;4;7;-2;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;9;30000;0;15;7;1;6;7;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;13;30000;0;11;7;1;1;1;1;-2;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;25;30000;0;8;7;1;1;7;-1;-1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;26;30000;0;8;7;1;1;7;-1;1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;28;30000;0;8;7;1;1;7;-1;1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;32;30000;0;15;7;1;1;7;-1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;45;30000;0;8;7;1;1;7;-2;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;4;30000;0;15;7;1;1;7;-2;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;5;30000;0;13;7;1;7;1;-1;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;7;30000;0;15;7;1;1;7;1;-2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;9;30000;0;15;7;1;1;7;1;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;13;30000;0;10;7;1;1;1;-1;0;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;25;30000;0;8;7;1;1;7;1;0;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;26;30000;0;8;7;1;1;7;1;-2;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;28;30000;0;15;7;1;1;7;1;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;32;30000;0;15;7;1;1;7;-2;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;45;30000;0;8;7;1;1;7;1;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;6;6;30000;0;12;7;1;1;1;-2;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;6;7;30000;0;15;7;1;1;7;1;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;6;8;30000;0;15;7;1;1;7;-1;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;4;30000;0;15;7;1;1;7;1;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;5;30000;0;16;7;1;1;1;-1;0;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;6;30000;0;16;7;1;1;1;1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;7;30000;0;8;7;1;3;1;1;1;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;8;30000;0;15;7;1;1;7;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;9;30000;0;15;7;1;1;7;1;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;13;30000;0;15;7;1;1;7;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;25;30000;0;15;7;1;1;7;1;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;26;30000;0;15;7;1;1;7;-2;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;28;30000;0;15;7;1;1;7;1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;32;30000;0;15;7;1;1;7;-2;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;45;30000;0;15;7;1;1;7;1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;8;6;30000;0;15;7;1;1;1;-2;-2;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;8;7;30000;0;15;7;1;7;8;-2;-2;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;8;8;30000;0;15;7;1;1;8;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;4;30000;0;15;7;1;1;9;-2;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;5;30000;0;15;7;1;1;9;-1;-1;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;7;30000;0;15;7;1;1;9;1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;9;30000;0;15;7;1;1;9;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;13;30000;0;15;7;1;1;9;1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;25;30000;0;15;7;1;1;9;1;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;26;30000;0;15;7;1;1;9;-2;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;28;30000;0;15;7;1;1;9;-2;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;32;30000;0;15;7;1;1;9;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;45;30000;0;15;7;1;1;9;1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;13;4;30000;0;15;7;1;1;13;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;13;5;30000;0;15;7;1;1;1;1;-1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;13;7;30000;0;15;7;1;1;13;-1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;13;13;30000;0;15;7;1;1;13;-2;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;13;30000;0;25;7;1;1;32;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;25;30000;0;15;7;1;1;32;-1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;26;30000;0;15;7;1;1;32;1;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;28;30000;0;15;7;1;1;32;-1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;32;30000;0;15;7;1;1;32;0;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;45;30000;0;15;7;1;1;32;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;4;30000;0;30;7;1;2;45;-1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;5;30000;0;43;7;1;7;45;1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;7;30000;0;31;7;1;7;45;-1;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;9;30000;0;30;7;1;6;45;1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;13;30000;0;30;7;1;3;45;0;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;25;30000;0;10;7;1;1;45;-2;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;26;30000;0;10;7;1;1;45;-1;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;28;30000;0;8;7;1;1;45;1;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;32;30000;0;10;7;1;1;45;-1;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;45;30000;0;11;7;1;1;45;0;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;6;6;30000;0;13;8;1;2;8;-1;1;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;6;7;30000;0;15;8;1;2;8;-2;1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;6;8;30000;0;15;8;1;3;8;1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;7;6;30000;0;13;8;1;7;1;1;0;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;7;7;30000;0;15;8;1;4;8;-2;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;7;8;30000;0;15;8;1;7;8;-2;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;8;6;30000;0;15;8;1;1;8;-1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;8;7;30000;0;15;8;1;1;8;1;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;8;8;30000;0;4;8;1;5;1;-1;-1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;4;30000;0;10;1;4;5;1;-2;-1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;5;30000;0;12;9;1;1;1;1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;7;30000;0;15;9;1;1;9;1;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;9;30000;0;15;9;1;1;9;-1;-2;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;13;30000;0;15;9;1;1;9;1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;25;30000;0;15;9;1;1;9;1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;26;30000;0;15;9;1;1;9;0;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;28;30000;0;8;9;1;1;9;-2;-1;0;0;0;1;0;0;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;32;30000;0;15;9;1;1;9;-2;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;45;30000;0;15;9;1;1;9;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;4;30000;0;17;9;1;5;9;-2;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;5;30000;0;13;9;1;1;1;-2;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;7;30000;0;15;9;1;1;9;1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;9;30000;0;15;9;1;8;9;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;13;30000;0;15;9;1;1;9;1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;25;30000;0;8;9;1;1;9;-2;0;0;0;0;1;0;0;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;26;30000;0;15;9;1;3;9;-2;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;28;30000;0;8;9;1;7;9;1;2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;32;30000;0;15;9;1;1;9;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;45;30000;0;15;9;1;1;9;-1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;4;30000;0;15;9;1;1;9;-2;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;5;30000;0;15;9;1;1;9;-1;-2;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;7;30000;0;15;9;1;1;9;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;9;30000;0;15;9;1;1;9;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;13;30000;0;15;9;1;1;9;-1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;25;30000;0;15;9;1;1;9;1;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;26;30000;0;15;9;1;8;9;1;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;28;30000;0;15;9;1;1;9;1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;32;30000;0;8;9;1;1;9;-1;1;0;0;0;1;0;0;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;45;30000;0;15;9;1;1;9;1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;4;30000;0;15;9;1;1;9;1;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;5;30000;0;16;9;1;1;1;1;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;7;30000;0;15;9;1;1;9;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;9;30000;0;8;9;1;1;1;1;-2;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;13;30000;0;15;9;1;1;9;1;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;16;30000;0;15;9;1;1;9;-1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;22;30000;0;15;9;1;1;9;-2;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;25;30000;0;15;9;1;1;9;-1;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;26;30000;0;15;9;1;1;9;1;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;28;30000;0;15;9;1;1;9;-2;-2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;32;30000;0;15;9;1;1;9;1;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;45;30000;0;15;9;1;1;9;1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;4;30000;0;24;9;1;1;13;1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;5;30000;0;15;9;1;1;13;-1;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;7;30000;0;15;9;1;1;13;-2;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;9;30000;0;15;9;1;1;13;-2;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;13;30000;0;15;9;1;1;13;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;25;30000;0;15;9;1;1;13;-1;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;26;30000;0;15;9;1;4;13;-1;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;28;30000;0;15;9;1;1;13;-2;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;32;30000;0;8;9;1;1;13;1;-2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;45;30000;0;15;9;1;1;13;-1;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;16;9;30000;0;15;9;1;1;16;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;16;16;30000;0;15;9;1;9;16;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;16;22;30000;0;15;9;1;1;1;-2;-1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;22;9;30000;0;25;9;1;1;22;-1;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;22;16;30000;0;15;9;1;1;22;-1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;22;22;30000;0;16;9;1;1;22;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;22;32;30000;0;15;9;1;1;22;1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;4;30000;0;25;9;1;1;25;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;5;30000;0;25;9;1;1;25;-1;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;7;30000;0;25;9;1;1;25;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;9;30000;0;15;9;1;1;25;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;13;30000;0;15;9;1;1;25;-1;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;25;30000;0;15;9;1;1;25;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;26;30000;0;15;9;1;1;25;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;28;30000;0;16;9;1;1;25;-1;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;32;30000;0;15;9;1;1;25;0;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;45;30000;0;15;9;1;1;25;-1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;4;30000;0;28;9;1;1;26;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;5;30000;0;25;9;1;1;26;-1;-2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;7;30000;0;25;9;1;1;26;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;9;30000;0;25;9;1;1;26;-1;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;13;30000;0;15;9;1;3;26;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;25;30000;0;15;9;1;1;26;1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;26;30000;0;15;9;1;1;26;-1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;28;30000;0;15;9;1;1;26;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;32;30000;0;15;9;1;1;26;1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;45;30000;0;15;9;1;1;26;1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;4;30000;0;25;9;1;1;28;1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;5;30000;0;25;9;1;1;28;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;7;30000;0;27;9;1;4;28;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;9;30000;0;28;9;1;5;28;0;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;13;30000;0;15;9;1;2;28;-2;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;25;30000;0;15;9;1;1;28;1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;26;30000;0;15;9;1;1;28;-1;-2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;28;30000;0;15;9;1;1;28;1;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;32;30000;0;15;9;1;1;28;0;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;45;30000;0;15;9;1;1;28;-1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;4;30000;0;25;9;1;1;32;-2;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;5;30000;0;25;9;1;1;32;0;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;7;30000;0;25;9;1;1;32;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;9;30000;0;25;9;1;1;1;-1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;13;30000;0;25;9;1;7;32;1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;22;30000;0;16;9;1;1;1;1;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;25;30000;0;16;9;1;1;32;1;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;26;30000;0;15;9;1;1;32;-2;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;28;30000;0;16;9;1;1;32;-2;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;32;30000;0;15;9;1;1;1;1;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;45;30000;0;15;9;1;1;32;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;45;32;30000;0;10;9;1;1;45;-1;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;45;45;30000;0;30;9;1;1;45;1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;4;4;30000;0;16;10;1;1;1;-2;1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;4;10;30000;0;15;10;1;1;10;1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;4;15;30000;0;15;10;1;1;10;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;10;4;30000;0;15;10;1;1;10;-2;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;10;10;30000;0;8;10;1;1;1;-1;1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;10;15;30000;0;15;10;1;1;10;-1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;15;4;30000;0;27;10;1;1;15;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;15;10;30000;0;15;10;1;1;15;-1;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;15;15;30000;0;15;10;1;7;15;-1;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;12;12;12;30000;0;8;12;1;1;12;-2;0;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;1;11;30000;0;8;13;1;1;13;-2;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;4;30000;0;18;13;1;1;13;-1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;5;30000;0;15;13;1;1;13;1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;7;30000;0;15;13;1;1;13;-1;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;9;30000;0;15;13;1;1;13;1;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;13;30000;0;9;13;1;1;1;-2;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;17;30000;0;15;13;1;1;13;1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;25;30000;0;8;13;1;1;13;-2;-2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;26;30000;0;8;13;1;1;13;-2;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;28;30000;0;15;13;1;1;13;-1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;32;30000;0;8;13;1;1;1;-2;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;45;30000;0;8;13;1;1;13;-1;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;4;30000;0;15;13;1;1;13;-1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;5;30000;0;15;13;1;1;13;1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;7;30000;0;15;13;1;1;13;1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;9;30000;0;15;13;1;1;13;1;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;13;30000;0;10;13;1;1;1;-2;1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;16;30000;0;15;13;1;1;13;-2;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;17;30000;0;15;13;1;12;13;-1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;20;30000;0;15;13;1;1;13;-1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;24;30000;0;15;13;1;1;13;-2;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;25;30000;0;8;13;1;1;13;1;-2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;26;30000;0;15;13;1;1;13;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;28;30000;0;8;13;1;1;13;-2;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;32;30000;0;15;13;1;1;13;1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;45;30000;0;8;13;1;1;13;-1;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;6;20;30000;0;15;13;1;1;13;1;1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;6;32;30000;0;15;13;1;1;13;-2;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;4;30000;0;15;13;1;1;13;-2;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;5;30000;0;15;13;1;1;13;-1;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;7;30000;0;15;13;1;1;13;-1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;9;30000;0;15;13;1;1;13;-1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;13;30000;0;10;13;1;1;1;-2;-2;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;25;30000;0;15;13;1;1;13;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;26;30000;0;8;13;1;1;13;1;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;28;30000;0;16;13;1;1;13;1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;32;30000;0;8;13;1;1;13;1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;45;30000;0;15;13;1;1;13;-1;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;4;30000;0;15;13;1;1;13;-1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;5;30000;0;15;13;1;1;13;1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;7;30000;0;15;13;1;1;13;-2;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;9;30000;0;15;13;1;1;13;-1;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;13;30000;0;15;13;1;1;13;-1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;25;30000;0;15;13;1;1;13;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;26;30000;0;15;13;1;1;13;-2;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;28;30000;0;15;13;1;1;13;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;32;30000;0;15;13;1;1;13;-1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;45;30000;0;15;13;1;1;13;-2;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;4;30000;0;28;13;1;1;1;1;0;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;5;30000;0;25;13;1;1;13;-2;-1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;7;30000;0;15;13;1;1;13;-1;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;9;30000;0;15;13;1;1;13;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;13;30000;0;8;13;1;10;1;1;0;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;14;30000;0;15;13;1;1;13;-1;-2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;17;30000;0;15;13;1;1;13;-2;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;20;30000;0;15;13;1;1;13;1;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;24;30000;0;15;13;1;1;13;-2;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;25;30000;0;15;13;1;1;13;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;26;30000;0;25;13;1;1;13;-2;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;28;30000;0;15;13;1;1;13;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;32;30000;0;15;13;1;1;13;-1;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;45;30000;0;15;13;1;8;13;1;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;72;30000;0;8;13;1;1;13;-2;0;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;81;30000;0;8;13;1;1;13;-1;-1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;14;13;30000;0;15;13;1;1;14;-2;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;14;14;30000;0;15;13;1;1;14;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;14;25;30000;0;15;13;1;1;14;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;14;26;30000;0;15;13;1;1;14;-1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;14;32;30000;0;15;13;1;1;14;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;16;5;30000;0;25;13;1;1;16;-2;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;17;4;30000;0;25;13;1;1;17;-2;-2;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;17;5;30000;0;15;13;1;11;17;-1;1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;17;13;30000;0;16;13;1;1;17;0;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;17;17;30000;0;15;13;1;4;17;-1;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;17;32;30000;0;15;13;1;1;17;-2;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;20;5;30000;0;25;13;1;1;20;0;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;20;6;30000;0;25;13;1;12;20;1;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;20;13;30000;0;16;13;1;1;20;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;20;20;30000;0;16;13;1;1;20;0;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;20;32;30000;0;15;13;1;1;20;0;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;24;5;30000;0;25;13;1;2;24;0;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;24;13;30000;0;15;13;1;10;24;-2;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;24;24;30000;0;15;13;1;1;24;0;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;24;26;30000;0;15;13;1;1;24;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;24;32;30000;0;15;13;1;1;24;0;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;4;30000;0;25;13;1;1;25;-1;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;5;30000;0;25;13;1;1;25;-2;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;7;30000;0;25;13;1;1;25;-2;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;9;30000;0;25;13;1;1;25;0;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;13;30000;0;16;13;1;1;25;1;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;14;30000;0;15;13;1;4;25;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;25;30000;0;6;8;1;5;25;1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;26;30000;0;15;13;1;1;25;0;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;28;30000;0;16;13;1;1;25;-1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;32;30000;0;15;13;1;2;25;1;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;45;30000;0;15;13;1;1;25;0;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;4;30000;0;25;13;1;1;26;0;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;5;30000;0;25;13;1;10;26;0;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;7;30000;0;28;13;1;1;26;-2;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;9;30000;0;25;13;1;1;26;1;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;13;30000;0;16;13;1;4;26;-1;-2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;14;30000;0;25;13;1;1;26;0;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;24;30000;0;15;13;1;1;26;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;25;30000;0;15;13;1;1;26;0;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;26;30000;0;15;13;1;1;26;1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;28;30000;0;15;13;1;1;26;-2;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;32;30000;0;15;13;1;1;26;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;45;30000;0;15;13;1;1;26;0;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;4;30000;0;25;13;1;1;28;0;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;5;30000;0;30;13;1;1;28;-1;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;7;30000;0;25;13;1;1;28;-1;-2;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;9;30000;0;25;13;1;1;28;0;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;13;30000;0;16;13;1;10;28;-1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;25;30000;0;15;13;1;1;28;-2;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;26;30000;0;15;13;1;1;28;0;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;28;30000;0;15;13;1;1;28;0;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;32;30000;0;15;13;1;1;28;1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;45;30000;0;15;13;1;1;28;0;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;4;30000;0;31;13;1;13;32;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;5;30000;0;30;13;1;5;32;-2;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;6;30000;0;25;13;1;1;32;0;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;7;30000;0;25;13;1;10;32;-1;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;9;30000;0;25;13;1;1;32;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;13;30000;0;25;13;1;1;32;0;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;14;30000;0;25;13;1;1;32;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;17;30000;0;25;13;1;1;32;1;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;20;30000;0;25;13;1;1;32;1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;24;30000;0;15;13;1;1;32;0;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;25;30000;0;15;13;1;1;32;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;26;30000;0;15;13;1;1;32;1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;28;30000;0;16;13;1;1;32;1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;32;30000;0;15;13;1;1;1;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;45;30000;0;15;13;1;1;32;1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;4;30000;0;32;13;1;9;45;-1;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;5;30000;0;32;13;1;10;45;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;7;30000;0;37;13;1;6;45;1;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;9;30000;0;30;13;1;9;45;1;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;13;30000;0;30;13;1;1;45;1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;25;30000;0;8;8;1;3;45;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;26;30000;0;15;13;1;1;45;1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;28;30000;0;8;8;1;4;45;1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;32;30000;0;8;8;1;3;45;-1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;45;30000;0;30;13;1;1;45;-2;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;5;28;30000;0;15;14;1;1;14;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;13;13;30000;0;15;14;1;1;14;-2;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;13;14;30000;0;15;14;1;10;14;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;13;25;30000;0;15;14;1;1;14;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;13;26;30000;0;8;14;1;1;14;-1;-2;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;13;32;30000;0;15;14;1;1;14;0;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;13;30000;0;25;14;1;1;14;1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;14;30000;0;15;14;1;13;14;0;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;16;30000;0;15;14;1;1;14;-2;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;25;30000;0;15;14;1;1;14;1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;26;30000;0;15;14;1;1;14;-2;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;28;30000;0;15;14;1;1;14;1;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;29;30000;0;15;14;1;1;14;-2;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;32;30000;0;15;14;1;1;14;-2;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;16;14;30000;0;15;14;1;1;16;-1;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;16;16;30000;0;15;14;1;10;16;-2;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;16;29;30000;0;15;14;1;1;16;1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;25;13;30000;0;16;14;1;12;25;-1;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;25;14;30000;0;16;14;1;12;25;-2;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;25;25;30000;0;15;14;1;1;25;-1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;25;26;30000;0;16;14;1;1;25;-2;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;25;32;30000;0;15;14;1;1;25;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;26;13;30000;0;25;14;1;1;26;0;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;26;14;30000;0;25;14;1;1;26;1;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;26;25;30000;0;15;14;1;1;26;1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;26;26;30000;0;15;14;1;1;26;-2;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;26;32;30000;0;15;14;1;1;26;-1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;28;5;30000;0;25;14;1;1;28;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;28;14;30000;0;25;14;1;1;28;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;28;28;30000;0;15;14;1;1;28;1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;29;14;30000;0;25;14;1;1;29;-1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;29;16;30000;0;15;14;1;12;29;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;29;29;30000;0;15;14;1;1;29;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;29;32;30000;0;15;14;1;1;29;1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;32;13;30000;0;25;14;1;1;32;-2;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;32;14;30000;0;27;14;1;1;32;-2;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;32;25;30000;0;15;14;1;1;32;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;32;26;30000;0;15;14;1;1;32;0;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;32;29;30000;0;16;14;1;1;32;1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;32;32;30000;0;15;14;1;1;32;-1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;4;4;30000;0;15;15;1;1;15;-2;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;4;10;30000;0;15;15;1;12;15;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;4;15;30000;0;16;15;1;7;15;-2;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;10;4;30000;0;15;15;1;1;15;-1;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;10;10;30000;0;15;15;1;4;15;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;10;15;30000;0;15;15;1;2;15;-2;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;15;4;30000;0;30;15;1;1;15;-1;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;15;10;30000;0;15;15;1;3;15;-2;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;15;15;30000;0;15;15;1;8;15;0;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;5;5;30000;0;15;16;1;11;16;0;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;5;13;30000;0;15;16;1;14;16;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;5;16;30000;0;15;16;1;5;16;-1;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;5;24;30000;0;8;16;1;1;1;-1;-2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;5;26;30000;0;15;16;1;1;16;1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;7;3;30000;0;18;16;1;15;1;-1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;9;9;30000;0;15;16;1;12;16;-2;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;9;16;30000;0;15;16;1;11;16;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;9;22;30000;0;15;16;1;1;16;-2;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;13;5;30000;0;23;16;1;12;1;-2;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;14;14;30000;0;15;16;1;1;16;1;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;14;16;30000;0;15;16;1;15;16;1;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;14;29;30000;0;15;16;1;1;16;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;5;30000;0;30;16;1;1;1;-2;1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;9;30000;0;25;16;1;1;16;1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;14;30000;0;25;16;1;1;16;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;16;30000;0;15;16;1;1;16;-2;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;22;30000;0;15;16;1;1;1;-1;-2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;29;30000;0;25;16;1;1;16;1;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;55;30000;0;8;16;1;1;16;-2;-2;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;22;9;30000;0;25;16;1;6;22;1;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;22;16;30000;0;17;16;1;1;22;0;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;22;22;30000;0;15;16;1;1;22;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;24;5;30000;0;28;16;1;5;24;-2;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;26;5;30000;0;30;16;1;5;26;1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;29;14;30000;0;25;16;1;1;29;1;-2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;29;16;30000;0;25;16;1;1;29;-2;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;29;29;30000;0;15;16;1;1;29;0;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;29;55;30000;0;15;16;1;1;29;-1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;55;16;30000;0;30;16;1;1;55;-2;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;55;29;30000;0;30;16;1;1;55;0;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;55;55;30000;0;30;16;1;1;55;0;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;1;1;30000;0;15;17;1;2;17;1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;4;4;30000;0;15;17;1;1;17;1;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;4;5;30000;0;15;17;1;1;17;-1;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;4;13;30000;0;15;17;1;1;17;-2;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;4;17;30000;0;8;17;1;1;1;-2;-1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;4;32;30000;0;8;17;1;1;1;1;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;5;4;30000;0;15;17;1;1;17;-1;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;5;5;30000;0;15;17;1;1;17;-1;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;5;13;30000;0;15;17;1;14;17;-1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;5;17;30000;0;8;17;1;1;1;-1;-2;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;5;32;30000;0;8;17;1;1;1;-2;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;13;4;30000;0;25;17;1;13;17;-2;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;13;5;30000;0;25;17;1;1;17;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;13;13;30000;0;15;17;1;1;17;-2;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;13;17;30000;0;10;17;1;1;1;-1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;13;32;30000;0;8;17;1;1;1;-1;1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;4;30000;0;25;17;1;1;17;-2;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;5;30000;0;25;17;1;1;17;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;13;30000;0;25;17;1;1;17;-1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;17;30000;0;15;17;1;1;17;-2;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;32;30000;0;15;17;1;1;1;-1;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;35;30000;0;15;17;1;1;1;-2;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;32;4;30000;0;41;17;1;4;32;0;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;32;5;30000;0;41;17;1;1;32;1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;32;13;30000;0;25;17;1;1;32;-2;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;32;17;30000;0;25;17;1;1;1;0;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;32;32;30000;0;17;17;1;1;1;0;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;32;35;30000;0;15;17;1;1;1;-1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;35;17;30000;0;30;17;1;1;1;0;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;35;32;30000;0;30;17;1;1;1;-1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;35;35;30000;0;30;17;1;1;1;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;20;20;5;30000;0;28;20;1;13;20;1;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;20;20;6;30000;0;30;20;1;1;20;-2;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;20;20;20;30000;0;25;20;1;1;20;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;20;20;32;30000;0;15;20;1;1;20;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;20;32;5;30000;0;50;20;1;10;32;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;20;32;6;30000;0;43;20;1;18;32;-1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;20;32;13;30000;0;14;20;1;8;32;0;3;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;20;32;20;30000;0;25;20;1;1;32;-1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;20;32;32;30000;0;15;20;1;1;32;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;9;9;30000;0;15;22;1;1;22;-2;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;9;16;30000;0;15;22;1;7;22;1;3;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;9;22;30000;0;15;22;1;1;22;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;9;32;30000;0;8;22;1;1;1;-1;1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;16;9;30000;0;15;22;1;1;22;1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;16;16;30000;0;15;22;1;11;22;-1;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;16;22;30000;0;15;22;1;1;22;1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;22;9;30000;0;28;22;1;1;22;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;22;16;30000;0;25;22;1;1;22;-2;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;22;22;30000;0;16;22;1;1;1;-2;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;22;32;30000;0;15;22;1;1;1;-2;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;32;9;30000;0;25;22;1;1;1;-1;1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;32;22;30000;0;15;22;1;1;1;1;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;32;32;30000;0;15;22;1;5;1;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;23;23;23;30000;0;15;23;1;1;1;-1;0;0;0;0;1;0;1;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;5;5;30000;0;15;24;1;10;24;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;5;13;30000;0;15;8;1;6;1;-2;-1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;5;16;30000;0;15;24;1;6;24;-1;3;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;5;24;30000;0;15;24;1;13;24;-1;3;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;5;26;30000;0;15;8;1;17;24;-2;3;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;5;32;30000;0;8;8;1;1;24;0;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;13;5;30000;0;20;24;1;2;1;-2;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;13;13;30000;0;15;24;1;1;24;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;13;24;30000;0;9;8;1;10;24;-2;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;13;26;30000;0;15;24;1;1;24;-2;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;13;32;30000;0;6;8;1;1;24;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;16;5;30000;0;25;24;1;8;1;-2;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;24;5;30000;0;46;24;1;1;24;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;24;13;30000;0;27;24;1;1;24;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;24;24;30000;0;15;24;1;1;1;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;24;26;30000;0;15;24;1;1;1;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;24;32;30000;0;15;24;1;1;1;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;26;5;30000;0;28;24;1;19;26;-1;-2;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;26;13;30000;0;16;24;1;1;26;1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;26;24;30000;0;12;8;1;13;1;1;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;26;26;30000;0;15;24;1;1;26;-1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;26;32;30000;0;7;24;1;12;26;-1;3;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;32;5;30000;0;41;24;1;3;32;-2;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;32;13;30000;0;15;24;1;1;32;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;32;24;30000;0;15;24;1;9;1;-1;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;32;26;30000;0;7;8;1;14;32;0;-2;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;32;32;30000;0;7;8;1;1;1;-1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;4;30000;0;15;25;1;7;25;1;1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;5;30000;0;15;25;1;1;25;0;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;7;30000;0;15;25;1;7;25;1;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;9;30000;0;15;8;1;25;25;0;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;13;30000;0;15;25;1;9;25;1;4;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;25;30000;0;15;25;1;1;25;0;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;26;30000;0;15;25;1;7;25;-1;3;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;28;30000;0;15;25;1;1;25;-2;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;32;30000;0;15;25;1;24;25;1;4;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;45;30000;0;15;25;1;1;25;1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;4;30000;0;15;25;1;2;1;1;0;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;5;30000;0;15;25;1;1;25;-1;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;7;30000;0;15;25;1;25;25;-2;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;9;30000;0;15;25;1;16;25;-1;3;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;13;30000;0;15;25;1;1;25;-1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;25;30000;0;15;8;1;19;25;1;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;26;30000;0;15;25;1;11;25;-1;4;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;28;30000;0;15;25;1;1;25;0;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;32;30000;0;15;8;1;25;25;-1;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;45;30000;0;8;25;1;1;25;0;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;4;30000;0;15;25;1;21;25;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;5;30000;0;15;25;1;1;25;-2;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;7;30000;0;16;25;1;4;25;1;4;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;9;30000;0;8;8;1;1;25;0;4;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;13;30000;0;15;8;1;7;25;1;3;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;25;30000;0;15;25;1;1;25;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;26;30000;0;16;25;1;1;25;-2;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;28;30000;0;15;25;1;9;25;1;3;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;32;30000;0;15;25;1;21;25;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;45;30000;0;15;25;1;1;25;0;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;4;30000;0;15;25;1;1;25;-1;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;5;30000;0;15;25;1;1;25;-1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;7;30000;0;10;25;1;23;25;-1;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;9;30000;0;10;25;1;23;25;1;3;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;13;30000;0;15;25;1;1;25;1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;25;30000;0;6;8;1;11;25;-2;4;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;26;30000;0;5;8;1;21;25;-2;3;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;28;30000;0;4;25;1;3;25;-2;3;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;32;30000;0;15;25;1;1;25;1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;45;30000;0;15;25;1;1;25;1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;4;30000;0;25;25;1;11;25;1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;5;30000;0;15;25;1;6;25;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;7;30000;0;30;25;1;3;25;0;4;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;9;30000;0;15;8;1;1;25;-1;-1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;13;30000;0;15;25;1;1;25;-2;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;14;30000;0;15;25;1;7;25;0;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;25;30000;0;10;25;1;23;25;-2;4;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;26;30000;0;15;25;1;1;25;-1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;28;30000;0;15;25;1;1;25;0;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;32;30000;0;15;25;1;1;25;1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;45;30000;0;15;25;1;1;25;-2;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;14;13;30000;0;15;25;1;1;25;-1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;14;14;30000;0;8;25;1;7;25;-1;-2;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;14;25;30000;0;15;25;1;1;25;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;14;26;30000;0;15;25;1;1;25;0;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;14;32;30000;0;15;25;1;1;25;1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;4;30000;0;43;25;1;1;25;-2;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;5;30000;0;43;25;1;1;25;-1;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;7;30000;0;41;25;1;1;25;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;9;30000;0;25;25;1;1;25;-1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;13;30000;0;25;25;1;1;25;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;14;30000;0;25;25;1;1;25;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;25;30000;0;15;25;1;1;1;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;26;30000;0;16;25;1;1;25;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;28;30000;0;15;25;1;1;25;1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;32;30000;0;15;25;1;1;25;-1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;45;30000;0;15;25;1;1;25;-2;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;4;30000;0;30;25;1;2;26;1;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;5;30000;0;30;25;1;4;26;-1;-2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;7;30000;0;17;25;1;12;26;-1;3;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;9;30000;0;16;16;1;7;26;-2;0;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;13;30000;0;17;25;1;1;26;-1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;14;30000;0;15;25;1;1;26;1;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;25;30000;0;15;25;1;1;26;-1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;26;30000;0;15;25;1;1;26;1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;28;30000;0;7;8;1;14;26;-2;3;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;32;30000;0;15;25;1;1;26;1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;45;30000;0;1;25;1;25;26;0;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;4;30000;0;30;25;1;2;28;0;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;5;30000;0;30;25;1;3;28;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;7;30000;0;14;25;1;5;28;-1;4;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;9;30000;0;13;25;1;15;28;0;3;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;13;30000;0;15;25;1;1;28;0;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;25;30000;0;15;25;1;1;28;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;26;30000;0;16;25;1;1;28;-2;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;28;30000;0;15;25;1;1;28;-2;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;32;30000;0;15;25;1;1;28;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;45;30000;0;15;25;1;1;28;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;4;30000;0;30;25;1;6;32;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;5;30000;0;30;25;1;1;32;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;7;30000;0;59;25;1;3;32;-2;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;9;30000;0;14;25;1;3;32;-2;3;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;13;30000;0;15;25;1;1;32;-1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;14;30000;0;15;25;1;1;32;-2;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;25;30000;0;15;25;1;1;32;-1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;26;30000;0;15;25;1;1;32;-2;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;28;30000;0;15;25;1;1;32;-1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;32;30000;0;15;25;1;1;32;-2;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;45;30000;0;1;25;1;23;32;-1;-2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;4;30000;0;50;25;1;18;45;-2;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;5;30000;0;50;25;1;1;45;-2;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;7;30000;0;22;25;1;20;45;-2;4;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;9;30000;0;14;25;1;23;45;1;3;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;13;30000;0;31;25;1;1;45;-1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;25;30000;0;30;25;1;1;45;0;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;26;30000;0;8;16;1;8;45;1;3;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;28;30000;0;5;16;1;22;45;-1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;32;30000;0;30;25;1;1;45;-2;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;45;30000;0;30;25;1;1;45;-2;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;4;30000;0;15;26;1;26;1;-1;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;5;30000;0;15;26;1;18;26;0;4;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;7;30000;0;15;8;1;21;26;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;9;30000;0;15;26;1;9;26;0;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;13;30000;0;15;26;1;2;26;0;4;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;25;30000;0;16;26;1;14;26;-2;3;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;26;30000;0;15;8;1;26;26;-1;3;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;28;30000;0;15;26;1;1;26;-1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;32;30000;0;16;26;1;1;26;1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;45;30000;0;1;26;1;20;26;0;3;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;4;30000;0;15;26;1;1;26;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;5;30000;0;13;26;1;1;1;-1;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;7;30000;0;16;26;1;17;26;-1;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;9;30000;0;16;26;1;13;26;0;4;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;13;30000;0;8;26;1;1;1;-1;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;16;30000;0;15;8;1;9;26;-1;3;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;24;30000;0;15;8;1;26;26;-2;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;25;30000;0;15;26;1;1;26;-2;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;26;30000;0;15;8;1;25;26;-2;4;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;28;30000;0;15;8;1;26;26;0;3;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;32;30000;0;15;8;1;8;26;0;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;45;30000;0;15;26;1;1;26;1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;4;30000;0;15;26;1;13;26;1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;5;30000;0;15;26;1;1;26;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;7;30000;0;16;26;1;20;26;-2;4;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;9;30000;0;15;26;1;9;26;-1;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;13;30000;0;8;8;1;1;26;0;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;25;30000;0;15;26;1;1;26;1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;26;30000;0;15;26;1;1;26;-2;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;28;30000;0;15;26;1;1;26;1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;32;30000;0;15;26;1;1;26;1;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;45;30000;0;1;26;1;25;26;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;4;30000;0;15;26;1;21;26;0;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;5;30000;0;15;26;1;1;26;1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;7;30000;0;13;8;1;12;26;1;3;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;9;30000;0;12;26;1;11;26;-1;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;13;30000;0;10;8;1;14;26;-1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;25;30000;0;6;26;1;17;26;-1;4;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;26;30000;0;6;8;1;19;26;-1;3;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;28;30000;0;15;26;1;1;26;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;32;30000;0;15;26;1;1;26;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;45;30000;0;15;26;1;1;26;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;4;30000;0;25;26;1;7;26;0;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;5;30000;0;25;26;1;1;1;-1;-2;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;7;30000;0;30;26;1;11;26;-1;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;9;30000;0;15;8;1;26;26;1;-1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;13;30000;0;15;26;1;1;26;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;14;30000;0;15;26;1;1;26;-1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;24;30000;0;15;26;1;1;26;0;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;25;30000;0;16;26;1;1;26;-2;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;26;30000;0;15;26;1;7;26;0;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;28;30000;0;15;26;1;1;26;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;32;30000;0;15;26;1;1;26;1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;45;30000;0;15;26;1;1;26;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;14;13;30000;0;15;26;1;1;26;-1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;14;14;30000;0;15;26;1;1;26;0;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;14;25;30000;0;15;26;1;1;26;1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;14;26;30000;0;15;26;1;1;26;-2;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;14;32;30000;0;15;26;1;1;26;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;16;5;30000;0;25;26;1;1;1;-1;-1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;24;5;30000;0;27;26;1;1;26;-2;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;24;13;30000;0;17;26;1;1;26;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;24;24;30000;0;15;26;1;1;26;0;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;24;26;30000;0;16;26;1;1;1;1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;24;32;30000;0;15;26;1;1;26;-2;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;4;30000;0;30;26;1;26;26;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;5;30000;0;28;26;1;1;26;1;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;7;30000;0;17;8;1;2;26;0;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;9;30000;0;15;26;1;20;26;0;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;13;30000;0;15;26;1;1;26;-2;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;14;30000;0;16;26;1;1;26;-1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;25;30000;0;15;26;1;1;26;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;26;30000;0;15;26;1;1;26;0;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;28;30000;0;5;16;1;21;26;1;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;32;30000;0;15;26;1;1;26;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;45;30000;0;4;8;1;13;26;0;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;4;30000;0;45;26;1;1;26;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;5;30000;0;46;26;1;1;26;-1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;7;30000;0;30;26;1;1;26;1;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;9;30000;0;25;26;1;1;26;-1;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;13;30000;0;25;26;1;1;26;1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;14;30000;0;17;26;1;1;26;0;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;24;30000;0;15;26;1;20;1;0;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;25;30000;0;16;26;1;1;26;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;26;30000;0;17;26;1;1;1;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;28;30000;0;15;26;1;1;26;-2;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;32;30000;0;15;26;1;1;1;1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;45;30000;0;15;26;1;1;26;-2;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;4;30000;0;45;26;1;22;28;-2;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;5;30000;0;30;26;1;1;28;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;7;30000;0;17;26;1;7;28;-2;4;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;9;30000;0;15;26;1;20;28;0;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;13;30000;0;15;26;1;1;28;-1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;25;30000;0;15;26;1;1;28;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;26;30000;0;15;26;1;1;28;1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;28;30000;0;30;16;1;7;28;-2;1;0;0;0;1;0;1;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;32;30000;0;15;26;1;1;28;0;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;45;30000;0;15;26;1;1;28;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;4;30000;0;50;26;1;3;32;0;1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;5;30000;0;43;26;1;1;32;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;7;30000;0;59;26;1;20;32;-1;3;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;9;30000;0;15;26;1;14;32;0;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;13;30000;0;18;26;1;1;32;0;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;14;30000;0;18;26;1;1;32;-2;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;24;30000;0;15;26;1;1;32;0;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;25;30000;0;15;26;1;1;32;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;26;30000;0;7;8;1;17;32;-2;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;28;30000;0;16;26;1;1;32;0;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;32;30000;0;15;26;1;1;32;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;45;30000;0;15;26;1;1;32;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;4;30000;0;62;26;1;12;45;-1;-2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;5;30000;0;54;26;1;1;45;-2;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;7;30000;0;24;26;1;19;45;1;3;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;9;30000;0;30;26;1;18;45;1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;13;30000;0;30;26;1;1;45;1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;25;30000;0;10;26;1;1;45;1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;26;30000;0;30;26;1;1;45;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;28;30000;0;30;26;1;1;45;1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;32;30000;0;5;16;1;23;45;-2;-2;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;45;30000;0;30;26;1;1;45;-2;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;4;30000;0;16;28;1;7;1;-2;4;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;5;30000;0;15;8;1;23;28;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;7;30000;0;15;8;1;13;28;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;9;30000;0;15;28;1;11;28;-1;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;13;30000;0;16;8;1;15;28;-1;4;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;25;30000;0;15;8;1;15;28;-2;4;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;26;30000;0;15;8;1;20;28;-2;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;28;30000;0;15;28;1;26;28;-1;3;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;32;30000;0;15;8;1;16;28;0;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;45;30000;0;15;28;1;14;28;-1;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;4;30000;0;15;16;1;6;28;1;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;5;30000;0;15;8;1;3;28;0;-2;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;7;30000;0;16;8;1;6;28;-2;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;9;30000;0;16;28;1;17;28;1;4;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;13;30000;0;15;8;1;27;28;-1;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;25;30000;0;15;8;1;5;28;0;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;26;30000;0;15;8;1;28;28;-2;4;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;28;30000;0;15;28;1;11;28;1;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;32;30000;0;15;28;1;3;28;-1;4;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;45;30000;0;1;28;1;10;28;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;4;30000;0;17;28;1;15;28;-2;4;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;5;30000;0;16;28;1;17;28;0;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;7;30000;0;15;28;1;27;28;1;4;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;9;30000;0;16;28;1;21;28;0;4;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;13;30000;0;15;28;1;28;28;-1;4;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;25;30000;0;15;8;1;19;28;0;4;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;26;30000;0;15;8;1;4;28;-1;4;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;28;30000;0;15;8;1;8;28;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;32;30000;0;15;28;1;5;28;1;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;45;30000;0;15;28;1;4;28;-1;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;4;30000;0;30;28;1;22;28;-2;4;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;5;30000;0;15;8;1;1;28;-2;0;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;7;30000;0;13;28;1;20;28;-1;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;9;30000;0;13;8;1;6;28;1;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;13;30000;0;10;8;1;19;28;-1;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;25;30000;0;7;8;1;22;28;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;26;30000;0;6;8;1;26;28;0;4;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;28;30000;0;4;8;1;20;28;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;32;30000;0;5;8;1;19;28;-2;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;45;30000;0;1;28;1;11;28;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;4;30000;0;30;28;1;20;28;-2;4;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;5;30000;0;30;28;1;5;28;-1;4;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;7;30000;0;15;8;1;22;28;-1;-2;0;1;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;9;30000;0;15;8;1;7;28;1;4;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;13;30000;0;15;28;1;5;28;0;1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;25;30000;0;10;8;1;27;28;1;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;26;30000;0;10;8;1;9;28;0;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;28;30000;0;15;28;1;2;28;-2;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;32;30000;0;15;16;1;15;28;1;-2;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;45;30000;0;10;8;1;20;28;-2;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;4;30000;0;30;8;1;22;28;-1;4;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;5;30000;0;59;28;1;15;28;-1;4;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;7;30000;0;20;28;1;9;28;-2;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;9;30000;0;13;8;1;23;28;-2;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;13;30000;0;15;28;1;5;28;0;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;25;30000;0;15;28;1;9;28;0;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;26;30000;0;15;28;1;1;28;-2;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;28;30000;0;15;28;1;2;28;-2;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;32;30000;0;15;28;1;3;28;-2;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;45;30000;0;1;28;1;14;28;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;4;30000;0;30;8;1;10;28;0;-2;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;5;30000;0;59;28;1;3;28;-2;4;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;7;30000;0;59;28;1;9;28;1;4;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;9;30000;0;15;8;1;17;28;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;13;30000;0;15;28;1;5;28;0;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;25;30000;0;15;28;1;25;28;0;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;26;30000;0;16;28;1;1;28;-2;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;28;30000;0;15;28;1;2;28;1;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;32;30000;0;15;28;1;3;28;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;45;30000;0;1;28;1;13;28;0;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;4;30000;0;50;28;1;1;28;-1;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;5;30000;0;44;28;1;1;28;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;7;30000;0;30;28;1;1;28;-2;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;9;30000;0;31;28;1;1;28;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;13;30000;0;15;28;1;5;28;0;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;14;30000;0;15;28;1;1;28;-1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;25;30000;0;16;28;1;1;28;-2;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;26;30000;0;15;28;1;1;28;1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;28;30000;0;9;16;1;4;1;-1;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;32;30000;0;15;28;1;3;28;1;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;45;30000;0;1;28;1;21;28;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;4;30000;0;30;8;1;18;32;0;1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;5;30000;0;60;8;1;19;32;0;4;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;7;30000;0;59;8;1;17;32;-2;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;9;30000;0;59;28;1;9;32;0;4;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;13;30000;0;16;28;1;5;32;0;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;25;30000;0;15;28;1;3;32;0;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;26;30000;0;16;28;1;1;32;-2;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;28;30000;0;15;28;1;2;32;-2;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;32;30000;0;15;28;1;3;32;-2;-2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;45;30000;0;1;28;1;27;32;-1;-2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;4;30000;0;26;8;1;12;45;0;0;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;5;30000;0;33;28;1;15;45;0;4;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;7;30000;0;19;28;1;10;45;-2;4;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;9;30000;0;24;28;1;19;45;1;4;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;13;30000;0;30;28;1;5;45;-1;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;25;30000;0;30;28;1;21;45;0;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;26;30000;0;31;28;1;1;45;-2;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;28;30000;0;25;28;1;11;45;-2;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;32;30000;0;5;16;1;4;45;1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;45;30000;0;6;8;1;1;45;-1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;14;14;30000;0;15;29;1;1;29;-2;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;14;16;30000;0;15;29;1;9;29;0;-2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;14;29;30000;0;15;8;1;29;29;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;14;32;30000;0;15;29;1;28;29;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;16;14;30000;0;15;29;1;1;29;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;16;16;30000;0;15;29;1;5;29;0;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;16;29;30000;0;15;29;1;8;29;-1;3;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;16;55;30000;0;5;16;1;11;29;1;3;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;29;14;30000;0;17;29;1;1;29;1;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;29;16;30000;0;15;29;1;3;29;0;-2;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;29;29;30000;0;16;29;1;1;29;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;29;32;30000;0;15;29;1;1;29;-2;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;29;55;30000;0;30;16;1;15;29;-2;3;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;32;14;30000;0;18;29;1;1;32;0;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;32;29;30000;0;15;29;1;2;32;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;32;32;30000;0;15;29;1;3;32;-2;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;32;55;30000;0;3;29;1;21;32;0;2;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;55;16;30000;0;31;29;1;3;55;-2;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;55;29;30000;0;7;29;1;12;55;-1;2;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;55;32;30000;0;4;16;1;14;55;-1;3;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;55;55;30000;0;20;29;1;25;55;-1;3;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;30;30;30;30000;0;15;30;1;1;30;1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;30;30;76;30000;0;20;30;1;1;30;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;30;76;30;30000;0;8;30;1;22;76;-1;3;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;30;76;76;30000;0;3;30;1;1;76;0;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;4;30000;0;15;32;1;2;32;1;4;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;5;30000;0;15;8;1;2;1;-1;4;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;7;30000;0;15;8;1;9;32;0;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;9;30000;0;15;8;1;32;32;-2;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;13;30000;0;15;32;1;27;32;0;4;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;17;30000;0;16;32;1;21;32;-1;4;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;25;30000;0;15;8;1;6;32;-2;4;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;26;30000;0;15;32;1;14;32;0;4;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;28;30000;0;15;32;1;3;32;-1;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;32;30000;0;15;8;1;3;32;-1;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;45;30000;0;8;8;1;1;32;-2;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;4;30000;0;15;8;1;20;1;1;-2;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;5;30000;0;15;32;1;26;32;-1;3;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;7;30000;0;15;32;1;4;32;-2;2;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;9;30000;0;15;16;1;18;32;-2;-2;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;13;30000;0;15;32;1;8;32;-1;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;17;30000;0;8;32;1;1;1;-1;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;24;30000;0;15;8;1;14;32;-1;4;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;25;30000;0;15;8;1;3;32;0;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;26;30000;0;15;8;1;4;32;-1;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;28;30000;0;15;32;1;16;32;1;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;32;30000;0;8;32;1;1;1;1;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;45;30000;0;8;8;1;1;32;-1;1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;4;30000;0;15;32;1;12;32;-1;2;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;5;30000;0;15;32;1;16;32;-1;2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;7;30000;0;15;32;1;2;32;1;2;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;9;30000;0;15;16;1;6;32;-1;2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;13;30000;0;15;8;1;31;32;0;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;25;30000;0;15;8;1;13;32;-2;4;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;26;30000;0;15;8;1;7;32;1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;28;30000;0;15;8;1;6;32;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;32;30000;0;15;32;1;8;32;0;4;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;45;30000;0;8;8;1;1;32;-2;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;4;30000;0;17;8;1;13;32;-2;1;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;5;30000;0;16;32;1;17;32;-1;3;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;7;30000;0;15;32;1;28;32;-1;2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;9;30000;0;15;32;1;9;32;1;3;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;13;30000;0;14;32;1;29;32;-2;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;22;30000;0;9;8;1;24;32;1;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;25;30000;0;9;8;1;11;32;1;4;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;26;30000;0;9;8;1;7;32;-1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;28;30000;0;7;8;1;19;32;0;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;32;30000;0;4;8;1;1;32;1;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;45;30000;0;3;8;1;1;32;1;-2;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;4;30000;0;22;32;1;12;1;-2;1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;5;30000;0;15;32;1;21;1;1;1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;7;30000;0;16;8;1;2;32;0;-2;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;9;30000;0;15;32;1;8;32;0;3;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;13;30000;0;15;32;1;1;1;-1;-2;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;14;30000;0;30;32;1;25;32;-2;4;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;17;30000;0;11;32;1;1;1;-2;-1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;24;30000;0;30;8;1;28;32;-2;4;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;25;30000;0;15;32;1;16;32;-1;4;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;26;30000;0;30;8;1;31;32;0;0;0;1;0;1;0;1;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;28;30000;0;30;8;1;6;32;0;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;32;30000;0;10;32;1;1;1;-1;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;45;30000;0;5;8;1;1;32;-2;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;14;13;30000;0;16;32;1;3;32;0;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;14;14;30000;0;15;8;1;14;32;-1;4;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;14;25;30000;0;30;8;1;19;32;-2;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;14;26;30000;0;30;8;1;3;32;1;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;14;29;30000;0;30;32;1;23;32;-1;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;14;32;30000;0;3;16;1;1;32;1;4;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;17;4;30000;0;30;16;1;10;32;-2;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;17;5;30000;0;30;8;1;24;32;-1;-1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;17;13;30000;0;15;32;1;3;32;0;1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;17;17;30000;0;15;32;1;3;1;0;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;17;32;30000;0;9;8;1;1;1;0;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;20;5;30000;0;32;32;1;16;32;0;3;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;20;6;30000;0;30;8;1;15;32;0;4;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;20;13;30000;0;15;32;1;3;32;0;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;20;20;30000;0;15;32;1;2;32;0;0;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;20;32;30000;0;15;32;1;6;32;-1;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;22;9;30000;0;15;32;1;18;32;0;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;22;22;30000;0;26;8;1;9;32;0;4;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;22;32;30000;0;15;32;1;6;32;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;24;5;30000;0;28;8;1;3;32;-1;4;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;24;13;30000;0;15;32;1;3;32;0;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;24;24;30000;0;18;32;1;32;32;-2;4;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;24;26;30000;0;12;8;1;1;32;-2;-2;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;24;32;30000;0;10;8;1;1;1;0;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;4;30000;0;31;8;1;29;32;-1;-1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;5;30000;0;31;32;1;3;32;0;3;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;7;30000;0;30;16;1;27;32;0;2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;9;30000;0;15;32;1;18;32;0;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;13;30000;0;15;32;1;3;32;0;-2;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;14;30000;0;20;8;1;22;32;-2;4;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;25;30000;0;12;32;1;22;32;1;4;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;26;30000;0;10;32;1;3;32;1;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;28;30000;0;15;32;1;3;32;-1;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;32;30000;0;30;16;1;1;32;-1;3;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;45;30000;0;1;32;1;24;32;-2;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;4;30000;0;30;8;1;4;32;0;4;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;5;30000;0;30;32;1;17;32;0;3;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;7;30000;0;30;32;1;32;32;-1;2;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;9;30000;0;15;32;1;19;32;0;-2;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;13;30000;0;16;32;1;3;32;0;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;14;30000;0;15;32;1;2;32;0;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;24;30000;0;12;32;1;29;32;-2;4;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;25;30000;0;9;8;1;12;32;1;4;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;26;30000;0;10;8;1;4;1;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;28;30000;0;12;8;1;24;32;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;32;30000;0;15;32;1;2;32;-2;1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;45;30000;0;4;8;1;1;32;1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;4;30000;0;32;8;1;11;32;-2;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;5;30000;0;31;32;1;4;32;-2;3;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;7;30000;0;31;16;1;8;32;-2;2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;9;30000;0;15;32;1;23;32;0;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;13;30000;0;30;8;1;28;32;-1;-2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;25;30000;0;10;8;1;8;32;0;-2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;26;30000;0;12;8;1;22;32;-1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;28;30000;0;12;8;1;7;32;-2;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;32;30000;0;15;32;1;6;32;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;45;30000;0;1;32;1;10;32;-1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;29;14;30000;0;59;16;1;6;32;-1;4;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;29;29;30000;0;12;16;1;20;32;1;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;29;32;30000;0;20;8;1;1;32;-2;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;29;55;30000;0;60;8;1;30;32;-2;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;4;30000;0;35;32;1;1;32;-1;1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;5;30000;0;25;32;1;1;32;1;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;6;30000;0;25;32;1;1;32;-2;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;7;30000;0;27;32;1;1;32;-1;1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;9;30000;0;25;32;1;1;32;1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;13;30000;0;25;32;1;1;32;1;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;14;30000;0;15;32;1;6;32;0;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;17;30000;0;15;32;1;1;32;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;20;30000;0;25;32;1;1;32;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;22;30000;0;15;32;1;6;1;0;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;24;30000;0;15;32;1;1;32;-2;-2;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;25;30000;0;9;32;1;1;32;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;26;30000;0;15;32;1;1;32;-1;1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;28;30000;0;15;32;1;1;32;-2;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;29;30000;0;15;32;1;1;32;1;0;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;32;30000;0;15;32;1;9;32;-1;-2;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;45;30000;0;15;32;1;1;32;-2;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;55;30000;0;23;32;1;1;32;-1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;4;30000;0;61;16;1;6;45;0;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;5;30000;0;28;16;1;25;45;1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;7;30000;0;27;32;1;24;45;0;3;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;9;30000;0;28;16;1;5;45;0;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;13;30000;0;30;32;1;3;45;0;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;25;30000;0;16;8;1;28;45;-2;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;26;30000;0;50;8;1;27;45;0;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;28;30000;0;16;16;1;3;45;0;4;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;32;30000;0;17;16;1;1;45;1;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;45;30000;0;1;16;1;17;45;-1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;55;29;30000;0;7;8;1;7;55;0;4;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;55;32;30000;0;5;16;1;11;55;-1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;55;55;30000;0;5;8;1;1;55;0;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;35;17;17;30000;0;18;35;1;27;35;-1;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;35;17;32;30000;0;8;8;1;26;1;-2;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;35;32;35;30000;0;6;8;1;28;35;0;-2;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;35;35;32;30000;0;6;8;1;33;35;-1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;35;35;35;30000;0;7;8;1;9;1;0;4;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;36;36;36;30000;0;6;8;1;9;36;-1;5;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;40;40;40;30000;0;4;8;1;31;1;0;4;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;4;4;30000;0;19;8;1;2;45;-2;6;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;7;45;30000;0;1;8;1;2;45;1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;9;45;30000;0;30;8;1;20;45;-2;6;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;13;13;30000;0;13;8;1;34;45;1;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;13;25;30000;0;7;8;1;25;45;-2;6;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;13;26;30000;0;8;8;1;18;45;0;6;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;13;28;30000;0;8;8;1;35;45;0;6;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;13;32;30000;0;6;8;1;9;45;1;6;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;13;45;30000;0;2;8;1;37;45;-2;-1;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;25;13;30000;0;16;8;1;25;45;1;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;25;25;30000;0;16;8;1;13;45;-2;6;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;25;26;30000;0;16;45;1;24;45;-1;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;25;28;30000;0;8;45;1;26;45;-1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;25;32;30000;0;16;45;1;24;45;-1;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;25;45;30000;0;3;8;1;45;45;-1;6;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;26;13;30000;0;27;8;1;9;45;1;6;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;26;25;30000;0;20;8;1;4;45;0;6;0;1;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;26;26;30000;0;16;45;1;2;45;-2;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;26;28;30000;0;8;45;1;2;45;-2;1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;26;32;30000;0;16;45;1;27;45;-1;0;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;26;45;30000;0;1;45;1;26;45;-1;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;28;13;30000;0;11;24;1;18;45;1;5;0;1;0;1;0;1;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;28;25;30000;0;9;8;1;16;45;0;6;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;28;26;30000;0;16;45;1;35;45;-2;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;28;28;30000;0;16;45;1;2;45;1;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;28;32;30000;0;16;8;1;8;45;0;6;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;28;45;30000;0;6;45;1;1;45;1;6;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;32;13;30000;0;12;8;1;35;45;0;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;32;25;30000;0;16;8;1;3;45;0;6;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;32;26;30000;0;16;45;1;33;45;0;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;32;28;30000;0;5;16;1;12;45;0;3;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;32;32;30000;0;16;45;1;11;45;1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;32;45;30000;0;1;45;1;29;45;1;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;45;7;30000;0;30;45;1;2;45;-2;-1;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;45;9;30000;0;30;45;1;27;45;0;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;45;13;30000;0;18;8;1;21;45;-2;6;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;45;25;30000;0;10;8;1;33;45;-2;6;0;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;45;26;30000;0;10;45;1;7;45;-2;-1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;45;28;30000;0;30;45;1;2;45;0;-2;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;45;32;30000;0;30;45;1;12;45;-2;1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;45;45;30000;0;1;45;1;18;45;-2;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;50;20;50;30000;0;3;50;1;32;50;-1;7;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;55;16;16;30000;0;30;8;1;1;55;-1;-2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;55;16;29;30000;0;10;16;1;52;55;1;6;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;55;16;55;30000;0;3;16;1;38;55;0;5;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;55;29;16;30000;0;16;55;1;12;55;-1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;55;29;29;30000;0;16;55;1;9;55;-1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;55;29;32;30000;0;11;8;1;55;55;0;7;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;55;29;55;30000;0;2;16;1;16;55;-1;6;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;55;32;29;30000;0;16;55;1;17;55;-1;0;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;55;32;32;30000;0;3;55;1;2;55;0;4;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;55;32;55;30000;0;3;16;1;48;55;1;1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;55;55;16;30000;0;15;55;1;13;55;-1;1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;55;55;29;30000;0;30;55;1;7;55;-1;1;0;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;55;55;32;30000;0;1;55;1;30;55;0;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;55;55;55;30000;0;30;55;1;1;55;-2;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;64;64;64;30000;0;63;8;1;1;64;1;1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;76;30;30;30000;0;10;16;1;50;76;1;7;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;76;30;76;30000;0;5;76;1;1;76;-1;9;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;76;76;30;30000;0;10;40;1;54;76;0;2;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;76;76;76;30000;0;6;16;1;1;76;-2;6;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;78;78;78;30000;0;4;8;1;26;78;1;-1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;117;9;9;30000;0;20;8;1;95;117;-1;-1;0;0;0;1;0;0;0;0;1 ================================================ FILE: src/acc/opencl/smm/params/tune_multiply_V100.csv ================================================ DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC Tesla V100-PCIE-16GB [0xb271];3;2;2;2;30000;35.1;12;1;1;2;0;-1;1;0;0;1;1;0;0;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;3;3;3;30000;93.7;12;3;1;3;0;-2;-1;0;0;0;1;0;0;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;4;4;30000;192.8;12;4;1;4;0;-2;0;0;0;0;1;0;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;4;5;30000;209.3;12;4;1;3;0;-2;0;0;0;1;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;4;7;30000;240.6;15;4;1;4;0;-1;-1;0;0;1;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;4;9;30000;254.8;8;4;1;2;0;-1;-1;0;0;0;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;4;10;30000;264.8;13;4;1;4;0;-2;0;0;0;0;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;4;13;30000;282.9;15;4;1;3;0;0;-1;0;0;1;1;0;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;4;15;30000;283.7;12;4;1;2;0;-2;-1;0;0;1;0;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;4;25;30000;310.8;25;4;1;4;0;0;-1;0;0;0;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;4;26;30000;308.3;4;4;1;2;0;-2;1;0;0;0;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;4;28;30000;316.8;25;4;1;4;0;0;0;0;0;0;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;4;32;30000;318.9;3;4;1;2;0;0;-2;0;0;0;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;5;4;30000;216.7;8;4;1;3;0;-1;0;0;0;0;1;0;0;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;5;5;30000;226.0;12;4;1;4;0;-1;0;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;5;7;30000;274.4;12;4;1;4;0;1;0;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;5;9;30000;302.3;12;4;1;4;0;-2;0;1;0;0;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;5;13;30000;337.3;15;4;1;2;0;0;0;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;5;25;30000;386.3;15;4;1;2;0;1;-1;0;0;0;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;7;4;30000;290.9;15;4;1;4;0;-1;-1;1;0;1;1;0;0;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;7;5;30000;311.1;12;4;1;3;0;-2;-1;0;0;1;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;7;7;30000;381.1;12;4;1;4;0;-2;-1;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;7;9;30000;423.7;12;4;1;3;0;-1;-1;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;7;13;30000;460.8;15;4;1;2;0;-2;0;0;0;1;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;9;4;30000;353.8;15;4;1;1;0;-2;-1;1;0;0;1;0;2;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;9;5;30000;387.9;12;4;1;4;0;-1;0;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;9;7;30000;481.5;12;4;1;2;0;1;-2;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;9;9;30000;531.4;12;4;1;4;0;-1;-1;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;9;13;30000;587.2;15;4;1;2;0;0;1;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;10;4;30000;394.9;15;4;1;2;0;0;-1;1;0;1;1;0;0;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;10;10;30000;593.4;13;4;1;2;0;1;1;0;0;1;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;13;4;30000;460.4;20;4;1;2;0;1;1;1;0;1;1;0;0;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;13;5;30000;491.0;12;4;1;4;0;-2;-1;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;13;7;30000;606.8;13;4;1;2;0;1;-1;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;13;9;30000;659.9;15;4;1;2;0;-2;-1;1;0;0;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;15;4;30000;484.4;24;4;1;4;0;-2;-1;0;0;1;1;1;0;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;25;4;30000;672.2;24;4;1;1;0;-2;0;1;0;1;1;0;2;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;25;5;30000;741.7;24;4;1;4;0;-1;-2;1;0;1;1;1;0;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;26;4;30000;692.1;20;4;1;2;0;-1;-1;1;0;1;1;0;0;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;28;4;30000;720.9;25;4;1;1;0;0;0;1;0;1;1;0;2;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;4;32;4;30000;760.2;24;4;1;4;0;0;-2;1;0;1;1;0;0;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;4;4;30000;242.9;12;5;1;2;0;0;0;0;0;0;1;0;0;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;4;5;30000;247.6;20;5;1;5;0;1;-1;0;0;0;1;0;2;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;4;7;30000;282.4;12;5;1;5;0;0;1;0;0;0;1;1;2;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;4;9;30000;303.9;12;5;1;4;0;-2;-1;0;0;1;1;0;0;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;4;13;30000;245.5;7;5;1;2;0;-2;1;1;0;0;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;4;25;30000;375.3;20;5;1;3;0;1;-1;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;5;4;30000;257.8;14;5;1;2;0;-1;0;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;5;5;30000;300.3;15;5;1;2;0;-1;-2;0;0;1;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;5;7;30000;338.9;20;5;1;3;0;-1;-2;0;0;0;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;5;9;30000;364.9;20;5;1;2;0;-1;1;0;0;1;1;0;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;5;13;30000;393.2;20;5;1;5;0;-1;-1;0;0;0;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;7;4;30000;314.7;12;5;1;2;0;-1;0;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;7;5;30000;360.8;12;5;1;4;0;1;-2;1;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;7;7;30000;435.2;12;5;1;2;0;-2;0;1;0;1;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;7;9;30000;479.6;13;5;1;3;0;1;-2;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;7;13;30000;523.5;12;5;1;5;0;-1;0;1;0;0;1;0;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;9;4;30000;386.9;12;5;1;3;0;-1;-1;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;9;5;30000;454.4;12;5;1;4;0;0;-2;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;9;7;30000;551.2;12;5;1;5;0;-2;0;0;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;9;9;30000;596.0;13;5;1;3;0;1;-2;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;13;4;30000;498.9;13;5;1;3;0;-1;0;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;13;5;30000;569.6;12;5;1;5;0;1;0;1;0;0;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;13;7;30000;699.9;13;5;1;4;0;-2;-2;1;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;13;13;30000;844.8;20;5;1;4;0;0;0;0;0;0;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;5;25;4;30000;593.2;11;5;1;5;0;0;0;0;0;0;1;1;0;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;7;5;5;30000;399.0;16;2;1;5;0;-1;-2;0;0;0;1;0;0;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;7;5;7;30000;438.8;20;2;1;3;0;0;-1;0;0;1;1;1;0;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;7;7;5;30000;506.3;15;1;2;6;0;-1;-2;1;0;1;1;0;2;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;7;7;7;30000;531.5;20;2;1;4;0;1;-2;1;0;1;1;0;0;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;7;7;13;30000;635.9;24;7;1;5;0;-1;0;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;7;13;13;30000;1037.5;20;7;1;5;0;0;-2;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;9;9;13;30000;905.3;25;9;1;7;0;0;0;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;9;13;9;30000;1027.6;20;9;1;2;0;0;0;0;0;0;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;9;13;13;30000;1136.0;20;9;1;8;0;1;-1;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;9;16;16;30000;1367.4;24;9;1;2;0;1;-1;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;9;22;16;30000;1569.6;24;9;1;6;0;-1;0;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;9;22;22;30000;1665.8;25;9;1;5;0;-2;-2;1;0;0;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;9;32;9;30000;1604.0;30;9;1;2;0;0;-1;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;9;32;22;30000;1944.9;50;9;1;4;0;0;1;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;9;32;32;30000;2154.3;50;9;1;3;0;0;0;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;13;5;5;30000;515.2;25;3;1;7;0;0;1;1;0;0;1;1;2;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;13;5;7;30000;547.3;13;3;1;8;0;0;1;0;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;13;5;13;30000;596.1;24;2;1;2;0;0;-2;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;13;7;5;30000;636.4;18;2;2;4;0;0;1;1;0;1;1;1;2;2;1;0 Tesla V100-PCIE-16GB [0xb271];3;13;7;13;30000;811.2;12;13;1;12;0;0;0;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;13;9;9;30000;857.9;20;13;1;3;0;0;0;0;0;0;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;13;9;13;30000;885.8;25;13;1;2;0;1;0;0;0;0;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;13;13;5;30000;1009.6;24;13;1;8;0;1;0;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;13;13;7;30000;1189.4;25;13;1;10;0;1;-1;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;13;13;9;30000;1294.8;24;13;1;10;0;-1;-2;1;0;0;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;13;13;13;30000;1351.9;25;13;1;10;0;-1;0;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;16;9;16;30000;1054.4;12;16;1;4;0;-1;-2;1;0;1;1;1;0;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;16;9;22;30000;1094.0;25;16;1;5;0;0;-2;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;16;16;9;30000;1631.8;25;16;1;2;0;-1;-1;1;0;0;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;16;16;16;30000;1809.8;25;16;1;16;0;0;0;0;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;16;16;22;30000;1847.2;50;16;1;12;0;1;-2;1;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;16;22;9;30000;1783.9;25;16;1;6;0;-2;-1;1;0;1;1;0;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;16;22;16;30000;1999.5;40;16;1;16;0;-1;-2;0;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;16;22;22;30000;1934.5;25;16;1;14;0;0;0;0;0;0;1;0;1;2;1;0 Tesla V100-PCIE-16GB [0xb271];3;20;20;20;30000;1986.9;40;20;1;13;0;1;-2;1;0;1;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;22;9;9;30000;809.5;20;22;1;17;0;-1;0;0;0;0;1;1;1;2;1;0 Tesla V100-PCIE-16GB [0xb271];3;22;9;16;30000;1256.9;26;22;1;1;0;-2;-1;1;0;0;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;22;9;22;30000;1271.4;30;22;1;1;0;-2;1;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;22;9;32;30000;1371.7;24;22;1;1;0;0;-2;1;0;1;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;22;16;9;30000;1629.0;25;22;1;7;0;1;0;0;0;0;1;1;1;0;1;0 Tesla V100-PCIE-16GB [0xb271];3;22;16;16;30000;2019.3;30;22;1;1;0;-2;0;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;22;16;22;30000;2279.6;50;22;1;9;0;0;0;1;0;1;1;1;1;1;0;0 Tesla V100-PCIE-16GB [0xb271];3;22;22;9;30000;2034.8;50;22;1;6;0;1;1;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;22;22;16;30000;1982.0;40;22;1;15;0;-2;0;1;0;0;1;1;1;0;1;0 Tesla V100-PCIE-16GB [0xb271];3;22;22;22;30000;2292.6;24;22;1;19;0;0;-2;1;0;0;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;22;22;32;30000;1891.9;14;22;1;14;0;-1;-1;0;0;1;1;0;1;2;1;0 Tesla V100-PCIE-16GB [0xb271];3;22;32;9;30000;2402.7;40;22;1;13;0;1;0;1;0;0;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;22;32;22;30000;2739.0;50;22;1;15;0;-1;0;1;0;1;1;1;1;1;0;0 Tesla V100-PCIE-16GB [0xb271];3;22;32;32;30000;3198.7;50;22;1;15;0;1;0;0;0;1;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;23;23;23;30000;2459.7;50;23;1;14;0;0;0;1;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;24;24;24;30000;2071.2;38;24;1;21;0;0;0;0;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;24;24;26;30000;2642.7;50;24;1;20;0;-1;0;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;24;24;32;30000;2244.6;50;24;1;17;0;-1;1;0;0;0;1;1;1;0;1;0 Tesla V100-PCIE-16GB [0xb271];3;24;26;24;30000;2711.3;50;24;1;20;0;1;-2;0;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;24;26;26;30000;2121.7;48;24;1;2;0;1;-1;0;0;0;1;1;1;2;1;0 Tesla V100-PCIE-16GB [0xb271];3;24;26;32;30000;2144.4;4;24;1;19;0;0;0;0;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;24;32;24;30000;2902.7;50;24;1;11;0;1;-1;1;0;0;1;0;1;2;1;0 Tesla V100-PCIE-16GB [0xb271];3;24;32;26;30000;2408.9;25;24;1;16;0;0;-1;1;0;1;1;1;1;2;1;0 Tesla V100-PCIE-16GB [0xb271];3;24;32;32;30000;3031.2;40;24;1;13;0;-1;-2;1;0;0;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;25;4;4;30000;291.1;24;25;1;3;0;1;0;0;0;1;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;25;4;5;30000;316.7;24;25;1;19;0;0;-2;0;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;25;5;4;30000;328.2;14;25;1;7;0;0;1;1;0;0;1;0;1;0;1;0 Tesla V100-PCIE-16GB [0xb271];3;25;25;25;30000;2349.7;24;25;1;1;0;-1;-2;1;0;0;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;26;4;4;30000;306.9;1;26;1;26;0;-1;-1;1;0;1;1;1;2;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;26;24;24;30000;1976.0;21;26;1;26;0;-1;-1;0;0;1;1;1;1;2;1;0 Tesla V100-PCIE-16GB [0xb271];3;26;24;26;30000;2405.2;50;26;1;26;0;1;0;0;0;1;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;26;24;32;30000;2449.8;50;26;1;23;0;1;-2;0;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;26;26;24;30000;2180.2;48;26;1;3;0;-2;0;0;0;0;1;1;1;0;1;0 Tesla V100-PCIE-16GB [0xb271];3;26;26;26;30000;2978.2;50;26;1;19;0;0;-2;1;0;0;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;26;26;32;30000;2410.9;50;26;1;5;0;0;-2;0;0;1;1;0;1;0;1;0 Tesla V100-PCIE-16GB [0xb271];3;26;32;24;30000;3304.4;50;26;1;15;0;1;-2;0;0;0;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;26;32;26;30000;2762.0;60;26;1;18;0;-1;-2;1;0;1;1;0;1;1;0;0 Tesla V100-PCIE-16GB [0xb271];3;26;32;32;30000;2593.6;32;26;1;26;0;-1;0;0;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;28;4;4;30000;271.5;14;28;1;18;0;-1;-2;0;0;1;1;1;1;2;1;0 Tesla V100-PCIE-16GB [0xb271];3;28;28;28;30000;2548.1;50;28;1;1;0;0;-2;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;30;30;30;30000;2542.6;32;30;1;30;0;-1;0;0;0;0;1;0;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;32;24;24;30000;2442.3;40;32;1;24;0;1;0;0;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;32;24;26;30000;2213.6;16;32;1;17;0;1;-2;0;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;32;24;32;30000;1755.0;1;32;1;12;0;0;0;0;0;0;1;0;1;1;0;0 Tesla V100-PCIE-16GB [0xb271];3;32;26;24;30000;2360.4;32;32;1;32;0;1;0;0;0;1;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;32;26;26;30000;2579.2;40;32;1;31;0;-1;0;1;0;1;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;32;26;32;30000;2487.2;40;32;1;29;0;0;0;1;0;0;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;32;32;9;30000;2755.0;50;32;1;22;0;1;-2;0;0;0;1;0;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;32;32;22;30000;2680.6;32;32;1;31;0;-1;0;1;0;1;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;32;32;24;30000;2742.6;54;32;1;22;0;0;-2;1;0;1;1;1;1;1;0;0 Tesla V100-PCIE-16GB [0xb271];3;32;32;26;30000;3464.2;50;32;1;27;0;-1;0;0;0;1;1;0;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;32;32;32;30000;3267.1;50;32;1;31;0;1;-2;1;0;0;1;1;1;2;0;0 Tesla V100-PCIE-16GB [0xb271];3;35;35;35;30000;2236.7;9;35;1;25;0;0;-2;0;0;1;1;1;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;36;36;36;30000;2138.9;71;36;1;1;0;1;-2;1;0;0;1;0;1;0;0;0 Tesla V100-PCIE-16GB [0xb271];3;40;40;40;30000;2291.0;9;40;1;1;0;0;0;1;0;0;1;1;1;1;0;0 Tesla V100-PCIE-16GB [0xb271];3;45;45;45;30000;2754.3;50;45;1;29;0;0;0;1;0;0;1;1;1;2;0;0 ================================================ FILE: src/acc/opencl/smm/requirements.txt ================================================ wheel opentuner ================================================ FILE: src/acc/opencl/smm/tune_multiply.py ================================================ #!/usr/bin/env python3 #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: BSD-3-Clause # #################################################################################################### import opentuner from opentuner.search.manipulator import IntegerParameter from opentuner.tuningrunmain import TuningRunMain from opentuner import ConfigurationManipulator from opentuner import MeasurementInterface from opentuner import Result from signal import signal, SIGINT import tempfile import copy import json import glob import math import sys import re import os default_enable_tune = {"tune", "enabled", "on"} default_basename = "tune_multiply" default_mnk = "23x23x23" default_dbg = False default_retry = 1 default_vlen = 8 type_dp = 3 type_sp = 1 def start(args): """Construct and start tuner instance""" instance = SmmTuner(args) if not default_dbg: for retry in range(default_retry): try: TuningRunMain(instance, args).main() return except Exception as e: ign = ( "[{}/{}]".format(retry + 1, default_retry) if 1 < default_retry else "" ) print("IGNORED{} {}: {}".format(ign, type(e).__name__, e)) pass instance.save_final_config(None, True) else: TuningRunMain(instance, args).main() def env_intvalue(env, default, lookup=True): value = os.getenv(env, default) if lookup else env if env is not None else default try: return int(value) except ValueError: return int(default) def ilog2(n): i, t = (0 if 1 != n else 1), 1 while t < n: t <<= 1 i += 1 return i class SmmTuner(MeasurementInterface): def __init__(self, args): """Setup common state and define search space""" super(SmmTuner, self).__init__(args) mnk = tuple(max(int(i), 1) for i in self.args.mnk.split("x")) self.mnk = (mnk + (mnk[0], mnk[0]))[:3] self.wsx = self.mnk[0] * self.mnk[1] self.manip = ConfigurationManipulator() # sanitize input arguments self.args.mb = max(self.args.mb, 1) self.args.bs = max(min(self.args.bs, self.args.mb), 1) self.args.bm = [max(self.args.bm, 1), self.mnk[0]][0 == self.args.bm] self.args.bn = [max(self.args.bn, 1), 1][0 == self.args.bn] self.args.bk = [max(self.args.bk, 1), self.mnk[2]][0 == self.args.bk] self.args.ws = min(self.args.ws, self.wsx) self.gfbase = self.gfsave = self.gflops = self.gflogs = self.gfscnt = 0 self.config = self.typename = self.typeid = self.device = self.size = None self.bs = self.bm = self.bn = self.bk = self.ws = self.wg = self.lu = None self.nz = self.al = self.tb = self.tc = None self.ap = self.aa = self.ab = self.ac = None self.idevice, self.ndevices = None, 0 self.exepath = os.path.join( os.path.dirname(sys.argv[0]), "..", "..", "acc_bench" ) runcmd = self.launch(["ACC_OPENCL_VERBOSE=2"], 0, nrep=1) self.run_result = ( # verbosity to capture device name and tuned parameters self.call_program(" ".join(runcmd)) if ( # consider validating parameters during merge (self.args.merge is None or 0 > self.args.merge) or (self.args.check is None or 0 != self.args.check) ) and (self.args.update is None or "" == self.args.update) else None ) if self.run_result: stdout = str(self.run_result["stdout"]) if 0 >= self.args.size: sizepat = "(\\w+)\\s+[0-9]+\\s+([0-9]+)" size = re.search(sizepat, stdout) self.size = int(size.group(2)) if size and size.group(2) else 0 else: self.size = self.args.size typename = re.search("typename \\(id=([0-9]+)\\):\\s+(\\w+)", stdout) self.typename = typename.group(2) if typename and typename.group(2) else "" self.typeid = ( int(typename.group(1)) if typename and typename.group(1) else 0 ) devicepat = ( 'INFO ACC/OpenCL:\\s+ndevices=([0-9]+)\\s+device[0-9]+="([^"]+)"' ) device = re.search(devicepat, str(self.run_result["stderr"])) self.ndevices = int(device.group(1)) if device and device.group(1) else 0 self.device = device.group(2) if device and device.group(2) else "" # idevice: make certain resources/names unique on a per-rank basis envrank_mpich = os.getenv("PMI_RANK") # global envrank_ompi = os.getenv("OMPI_COMM_WORLD_LOCAL_RANK", envrank_mpich) envrank = os.getenv("MPI_LOCALRANKID", envrank_ompi) if envrank: self.idevice = int(envrank) % self.ndevices elif self.args.update is not None and "" != self.args.update: self.device = self.args.update if self.run_result and 0 == self.run_result["returncode"]: seedpat = "INFO ACC/LIBSMM:\\s+SMM-kernel\\s+{}={}\\s+gen=".format( "{t,m,n,k, bs,bm,bn,bk, ws,wg, lu,nz,al, tb,tc, ap,aa,ab,ac}", "{{{}, {}}}".format( # key and value "{},{}".format( # t,m,n,k (key) self.typeid, ",".join(map(str, self.mnk)) ), "{}, {}, {}, {}, {}".format( # value: if neg. "-*[0-9]+" "(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+)", # bs,bm,bn,bk "(-*[0-9]+),(-*[0-9]+)", # ws,wg "(-*[0-9]+),(-*[0-9]+),(-*[0-9]+)", # lu,nz,al "(-*[0-9]+),(-*[0-9]+)", # tb,tc "(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+)(, .+)*", # ap,aa,ab,ac[, ext] ), ), ) seed = re.search(seedpat, str(self.run_result["stderr"])) nprm = len(seed.groups()) if seed else 0 if 15 > nprm: print("WARNING: missed to parse initial parameters!") maxlu = (self.mnk[0] + default_vlen - 1) / default_vlen # setup fixed and tunable parameters params, paramt = [], [] self.create_param("BS", params, paramt, seed, 1, 1, self.args.mb) self.create_param("BM", params, paramt, seed, 2, 1, self.mnk[0]) self.create_param("BN", params, paramt, seed, 3, 1, self.mnk[1]) self.create_param("BK", params, paramt, seed, 4, 1, self.mnk[0]) self.create_param("WS", params, paramt, seed, 5, 1, self.wsx) self.create_param("WG", params, paramt, seed, 6, -2, 1, False) # avoid WG=2 self.create_param("LU", params, paramt, seed, 7, -2, maxlu) self.create_param("NZ", params, paramt, seed, 8, 0, 1) self.create_param("AL", params, paramt, seed, 9, 0, 1) self.create_param("TB", params, paramt, seed, 10, 0, 1) self.create_param("TC", params, paramt, seed, 11, 0, 1) self.create_param("AP", params, paramt, seed, 12, 0, 1) self.create_param("AA", params, paramt, seed, 13, 0, 2) self.create_param("AB", params, paramt, seed, 14, 0, 2) self.create_param("AC", params, paramt, seed, 15, 0, 1) if 15 < nprm and seed.group(16) and 2 < len(seed.group(16)): self.create_param("XF", params, paramt, seed.group(16)[2:], -1, 0, 1) else: self.create_param("XF", params, paramt, 0, -1, 0, 1) if not paramt: sys.tracebacklimit = 0 raise RuntimeError( "All parameters are fixed with environment variables!" ) for param in params + paramt: self.manip.add_parameter(param) if ( ( # consider to update and/or merge JSONS (update first) self.args.merge is not None and (0 <= self.args.merge or self.typeid) and ( (self.args.check is not None and 0 == self.args.check) or (self.run_result and 0 == self.run_result["returncode"]) ) ) or (self.args.check is None or 0 != self.args.check) or (self.args.update is None or "" != self.args.update) ): filepattern = "{}-*.json".format(default_basename) filedot = "." + filepattern filenames = glob.glob( os.path.normpath(os.path.join(self.args.jsondir, filedot)) ) for filename in filenames: self.rename_dotfile(filename) filenames = glob.glob( os.path.normpath(os.path.join(self.args.jsondir, filepattern)) ) if self.args.update is None or "" != self.args.update: self.update_jsons(filenames) elif self.args.check is None or 0 != self.args.check: self.update_jsons(filenames) if 0 < self.gfscnt and self.args.check and 0 > self.args.check: gmn = math.exp(self.gflogs / self.gfscnt) print("Geometric mean of {} GFLOPS/s".format(round(gmn))) elif self.args.merge is not None: self.merge_jsons(filenames) exit(0) elif ( (self.typename and "" != self.typename) and (self.device and "" != self.device) and (self.typeid and 0 < self.ndevices) and (self.size and 0 < self.size) ): # setup database (DB) if self.args.database is None: # adjust DB-location tmpdir = os.path.join(tempfile.gettempdir(), "opentuner") if self.idevice is not None: tmpdir += str(self.idevice) try: os.mkdir(tmpdir) except: # noqa: E722 pass self.args.database = "sqlite:///" + os.path.join( tmpdir, "{}.db".format(os.getpid()) ) if not self.args.label: # label for DB-session self.args.label = "{}-{}-{}-s{}".format( default_basename, self.typename, "x".join(map(str, self.mnk)), ilog2(self.size), ) else: sys.tracebacklimit = 0 raise RuntimeError("Setup failed for {}!".format(self.exepath)) # register signal handler (CTRL-C) signal(SIGINT, self.handle_sigint) self.handle_sigint_counter = 0 def manipulator(self): return self.manip def create_param( self, name, params, paramt, match, match_id, value0, value1, expand=True ): """Append integer-parameter to either params or paramt list""" value_key = "OPENCL_LIBSMM_SMM_{}".format(name) value_env = os.getenv(value_key) attribute = getattr(self, name.lower(), None) tunable = value_env in default_enable_tune if 0 <= match_id: if match and match.group(match_id): value = int(match.group(match_id)) else: value = 0 if value_env is None else int(value_env) if not tunable: tunable = value_env is None else: if attribute is None: value = getattr(self.args, name.lower(), None) if value is None: value = int(value_env if match is None else match) else: value = int(attribute) if not tunable: tunable = value_env is None and 0 != value if tunable: # consider expanding value range according to seed v0 = min(value0, value) if expand else value0 v1 = max(value1, value) if expand else value1 paramt.append(IntegerParameter(name, v0, v1)) else: # fixed parameter params.append(IntegerParameter(name, value, value)) if attribute is None: setattr(self, name.lower(), value) def launch(self, envs, check=None, nrep=None, verbose=None): """Launch executable supplying environment and arguments""" envlist = envs if isinstance(envs, list) else self.environment(envs) mnk = (envs["M"], envs["N"], envs["K"]) if "M" in envs else self.mnk env_exe = " ".join(map(str, envlist)) if verbose is not None and 0 != int(verbose): msg = env_exe.replace("OPENCL_LIBSMM_SMM_", "") print("{}: {}".format("x".join(map(str, mnk)), msg)) env_std = "OMP_PROC_BIND=TRUE OPENCL_LIBSMM_SMM_S=0" env_jit = "NEO_CACHE_PERSISTENT=0 CUDA_CACHE_DISABLE=1" env_check = "CHECK={}".format(check if check is not None else 1) env_intrn = "{} {}".format( # consider device-id "" if self.idevice is None else "ACC_OPENCL_DEVICE={}".format(self.idevice), "{} {} {}".format(env_std, env_jit, env_check), # environment ).strip() arg_exe = "{} {} {}".format( self.args.r if nrep is None else nrep, self.size if self.size else self.args.size, " ".join(map(str, mnk)), ).strip() return [env_exe, env_intrn, self.exepath, arg_exe] def seed_configurations(self): return [ { "BS": self.bs if self.bs is not None else self.args.bs, "BM": self.bm if self.bm is not None else self.args.bm, "BN": self.bn if self.bn is not None else self.args.bn, "BK": self.bk if self.bk is not None else self.args.bk, "WS": self.ws if self.ws is not None else self.args.ws, "WG": self.wg if self.wg is not None else self.args.wg, "NZ": self.nz if self.nz is not None else self.args.nz, "LU": self.lu if self.lu is not None else self.args.lu, "AL": self.al if self.al is not None else self.args.al, "TB": self.tb if self.tb is not None else self.args.tb, "TC": self.tc if self.tc is not None else self.args.tc, "AP": self.ap if self.ap is not None else self.args.ap, "AA": self.aa if self.aa is not None else self.args.aa, "AB": self.ab if self.ab is not None else self.args.ab, "AC": self.ac if self.ac is not None else self.args.ac, "XF": self.xf if self.xf is not None else 0, } ] def objective(self): if 0 == self.args.tlevel: return opentuner.search.objective.MaximizeAccuracyMinimizeSize() else: return opentuner.search.objective.MaximizeAccuracy() def environment(self, config): return [ "OPENCL_LIBSMM_SMM_{}={}".format(key, config[key]) for key in sorted(config.keys()) if 2 == len(key) ] def run(self, desired_result, input=None, limit=None, message=None, nrep=None): """Run a configuration and return performance""" try: config = desired_result.configuration.data mnk = self.mnk except AttributeError: config = desired_result mnk = (config["M"], config["N"], config["K"]) skip = False if self.args.quick: if 1 == config["AA"] or 1 == config["AB"]: skip = True performance = None if not skip: runcmd = self.launch(config, self.args.check, nrep, self.args.verbose) self.run_result = self.call_program(" ".join(runcmd)) result = self.run_result["returncode"] if self.run_result else 1 if 0 == result: performance = re.search( "device:\\s+([0-9]+[^ ]*) ms\\s+([0-9]+[^ ]*)", str(self.run_result["stdout"]), ) if performance and performance.group(1) and performance.group(2): mseconds, gflops = float(performance.group(1)), float(performance.group(2)) if 0 < gflops: self.gflogs = self.gflogs + math.log(gflops) self.gfscnt = self.gfscnt + 1 if config is not desired_result: kernelreq = round((100.0 * config["BM"] * config["BN"]) / self.wsx) # gflops are reported as "accuracy" (console output) result = Result(time=mseconds, accuracy=gflops, size=kernelreq) if self.gflops < gflops: # keep best config in case of early exit self.config = desired_result.configuration self.gflops = gflops if 0 != self.gfbase: self.save_final_config(self.config, final=False) else: # seed configuration self.gfbase = gflops elif not self.args.verbose: if message: status = "OK" if 1 != int(nrep): gfbase = config["GFLOPS"] if "GFLOPS" in config else 0 if 0 < gfbase: status = "{}x - ".format(round(gflops / gfbase, 2)) status = status + "{} GFLOPS/s".format(round(gflops)) print("{} - {}".format(message, status), flush=True) else: print(".", end="", flush=True) elif not skip: # return non-competitive/bad result in case of an error failed = runcmd[0].replace("OPENCL_LIBSMM_SMM_", "") if message: msg = "{} - FAILED".format(message) else: msg = "FAILED[{}] {}: {}".format( result, "x".join(map(str, mnk)), failed ) if config is not desired_result: result = Result(time=float("inf"), accuracy=0.0, size=100.0) elif not self.args.verbose and not message: print("") print(msg, flush=True) else: result = Result(time=float("inf"), accuracy=0.0, size=100.0) return result def update_jsons(self, filenames): """Update device name or verify all JSONs""" if self.device: n = len(filenames) for i, filename in enumerate(filenames): try: with open(filename, "r") as file: data = json.load(file) if self.args.check is None or 0 != self.args.check: progress, r = "[{}/{}]: {}".format(i + 1, n, filename), 1 if self.args.check is not None: r = max(self.args.check, 0) if "TYPEID" in data and self.typeid == data["TYPEID"]: self.run(data, message=progress, nrep=r) elif "DEVICE" in data and data["DEVICE"] != self.device: print("Updated {} to {}.".format(filename, self.device)) data.update({"DEVICE": self.device}) file.close() with open(filename, "w") as file: json.dump(data, file, sort_keys=True) file.write("\n") except (json.JSONDecodeError, KeyError): print("Failed to update {}.".format(filename)) else: print("Cannot determine device name.") def make_csv_record(self, data, filename): """Make key-value tuples from JSON-data""" device = data["DEVICE"] if "DEVICE" in data else self.device value = ( data["S"] if "S" in data else 0, # pseudo key component data["GFLOPS"] if "GFLOPS" in data else 0, data["BS"], data["BM"], data["BN"], data["BK"] if "BK" in data else 0, data["WS"] if "WS" in data else 0, data["WG"] if "WG" in data else 0, data["LU"] if "LU" in data else 0, data["NZ"] if "NZ" in data else 0, data["AL"] if "AL" in data else 0, data["TB"] if "TB" in data else 0, data["TC"] if "TC" in data else 1, data["AP"] if "AP" in data else 0, data["AA"] if "AA" in data else 0, data["AB"] if "AB" in data else 0, data["AC"] if "AC" in data else 0, data["XF"] if "XF" in data else 0, filename, # last entry ) return (device, data["TYPEID"], data["M"], data["N"], data["K"]), value def merge_jsons(self, filenames): """Merge all JSONs into a single CSV-file""" if not self.args.csvfile or (self.idevice is not None and 0 != self.idevice): return # early exit merged, retain, delete = dict(), dict(), [] self.gflogs = self.gfscnt = skipcnt = 0 for filename in filenames: try: with open(filename, "r") as file: data = json.load(file) if not data or ( self.args.merge is not None and ( (0 > self.args.merge and self.typeid != data["TYPEID"]) or (1 == self.args.merge and type_sp != data["TYPEID"]) or (2 == self.args.merge and type_dp != data["TYPEID"]) ) ): # skip parameter set (JSON-file) skipcnt = skipcnt + 1 continue key, value = self.make_csv_record(data, filename) except (json.JSONDecodeError, KeyError, TypeError): print("Failed to merge {} into CSV-file.".format(filename)) continue except: # noqa: E722 continue pass if bool(data) and key in merged: gfbase, mname = merged[key][1], merged[key][-1] gflops, mtime = value[1], os.path.getmtime(mname) if gfbase < gflops: # merged data is worse if mtime < os.path.getmtime(filename): # older delete.append(mname) else: if key in retain: if retain[key][1] < gflops: delete.append(retain[key][-1]) retain[key] = merged[key] else: # merged data is leading if mtime < os.path.getmtime(filename): # older if key in retain: if retain[key][1] < gflops: delete.append(retain[key][-1]) retain[key] = value else: delete.append(filename) else: retain[key] = value else: # newer delete.append(filename) data = dict() # ensure data is not merged if bool(data) and ( # consider to finally validate result (self.args.check is not None and 0 == self.args.check) or 0 == self.run(data, nrep=1) ): merged[key] = value # replace older/best with latest/best (forced refresh) if self.args.delete and 3 <= self.args.delete: for key, value in retain.items(): if key in merged: rname, mname = value[-1], merged[key][-1] if os.path.getmtime(mname) < os.path.getmtime(rname): retain[key] = merged[key] merged[key] = value # print/delete outperformed results if self.args.delete and 2 <= self.args.delete: rfiles = [v[-1] for v in retain.values()] delete = delete + rfiles if bool(delete): num, lst, msg = len(delete), " ".join(delete), "Remove" if self.args.delete and 3 != self.args.delete: for filename in delete: try: os.remove(filename) except: # noqa: E722 pass msg = "Removed" skipcnt = skipcnt + num print("{} {}: {}".format(msg, num, lst)) print("") # write CSV-file and collect overall-statistics if bool(merged): with open(self.args.csvfile, "w") as csvfile: csvfile.write( # CSV header line with termination/newline "{}{}{}{}{}{}{}{}{}\n".format( # key-part self.args.csvsep.join(["DEVICE", "TYPEID", "M", "N", "K"]), self.args.csvsep, # separator for value-part "S", # pseudo-key component self.args.csvsep, self.args.csvsep.join(["GFLOPS", "BS", "BM", "BN", "BK"]), self.args.csvsep, self.args.csvsep.join(["WS", "WG", "LU", "NZ", "AL"]), self.args.csvsep, self.args.csvsep.join(["TB", "TC", "AP", "AA", "AB", "AC"]), ) ) types = [key[1] for key in merged.keys()] pure = min(types) == max(types) for key, value in sorted(merged.items()): # CSV data lines (records) # FLOPS are normalized for double-precision (ratio of 1:2 assumed) gflops = value[1] if pure or type_sp != key[1] else value[1] * 0.5 values = list(value[:-1]) if self.args.nogflops: values[1] = 0 # zero instead of gflops written into CSV-file if 0 < gflops: self.gflogs = self.gflogs + math.log(gflops) self.gfscnt = self.gfscnt + 1 strkey = self.args.csvsep.join([str(k) for k in key]) strval = self.args.csvsep.join([str(v) for v in values]) csvfile.write("{}{}{}\n".format(strkey, self.args.csvsep, strval)) # print summary information msg = "Merged {} of {} JSONs into {}".format( len(merged), len(filenames) - skipcnt, self.args.csvfile ) if 0 < self.gfscnt: gmn = math.exp(self.gflogs / self.gfscnt) msg = "{} (geometric mean of {} GFLOPS/s)".format(msg, round(gmn)) if not self.args.verbose and (self.args.check is None or 0 != self.args.check): print("") print(msg) def rename_dotfile(self, dotfile): try: data = None with open(dotfile, "r") as file: data = json.load(file) gflops = data["GFLOPS"] if data and "GFLOPS" in data else 0 if 0 < gflops: filemain = "-".join(os.path.basename(dotfile).split("-")[1:4]) filename = "{}-{}-{}gflops.json".format( default_basename, filemain, round(gflops) ) os.rename(dotfile, os.path.join(self.args.jsondir, filename)) except: # noqa: E722 pass def save_final_config(self, configuration, final=True): """Called at termination""" if not final and (0 >= self.gflops or not configuration): return # nothing to save config = configuration.data if configuration else None cfgenv = self.environment(config) if config else None envchk = os.getenv("CHECK") # force CHECKing result unless CHECK=0 result = self.run_result["returncode"] if config and self.run_result else 1 if 0 == result and 0 == self.args.check and (envchk is None or "0" != envchk): self.run_result = self.call_program(" ".join(self.launch(cfgenv, 1))) result = self.run_result["returncode"] if self.run_result else 1 # extend result for easier reuse if config: config["DEVICE"] = self.device config["GFLOPS"] = self.gflops config["TYPEID"] = self.typeid config["M"] = self.mnk[0] config["N"] = self.mnk[1] config["K"] = self.mnk[2] config["S"] = self.size filedev = "" if self.idevice is None else "-{}".format(self.idevice) filedot = os.path.join( self.args.jsondir, ".{}{}.json".format(self.args.label, filedev) ) if config and self.gfsave < self.gflops: # save intermediate result if 0 == self.gfsave and os.path.exists(filedot): # backup self.rename_dotfile(filedot) # self.manipulator().save_to_file(config, filename) with open(filedot, "w") as file: cfg = config if "XF" in config and 0 == config["XF"]: cfg = copy.deepcopy(config) del cfg["XF"] json.dump(cfg, file, sort_keys=True) file.write("\n") # append newline at EOF self.gfsave = self.gflops # check return code (consider not saving parameters) if 0 != result and not final: # incorrect result failed = " ".join(map(str, cfgenv)).replace("OPENCL_LIBSMM_SMM_", "") mnk = "x".join(map(str, self.mnk)) print("FAILED[{}] {}: {}".format(result, mnk, failed), flush=True) return if final and 0 < self.gflops and os.path.exists(filedot): filepattern = "{}-*.json".format(default_basename) filenames = glob.glob( os.path.normpath(os.path.join(self.args.jsondir, filepattern)) ) if not filenames and glob.glob(self.args.csvfile): msg = "WARNING: no JSON-file found but {} will be overwritten." print(msg.format(self.args.csvfile)) fileonly = "{}-{}gflops.json".format(self.args.label, round(self.gflops)) filename = os.path.normpath(os.path.join(self.args.jsondir, fileonly)) try: os.rename(filedot, filename) except: # noqa: E722 pass if filename not in filenames: # rebuild CSV-file filenames.append(filename) self.merge_jsons(filenames) speedup = round((self.gflops / self.gfbase) if 0 < self.gfbase else 0, 1) msg = " ({}x over seed)".format(speedup) if 1 < speedup else "" print("Result{} was written to {}".format(msg, filename)) elif final and self.args.merge is None: print("WARNING: no tuned results produced!") def handle_sigint(self, signum, frame): """Handle SIGINT or CTRL-C""" if 1 > self.handle_sigint_counter: # avoid recursion self.handle_sigint_counter = self.handle_sigint_counter + 1 msg = "\nWARNING: tuning {}-kernel interrupted." print(msg.format("x".join(map(str, self.mnk)))) try: self.save_final_config(self.config, True) except: # noqa: E722 pass exit(1) if __name__ == "__main__": argparser = opentuner.default_argparser() # adjust default value of existing arguments argparser.set_defaults(no_dups=True) # add primary arguments (parsed first) argparser.add_argument( "mnk", type=str, default=default_mnk, nargs="?", help="Shape of SMM-kernel (MxNxK)", ) argparser.add_argument( "-r", "--repetitions", type=int, default=0, nargs="?", dest="r", help="Repetitions per experiment", ) argparser.add_argument( "-e", "--csv-separator", type=(lambda c: c if isinstance(c, str) and 1 == len(c) else False), default=";", nargs="?", dest="csvsep", help="Separator used in CSV-file", ) argparser.add_argument( "-o", "--csv-filename", type=str, default="{}.csv".format(default_basename), nargs="?", dest="csvfile", help="Generate CSV-file", ) argparser.add_argument( "-m", "--csv-merge-jsons", type=int, default=None, const=-1, nargs="?", dest="merge", help="Merge JSONs into CSV (-1: auto, 0: all, 1: SP, 2: DP, 3: hidden)", ) argparser.add_argument( "-x", "--csv-nogflops", action="store_true", default=False, dest="nogflops", help="Exclude real GFLOPS", ) argparser.add_argument( "-p", "--jsons-dir", type=str, default=".", nargs="?", dest="jsondir", help="Directory to read/write JSONs", ) argparser.add_argument( "-u", "--jsons-update", type=str, default="", nargs="?", dest="update", help="Update JSONs (device name optional)", ) argparser.add_argument( "-c", "--check", type=float, default=0, nargs="?", help="Validate kernel (none:verify, epsilon - 0:off, -1:verify perf.)", ) argparser.add_argument( "-d", "--delete", type=int, default=None, const=1, nargs="?", help="Remove JSONs (1:worse/old, 2:worse/new, 3:dry, 4:prefer/new)", ) argparser.add_argument( "-v", "--verbose", action="store_true", default=False, help="Verbose output", ) argparser.add_argument( "-a", "--tuning-level", type=int, default=-1, nargs="?", dest="tlevel", help="Tunables: (0) all, (1) most, (2) some, (3) least", ) argparser.add_argument( "-q", "--quick", action="store_true", default=False, help="Omit certain configurations", ) argparser.add_argument( "-bm", "--initial-bm", type=int, default=env_intvalue("OPENCL_LIBSMM_SMM_BM", "0"), nargs="?", dest="bm", help="Block/tile size (0:auto)", ) argparser.add_argument( "-bn", "--initial-bn", type=int, default=env_intvalue("OPENCL_LIBSMM_SMM_BN", "0"), nargs="?", dest="bn", help="Block/tile size (0:auto)", ) argparser.add_argument( "-bk", "--initial-bk", type=int, default=env_intvalue("OPENCL_LIBSMM_SMM_BK", "0"), nargs="?", dest="bk", help="Block size (0:auto)", ) argparser.add_argument( "-ws", "--initial-ws", type=int, default=env_intvalue("OPENCL_LIBSMM_SMM_WS", "0"), nargs="?", dest="ws", help="Minimum WG-size (0:auto)", ) argparser.add_argument( "-wg", "--initial-wg", type=int, default=env_intvalue("OPENCL_LIBSMM_SMM_WG", "0"), dest="wg", help="Size of WG: subgroups (-1), tight (0), round-up (1), PoT (2)", ) argparser.add_argument( "-lu", "--initial-lu", type=int, default=env_intvalue("OPENCL_LIBSMM_SMM_LU", "-1"), dest="lu", help="Loop unroll (-2) full, (-1) no hints (default)," + " (0) inner, (1) outer-dehint, (2) block-m", ) argparser.add_argument( "-nz", "--initial-nz", type=int, default=env_intvalue("OPENCL_LIBSMM_SMM_NZ", "0"), dest="nz", help="Check (1) atomic increment to be non-zero (0:off)", ) argparser.add_argument( "-al", "--initial-al", type=int, default=env_intvalue("OPENCL_LIBSMM_SMM_AL", "0"), dest="al", help="Access: transposed (0), linear (1)", ) argparser.add_argument( "-tb", "--initial-tb", type=int, default=env_intvalue("OPENCL_LIBSMM_SMM_TB", "0"), dest="tb", help="Matrix B: untracked (0), tracked (1)", ) argparser.add_argument( "-tc", "--initial-tc", type=int, default=env_intvalue("OPENCL_LIBSMM_SMM_TC", "1"), dest="tc", help="Matrix C: untracked (0), tracked (1)", ) argparser.add_argument( "-ap", "--initial-ap", type=int, default=env_intvalue("OPENCL_LIBSMM_SMM_AP", "0"), dest="ap", help="Params: global (0), shared (1)", ) argparser.add_argument( "-aa", "--initial-aa", type=int, default=env_intvalue("OPENCL_LIBSMM_SMM_AA", "0"), dest="aa", help="Matrix A: global (0), shared (1), register (2)", ) argparser.add_argument( "-ab", "--initial-ab", type=int, default=env_intvalue("OPENCL_LIBSMM_SMM_AB", "0"), dest="ab", help="Matrix B: global (0), shared (1), register (2)", ) argparser.add_argument( "-ac", "--initial-ac", type=int, default=env_intvalue("OPENCL_LIBSMM_SMM_AC", "0"), dest="ac", help="Matrix C: register (0), shared (1)", ) argparser.add_argument( "-bs", "--initial-bs", type=int, default=env_intvalue("OPENCL_LIBSMM_SMM_BS", "0"), nargs="?", dest="bs", help="Minibatch size (0:auto)", ) argparser.add_argument( "-mb", "--max-bs", type=int, default=0, nargs="?", dest="mb", help="Maximum (mini-)batch size (0:auto)", ) argparser.add_argument( "-s", "--batchsize", type=int, default=0, nargs="?", dest="size", help="Size of batch (a.k.a. stacksize)", ) args, argd = argparser.parse_args(), argparser.parse_args([]) # OPENCL_LIBSMM_SMM_xx=tune|enabled|on must be given to permit tuning) if os.getenv("OPENCL_LIBSMM_SMM_WS") not in default_enable_tune: os.environ["OPENCL_LIBSMM_SMM_WS"] = "{}".format(args.ws) # fix tunables according to level of tuning if 1 <= args.tlevel or 0 > args.tlevel: os.environ["OPENCL_LIBSMM_SMM_BM"] = "{}".format(args.bm) os.environ["OPENCL_LIBSMM_SMM_BN"] = "{}".format(args.bn) os.environ["OPENCL_LIBSMM_SMM_AL"] = "{}".format(args.al) if 2 <= args.tlevel or 0 > args.tlevel: os.environ["OPENCL_LIBSMM_SMM_TB"] = "{}".format(args.tb) os.environ["OPENCL_LIBSMM_SMM_TC"] = "{}".format(args.tc) os.environ["OPENCL_LIBSMM_SMM_AP"] = "{}".format(args.ap) os.environ["OPENCL_LIBSMM_SMM_AC"] = "{}".format(args.ac) os.environ["OPENCL_LIBSMM_SMM_NZ"] = "{}".format(args.nz) if 3 <= args.tlevel: os.environ["OPENCL_LIBSMM_SMM_BK"] = "{}".format(args.bk) os.environ["OPENCL_LIBSMM_SMM_WG"] = "{}".format(args.wg) if 4 <= args.tlevel: os.environ["OPENCL_LIBSMM_SMM_LU"] = "{}".format(args.lu) if 0 == args.mb: args.mb = 64 # construct and start tuner instance if os.path.isfile(args.mnk): with open(args.mnk, "r") as file: while True: line = file.readline() if not line: break args.mnk, args.label = line.strip(), "" if args.mnk: start(args) print("") else: if os.path.isdir(args.mnk): args.jsondir = args.mnk args.mnk = default_mnk if args.merge is None: args.merge = -1 else: try: mnk = tuple(max(int(i), 1) for i in args.mnk.split("x")) except: # noqa: E722 mnk = None pass if not mnk: sys.tracebacklimit = 0 raise RuntimeError("Cannot parse MxNxK triplet or filename.") start(args) ================================================ FILE: src/acc/opencl/smm/tune_multiply.sh ================================================ #!/usr/bin/env bash #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: BSD-3-Clause # #################################################################################################### XARGS=$(command -v xargs) SORT=$(command -v sort) HEAD=$(command -v head) SED=$(command -v gsed) CUT=$(command -v cut) LS=$(command -v ls) RM=$(command -v rm) WC=$(command -v wc) # initial delay before auto-tuning (interactive) WAIT_DEFAULT=12 # GNU sed is desired (macOS) if [ ! "${SED}" ]; then SED=$(command -v sed) fi if [ "${XARGS}" ] && [ "${SORT}" ] && [ "${HEAD}" ] && [ "${SED}" ] && \ [ "${LS}" ] && [ "${RM}" ] && [ "${WC}" ]; then EXTRA="" while test $# -gt 0; do case "$1" in -h|--help) HELP=1 shift $#;; -c|--continue) CONTINUE=1 shift 1;; -w|--wait) WAIT=$2 shift 2;; -u|--update) UPDATE=1 shift 1;; -d|--delete) DELETE=1 shift 1;; -a|--tuning-level) TLEVEL=$2 shift 2;; -b|--backwards) REVERSE=1 shift 1;; -t|--maxtime) MAXTIME=$2 shift 2;; -p|--jsondir) JSONDIR=$2 shift 2;; -k|--specid) SPECID=$2 shift 2;; -m|--limit) MAXEXT=$2 shift 2;; -n|--triplets) MAXNUM=$2 shift 2;; -r|--bound) BOUNDL=$2 BOUNDU=$3 shift 3;; -i|--part) PART=$2 shift 2;; -j|--nparts) NPARTS=$2 shift 2;; -s|--batchsize) BATCHSIZE=$2 shift 2;; *) if [ "-" != "${1:0:1}" ]; then break else EXTRA+=" $1" shift fi;; esac done # default/basic settings if [ ! "${BATCHSIZE}" ]; then BATCHSIZE=0; fi if [ ! "${JSONDIR}" ]; then JSONDIR=.; fi if [ ! "${TLEVEL}" ]; then TLEVEL=-1; fi if [ ! "${NPARTS}" ]; then NPARTS=${PMI_SIZE:-${OMPI_COMM_WORLD_SIZE:-1}}; fi if [ ! "${PART}" ]; then PART0=${PMI_RANK:-${OMPI_COMM_WORLD_RANK:-0}} PART=$(((PART0+1)%NPARTS+1)) fi if [ ! "${WAIT}" ] && [ "1" != "${NPARTS}" ]; then WAIT=0; fi # sanity checks if [ "0" != "$((NPARTS&2 echo "ERROR: part-number ${PART} is larger than the requested ${NPARTS} parts!" exit 1 elif [ "0" != "$((1>PART))" ]; then >&2 echo "ERROR: part-number must be 1-based!" exit 1 fi if [ "${SPECID}" ] && [ "$1" ]; then >&2 echo "ERROR: --specid and are mutual exclusive!" exit 1 fi # how to print standard vs error messages if [ ! "${HELP}" ] || [ "0" = "${HELP}" ]; then JSONS=$(${LS} -1 ${JSONDIR}/tune_multiply-*-*x*x*-*gflops.json 2>/dev/null) HERE=$(cd "$(dirname "$0")" && pwd -P) ECHO=">&2 echo" if [ "${UPDATE}" ] && [ "0" != "${UPDATE}" ]; then MNKS=$(${SED} -n "s/.*tune_multiply-..*-\(..*x..*x.[^-]*\)-..*gflops\.json/\1/p" <<<"${JSONS}" \ | ${SORT} -u -n -tx -k1,1 -k2,2 -k3,3) elif [ "${SPECID}" ]; then MNKS=$(eval "${HERE}/../../acc_triplets.sh -k ${SPECID} 2>/dev/null") else if [[ "$*" != *"x"* ]]; then MNKS=$(eval "${HERE}/../../acc_triplets.sh $* 2>/dev/null") else MNKS="$*" fi fi else ECHO="echo" fi if [ ! "${WAIT}" ] || [[ ("${HELP}" && "0" != "${HELP}") ]]; then eval "${ECHO} \"Usage: $0 [options] []\"" eval "${ECHO} \" Options must precede triplet specification\"" eval "${ECHO} \" -w|--wait N: initial delay before auto-tuning (default: ${WAIT_DEFAULT} s)\"" eval "${ECHO} \" -c|--continue: proceed with plan if tuning is interrupted\"" eval "${ECHO} \" -u|--update: retune all JSONs found in directory (see -p)\"" eval "${ECHO} \" -s|--batchsize N: Number of batched SMMs (a.k.a. stacksize)\"" eval "${ECHO} \" -a|--tuning-level N=0..3: all, most, some, least tunables\"" eval "${ECHO} \" -b|--backwards: tune in descending order of triplets\"" eval "${ECHO} \" -t|--maxtime N: number of seconds spent per kernel\"" eval "${ECHO} \" -p|--jsondir P: path to JSON-files (tuned params)\"" eval "${ECHO} \" -i|--part N (1-based): Nth session out of nparts\"" eval "${ECHO} \" -j|--nparts N: number of total sessions (see -i)\"" eval "${ECHO} \" -r|--bound L U: limit L**3 < MNK <= U**3\"" eval "${ECHO} \" -m|--limit N: limit any shape extent to N\"" eval "${ECHO} \" -n|--triplets N: limit number of triplet\"" eval "${ECHO} \" -k|--specid N: predefined triplets\"" eval "${ECHO} \" 0-10: older to newer (larger), e.g.,\"" eval "${ECHO} \" 0: 201 kernels\"" eval "${ECHO} \" 10: 1266 kernels\"" eval "${ECHO} \" , e.g., 134 kernels \\\"23, 5 32 13 24 26, 4 9\\\"\"" eval "${ECHO} \" MxNxK's can be also given directly, e.g.,\"" eval "${ECHO} \" 1x1x1 2x2x2 2x2x3 2x3x2 2x3x3 3x2x2 3x2x3 3x3x2 3x3x3\"" eval "${ECHO} \" (which is equivalent to \\\"1, 2 3\\\")\"" eval "${ECHO}" if [ "${HELP}" ] && [ "0" != "${HELP}" ]; then exit 0; fi fi if [ "${MNKS}" ]; then if [ "${BOUNDL}" ] || [ "${BOUNDU}" ]; then if [ ! "${BOUNDL}" ]; then BOUNDL=0; elif [ ! "${BOUNDU}" ]; then BOUNDU=0; fi if [ "0" != "$((0<=BOUNDL))" ]; then for MNK in $(${SED} "s/x/*/g" <<<"${MNKS}"); do S=$((MNK)) if [ "0" != "$((BOUNDL&2 echo "ERROR: invalid or no given!" exit 1 fi if [ ! "${WAIT}" ] || [ "0" != "${WAIT}" ]; then if [ "0" = "$((NPARTS<=NTRIPLETS))" ]; then >&2 echo "WARNING: problem is over-decomposed!" fi echo "Session ${PART} of ${NPARTS} part(s)." fi if [ ! "${MAXTIME}" ] && [[ (! "${CONTINUE}" || \ "${CONTINUE}" = "false" || \ "${CONTINUE}" = "no" || \ "${CONTINUE}" = "0") ]]; then MAXTIME=160 fi PARTLOSZ=$((NPARTS&2 echo "Already found ${NJSONS} (unrelated?) JSON-files." fi elif [ -e tune_multiply.csv ]; then >&2 echo "No JSON file found but (unrelated?) tune_multiply.csv exists." fi if [ ! "${WAIT}" ]; then WAIT=${WAIT_DEFAULT}; fi if [ "0" != "$((0&2 echo "ERROR: missing prerequisites!" exit 1 fi ================================================ FILE: src/base/PACKAGE ================================================ { "description": "base routines needed to abstract away some machine/compiler dependent functionality", "archive": "libdbcsr", "requires": [] } ================================================ FILE: src/base/dbcsr_base_hooks.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_base_hooks !! Central dispatch for basic hooks USE dbcsr_kinds, ONLY: default_string_length USE dbcsr_machine, ONLY: default_output_unit, & m_abort, & m_flush IMPLICIT NONE PRIVATE !API PUBLIC :: dbcsr_abort, dbcsr_warn, timeset, timestop !API PUBLIC :: dbcsr_abort_hook, dbcsr_warn_hook, timeset_hook, timestop_hook, & timeset_interface, timestop_interface, & dbcsr_abort_interface, dbcsr_warn_interface !API PUBLIC :: dbcsr__a, dbcsr__b, dbcsr__w, dbcsr__l ! this interface (with subroutines in it) must to be defined right before ! the regular subroutines/functions - otherwise prettify.py will screw up. INTERFACE SUBROUTINE dbcsr_abort_interface(location, message) CHARACTER(len=*), INTENT(in) :: location, message END SUBROUTINE dbcsr_abort_interface SUBROUTINE dbcsr_warn_interface(location, message) CHARACTER(len=*), INTENT(in) :: location, message END SUBROUTINE dbcsr_warn_interface SUBROUTINE timeset_interface(routineN, handle) CHARACTER(LEN=*), INTENT(IN) :: routineN INTEGER, INTENT(OUT) :: handle END SUBROUTINE timeset_interface SUBROUTINE timestop_interface(handle) INTEGER, INTENT(IN) :: handle END SUBROUTINE timestop_interface END INTERFACE PROCEDURE(dbcsr_abort_interface), POINTER :: dbcsr_abort_hook => Null() PROCEDURE(dbcsr_warn_interface), POINTER :: dbcsr_warn_hook => Null() PROCEDURE(timeset_interface), POINTER :: timeset_hook => Null() PROCEDURE(timestop_interface), POINTER :: timestop_hook => Null() CONTAINS SUBROUTINE dbcsr_abort(location, message) !! Terminate the program CHARACTER(len=*), INTENT(in) :: location, message IF (ASSOCIATED(dbcsr_abort_hook)) THEN CALL dbcsr_abort_hook(location, message) ELSE WRITE (default_output_unit, *) "ABORT in "//TRIM(location)//" "//TRIM(message) CALL m_flush(default_output_unit) CALL m_abort() END IF ! compiler hint STOP "Never return from here" END SUBROUTINE dbcsr_abort SUBROUTINE dbcsr_warn(location, message) !! Issue a warning CHARACTER(len=*), INTENT(in) :: location, message IF (ASSOCIATED(dbcsr_warn_hook)) THEN CALL dbcsr_warn_hook(location, message) ELSE WRITE (default_output_unit, *) "WARNING in "//TRIM(location)//" "//TRIM(message) CALL m_flush(default_output_unit) END IF END SUBROUTINE dbcsr_warn SUBROUTINE timeset(routineN, handle) !! Start timer CHARACTER(LEN=*), INTENT(IN) :: routineN INTEGER, INTENT(OUT) :: handle IF (ASSOCIATED(timeset_hook)) THEN CALL timeset_hook(routineN, handle) ELSE handle = -1 END IF END SUBROUTINE timeset SUBROUTINE timestop(handle) !! Stop timer INTEGER, INTENT(IN) :: handle IF (ASSOCIATED(timestop_hook)) THEN CALL timestop_hook(handle) ELSE IF (handle /= -1) & CALL dbcsr_abort(dbcsr__l("base_hooks.F", __LINE__), "Got wrong handle") END IF END SUBROUTINE timestop SUBROUTINE dbcsr__a(filename, lineNr) !! DBCSR_ASSERT handler CHARACTER(len=*), INTENT(in) :: filename INTEGER, INTENT(in) :: lineNr CALL dbcsr_abort(location=dbcsr__l(filename, lineNr), message="DBCSR_ASSERT failed") ! compiler hint STOP "Never return from here" END SUBROUTINE dbcsr__a SUBROUTINE dbcsr__b(filename, lineNr, message) !! DBCSR_ABORT handler CHARACTER(len=*), INTENT(in) :: filename INTEGER, INTENT(in) :: lineNr CHARACTER(len=*), INTENT(in) :: message CALL dbcsr_abort(location=dbcsr__l(filename, lineNr), message=message) ! compiler hint STOP "Never return from here" END SUBROUTINE dbcsr__b SUBROUTINE dbcsr__w(filename, lineNr, message) !! DBCSR_WARN handler CHARACTER(len=*), INTENT(in) :: filename INTEGER, INTENT(in) :: lineNr CHARACTER(len=*), INTENT(in) :: message CALL dbcsr_warn(location=dbcsr__l(filename, lineNr), message=message) END SUBROUTINE dbcsr__w FUNCTION dbcsr__l(filename, lineNr) RESULT(location) !! Helper routine to assemble __LOCATION__ CHARACTER(len=*), INTENT(in) :: filename INTEGER, INTENT(in) :: lineNr CHARACTER(len=default_string_length) :: location CHARACTER(len=15) :: lineNr_str WRITE (lineNr_str, FMT='(I10)') lineNr location = TRIM(filename)//":"//TRIM(ADJUSTL(lineNr_str)) END FUNCTION dbcsr__l END MODULE dbcsr_base_hooks ================================================ FILE: src/base/dbcsr_base_uses.f90 ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! ! Basic use statements and preprocessor macros ! should be included in the use statements USE dbcsr_base_hooks, ONLY: dbcsr__a, & dbcsr__b, & dbcsr__w, & dbcsr__l, & dbcsr_abort, & dbcsr_warn, & timeset, & timestop ! Dangerous: Full path can be arbitrarily long and might overflow Fortran line. #if !defined(__SHORT_FILE__) #define __SHORT_FILE__ __FILE__ #endif #define __LOCATION__ dbcsr__l(__SHORT_FILE__,__LINE__) #define DBCSR_WARN(msg) CALL dbcsr__w(__SHORT_FILE__,__LINE__,msg) #define DBCSR_ABORT(msg) CALL dbcsr__b(__SHORT_FILE__,__LINE__,msg) ! DBCSR_ASSERT can be elided if NDEBUG is defined. #if defined(NDEBUG) # define DBCSR_ASSERT(cond) #else # define DBCSR_ASSERT(cond) IF(.NOT.(cond))CALL dbcsr__a(__SHORT_FILE__,__LINE__) #endif ! The MARK_USED macro can be used to mark an argument/variable as used. ! It is intended to make it possible to switch on -Werror=unused-dummy-argument, ! but deal elegantly with e.g. library wrapper routines that take arguments only used if the library is linked in. ! This code should be valid for any Fortran variable, is always standard conforming, ! and will be optimized away completely by the compiler #define MARK_USED(foo) IF(.FALSE.)THEN; DO ; IF(SIZE(SHAPE(foo))==-1) EXIT ; END DO ; ENDIF ! Calculate version number from 2 or 3 components. Can be used for comparison e.g., ! TO_VERSION3(4, 9, 0) <= TO_VERSION3(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) ! TO_VERSION(8, 0) <= TO_VERSION(__GNUC__, __GNUC_MINOR__) #define TO_VERSION2(MAJOR, MINOR) ((MAJOR) * 10000 + (MINOR) * 100) #define TO_VERSION3(MAJOR, MINOR, UPDATE) (TO_VERSION2(MAJOR, MINOR) + (UPDATE)) #define TO_VERSION TO_VERSION2 ! Rely on incorrect expansion inside of quotes to avoid issue of handling hash-character. !&< #if defined(__GNUC__) #define DBCSR_STRINGIZE(A) "A" #else #define DBCSR_STRINGIZE(A) #A #endif !&> ! LIBXSMM has a FORTRAN-suitable header with macro/version definitions (since v1.8.2). ! Allows macro-toggles (in addition to parameters). #if defined(__LIBXSMM) #include #if !defined(LIBXSMM_CONFIG_VERSION) #error LIBXSMM v1.8.2 or later is required! #endif #endif ! Aliasing __MPI_F08 macro of CP2K to __USE_MPI_F08 macro in DBCSR #if defined(__parallel) && defined(__MPI_F08) #define __USE_MPI_F08 1 #endif ================================================ FILE: src/base/dbcsr_kinds.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_kinds !! Defines the basic variable types !! @note !! Data type definitions; tested on: !! - IBM AIX xlf90 !! - SGI IRIX f90 !! - CRAY T3E f90 !! - DEC ALPHA f90 !! - NAG_F90 !! - SUN !! - HITACHI IMPLICIT NONE PRIVATE PUBLIC :: sp, dp, print_kind_info, dp_size, sp_size, int_size PUBLIC :: int_1, int_4, int_8, int_1_size, int_2_size, int_4_size, int_8_size PUBLIC :: real_4, real_8, real_4_size, real_8_size PUBLIC :: default_string_length, default_path_length, max_line_length INTEGER, PARAMETER :: sp = SELECTED_REAL_KIND(6, 30) INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(14, 200) ! we rely on this (libraries) but do not check this INTEGER, PARAMETER :: dp_size = 8, & int_size = BIT_SIZE(0)/8, & sp_size = 4 INTEGER, PARAMETER :: real_4 = SELECTED_REAL_KIND(6, 30) INTEGER, PARAMETER :: real_8 = SELECTED_REAL_KIND(14, 200) INTEGER, PARAMETER :: real_4_size = 4 INTEGER, PARAMETER :: real_8_size = 8 INTEGER, PARAMETER :: int_1 = SELECTED_INT_KIND(2) INTEGER, PARAMETER :: int_1_size = BIT_SIZE(INT(0, int_1))/8 INTEGER, PARAMETER :: int_2 = SELECTED_INT_KIND(4) INTEGER, PARAMETER :: int_2_size = BIT_SIZE(INT(0, int_2))/8 INTEGER, PARAMETER :: int_4 = SELECTED_INT_KIND(5) INTEGER, PARAMETER :: int_4_size = BIT_SIZE(INT(0, int_4))/8 INTEGER, PARAMETER :: int_8 = SELECTED_INT_KIND(10) INTEGER, PARAMETER :: int_8_size = BIT_SIZE(INT(0, int_8))/8 INTEGER, PARAMETER :: default_string_length = 80 INTEGER, PARAMETER :: default_path_length = 1024 INTEGER, PARAMETER :: max_line_length = 2*default_path_length CHARACTER(LEN=1), PARAMETER, PUBLIC :: default_blank_character(2) = (/" ", CHAR(9)/) CONTAINS SUBROUTINE print_kind_info(iw) !! Print informations about the used data types. INTEGER, INTENT(IN) :: iw WRITE (iw, '( /, T2, A )') 'DATA TYPE INFORMATION:' WRITE (iw, '( /,T2,A,T79,A,2(/,T2,A,T75,I6),3(/,T2,A,T67,E14.8) )') & 'REAL: Data type name:', 'dp', ' Kind value:', KIND(0.0_dp), & ' Precision:', PRECISION(0.0_dp), & ' Smallest non-negligible quantity relative to 1:', & EPSILON(0.0_dp), & ' Smallest positive number:', TINY(0.0_dp), & ' Largest representable number:', HUGE(0.0_dp) WRITE (iw, '( /,T2,A,T79,A,2(/,T2,A,T75,I6),3(/,T2,A,T67,E14.8) )') & ' Data type name:', 'sp', ' Kind value:', KIND(0.0_sp), & ' Precision:', PRECISION(0.0_sp), & ' Smallest non-negligible quantity relative to 1:', & EPSILON(0.0_sp), & ' Smallest positive number:', TINY(0.0_sp), & ' Largest representable number:', HUGE(0.0_sp) WRITE (iw, '( /,T2,A,T72,A,4(/,T2,A,T61,I20) )') & 'INTEGER: Data type name:', '(default)', ' Kind value:', & KIND(0), & ' Bit size:', BIT_SIZE(0), & ' Largest representable number:', HUGE(0) WRITE (iw, '( /,T2,A,T72,A,/,T2,A,T75,I6,/ )') & 'LOGICAL: Data type name:', '(default)', & ' Kind value:', KIND(.TRUE.) WRITE (iw, '( /,T2,A,T72,A,/,T2,A,T75,I6,/ )') & 'CHARACTER: Data type name:', '(default)', & ' Kind value:', KIND('C') END SUBROUTINE print_kind_info END MODULE dbcsr_kinds ================================================ FILE: src/base/dbcsr_machine.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_machine USE ISO_FORTRAN_ENV, ONLY: input_unit, & output_unit USE dbcsr_kinds, ONLY: default_string_length, & dp, & int_8 USE dbcsr_machine_internal, ONLY: & m_abort, m_chdir, m_flush_internal => m_flush, m_getarg, m_getcwd, m_getlog, m_getpid, & m_hostnm, m_iargc, m_memory, m_memory_details, m_memory_max, m_mov, m_procrun !$ USE OMP_LIB, ONLY: omp_get_wtime IMPLICIT NONE ! Except for some error handling code, all code should ! get a unit number from the print keys or from the logger, in order ! to guarantee correct output behavior, ! for example in farming or path integral runs ! default_input_unit should never be used ! but we need to know what it is, as we should not try to open it for output INTEGER, PUBLIC, PARAMETER :: default_output_unit = output_unit, & default_input_unit = input_unit PRIVATE PUBLIC :: m_walltime, m_datum, m_flush, m_flush_internal, & m_hostnm, m_getcwd, m_getlog, m_getpid, m_getarg, m_procrun, & m_memory, m_iargc, m_abort, m_chdir, m_mov, m_memory_details, & m_energy, m_memory_max, m_cpuinfo ! should only be set according to the state in &GLOBAL LOGICAL, SAVE, PUBLIC :: flush_should_flush = .FALSE. CONTAINS SUBROUTINE m_flush(lunit) !! flushes units if the &GLOBAL flag is set accordingly !! @note !! flushing might degrade performance significantly (30% and more) INTEGER, INTENT(IN) :: lunit IF (flush_should_flush) CALL m_flush_internal(lunit) END SUBROUTINE FUNCTION m_walltime() RESULT(wt) !! returns time from a real-time clock, protected against rolling !! early/easily !! @note !! same implementation for all machines. !! might still roll, if not called multiple times per count_max/count_rate #if defined(__LIBXSMM) USE libxsmm, ONLY: libxsmm_timer_tick, libxsmm_timer_duration #endif REAL(KIND=dp) :: wt #if defined(__LIBXSMM) wt = libxsmm_timer_duration(0_int_8, libxsmm_timer_tick()) #else INTEGER(KIND=int_8) :: count INTEGER(KIND=int_8), SAVE :: count_max, count_rate, cycles = -1, & last_count !$ IF (.FALSE.) THEN ! count lies in [0,count_max] and increases monotonically IF (cycles == -1) THEN ! get parameters of system_clock and initialise CALL SYSTEM_CLOCK(count_rate=count_rate, count_max=count_max) cycles = 0 last_count = 0 END IF CALL SYSTEM_CLOCK(count=count) ! protect against non-standard cases where time might be non-monotonous, ! but it is unlikely that the clock cycled (e.g. underlying system clock adjustments) ! i.e. if count is smaller than last_count by only a small fraction of count_max, ! we use last_count instead ! if count is smaller, we assume that the clock cycled. IF (count < last_count) THEN IF (last_count - count < count_max/100) THEN count = last_count ELSE cycles = cycles + 1 END IF END IF ! keep track of our history last_count = count wt = (REAL(count, KIND=dp) + REAL(cycles, KIND=dp)*(1.0_dp + REAL(count_max, KIND=dp))) & /REAL(count_rate, KIND=dp) !$ ELSE !$ wt = omp_get_wtime() !$ END IF #endif END FUNCTION m_walltime SUBROUTINE m_cpuinfo(model_name) !! reads /proc/cpuinfo if it exists (i.e. Linux) to return relevant info CHARACTER(LEN=default_string_length) :: model_name !! as obtained from the 'model name' field, UNKNOWN otherwise INTEGER, PARAMETER :: bufferlen = 2048 CHARACTER(LEN=bufferlen) :: buffer INTEGER :: i, icol, iline, imod, stat model_name = "UNKNOWN" buffer = "" OPEN (121245, FILE="/proc/cpuinfo", ACTION="READ", STATUS="OLD", ACCESS="STREAM", IOSTAT=stat) IF (stat == 0) THEN DO i = 1, bufferlen READ (121245, END=999) buffer(I:I) END DO 999 CLOSE (121245) imod = INDEX(buffer, "model name") IF (imod > 0) THEN icol = imod - 1 + INDEX(buffer(imod:), ":") iline = icol - 1 + INDEX(buffer(icol:), NEW_LINE('A')) IF (iline == icol - 1) iline = bufferlen + 1 model_name = buffer(icol + 1:iline - 1) END IF END IF END SUBROUTINE m_cpuinfo FUNCTION m_energy() RESULT(wt) !! returns the energy used since some time in the past. !! The precise meaning depends on the infrastructure is available. !! In the cray_pm_energy case, this is the energy used by the node in kJ. REAL(KIND=dp) :: wt #if defined(__CRAY_PM_ENERGY) wt = read_energy("/sys/cray/pm_counters/energy") #elif defined(__CRAY_PM_ACCEL_ENERGY) wt = read_energy("/sys/cray/pm_counters/accel_energy") #else wt = 0.0 ! fallback default #endif END FUNCTION m_energy #if defined(__CRAY_PM_ACCEL_ENERGY) || defined(__CRAY_PM_ENERGY) FUNCTION read_energy(filename) RESULT(wt) !! reads energy values from the sys-filesystem CHARACTER(LEN=*) :: filename REAL(KIND=dp) :: wt CHARACTER(LEN=80) :: DATA INTEGER :: i, iostat INTEGER(KIND=int_8) :: raw OPEN (121245, FILE=filename, ACTION="READ", STATUS="OLD", ACCESS="STREAM") DO I = 1, 80 READ (121245, END=999) DATA(I:I) END DO 999 CLOSE (121245) DATA(I:80) = "" READ (DATA, *, IOSTAT=iostat) raw IF (iostat .NE. 0) THEN wt = 0.0_dp ELSE ! convert from J to kJ wt = raw/1000.0_dp END IF END FUNCTION read_energy #endif SUBROUTINE m_datum(cal_date) !! returns a datum in human readable format using a standard Fortran routine CHARACTER(len=*), INTENT(OUT) :: cal_date CHARACTER(len=10) :: time CHARACTER(len=8) :: date CALL DATE_AND_TIME(date=date, time=time) cal_date = date(1:4)//"-"//date(5:6)//"-"//date(7:8)//" "//time(1:2)//":"//time(3:4)//":"//time(5:10) END SUBROUTINE m_datum END MODULE dbcsr_machine ================================================ FILE: src/base/dbcsr_machine_internal.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_machine_internal ! use POSIX per default #include "base/dbcsr_machine_posix.f90" END MODULE dbcsr_machine_internal ================================================ FILE: src/base/dbcsr_machine_posix.f90 ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! !! Implementation of machine interface based on Fortran 2003 and POSIX USE dbcsr_kinds, ONLY: dp, int_8, default_path_length, & default_string_length USE ISO_C_BINDING, ONLY: C_INT, C_NULL_CHAR, C_CHAR, C_PTR, C_NULL_PTR, C_ASSOCIATED, C_F_POINTER IMPLICIT NONE PRIVATE PUBLIC :: m_flush, m_memory, & m_hostnm, m_getcwd, m_getlog, m_getpid, m_getarg, & m_iargc, m_abort, m_chdir, m_mov, & m_memory_details, m_procrun INTEGER(KIND=int_8), PUBLIC, SAVE :: m_memory_max = 0 CONTAINS SUBROUTINE m_abort() !! Can be used to get a nice core INTERFACE SUBROUTINE abort() BIND(C, name="abort") END SUBROUTINE END INTERFACE CALL abort() END SUBROUTINE m_abort FUNCTION m_iargc() RESULT(ic) !! The number of arguments of the fortran program INTEGER :: ic ic = COMMAND_ARGUMENT_COUNT() END FUNCTION m_iargc SUBROUTINE m_flush(lunit) !! Flush a given unit INTEGER, INTENT(IN) :: lunit FLUSH (lunit) END SUBROUTINE m_flush FUNCTION m_procrun(pid) RESULT(run_on) !! Returns if a process is running on the local machine !! 1 if yes and 0 if not INTEGER, INTENT(IN) :: pid INTEGER :: run_on INTEGER :: istat INTERFACE FUNCTION kill(pid, sig) BIND(C, name="kill") RESULT(errno) IMPORT INTEGER(KIND=C_INT), VALUE :: pid, sig INTEGER(KIND=C_INT) :: errno END FUNCTION END INTERFACE ! If sig is 0, then no signal is sent, but error checking is still ! performed; this can be used to check for the existence of a process ! ID or process group ID. istat = kill(pid=pid, sig=0) IF (istat == 0) THEN run_on = 1 ! no error, process exists ELSE run_on = 0 ! error, process probably does not exist END IF END FUNCTION m_procrun SUBROUTINE m_memory(mem) !! Returns the total amount of memory [bytes] in use, if known, zero otherwise INTEGER(KIND=int_8), OPTIONAL, INTENT(OUT) :: mem INTEGER(KIND=int_8) :: mem_local ! ! __NO_STATM_ACCESS can be used to disable the stuff, if getpagesize ! lead to linking errors or /proc/self/statm can not be opened ! #if defined(__NO_STATM_ACCESS) mem_local = 0 #else INTEGER(KIND=int_8) :: m1, m2, m3 CHARACTER(LEN=80) :: DATA INTEGER :: iostat, i ! the size of a page, might not be available everywhere INTERFACE FUNCTION getpagesize() BIND(C, name="getpagesize") RESULT(RES) IMPORT INTEGER(C_INT) :: RES END FUNCTION END INTERFACE ! ! reading from statm ! mem_local = -1 DATA = "" OPEN (121245, FILE="/proc/self/statm", ACTION="READ", STATUS="OLD", ACCESS="STREAM") DO I = 1, 80 READ (121245, END=999) DATA(I:I) END DO 999 CLOSE (121245) DATA(I:80) = "" ! m1 = total ! m2 = resident ! m3 = shared READ (DATA, *, IOSTAT=iostat) m1, m2, m3 IF (iostat .NE. 0) THEN mem_local = 0 ELSE mem_local = m2 #if defined(__STATM_TOTAL) mem_local = m1 #endif #if defined(__STATM_RESIDENT) mem_local = m2 #endif mem_local = mem_local*getpagesize() END IF #endif m_memory_max = MAX(mem_local, m_memory_max) IF (PRESENT(mem)) mem = mem_local END SUBROUTINE m_memory ! ************************************************************************************************** ! *** get more detailed memory info, all units are bytes. ! *** the only 'useful' option is MemLikelyFree which is an estimate of remaining memory ! *** assumed to give info like /proc/meminfo while MeMLikelyFree is the amount of ! *** memory we're likely to be able to allocate, but not necessarily in one chunk ! *** zero means not available ! ************************************************************************************************** SUBROUTINE m_memory_details(MemTotal, MemFree, Buffers, Cached, Slab, SReclaimable, MemLikelyFree) INTEGER(kind=int_8), OPTIONAL :: MemTotal, MemFree, Buffers, Cached, Slab, SReclaimable, MemLikelyFree INTEGER, PARAMETER :: Nbuffer = 10000 CHARACTER(LEN=Nbuffer) :: meminfo INTEGER :: i MemTotal = 0 MemFree = 0 Buffers = 0 Cached = 0 Slab = 0 SReclaimable = 0 MemLikelyFree = 0 meminfo = "" OPEN (UNIT=8123, file="/proc/meminfo", ACCESS="STREAM", ERR=901) i = 0 DO i = i + 1 IF (i > Nbuffer) EXIT READ (8123, END=900, ERR=900) meminfo(i:i) END DO 900 CONTINUE meminfo(i:Nbuffer) = "" 901 CONTINUE CLOSE (8123, ERR=902) 902 CONTINUE MemTotal = get_field_value_in_bytes('MemTotal:') MemFree = get_field_value_in_bytes('MemFree:') Buffers = get_field_value_in_bytes('Buffers:') Cached = get_field_value_in_bytes('Cached:') Slab = get_field_value_in_bytes('Slab:') SReclaimable = get_field_value_in_bytes('SReclaimable:') ! opinions here vary but this might work MemLikelyFree = MemFree + Buffers + Cached + SReclaimable CONTAINS INTEGER(int_8) FUNCTION get_field_value_in_bytes(field) CHARACTER(LEN=*) :: field INTEGER :: start INTEGER(KIND=int_8) :: value get_field_value_in_bytes = 0 start = INDEX(meminfo, field) IF (start .NE. 0) THEN start = start + LEN_TRIM(field) IF (start .LT. Nbuffer) THEN READ (meminfo(start:), *, ERR=999, END=999) value ! XXXXXXX convert from Kb to bytes XXXXXXXX get_field_value_in_bytes = value*1024 999 CONTINUE END IF END IF END FUNCTION END SUBROUTINE m_memory_details ! ***************************************************************************** SUBROUTINE m_mov(source, TARGET) CHARACTER(LEN=*), INTENT(IN) :: source, TARGET INTEGER :: istat INTERFACE FUNCTION unlink(path) BIND(C, name="unlink") RESULT(errno) IMPORT CHARACTER(KIND=C_CHAR), DIMENSION(*) :: path INTEGER(KIND=C_INT) :: errno END FUNCTION END INTERFACE INTERFACE FUNCTION rename(src, dest) BIND(C, name="rename") RESULT(errno) IMPORT CHARACTER(KIND=C_CHAR), DIMENSION(*) :: src, dest INTEGER(KIND=C_INT) :: errno END FUNCTION END INTERFACE IF (TARGET == source) THEN WRITE (*, *) "Warning: m_mov ", TRIM(TARGET), " equals ", TRIM(source) RETURN END IF ! first remove target (needed on windows / mingw) istat = unlink(TRIM(TARGET)//c_null_char) ! ignore istat of unlink ! now move istat = rename(TRIM(source)//c_null_char, TRIM(TARGET)//c_null_char) IF (istat .NE. 0) THEN WRITE (*, *) "Trying to move "//TRIM(source)//" to "//TRIM(TARGET)//"." WRITE (*, *) "rename returned status: ", istat WRITE (*, *) "Problem moving file" CALL m_abort() END IF END SUBROUTINE m_mov ! ***************************************************************************** SUBROUTINE m_hostnm(hname) CHARACTER(len=*), INTENT(OUT) :: hname INTEGER :: istat, i CHARACTER(len=default_path_length) :: buf INTERFACE FUNCTION gethostname(buf, buflen) BIND(C, name="gethostname") RESULT(errno) IMPORT CHARACTER(KIND=C_CHAR), DIMENSION(*) :: buf INTEGER(KIND=C_INT), VALUE :: buflen INTEGER(KIND=C_INT) :: errno END FUNCTION END INTERFACE istat = gethostname(buf, LEN(buf)) IF (istat /= 0) THEN WRITE (*, *) "m_hostnm failed" CALL m_abort() END IF i = INDEX(buf, c_null_char) - 1 hname = buf(1:i) END SUBROUTINE m_hostnm ! ***************************************************************************** SUBROUTINE m_getcwd(curdir) CHARACTER(len=*), INTENT(OUT) :: curdir TYPE(C_PTR) :: stat INTEGER :: i CHARACTER(len=default_path_length), TARGET :: tmp INTERFACE FUNCTION getcwd(buf, buflen) BIND(C, name="getcwd") RESULT(stat) IMPORT CHARACTER(KIND=C_CHAR), DIMENSION(*) :: buf INTEGER(KIND=C_INT), VALUE :: buflen TYPE(C_PTR) :: stat END FUNCTION END INTERFACE stat = getcwd(tmp, LEN(tmp)) IF (.NOT. C_ASSOCIATED(stat)) THEN WRITE (*, *) "m_getcwd failed" CALL m_abort() END IF i = INDEX(tmp, c_null_char) - 1 curdir = tmp(1:i) END SUBROUTINE m_getcwd ! ***************************************************************************** SUBROUTINE m_chdir(dir, ierror) CHARACTER(len=*), INTENT(IN) :: dir INTEGER, INTENT(OUT) :: ierror INTERFACE FUNCTION chdir(path) BIND(C, name="chdir") RESULT(errno) IMPORT CHARACTER(KIND=C_CHAR), DIMENSION(*) :: path INTEGER(KIND=C_INT) :: errno END FUNCTION END INTERFACE ierror = chdir(TRIM(dir)//c_null_char) END SUBROUTINE m_chdir ! ***************************************************************************** SUBROUTINE m_getlog(user) CHARACTER(len=*), INTENT(OUT) :: user INTEGER :: status ! on a posix system LOGNAME should be defined CALL get_environment_variable("LOGNAME", value=user, status=status) ! nope, check alternative IF (status /= 0) & CALL get_environment_variable("USER", value=user, status=status) ! fall back IF (status /= 0) & user = "root ;-)" END SUBROUTINE m_getlog ! ***************************************************************************** SUBROUTINE m_getpid(pid) INTEGER, INTENT(OUT) :: pid INTERFACE FUNCTION getpid() BIND(C, name="getpid") RESULT(pid) IMPORT INTEGER(KIND=C_INT) :: pid END FUNCTION END INTERFACE pid = getpid() END SUBROUTINE m_getpid ! ***************************************************************************** SUBROUTINE m_getarg(i, arg) INTEGER, INTENT(IN) :: i CHARACTER(len=*), INTENT(OUT) :: arg CHARACTER(len=1024) :: tmp INTEGER :: istat CALL GET_COMMAND_ARGUMENT(i, tmp, status=istat) IF (istat /= 0) THEN WRITE (*, *) "m_getarg failed" CALL m_abort() END IF arg = TRIM(tmp) END SUBROUTINE m_getarg ================================================ FILE: src/block/PACKAGE ================================================ { "description": "DBCSR block level routines", "archive": "libdbcsr", "requires": ["../acc", "../core", "../utils", "../data", "../dist", "../base", "../mpi", "../work"], } ================================================ FILE: src/block/dbcsr_block_access.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_block_access !! DBCSR block access USE dbcsr_array_types, ONLY: array_data USE dbcsr_btree, ONLY: btree_add, & btree_data_cp2d, & btree_data_dp2d, & btree_data_sp2d, & btree_data_zp2d, & btree_find USE dbcsr_block_operations, ONLY: dbcsr_data_clear, & dbcsr_data_set USE dbcsr_config, ONLY: default_resize_factor USE dbcsr_data_methods, ONLY: dbcsr_data_clear_pointer, & dbcsr_data_ensure_size, & dbcsr_data_get_size_referenced, & dbcsr_data_set_pointer, & dbcsr_get_data, & dbcsr_get_data_p, & dbcsr_get_data_p_s, & dbcsr_get_data_p_d, & dbcsr_get_data_p_c USE dbcsr_dist_methods, ONLY: dbcsr_distribution_local_cols, & dbcsr_distribution_local_rows, & dbcsr_distribution_mp USE dbcsr_dist_operations, ONLY: dbcsr_get_block_index, & dbcsr_get_stored_block_info, & dbcsr_get_stored_coordinates USE dbcsr_index_operations, ONLY: dbcsr_addto_index_array, & dbcsr_clearfrom_index_array, & dbcsr_expand_row_index, & dbcsr_make_dbcsr_index, & dbcsr_sort_indices, & merge_index_arrays USE dbcsr_methods, ONLY: & dbcsr_blk_column_size, dbcsr_blk_row_size, dbcsr_distribution, dbcsr_get_data_type, & dbcsr_get_num_blocks, dbcsr_mutable_instantiated, dbcsr_mutable_new, dbcsr_nblkrows_total, & dbcsr_use_mutable, dbcsr_wm_use_mutable USE dbcsr_mp_methods, ONLY: dbcsr_mp_mynode USE dbcsr_ptr_util, ONLY: pointer_rank_remap2, & pointer_view USE dbcsr_toollib, ONLY: make_coordinate_tuple, & swap USE dbcsr_types, ONLY: & dbcsr_data_obj, dbcsr_scalar_type, dbcsr_slot_blk_p, dbcsr_slot_col_i, dbcsr_slot_nblks, & dbcsr_slot_nze, dbcsr_type, dbcsr_type_complex_4, dbcsr_type_complex_4_2d, & dbcsr_type_complex_8, dbcsr_type_complex_8_2d, dbcsr_type_real_4, dbcsr_type_real_4_2d, & dbcsr_type_real_8, dbcsr_type_real_8_2d USE dbcsr_work_operations, ONLY: add_work_coordinate, & dbcsr_work_create USE dbcsr_kinds, ONLY: dp, & int_8, & real_4, & real_8 #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_block_access' PUBLIC :: dbcsr_get_block_p, & dbcsr_put_block, dbcsr_remove_block PUBLIC :: dbcsr_reserve_block2d, & dbcsr_reserve_blocks, dbcsr_reserve_all_blocks, dbcsr_reserve_diag_blocks INTERFACE dbcsr_get_block_p MODULE PROCEDURE dbcsr_get_block_p_d, dbcsr_get_block_p_s, & dbcsr_get_block_p_z, dbcsr_get_block_p_c MODULE PROCEDURE dbcsr_get_2d_block_p_d, dbcsr_get_2d_block_p_s, & dbcsr_get_2d_block_p_z, dbcsr_get_2d_block_p_c MODULE PROCEDURE dbcsr_get_block_p_area END INTERFACE INTERFACE dbcsr_put_block MODULE PROCEDURE dbcsr_put_block_area MODULE PROCEDURE dbcsr_put_block_d, dbcsr_put_block_s, & dbcsr_put_block_z, dbcsr_put_block_c MODULE PROCEDURE dbcsr_put_block2d_d, dbcsr_put_block2d_s, & dbcsr_put_block2d_z, dbcsr_put_block2d_c END INTERFACE INTERFACE dbcsr_reserve_block2d MODULE PROCEDURE dbcsr_reserve_block2d_s, dbcsr_reserve_block2d_d, & dbcsr_reserve_block2d_c, dbcsr_reserve_block2d_z END INTERFACE INTERFACE dbcsr_set_block_pointer MODULE PROCEDURE dbcsr_set_block_pointer_any MODULE PROCEDURE dbcsr_set_block_pointer_2d_s, & dbcsr_set_block_pointer_2d_d, & dbcsr_set_block_pointer_2d_c, & dbcsr_set_block_pointer_2d_z END INTERFACE LOGICAL, PARAMETER :: careful_mod = .FALSE. LOGICAL, PARAMETER :: debug_mod = .FALSE. INTEGER, PARAMETER, PRIVATE :: rpslot_owner = 1 INTEGER, PARAMETER, PRIVATE :: rpslot_addblks = 2 INTEGER, PARAMETER, PRIVATE :: rpslot_addoffset = 3 INTEGER, PARAMETER, PRIVATE :: rpslot_oldblks = 4 INTEGER, PARAMETER, PRIVATE :: rpslot_oldoffset = 5 INTEGER, PARAMETER, PRIVATE :: rpslot_totaloffset = 6 INTEGER, PARAMETER, PRIVATE :: rpnslots = 6 LOGICAL, PARAMETER, PRIVATE :: detailed_timing = .FALSE. TYPE block_parameters LOGICAL :: tr = .FALSE. INTEGER :: logical_rows = -1, logical_cols = -1 INTEGER :: offset = -1, nze = -1 END TYPE block_parameters TYPE dgemm_join INTEGER :: p_a = -1, p_b = -1, p_c = -1 INTEGER :: last_k = -1, last_n = -1 TYPE(dbcsr_scalar_type) :: alpha = dbcsr_scalar_type(), beta = dbcsr_scalar_type() END TYPE dgemm_join CONTAINS SUBROUTINE dbcsr_remove_block(matrix, row, col, block_nze, block_number) !! Marks a block for removal from a DBCSR matrix. Handles !! symmetric matrices. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! DBCSR matrix INTEGER, INTENT(IN) :: row, col, block_nze !! row of block to remove !! column of block to remove INTEGER, INTENT(IN), OPTIONAL :: block_number !! the block number, if it is known CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_remove_block' INTEGER :: b, c, error_handle, r LOGICAL :: found, tr ! --------------------------------------------------------------------------- IF (careful_mod) CALL timeset(routineN, error_handle) IF (PRESENT(block_number)) THEN b = block_number IF (block_number .GT. matrix%nblks) & DBCSR_ABORT("Block number too big.") found = .TRUE. ELSE CALL dbcsr_get_block_index(matrix, row, col, r, c, tr, found, b) END IF b = ABS(b) IF (found .AND. b .GT. 0) THEN ! Mark the block for deletion. matrix%blk_p(b) = 0 matrix%valid = .FALSE. ! update nze accordingly matrix%nze = matrix%nze - block_nze IF (debug_mod) THEN IF (matrix%nze < 0) DBCSR_ABORT("nze < 0!") END IF ELSE IF (debug_mod) THEN IF (b .EQ. 0) & DBCSR_WARN("Block does not exist or is already deleted.") END IF END IF IF (careful_mod) CALL timestop(error_handle) END SUBROUTINE dbcsr_remove_block SUBROUTINE dbcsr_get_block_p_area(matrix, row, col, block, tr, found, & row_size, col_size) !! Gets a block from a dbcsr matrix as a data area !! !! Data area !! The pointer encapsulated in the data area points to data stored in the !! matrix. It must be 2-dimensional. TYPE(dbcsr_type), INTENT(IN) :: matrix !! DBCSR matrix INTEGER, INTENT(IN) :: row, col !! the row !! the column TYPE(dbcsr_data_obj), INTENT(INOUT) :: block !! the block to get LOGICAL, INTENT(OUT) :: tr, found !! whether the data is transposed !! whether the block exists in the matrix INTEGER, INTENT(OUT), OPTIONAL :: row_size, col_size !! logical row size of block !! logical column size of block CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_block_p_area' INTEGER :: blk, csize, error_handle, iw, offset, & rsize, stored_col, stored_row LOGICAL :: stored_tr TYPE(btree_data_cp2d) :: data_block_c TYPE(btree_data_dp2d) :: data_block_d TYPE(btree_data_sp2d) :: data_block_s TYPE(btree_data_zp2d) :: data_block_z ! --------------------------------------------------------------------------- IF (careful_mod) CALL timeset(routineN, error_handle) CALL dbcsr_get_block_index(matrix, row, col, stored_row, stored_col, & stored_tr, found, blk, offset) tr = stored_tr rsize = dbcsr_blk_row_size(matrix, stored_row) csize = dbcsr_blk_column_size(matrix, stored_col) IF (PRESENT(row_size)) row_size = rsize IF (PRESENT(col_size)) col_size = csize CALL dbcsr_data_clear_pointer(block) IF (found) THEN CALL dbcsr_set_block_pointer(matrix, block, rsize, csize, stored_tr, offset) ELSEIF (ASSOCIATED(matrix%wms)) THEN iw = 1 !$ iw = omp_get_thread_num() + 1 IF (.NOT. dbcsr_use_mutable(matrix)) & DBCSR_ABORT("Can not retrieve blocks from non-mutable work matrices.") IF (dbcsr_mutable_instantiated(matrix%wms(iw)%mutable)) THEN SELECT CASE (block%d%data_type) CASE (dbcsr_type_real_4_2d) CALL btree_find( & matrix%wms(iw)%mutable%m%btree_s, & make_coordinate_tuple(stored_row, stored_col), & data_block_s, found) IF (found) THEN CALL dbcsr_data_set_pointer(block, data_block_s%p) END IF CASE (dbcsr_type_real_8_2d) CALL btree_find( & matrix%wms(iw)%mutable%m%btree_d, & make_coordinate_tuple(stored_row, stored_col), & data_block_d, found) IF (found) THEN CALL dbcsr_data_set_pointer(block, data_block_d%p) END IF CASE (dbcsr_type_complex_4_2d) CALL btree_find( & matrix%wms(iw)%mutable%m%btree_c, & make_coordinate_tuple(stored_row, stored_col), & data_block_c, found) IF (found) THEN CALL dbcsr_data_set_pointer(block, data_block_c%p) END IF CASE (dbcsr_type_complex_8_2d) CALL btree_find( & matrix%wms(iw)%mutable%m%btree_z, & make_coordinate_tuple(stored_row, stored_col), & data_block_z, found) IF (found) THEN CALL dbcsr_data_set_pointer(block, data_block_z%p) END IF CASE default DBCSR_ABORT("Only 2-D data for block pointers!") END SELECT END IF END IF IF (careful_mod) CALL timestop(error_handle) END SUBROUTINE dbcsr_get_block_p_area SUBROUTINE dbcsr_put_block_area(matrix, row, col, block, lb_row_col, transposed, & summation, flop, scale) !! We allow : !! matrix(dp) [+]= [scale(dp)] * block(dp) !! matrix(dp) [+]= [scale(dp)] * block(sp) !! matrix(sp) [+]= [scale(dp)] * block(sp) TYPE(dbcsr_type), INTENT(INOUT) :: matrix INTEGER, INTENT(IN) :: row, col TYPE(dbcsr_data_obj) :: block INTEGER, DIMENSION(2), INTENT(INOUT), OPTIONAL :: lb_row_col LOGICAL, INTENT(IN), OPTIONAL :: transposed, summation INTEGER(KIND=int_8), INTENT(INOUT), OPTIONAL :: flop TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: scale CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_put_block_area' INTEGER :: data_type_m, error_handle LOGICAL :: do_scale ! --------------------------------------------------------------------------- IF (careful_mod) CALL timeset(routineN, error_handle) data_type_m = dbcsr_get_data_type(matrix) do_scale = PRESENT(scale) IF (do_scale) THEN !IF(data_type_m /= scale%data_type) & ! DBCSR_ABORT("Incompatible data types matrix="//data_type_m//" scale="//scale%data_type) END IF IF (.NOT. ASSOCIATED(block%d)) & DBCSR_ABORT("Can only add valid data block!") SELECT CASE (block%d%data_type) CASE (dbcsr_type_real_4) IF (do_scale) THEN IF (data_type_m .EQ. dbcsr_type_real_4) THEN CALL dbcsr_put_block(matrix, row, col, dbcsr_get_data_p_s(block), lb_row_col, transposed, & summation, flop, scale=scale%r_sp) ELSEIF (data_type_m .EQ. dbcsr_type_real_8) THEN CALL dbcsr_put_block(matrix, row, col, & REAL(dbcsr_get_data_p_s(block), real_8), lb_row_col, transposed, & summation, flop, scale=REAL(scale%r_sp, real_8)) END IF ELSE IF (data_type_m .EQ. dbcsr_type_real_4) THEN CALL dbcsr_put_block(matrix, row, col, dbcsr_get_data_p_s(block), lb_row_col, transposed, & summation, flop) ELSEIF (data_type_m .EQ. dbcsr_type_real_8) THEN CALL dbcsr_put_block(matrix, row, col, & REAL(dbcsr_get_data_p_s(block), real_8), lb_row_col, transposed, & summation, flop) END IF END IF CASE (dbcsr_type_real_8) IF (do_scale) THEN CALL dbcsr_put_block(matrix, row, col, dbcsr_get_data_p_d(block), lb_row_col, transposed, & summation, flop, scale=scale%r_dp) ELSE CALL dbcsr_put_block(matrix, row, col, dbcsr_get_data_p_d(block), lb_row_col, transposed, & summation, flop) END IF CASE (dbcsr_type_complex_4) IF (do_scale) THEN CALL dbcsr_put_block(matrix, row, col, dbcsr_get_data_p_c(block), lb_row_col, transposed, & summation, flop, scale=scale%c_sp) ELSE CALL dbcsr_put_block(matrix, row, col, dbcsr_get_data_p_c(block), lb_row_col, transposed, & summation, flop) END IF CASE (dbcsr_type_complex_8) IF (do_scale) THEN CALL dbcsr_put_block(matrix, row, col, block%d%c_dp, lb_row_col, transposed, & summation, flop, scale=scale%c_dp) ELSE CALL dbcsr_put_block(matrix, row, col, block%d%c_dp, lb_row_col, transposed, & summation, flop) END IF CASE (dbcsr_type_real_4_2d) IF (do_scale) THEN CALL dbcsr_put_block(matrix, row, col, block%d%r2_sp, lb_row_col, transposed, & summation, flop, scale=scale%r_sp) ELSE CALL dbcsr_put_block(matrix, row, col, block%d%r2_sp, lb_row_col, transposed, & summation, flop) END IF CASE (dbcsr_type_real_8_2d) IF (do_scale) THEN CALL dbcsr_put_block(matrix, row, col, block%d%r2_dp, lb_row_col, transposed, & summation, flop, scale=scale%r_dp) ELSE CALL dbcsr_put_block(matrix, row, col, block%d%r2_dp, lb_row_col, transposed, & summation, flop) END IF CASE (dbcsr_type_complex_4_2d) IF (do_scale) THEN CALL dbcsr_put_block(matrix, row, col, block%d%c2_sp, lb_row_col, transposed, & summation, flop, scale=scale%c_sp) ELSE CALL dbcsr_put_block(matrix, row, col, block%d%c2_sp, lb_row_col, transposed, & summation, flop) END IF CASE (dbcsr_type_complex_8_2d) IF (do_scale) THEN CALL dbcsr_put_block(matrix, row, col, block%d%c2_dp, lb_row_col, transposed, & summation, flop, scale=scale%c_dp) ELSE CALL dbcsr_put_block(matrix, row, col, block%d%c2_dp, lb_row_col, transposed, & summation, flop) END IF CASE default DBCSR_ABORT("Invalid data type") END SELECT IF (careful_mod) CALL timestop(error_handle) END SUBROUTINE dbcsr_put_block_area SUBROUTINE dbcsr_reserve_all_blocks(matrix) !! Inserts all blocks of a dbcsr matrix to make it a full matrix. !! Thus obviously not linear scaling. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! Matrix into which blocks should be added. CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_reserve_all_blocks' INTEGER :: blk_count, col, col_local, col_s, & error_handle, myrank, rank, row, & row_local, row_s INTEGER, ALLOCATABLE, DIMENSION(:) :: columns, rows INTEGER, DIMENSION(:), POINTER :: local_cols, local_rows LOGICAL :: tr CALL timeset(routineN, error_handle) myrank = dbcsr_mp_mynode(dbcsr_distribution_mp(dbcsr_distribution(matrix))) local_rows => dbcsr_distribution_local_rows(dbcsr_distribution(matrix)) local_cols => dbcsr_distribution_local_cols(dbcsr_distribution(matrix)) blk_count = 0 ! should be possible to loop only over the local blockrows/blockcols DO row_local = 1, SIZE(local_rows) DO col_local = 1, SIZE(local_cols) tr = .FALSE. row = local_rows(row_local) col = local_cols(col_local) row_s = row; col_s = col CALL dbcsr_get_stored_coordinates(matrix, row_s, col_s, rank) ! is that the correct condition for symmetric matrices ? IF (rank .EQ. myrank .AND. row_s .EQ. row .AND. col_s .EQ. col) blk_count = blk_count + 1 END DO END DO ALLOCATE (rows(blk_count), columns(blk_count)) blk_count = 0 DO row_local = 1, SIZE(local_rows) DO col_local = 1, SIZE(local_cols) tr = .FALSE. row = local_rows(row_local) col = local_cols(col_local) row_s = row; col_s = col CALL dbcsr_get_stored_coordinates(matrix, row_s, col_s, rank) IF (rank .EQ. myrank .AND. row_s .EQ. row .AND. col_s .EQ. col) THEN blk_count = blk_count + 1 rows(blk_count) = row columns(blk_count) = col END IF END DO END DO CALL dbcsr_reserve_blocks(matrix, rows, columns) CALL timestop(error_handle) END SUBROUTINE dbcsr_reserve_all_blocks SUBROUTINE dbcsr_reserve_diag_blocks(matrix) !! Inserts diagonal blocks of a dbcsr matrix to make it a matrix with at least all diagonal blocks present TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! Matrix into which blocks should be added. INTEGER :: blk_count, col, col_s, myrank, rank, & row, row_s INTEGER, ALLOCATABLE, DIMENSION(:) :: columns, rows LOGICAL :: tr myrank = dbcsr_mp_mynode(dbcsr_distribution_mp(dbcsr_distribution(matrix))) blk_count = 0 ! should be possible to loop only over the local blockrows/blockcols DO row = 1, dbcsr_nblkrows_total(matrix) col = row tr = .FALSE. row_s = row; col_s = col CALL dbcsr_get_stored_coordinates(matrix, row_s, col_s, rank) IF (rank .EQ. myrank .AND. row_s .EQ. row .AND. col_s .EQ. col) blk_count = blk_count + 1 END DO ALLOCATE (rows(blk_count), columns(blk_count)) blk_count = 0 DO row = 1, dbcsr_nblkrows_total(matrix) col = row tr = .FALSE. row_s = row; col_s = col CALL dbcsr_get_stored_coordinates(matrix, row_s, col_s, rank) IF (rank .EQ. myrank .AND. row_s .EQ. row .AND. col_s .EQ. col) THEN blk_count = blk_count + 1 rows(blk_count) = row columns(blk_count) = col END IF END DO CALL dbcsr_reserve_blocks(matrix, rows, columns) END SUBROUTINE dbcsr_reserve_diag_blocks SUBROUTINE dbcsr_reserve_blocks(matrix, rows, columns, blk_pointers) !! Inserts block reservations into a matrix, avoiding the work matrix. !! !! Data !! No data can be specified; instead, space is reserved and zeroed. To !! add data, call dbcsr_put_block afterwards. !! !! Reserving existing blocks !! Duplicates are not added, but allocations may be greater than !! the minimum necessary. !! !! blk_pointers !! When blk_pointers is passed, the newly added blocks use these pointers. !! No data is cleared in this case TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! Matrix into which blocks should be added. INTEGER, DIMENSION(:), INTENT(IN) :: rows, columns !! Rows of the blocks to add !! Columns of the blocks to add INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: blk_pointers !! block pointers to use for new blocks CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_reserve_blocks' INTEGER :: blk, blk_p, data_size_new, data_size_old, handle, nblkrows, nblks_actual_added, & nblks_added, nblks_new, nblks_old, new_data_sizes, nze INTEGER, ALLOCATABLE, DIMENSION(:) :: add_blkp, add_cols, add_rows, & added_sizes, new_blk_p, new_col_i, & new_row_i, old_row_i INTEGER, ALLOCATABLE, DIMENSION(:, :) :: added_blk_info ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (SIZE(rows) /= SIZE(columns)) & DBCSR_ABORT("Size of rows and columns array must match.") IF (PRESENT(blk_pointers)) THEN IF (SIZE(rows) /= SIZE(blk_pointers)) & DBCSR_ABORT("Size of rows and block pointecs arrays must match.") data_size_old = 0 ELSE ! Get current data size data_size_old = dbcsr_data_get_size_referenced(matrix%data_area) END IF ! Ensures that the rows and columns are sorted. nblks_added = SIZE(rows) ALLOCATE (add_rows(nblks_added)) add_rows(:) = rows(:) ALLOCATE (add_cols(nblks_added)) add_cols(:) = columns(:) IF (PRESENT(blk_pointers)) THEN ALLOCATE (add_blkp(nblks_added)) add_blkp(:) = blk_pointers(:) CALL dbcsr_sort_indices(nblks_added, add_rows, add_cols, & blk_p=add_blkp) ELSE CALL dbcsr_sort_indices(nblks_added, add_rows, add_cols) END IF nblks_old = dbcsr_get_num_blocks(matrix) nblkrows = dbcsr_nblkrows_total(matrix) IF (SIZE(rows) .GT. 0 .AND. nblkrows .LE. 0) & DBCSR_ABORT("Can not add blocks to matrix with no rows.") ! Adjust the index. ! Get the old row indices ALLOCATE (old_row_i(nblks_old)) CALL dbcsr_expand_row_index(matrix%row_p, old_row_i, & nblkrows, nblks_old) ! Calculate new block pointers. Possibly high estimates. new_data_sizes = 0 blk_p = data_size_old + 1 ! New blocks start at the end of the old ALLOCATE (added_blk_info(3, nblks_added)) ALLOCATE (added_sizes(nblks_added)) DO blk = 1, nblks_added IF (PRESENT(blk_pointers)) THEN blk_p = add_blkp(blk) END IF added_blk_info(1:3, blk) = (/add_rows(blk), add_cols(blk), blk_p/) nze = dbcsr_blk_row_size(matrix, add_rows(blk)) & *dbcsr_blk_column_size(matrix, add_cols(blk)) added_sizes(blk) = nze blk_p = blk_p + nze END DO DEALLOCATE (add_rows) DEALLOCATE (add_cols) IF (PRESENT(blk_pointers)) DEALLOCATE (add_blkp) ! nblks_new = nblks_old + nblks_added ! Possibly high estimate ALLOCATE (new_row_i(nblks_new)) ALLOCATE (new_col_i(nblks_new)) ALLOCATE (new_blk_p(nblks_new)) ! Merge the two indices IF (PRESENT(blk_pointers)) THEN CALL merge_index_arrays(new_row_i, new_col_i, new_blk_p, nblks_new, & old_row_i, matrix%col_i, matrix%blk_p, nblks_old, & added_blk_info, nblks_added, added_nblks=nblks_actual_added) data_size_new = 0 ELSE CALL merge_index_arrays(new_row_i, new_col_i, new_blk_p, nblks_new, & old_row_i, matrix%col_i, matrix%blk_p, nblks_old, & added_blk_info, nblks_added, added_nblks=nblks_actual_added, & added_sizes=added_sizes, added_size_offset=data_size_old + 1, & added_size=data_size_new) END IF nblks_new = nblks_actual_added + nblks_old ! Free some memory DEALLOCATE (added_blk_info) DEALLOCATE (added_sizes) DEALLOCATE (old_row_i) ! We can skip this if no block was actually added. IF (nblks_actual_added .GT. 0) THEN ! Write the new index matrix%nblks = nblks_new matrix%nze = matrix%nze + data_size_new matrix%index(dbcsr_slot_nblks) = matrix%nblks matrix%index(dbcsr_slot_nze) = matrix%index(dbcsr_slot_nze) CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_col_i) CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_blk_p) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_col_i, & new_col_i(1:nblks_new), & extra=nblks_new) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, & new_blk_p(1:nblks_new)) CALL dbcsr_make_dbcsr_index(matrix%row_p, new_row_i(1:nblks_new), & nblkrows, nblks_new) IF (.NOT. PRESENT(blk_pointers)) THEN ! Resize data area to fit the new blocks. CALL dbcsr_data_ensure_size(matrix%data_area, & data_size=matrix%nze) ! Zero the new data blocks. CALL dbcsr_data_clear(matrix%data_area, & lb=data_size_old + 1, ub=matrix%nze) END IF END IF CALL timestop(handle) END SUBROUTINE dbcsr_reserve_blocks SUBROUTINE dbcsr_set_block_pointer_any(matrix, pointer_any, & rsize, csize, main_tr, base_offset) !! Sets a pointer, possibly using the buffers. TYPE(dbcsr_type), INTENT(IN) :: matrix !! Matrix to use TYPE(dbcsr_data_obj), INTENT(INOUT) :: pointer_any !! The pointer to set INTEGER, INTENT(IN) :: rsize, csize !! Row sizes of block to point to !! Column sizes of block to point to LOGICAL, INTENT(IN) :: main_tr !! Whether block is transposed in the matrix INTEGER, INTENT(IN) :: base_offset !! The block pointer ! --------------------------------------------------------------------------- IF (main_tr) THEN CALL dbcsr_data_set_pointer(pointer_any, csize, rsize, & matrix%data_area, source_lb=base_offset) ELSE CALL dbcsr_data_set_pointer(pointer_any, rsize, csize, & matrix%data_area, source_lb=base_offset) END IF END SUBROUTINE dbcsr_set_block_pointer_any #:include '../data/dbcsr.fypp' #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float SUBROUTINE dbcsr_get_2d_block_p_${nametype1}$ (matrix, row, col, block, tr, found, & row_size, col_size) !! Gets a 2-d block from a dbcsr matrix TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! DBCSR matrix INTEGER, INTENT(IN) :: row, col !! the row !! the column ${type1}$, DIMENSION(:, :), POINTER :: block !! the block to get (rank-2 array) LOGICAL, INTENT(OUT) :: tr !! whether the data is transposed LOGICAL, INTENT(OUT) :: found !! whether the block exists in the matrix INTEGER, INTENT(OUT), OPTIONAL :: row_size, col_size !! logical row size of block !! logical column size of block CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_2d_block_p_${nametype1}$' ${type1}$, DIMENSION(:), POINTER :: block_1d INTEGER :: rsize, csize, & blk, nze, offset, & stored_row, & stored_col, iw, nwms INTEGER :: error_handle TYPE(btree_data_${nametype1}$p2d) :: data_block LOGICAL :: stored_tr ${type1}$, DIMENSION(1, 1), TARGET, SAVE :: block0 ! --------------------------------------------------------------------------- IF (careful_mod) CALL timeset(routineN, error_handle) IF (debug_mod) THEN IF (matrix%data_type /= ${dkind1}$) & DBCSR_ABORT("Data type mismatch for requested block.") END IF CALL dbcsr_get_block_index(matrix, row, col, stored_row, stored_col, & stored_tr, found, blk, offset) tr = stored_tr rsize = dbcsr_blk_row_size(matrix, stored_row) csize = dbcsr_blk_column_size(matrix, stored_col) IF (PRESENT(row_size)) row_size = rsize IF (PRESENT(col_size)) col_size = csize NULLIFY (block) IF (found) THEN nze = rsize*csize IF (nze .eq. 0) THEN found = .TRUE. block => block0(1:0, 1:0) ELSE block_1d => pointer_view(dbcsr_get_data_p( & matrix%data_area, ${zero1[n]}$), offset, offset + nze - 1) CALL dbcsr_set_block_pointer(matrix, block, rsize, csize, offset) END IF ELSEIF (ASSOCIATED(matrix%wms)) THEN nwms = SIZE(matrix%wms) iw = 1 !$ IF (nwms < omp_get_num_threads()) & !$ DBCSR_ABORT("Number of work matrices not equal to number of threads") !$ iw = omp_get_thread_num() + 1 IF (.NOT. dbcsr_use_mutable(matrix)) & DBCSR_ABORT("Can not retrieve blocks from non-mutable work matrices.") IF (dbcsr_use_mutable(matrix)) THEN IF (.NOT. dbcsr_mutable_instantiated(matrix%wms(iw)%mutable)) THEN CALL dbcsr_mutable_new(matrix%wms(iw)%mutable, & dbcsr_get_data_type(matrix)) END IF CALL btree_find( & matrix%wms(iw)%mutable%m%btree_${nametype1}$, & make_coordinate_tuple(stored_row, stored_col), & data_block, found) IF (found) THEN block => data_block%p END IF END IF END IF IF (careful_mod) CALL timestop(error_handle) END SUBROUTINE dbcsr_get_2d_block_p_${nametype1}$ SUBROUTINE dbcsr_get_block_p_${nametype1}$ (matrix, row, col, block, tr, found, & row_size, col_size) !! Gets a 1-d block from a dbcsr matrix TYPE(dbcsr_type), INTENT(IN) :: matrix !! DBCSR matrix INTEGER, INTENT(IN) :: row, col !! the row !! the column ${type1}$, DIMENSION(:), POINTER :: block !! the block to get (rank-1 array) LOGICAL, INTENT(OUT) :: tr !! whether the data is transposed LOGICAL, INTENT(OUT) :: found !! whether the block exists in the matrix INTEGER, INTENT(OUT), OPTIONAL :: row_size, col_size !! logical row size of block !! logical column size of block INTEGER :: blk, csize, & nze, offset, & rsize, stored_row, & stored_col LOGICAL :: stored_tr ! --------------------------------------------------------------------------- IF (debug_mod) THEN IF (matrix%data_type /= ${dkind1}$) & DBCSR_ABORT("Data type mismatch for requested block.") END IF CALL dbcsr_get_block_index(matrix, row, col, stored_row, stored_col, & stored_tr, found, blk, offset) tr = stored_tr rsize = dbcsr_blk_row_size(matrix, stored_row) csize = dbcsr_blk_column_size(matrix, stored_col) IF (PRESENT(row_size)) row_size = rsize IF (PRESENT(col_size)) col_size = csize NULLIFY (block) IF (found) THEN nze = rsize*csize ! block => pointer_view( & dbcsr_get_data_p(matrix%data_area, ${zero1[n]}$), offset, offset + nze - 1 & ) ELSEIF (ASSOCIATED(matrix%wms)) THEN IF (.NOT. dbcsr_use_mutable(matrix)) & DBCSR_ABORT("Can not retrieve blocks from non-mutable work matrices.") IF (dbcsr_use_mutable(matrix)) & DBCSR_ABORT("Can not retrieve rank-1 block pointers from mutable work matrices.") END IF END SUBROUTINE dbcsr_get_block_p_${nametype1}$ SUBROUTINE dbcsr_reserve_block2d_${nametype1}$ (matrix, row, col, block, & transposed, existed) !! Put a 2-D block in a DBCSR matrix using the btree TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! DBCSR matrix INTEGER, INTENT(IN) :: row, col !! the row !! the column ${type1}$, DIMENSION(:, :), POINTER :: block !! the block to reserve; added if not NULL LOGICAL, INTENT(IN), OPTIONAL :: transposed !! the block holds transposed data LOGICAL, INTENT(OUT), OPTIONAL :: existed !! block already existed TYPE(btree_data_${nametype1}$p2d) :: data_block, data_block2 INTEGER :: col_size, row_size, & stored_row, stored_col, & iw, nwms INTEGER, DIMENSION(:), POINTER :: col_blk_size, row_blk_size LOGICAL :: found, gift, tr, sym_tr ${type1}$, DIMENSION(:, :), POINTER :: original_block ! --------------------------------------------------------------------------- gift = ASSOCIATED(block) IF (gift) THEN original_block => block ELSE NULLIFY (original_block) END IF row_blk_size => array_data(matrix%row_blk_size) col_blk_size => array_data(matrix%col_blk_size) row_size = row_blk_size(row) col_size = col_blk_size(col) stored_row = row; stored_col = col IF (PRESENT(transposed)) THEN tr = transposed ELSE tr = .FALSE. END IF sym_tr = .FALSE. CALL dbcsr_get_stored_coordinates(matrix, stored_row, stored_col) IF (.NOT. ASSOCIATED(matrix%wms)) THEN CALL dbcsr_work_create(matrix, work_mutable=.TRUE.) !$OMP MASTER matrix%valid = .FALSE. !$OMP END MASTER !$OMP BARRIER END IF NULLIFY (data_block%p) IF (.NOT. gift) THEN ALLOCATE (data_block%p(row_size, col_size)) block => data_block%p ELSE data_block%p => block END IF data_block%tr = tr nwms = SIZE(matrix%wms) iw = 1 !$ IF (nwms < omp_get_num_threads()) & !$ DBCSR_ABORT("Number of work matrices not equal to number of threads") !$ iw = omp_get_thread_num() + 1 CALL btree_add(matrix%wms(iw)%mutable%m%btree_${nametype1}$, & make_coordinate_tuple(stored_row, stored_col), & data_block, found, data_block2) IF (.NOT. found) THEN #if defined(_OPENMP) && (200711 <= _OPENMP) !$OMP ATOMIC WRITE matrix%valid = .FALSE. #else !$OMP CRITICAL (critical_reserve_block2d) matrix%valid = .FALSE. !$OMP END CRITICAL (critical_reserve_block2d) #endif matrix%wms(iw)%lastblk = matrix%wms(iw)%lastblk + 1 matrix%wms(iw)%datasize = matrix%wms(iw)%datasize + row_size*col_size ELSE IF (.NOT. gift) THEN DEALLOCATE (data_block%p) ELSE DEALLOCATE (original_block) END IF block => data_block2%p END IF IF (PRESENT(existed)) existed = found END SUBROUTINE dbcsr_reserve_block2d_${nametype1}$ SUBROUTINE dbcsr_put_block2d_${nametype1}$ (matrix, row, col, block, lb_row_col, transposed, & summation, flop, scale) !! Put a 2-D block in a DBCSR matrix TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! DBCSR matrix INTEGER, INTENT(IN) :: row, col !! the row !! the column ${type1}$, DIMENSION(:, :), INTENT(IN), & CONTIGUOUS, TARGET :: block !! the block to put INTEGER, DIMENSION(2), OPTIONAL, INTENT(INOUT) :: lb_row_col LOGICAL, INTENT(IN), OPTIONAL :: transposed, summation !! the block is transposed !! if block exists, then sum the new block to the old one instead of replacing it INTEGER(KIND=int_8), INTENT(INOUT), OPTIONAL :: flop ${type1}$, INTENT(IN), OPTIONAL :: scale !! scale the block being added ${type1}$, DIMENSION(:), POINTER :: block_1d NULLIFY (block_1d) block_1d(1:SIZE(block)) => block CALL dbcsr_put_block(matrix, row, col, block_1d, lb_row_col, transposed, summation, flop, scale) END SUBROUTINE dbcsr_put_block2d_${nametype1}$ SUBROUTINE dbcsr_put_block_${nametype1}$ (matrix, row, col, block, lb_row_col, transposed, & summation, flop, scale) !! Inserts a block in a dbcsr matrix. !! If the block exists, the current data is overwritten. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! DBCSR matrix INTEGER, INTENT(IN) :: row, col !! the logical row !! the logical column ${type1}$, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: block !! the block to put INTEGER, DIMENSION(2), OPTIONAL, INTENT(INOUT) :: lb_row_col LOGICAL, INTENT(IN), OPTIONAL :: transposed, summation !! the block is transposed !! if block exists, then sum the new block to the old one instead of replacing it INTEGER(KIND=int_8), INTENT(INOUT), OPTIONAL :: flop ${type1}$, INTENT(IN), OPTIONAL :: scale !! scale the OBblock being added TYPE(btree_data_${nametype1}$p2d) :: data_block, data_block2 INTEGER :: blk, col_size, & nze, offset, & row_size, blk_p, & stored_row, stored_col, & iw, nwms LOGICAL :: found, tr, do_sum, tr_diff ${type1}$, DIMENSION(:), POINTER :: block_1d INTEGER(KIND=int_8) :: my_flop ! --------------------------------------------------------------------------- IF (PRESENT(transposed)) THEN tr = transposed ELSE tr = .FALSE. END IF IF (PRESENT(summation)) THEN do_sum = summation ELSE do_sum = .FALSE. END IF my_flop = 0 row_size = dbcsr_blk_row_size(matrix, row) col_size = dbcsr_blk_column_size(matrix, col) IF (tr) CALL swap(row_size, col_size) stored_row = row; stored_col = col nze = row_size*col_size ! IF (debug_mod .AND. SIZE(block) < nze) & DBCSR_ABORT("Invalid block dimensions") CALL dbcsr_get_stored_block_info(matrix, stored_row, stored_col, & found, blk, lb_row_col, offset) IF (found) THEN ! let's copy the block offset = ABS(offset) ! Fix the index if the new block's transpose flag is different ! from the old one. tr_diff = .FALSE. IF (matrix%blk_p(blk) .LT. 0 .NEQV. tr) THEN tr_diff = .TRUE. matrix%blk_p(blk) = -matrix%blk_p(blk) END IF block_1d => pointer_view(dbcsr_get_data_p( & matrix%data_area, ${zero1[n]}$), offset, offset + nze - 1) IF (nze .GT. 0) THEN IF (do_sum) THEN IF (tr_diff) & block_1d = RESHAPE(TRANSPOSE(RESHAPE(block_1d, (/col_size, row_size/))), (/nze/)) IF (PRESENT(scale)) THEN CALL ${nametype1}$axpy(nze, scale, block(1:nze), 1, & block_1d, 1) ELSE CALL ${nametype1}$axpy(nze, ${one1[n]}$, block(1:nze), 1, & block_1d, 1) END IF my_flop = my_flop + nze*2 ELSE IF (PRESENT(scale)) THEN CALL ${nametype1}$copy(nze, scale*block(1:nze), 1, & block_1d, 1) ELSE CALL ${nametype1}$copy(nze, block(1:nze), 1, & block_1d, 1) END IF END IF END IF ELSE !!@@@ !call dbcsr_assert (associated (matrix%wms), dbcsr_fatal_level,& ! dbcsr_caller_error, routineN, "Work matrices not prepared") IF (.NOT. ASSOCIATED(matrix%wms)) THEN CALL dbcsr_work_create(matrix, nblks_guess=1, & sizedata_guess=nze) END IF nwms = SIZE(matrix%wms) iw = 1 !$ IF (debug_mod .AND. nwms < omp_get_num_threads()) & !$ DBCSR_ABORT("Number of work matrices not equal to number of threads") !$ iw = omp_get_thread_num() + 1 blk_p = matrix%wms(iw)%datasize + 1 IF (.NOT. dbcsr_wm_use_mutable(matrix%wms(iw))) THEN IF (tr) blk_p = -blk_p CALL add_work_coordinate(matrix%wms(iw), row, col, blk_p) CALL dbcsr_data_ensure_size(matrix%wms(iw)%data_area, & matrix%wms(iw)%datasize + nze, & factor=default_resize_factor) IF (PRESENT(scale)) THEN CALL dbcsr_data_set(matrix%wms(iw)%data_area, ABS(blk_p), & data_size=nze, src=scale*block, source_lb=1) ELSE CALL dbcsr_data_set(matrix%wms(iw)%data_area, ABS(blk_p), & data_size=nze, src=block, source_lb=1) END IF ELSE ALLOCATE (data_block%p(row_size, col_size)) IF (PRESENT(scale)) THEN data_block%p(:, :) = scale*RESHAPE(block, (/row_size, col_size/)) ELSE data_block%p(:, :) = RESHAPE(block, (/row_size, col_size/)) END IF data_block%tr = tr IF (.NOT. dbcsr_mutable_instantiated(matrix%wms(iw)%mutable)) THEN CALL dbcsr_mutable_new(matrix%wms(iw)%mutable, & dbcsr_get_data_type(matrix)) END IF IF (.NOT. do_sum) THEN CALL btree_add( & matrix%wms(iw)%mutable%m%btree_${nametype1}$, & make_coordinate_tuple(stored_row, stored_col), & data_block, found, data_block2, replace=.TRUE.) IF (found) THEN IF (.NOT. ASSOCIATED(data_block2%p)) & DBCSR_WARN("Data was not present in block") IF (ASSOCIATED(data_block2%p)) DEALLOCATE (data_block2%p) END IF ELSE CALL btree_add( & matrix%wms(iw)%mutable%m%btree_${nametype1}$, & make_coordinate_tuple(stored_row, stored_col), & data_block, found, data_block2, replace=.FALSE.) IF (found) THEN IF (nze > 0) & CALL ${nametype1}$axpy(nze, ${one1[n]}$, block, 1, & data_block2%p, 1) IF (.NOT. ASSOCIATED(data_block%p)) & DBCSR_WARN("Data was not present in block") IF (ASSOCIATED(data_block%p)) DEALLOCATE (data_block%p) END IF END IF IF (.NOT. found) THEN matrix%wms(iw)%lastblk = matrix%wms(iw)%lastblk + 1 END IF END IF IF (.NOT. found) THEN matrix%wms(iw)%datasize = matrix%wms(iw)%datasize + nze END IF !$OMP ATOMIC WRITE matrix%valid = .FALSE. END IF IF (PRESENT(flop)) flop = flop + my_flop END SUBROUTINE dbcsr_put_block_${nametype1}$ SUBROUTINE dbcsr_set_block_pointer_2d_${nametype1}$ ( & matrix, pointer_any, rsize, csize, base_offset) !! Sets a pointer, possibly using the buffers. TYPE(dbcsr_type), INTENT(IN) :: matrix !! Matrix to use ${type1}$, DIMENSION(:, :), POINTER :: pointer_any !! The pointer to set INTEGER, INTENT(IN) :: rsize, csize !! Row size of block to point to !! Column size of block to point to INTEGER, INTENT(IN) :: base_offset !! The block pointer CHARACTER(len=*), PARAMETER :: & routineN = 'dbcsr_set_block_pointer_2d_${nametype1}$' INTEGER :: error_handler ${type1}$, DIMENSION(:), POINTER :: lin_blk_p ! --------------------------------------------------------------------------- IF (careful_mod) CALL timeset(routineN, error_handler) CALL dbcsr_get_data(matrix%data_area, lin_blk_p, & lb=base_offset, ub=base_offset + rsize*csize - 1) CALL pointer_rank_remap2(pointer_any, rsize, csize, & lin_blk_p) IF (careful_mod) CALL timestop(error_handler) END SUBROUTINE dbcsr_set_block_pointer_2d_${nametype1}$ #:endfor END MODULE dbcsr_block_access ================================================ FILE: src/block/dbcsr_block_operations.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_block_operations !! Routines for basic block transformations. USE dbcsr_acc_devmem, ONLY: acc_devmem_allocated, & acc_devmem_setzero_bytes USE dbcsr_data_methods_low, ONLY: dbcsr_data_exists, & dbcsr_data_get_size, & dbcsr_data_get_size_referenced, & dbcsr_data_get_type, & dbcsr_data_verify_bounds, & dbcsr_type_2d_to_1d, & dbcsr_type_is_2d USE dbcsr_ptr_util, ONLY: memory_copy USE dbcsr_types, ONLY: & dbcsr_data_obj, dbcsr_datatype_sizeof, dbcsr_scalar_type, dbcsr_type_complex_4, & dbcsr_type_complex_4_2d, dbcsr_type_complex_8, dbcsr_type_complex_8_2d, dbcsr_type_real_4, & dbcsr_type_real_4_2d, dbcsr_type_real_8, dbcsr_type_real_8_2d USE dbcsr_kinds, ONLY: dp, & real_4, & real_8, & sp #include "base/dbcsr_base_uses.f90" IMPLICIT NONE #if defined(__LIBXSMM) && TO_VERSION(1, 10) < TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) # define __LIBXSMM_BLOCKOPS #endif #if defined(__LIBXSMM) && TO_VERSION(1, 10) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) # define __LIBXSMM_TRANS #endif #if defined(__MKL) || defined(__LIBXSMM_TRANS) || defined(__LIBXSMM_BLOCKOPS) || !defined(NDEBUG) ! MKL: mkl_trans.fi header is obsolescent (use implicit "interface") # define PURE_BLOCKOPS #else ! MKL: routines are impure, LIBXSMM: C_LOC is impure (F-standard mistake) # define PURE_BLOCKOPS PURE #endif PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_block_operations' PUBLIC :: dbcsr_block_transpose, dbcsr_block_transpose_aa, dbcsr_data_set PUBLIC :: dbcsr_block_copy_aa, dbcsr_block_partial_copy PUBLIC :: dbcsr_data_clear PUBLIC :: dbcsr_block_scale, dbcsr_block_conjg, dbcsr_block_real_neg PUBLIC :: dbcsr_data_copy PUBLIC :: block_add ! For quick access PUBLIC :: block_copy_s, block_copy_d, & block_copy_c, block_copy_z INTERFACE dbcsr_block_transpose MODULE PROCEDURE block_transpose_inplace_s, block_transpose_inplace_d, & block_transpose_inplace_c, block_transpose_inplace_z MODULE PROCEDURE block_transpose_copy_d, block_transpose_copy_s, & block_transpose_copy_z, block_transpose_copy_c MODULE PROCEDURE block_transpose_copy_2d1d_d, & block_transpose_copy_2d1d_s, & block_transpose_copy_2d1d_z, & block_transpose_copy_2d1d_c MODULE PROCEDURE block_transpose_copy_1d2d_d, & block_transpose_copy_1d2d_s, & block_transpose_copy_1d2d_z, & block_transpose_copy_1d2d_c MODULE PROCEDURE dbcsr_block_transpose_aa, dbcsr_block_transpose_a END INTERFACE INTERFACE dbcsr_block_copy MODULE PROCEDURE block_copy_2d1d_s, block_copy_2d1d_d, & block_copy_2d1d_c, block_copy_2d1d_z MODULE PROCEDURE block_copy_1d2d_s, block_copy_1d2d_d, & block_copy_1d2d_c, block_copy_1d2d_z MODULE PROCEDURE block_copy_1d1d_s, block_copy_1d1d_d, & block_copy_1d1d_c, block_copy_1d1d_z MODULE PROCEDURE block_copy_2d2d_s, block_copy_2d2d_d, & block_copy_2d2d_c, block_copy_2d2d_z END INTERFACE INTERFACE dbcsr_data_clear MODULE PROCEDURE dbcsr_data_clear_nt MODULE PROCEDURE dbcsr_data_clear0 END INTERFACE ! Supports copy between two data areas, or to a data area from a ! given explicit array. INTERFACE dbcsr_data_set MODULE PROCEDURE dbcsr_data_copy_aa, dbcsr_data_set_as, & dbcsr_data_set_ad, dbcsr_data_set_ac, dbcsr_data_set_az END INTERFACE INTERFACE dbcsr_data_copy MODULE PROCEDURE dbcsr_data_copy_aa2, dbcsr_data_set_as, & dbcsr_data_set_ad, dbcsr_data_set_ac, dbcsr_data_set_az END INTERFACE INTERFACE block_add MODULE PROCEDURE block_add_anytype MODULE PROCEDURE block_add_anytype_bounds MODULE PROCEDURE block_add_s, block_add_d, block_add_c, block_add_z END INTERFACE block_add LOGICAL, PARAMETER :: debug_mod = .FALSE. LOGICAL, PARAMETER :: careful_mod = .FALSE. CONTAINS SUBROUTINE dbcsr_block_transpose_aa(dst, src, & row_size, col_size, lb, source_lb, scale, lb2, source_lb2) !! Copy data from one data area to another. !! There are no checks done for correctness! TYPE(dbcsr_data_obj), INTENT(INOUT) :: dst !! destination data area TYPE(dbcsr_data_obj), INTENT(IN) :: src !! source data area INTEGER, INTENT(IN) :: row_size, col_size !! row size of existing block !! column size of existing block INTEGER, INTENT(IN), OPTIONAL :: lb, source_lb !! lower bound for destination (and source if not given explicitly) !! lower bound of source TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: scale !! scale data INTEGER, INTENT(IN), OPTIONAL :: lb2, source_lb2 !! lower bound of 2nd dimension for target !! lower bound of 2nd dimension for source INTEGER :: data_size, lb2_s, lb2_t, lb_s, lb_t, & ub_s, ub_t ! --------------------------------------------------------------------------- IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d) .OR. .NOT. ASSOCIATED(src%d)) & DBCSR_ABORT("Data areas must be setup.") IF (dst%d%data_type /= src%d%data_type) & DBCSR_ABORT("Data type must be the same.") IF (dst%d%data_type .NE. dbcsr_type_real_8 & .AND. dst%d%data_type .NE. dbcsr_type_real_4 & .AND. dst%d%data_type .NE. dbcsr_type_complex_8 & .AND. dst%d%data_type .NE. dbcsr_type_complex_4 & .AND. dst%d%data_type .NE. dbcsr_type_real_8_2d & .AND. dst%d%data_type .NE. dbcsr_type_real_4_2d & .AND. dst%d%data_type .NE. dbcsr_type_complex_8_2d & .AND. dst%d%data_type .NE. dbcsr_type_complex_4_2d) & DBCSR_WARN("Incorrect data type.") IF (PRESENT(scale)) THEN IF (dbcsr_type_is_2d(src%d%data_type)) THEN IF (scale%data_type /= dbcsr_type_2d_to_1d(src%d%data_type)) & DBCSR_ABORT("Incompatible data types") ELSE IF (scale%data_type /= src%d%data_type) & DBCSR_ABORT("Incompatible data types") END IF END IF END IF data_size = row_size*col_size lb_t = 1 IF (PRESENT(lb)) lb_t = lb ub_t = lb_t + data_size - 1 IF (PRESENT(source_lb)) THEN lb_s = source_lb ub_s = source_lb + data_size - 1 ELSE lb_s = lb_t ub_s = ub_t END IF lb2_t = 1 IF (PRESENT(lb2)) lb2_t = lb2 IF (PRESENT(source_lb2)) THEN lb2_s = source_lb2 ELSE lb2_s = lb2_t END IF SELECT CASE (src%d%data_type) CASE (dbcsr_type_real_8) IF (PRESENT(scale)) THEN CALL dbcsr_block_transpose(dst%d%r_dp(lb_t:ub_t), & src%d%r_dp(lb_s:ub_s)*scale%r_dp, & row_size, col_size) ELSE CALL dbcsr_block_transpose(dst%d%r_dp(lb_t:ub_t), & src%d%r_dp(lb_s:ub_s), & row_size, col_size) END IF CASE (dbcsr_type_real_4) IF (PRESENT(scale)) THEN CALL dbcsr_block_transpose(dst%d%r_sp(lb_t:ub_t), & src%d%r_sp(lb_s:ub_s)*scale%r_sp, & row_size, col_size) ELSE CALL dbcsr_block_transpose(dst%d%r_sp(lb_t:ub_t), & src%d%r_sp(lb_s:ub_s), & row_size, col_size) END IF CASE (dbcsr_type_complex_8) IF (PRESENT(scale)) THEN CALL dbcsr_block_transpose(dst%d%c_dp(lb_t:ub_t), & src%d%c_dp(lb_s:ub_s)*scale%c_dp, & row_size, col_size) ELSE CALL dbcsr_block_transpose(dst%d%c_dp(lb_t:ub_t), & src%d%c_dp(lb_s:ub_s), & row_size, col_size) END IF CASE (dbcsr_type_complex_4) IF (PRESENT(scale)) THEN CALL dbcsr_block_transpose(dst%d%c_sp(lb_t:ub_t), & src%d%c_sp(lb_s:ub_s)*scale%c_sp, & row_size, col_size) ELSE CALL dbcsr_block_transpose(dst%d%c_sp(lb_t:ub_t), & src%d%c_sp(lb_s:ub_s), & row_size, col_size) END IF CASE (dbcsr_type_real_8_2d) IF (PRESENT(scale)) THEN dst%d%r2_dp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = & TRANSPOSE( & src%d%r2_dp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1) & *scale%r_dp) ELSE dst%d%r2_dp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = & TRANSPOSE( & src%d%r2_dp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1)) END IF CASE (dbcsr_type_real_4_2d) IF (PRESENT(scale)) THEN dst%d%r2_sp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = & TRANSPOSE( & src%d%r2_sp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1) & *scale%r_sp) ELSE dst%d%r2_sp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = & TRANSPOSE( & src%d%r2_sp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1)) END IF CASE (dbcsr_type_complex_8_2d) IF (PRESENT(scale)) THEN dst%d%c2_dp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = & TRANSPOSE( & src%d%c2_dp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1) & *scale%c_dp) ELSE dst%d%c2_dp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = & TRANSPOSE( & src%d%c2_dp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1)) END IF CASE (dbcsr_type_complex_4_2d) IF (PRESENT(scale)) THEN dst%d%c2_sp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = & TRANSPOSE( & src%d%c2_sp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1) & *scale%c_sp) ELSE dst%d%c2_sp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = & TRANSPOSE( & src%d%c2_sp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1)) END IF CASE default DBCSR_ABORT("Incorrect data type.") END SELECT END SUBROUTINE dbcsr_block_transpose_aa SUBROUTINE dbcsr_block_copy_aa(dst, src, & row_size, col_size, lb, source_lb, scale) !! Copy data from one data area to another. !! There are no checks done for correctness! TYPE(dbcsr_data_obj), INTENT(INOUT) :: dst !! destination data area TYPE(dbcsr_data_obj), INTENT(IN) :: src !! source data area INTEGER, INTENT(IN) :: row_size, col_size !! row size of existing block !! column size of existing block INTEGER, INTENT(IN), OPTIONAL :: lb, source_lb !! lower bound for destination (and source if not given explicitly) !! lower bound of source TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: scale !! scale data INTEGER :: data_size, lb_s, lb_t, ub_s, ub_t ! --------------------------------------------------------------------------- IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d) .OR. .NOT. ASSOCIATED(src%d)) & DBCSR_ABORT("Data areas must be setup.") IF (dst%d%data_type /= src%d%data_type) & DBCSR_ABORT("Data type must be the same.") IF (dst%d%data_type .NE. dbcsr_type_real_8 & .AND. dst%d%data_type .NE. dbcsr_type_real_4 & .AND. dst%d%data_type .NE. dbcsr_type_complex_8 & .AND. dst%d%data_type .NE. dbcsr_type_complex_4) & DBCSR_WARN("Incorrect data type.") IF (PRESENT(scale)) THEN IF (dbcsr_type_is_2d(src%d%data_type)) THEN IF (scale%data_type /= dbcsr_type_2d_to_1d(src%d%data_type)) & DBCSR_ABORT("Incompatible data types") ELSE IF (scale%data_type /= src%d%data_type) & DBCSR_ABORT("Incompatible data types") END IF END IF END IF data_size = row_size*col_size lb_t = 1 IF (PRESENT(lb)) lb_t = lb ub_t = lb_t + data_size - 1 IF (PRESENT(source_lb)) THEN lb_s = source_lb ub_s = source_lb + data_size - 1 ELSE lb_s = lb_t ub_s = ub_t END IF SELECT CASE (src%d%data_type) CASE (dbcsr_type_real_8) IF (PRESENT(scale)) THEN CALL dbcsr_block_copy(dst%d%r_dp(lb_t:ub_t), & src%d%r_dp(lb_s:ub_s)*scale%r_dp, & row_size, col_size) ELSE CALL dbcsr_block_copy(dst%d%r_dp(lb_t:ub_t), & src%d%r_dp(lb_s:ub_s), & row_size, col_size) END IF CASE (dbcsr_type_real_4) IF (PRESENT(scale)) THEN CALL dbcsr_block_copy(dst%d%r_sp(lb_t:ub_t), & src%d%r_sp(lb_s:ub_s)*scale%r_sp, & row_size, col_size) ELSE CALL dbcsr_block_copy(dst%d%r_sp(lb_t:ub_t), & src%d%r_sp(lb_s:ub_s), & row_size, col_size) END IF CASE (dbcsr_type_complex_8) IF (PRESENT(scale)) THEN CALL dbcsr_block_copy(dst%d%c_dp(lb_t:ub_t), & src%d%c_dp(lb_s:ub_s)*scale%c_dp, & row_size, col_size) ELSE CALL dbcsr_block_copy(dst%d%c_dp(lb_t:ub_t), & src%d%c_dp(lb_s:ub_s), & row_size, col_size) END IF CASE (dbcsr_type_complex_4) IF (PRESENT(scale)) THEN CALL dbcsr_block_copy(dst%d%c_sp(lb_t:ub_t), & src%d%c_sp(lb_s:ub_s)*scale%c_sp, & row_size, col_size) ELSE CALL dbcsr_block_copy(dst%d%c_sp(lb_t:ub_t), & src%d%c_sp(lb_s:ub_s), & row_size, col_size) END IF CASE default DBCSR_ABORT("Incorrect data type.") END SELECT END SUBROUTINE dbcsr_block_copy_aa SUBROUTINE dbcsr_block_scale(dst, scale, & row_size, col_size, lb, lb2) !! Scale a data area. !! There are no checks done for correctness! !! !! History !! - 2010-09 [??] Copied from block_transpose? !! - 2010-09-20 [UB] Swaps/corrects row/column definitions for 2-D bounds TYPE(dbcsr_data_obj), INTENT(INOUT) :: dst TYPE(dbcsr_scalar_type), INTENT(IN) :: scale !! scale data INTEGER, INTENT(IN) :: row_size, col_size !! row size of existing block !! column size of existing block INTEGER, INTENT(IN), OPTIONAL :: lb, lb2 !! lower bound for destination (and source if not given explicitly) !! lower bound of 2nd dimension for target CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_block_scale' INTEGER :: data_size, handle, lb2_t, lb_t, ub_t ! --------------------------------------------------------------------------- IF (careful_mod) CALL timeset(routineN, handle) IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d)) & DBCSR_ABORT("Data area must be setup.") IF (dst%d%data_type .NE. dbcsr_type_real_8 & .AND. dst%d%data_type .NE. dbcsr_type_real_4 & .AND. dst%d%data_type .NE. dbcsr_type_complex_8 & .AND. dst%d%data_type .NE. dbcsr_type_complex_4 & .AND. dst%d%data_type .NE. dbcsr_type_real_8_2d & .AND. dst%d%data_type .NE. dbcsr_type_real_4_2d & .AND. dst%d%data_type .NE. dbcsr_type_complex_8_2d & .AND. dst%d%data_type .NE. dbcsr_type_complex_4_2d) & DBCSR_WARN("Incorrect data type.") END IF IF (scale%data_type /= dbcsr_type_2d_to_1d(dst%d%data_type)) & DBCSR_ABORT("Incompatible data types") data_size = row_size*col_size lb_t = 1 IF (PRESENT(lb)) lb_t = lb ub_t = lb_t + data_size - 1 lb2_t = 1 IF (PRESENT(lb2)) lb2_t = lb2 SELECT CASE (dst%d%data_type) CASE (dbcsr_type_real_8) dst%d%r_dp(lb_t:ub_t) = dst%d%r_dp(lb_t:ub_t)*scale%r_dp CASE (dbcsr_type_real_4) dst%d%r_sp(lb_t:ub_t) = dst%d%r_sp(lb_t:ub_t)*scale%r_sp CASE (dbcsr_type_complex_8) dst%d%c_dp(lb_t:ub_t) = dst%d%c_dp(lb_t:ub_t)*scale%c_dp CASE (dbcsr_type_complex_4) dst%d%c_sp(lb_t:ub_t) = dst%d%c_sp(lb_t:ub_t)*scale%c_sp CASE (dbcsr_type_real_8_2d) dst%d%r2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = & dst%d%r2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)*scale%r_dp CASE (dbcsr_type_real_4_2d) dst%d%r2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = & dst%d%r2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)*scale%r_sp CASE (dbcsr_type_complex_8_2d) dst%d%c2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = & dst%d%c2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)*scale%c_dp CASE (dbcsr_type_complex_4_2d) dst%d%c2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = & dst%d%c2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)*scale%c_sp CASE default DBCSR_ABORT("Incorrect data type.") END SELECT IF (careful_mod) CALL timestop(handle) END SUBROUTINE dbcsr_block_scale SUBROUTINE dbcsr_block_real_neg(dst, & row_size, col_size, lb, lb2) !! Negates the real part of a block !! There are no checks done for correctness! !! !! History !! - 2010-09 [??] Copied from block_transpose? !! - 2010-09-20 [UB] Swaps/corrects row/column definitions for 2-D bounds TYPE(dbcsr_data_obj), INTENT(INOUT) :: dst INTEGER, INTENT(IN) :: row_size, col_size !! row size of existing block !! column size of existing block INTEGER, INTENT(IN), OPTIONAL :: lb, lb2 !! lower bound for destination (and source if not given explicitly) !! lower bound of 2nd dimension for target CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_block_real_neg' INTEGER :: data_size, handle, lb2_t, lb_t, ub_t ! --------------------------------------------------------------------------- IF (careful_mod) CALL timeset(routineN, handle) IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d)) & DBCSR_ABORT("Data area must be setup.") IF (dst%d%data_type .NE. dbcsr_type_real_8 & .AND. dst%d%data_type .NE. dbcsr_type_real_4 & .AND. dst%d%data_type .NE. dbcsr_type_complex_8 & .AND. dst%d%data_type .NE. dbcsr_type_complex_4 & .AND. dst%d%data_type .NE. dbcsr_type_real_8_2d & .AND. dst%d%data_type .NE. dbcsr_type_real_4_2d & .AND. dst%d%data_type .NE. dbcsr_type_complex_8_2d & .AND. dst%d%data_type .NE. dbcsr_type_complex_4_2d) & DBCSR_WARN("Incorrect data type.") END IF data_size = row_size*col_size lb_t = 1 IF (PRESENT(lb)) lb_t = lb ub_t = lb_t + data_size - 1 lb2_t = 1 IF (PRESENT(lb2)) lb2_t = lb2 SELECT CASE (dst%d%data_type) CASE (dbcsr_type_real_8) dst%d%r_dp(lb_t:ub_t) = -dst%d%r_dp(lb_t:ub_t) CASE (dbcsr_type_real_4) dst%d%r_sp(lb_t:ub_t) = -dst%d%r_sp(lb_t:ub_t) CASE (dbcsr_type_complex_8) dst%d%c_dp(lb_t:ub_t) = CMPLX( & -REAL(dst%d%c_dp(lb_t:ub_t), KIND=real_8), & AIMAG(dst%d%c_dp(lb_t:ub_t)), & KIND=real_8) CASE (dbcsr_type_complex_4) dst%d%c_sp(lb_t:ub_t) = CMPLX( & -REAL(dst%d%c_sp(lb_t:ub_t), KIND=real_4), & AIMAG(dst%d%c_sp(lb_t:ub_t)), & KIND=real_4) CASE (dbcsr_type_real_8_2d) dst%d%r2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = & -dst%d%r2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) CASE (dbcsr_type_real_4_2d) dst%d%r2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = & -dst%d%r2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) CASE (dbcsr_type_complex_8_2d) dst%d%c2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = & CMPLX( & -REAL(dst%d%c2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1), KIND=real_8), & AIMAG(dst%d%c2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)), & KIND=real_8) CASE (dbcsr_type_complex_4_2d) dst%d%c2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = & CMPLX( & -REAL(dst%d%c2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1), KIND=real_4), & AIMAG(dst%d%c2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)), & KIND=real_4) CASE default DBCSR_ABORT("Incorrect data type.") END SELECT IF (careful_mod) CALL timestop(handle) END SUBROUTINE dbcsr_block_real_neg SUBROUTINE dbcsr_block_conjg(dst, & row_size, col_size, lb, lb2) !! Conjugate a data area. !! There are no checks done for correctness! !! !! History !! - 2010-09 [??] Copied from block_transpose? !! - 2010-09-20 [UB] Swaps/corrects row/column definitions for 2-D bounds TYPE(dbcsr_data_obj), INTENT(INOUT) :: dst INTEGER, INTENT(IN) :: row_size, col_size !! row size of existing block !! column size of existing block INTEGER, INTENT(IN), OPTIONAL :: lb, lb2 !! lower bound for destination (and source if not given explicitly) !! lower bound of 2nd dimension for target CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_block_conjg' INTEGER :: data_size, handle, lb2_t, lb_t, ub_t ! --------------------------------------------------------------------------- IF (careful_mod) CALL timeset(routineN, handle) IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d)) & DBCSR_ABORT("Data area must be setup.") IF (dst%d%data_type .NE. dbcsr_type_real_8 & .AND. dst%d%data_type .NE. dbcsr_type_real_4 & .AND. dst%d%data_type .NE. dbcsr_type_complex_8 & .AND. dst%d%data_type .NE. dbcsr_type_complex_4 & .AND. dst%d%data_type .NE. dbcsr_type_real_8_2d & .AND. dst%d%data_type .NE. dbcsr_type_real_4_2d & .AND. dst%d%data_type .NE. dbcsr_type_complex_8_2d & .AND. dst%d%data_type .NE. dbcsr_type_complex_4_2d) & DBCSR_WARN("Incorrect data type.") END IF data_size = row_size*col_size lb_t = 1 IF (PRESENT(lb)) lb_t = lb ub_t = lb_t + data_size - 1 lb2_t = 1 IF (PRESENT(lb2)) lb2_t = lb2 SELECT CASE (dst%d%data_type) CASE (dbcsr_type_real_8) dst%d%r_dp(lb_t:ub_t) = dst%d%r_dp(lb_t:ub_t) CASE (dbcsr_type_real_4) dst%d%r_sp(lb_t:ub_t) = dst%d%r_sp(lb_t:ub_t) CASE (dbcsr_type_complex_8) dst%d%c_dp(lb_t:ub_t) = CONJG(dst%d%c_dp(lb_t:ub_t)) CASE (dbcsr_type_complex_4) dst%d%c_sp(lb_t:ub_t) = CONJG(dst%d%c_sp(lb_t:ub_t)) CASE (dbcsr_type_real_8_2d) dst%d%r2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = & dst%d%r2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) CASE (dbcsr_type_real_4_2d) dst%d%r2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = & dst%d%r2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) CASE (dbcsr_type_complex_8_2d) dst%d%c2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = & CONJG(dst%d%c2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)) CASE (dbcsr_type_complex_4_2d) dst%d%c2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = & CONJG(dst%d%c2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)) CASE default DBCSR_ABORT("Incorrect data type.") END SELECT IF (careful_mod) CALL timestop(handle) END SUBROUTINE dbcsr_block_conjg SUBROUTINE dbcsr_block_transpose_a(area, row_size, col_size) !! In-place transpose of encapsulated data !! There are no checks done for correctness! TYPE(dbcsr_data_obj), INTENT(INOUT) :: area !! encapsulated data area INTEGER, INTENT(IN) :: row_size, col_size !! number of rows in existing block !! number of columns in existing block CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_block_transpose_a' INTEGER :: handle ! --------------------------------------------------------------------------- IF (careful_mod) & CALL timeset(routineN, handle) SELECT CASE (area%d%data_type) CASE (dbcsr_type_real_8) CALL dbcsr_block_transpose(area%d%r_dp, & row_size, col_size) CASE (dbcsr_type_real_4) CALL dbcsr_block_transpose(area%d%r_sp, & row_size, col_size) CASE (dbcsr_type_complex_8) CALL dbcsr_block_transpose(area%d%c_dp, & row_size, col_size) CASE (dbcsr_type_complex_4) CALL dbcsr_block_transpose(area%d%c_sp, & row_size, col_size) CASE default DBCSR_ABORT("Invalid data type") END SELECT IF (careful_mod) & CALL timestop(handle) END SUBROUTINE dbcsr_block_transpose_a SUBROUTINE dbcsr_data_copy_aa(dst, lb, data_size, src, source_lb, scale, & lb2, data_size2, source_lb2) !! Copy data from one data area to another. !! There are no checks done for correctness! TYPE(dbcsr_data_obj), INTENT(INOUT) :: dst !! destination data area INTEGER, INTENT(IN) :: lb, data_size !! lower bound for destination (and source if not given explicitly) !! number of elements to copy TYPE(dbcsr_data_obj), INTENT(IN) :: src !! source data area INTEGER, INTENT(IN), OPTIONAL :: source_lb !! lower bound of source TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: scale !! scale by this factor INTEGER, INTENT(IN), OPTIONAL :: lb2, data_size2, source_lb2 !! 2nd dimension lower bound !! 2nd dimension data size !! 2nd dimension lower bound for source INTEGER :: lb2_s, lb_s, ub, ub2, ub2_s, ub_s ! --------------------------------------------------------------------------- lb2_s = 0 ub2_s = 0 IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d) .OR. .NOT. ASSOCIATED(src%d)) & DBCSR_ABORT("Data areas must be setup.") IF (dst%d%data_type .NE. src%d%data_type) & DBCSR_ABORT("Data type must be the same.") END IF IF (PRESENT(scale) .AND. careful_mod) THEN IF (dbcsr_type_is_2d(src%d%data_type)) THEN IF (scale%data_type .NE. dbcsr_type_2d_to_1d(src%d%data_type)) & DBCSR_ABORT("Incomptable data types") ELSE IF (scale%data_type .NE. src%d%data_type) & DBCSR_ABORT("Incomptable data types") END IF END IF ub = lb + data_size - 1 IF (PRESENT(source_lb)) THEN lb_s = source_lb ub_s = source_lb + data_size - 1 ELSE lb_s = lb ub_s = ub END IF IF (careful_mod) THEN IF (dbcsr_type_is_2d(src%d%data_type) .AND. .NOT. PRESENT(lb2)) & DBCSR_ABORT("Must specify lb2 for 2-D data area") IF (dbcsr_type_is_2d(src%d%data_type) .AND. .NOT. PRESENT(data_size2)) & DBCSR_ABORT("Must specify data_size2 for 2-D data area") END IF IF (PRESENT(lb2)) THEN IF (careful_mod) THEN IF (.NOT. dbcsr_type_is_2d(src%d%data_type)) & DBCSR_WARN("Should not specify lb2 for 1-D data") END IF ub2 = lb2 + data_size2 - 1 IF (PRESENT(source_lb2)) THEN lb2_s = source_lb2 ub2_s = source_lb2 + data_size2 - 1 ELSE lb2_s = lb2 ub2_s = ub2 END IF END IF SELECT CASE (src%d%data_type) CASE (dbcsr_type_real_4) IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d%r_sp)) & DBCSR_ABORT("associated(dst%d%r_sp)") IF (.NOT. ASSOCIATED(src%d%r_sp)) & DBCSR_ABORT("associated(src%d%r_sp)") IF (lb < LBOUND(dst%d%r_sp, 1)) & DBCSR_ABORT("lb dst%d%r_sp") IF (ub > UBOUND(dst%d%r_sp, 1)) & DBCSR_ABORT("ub dst%d%r_sp") IF (lb_s < LBOUND(src%d%r_sp, 1)) & DBCSR_ABORT("lb src%d%r_sp") IF (ub_s > UBOUND(src%d%r_sp, 1)) & DBCSR_ABORT("ub src%d%r_sp") END IF IF (PRESENT(scale)) THEN dst%d%r_sp(lb:ub) = scale%r_sp*src%d%r_sp(lb_s:ub_s) ELSE dst%d%r_sp(lb:ub) = src%d%r_sp(lb_s:ub_s) END IF CASE (dbcsr_type_real_8) IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d%r_dp)) & DBCSR_ABORT("associated(dst%d%r_dp)") IF (.NOT. ASSOCIATED(src%d%r_dp)) & DBCSR_ABORT("associated(src%d%r_dp)") IF (lb < LBOUND(dst%d%r_dp, 1)) & DBCSR_ABORT("lb dst%d%r_dp") IF (ub > UBOUND(dst%d%r_dp, 1)) & DBCSR_ABORT("ub dst%d%r_dp") IF (lb_s < LBOUND(src%d%r_dp, 1)) & DBCSR_ABORT("lb src%d%r_dp") IF (ub_s > UBOUND(src%d%r_dp, 1)) & DBCSR_ABORT("ub src%d%r_dp") END IF IF (PRESENT(scale)) THEN dst%d%r_dp(lb:ub) = scale%r_dp*src%d%r_dp(lb_s:ub_s) ELSE dst%d%r_dp(lb:ub) = src%d%r_dp(lb_s:ub_s) END IF CASE (dbcsr_type_complex_4) IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d%c_sp)) & DBCSR_ABORT("associated(dst%d%c_sp)") IF (.NOT. ASSOCIATED(src%d%c_sp)) & DBCSR_ABORT("associated(src%d%c_sp)") IF (lb < LBOUND(dst%d%c_sp, 1)) & DBCSR_ABORT("lb dst%d%c_sp") IF (ub > UBOUND(dst%d%c_sp, 1)) & DBCSR_ABORT("ub dst%d%c_sp") IF (lb_s < LBOUND(src%d%c_sp, 1)) & DBCSR_ABORT("lb src%d%c_sp") IF (ub_s > UBOUND(src%d%c_sp, 1)) & DBCSR_ABORT("ub src%d%c_sp") END IF IF (PRESENT(scale)) THEN dst%d%c_sp(lb:ub) = scale%c_sp*src%d%c_sp(lb_s:ub_s) ELSE dst%d%c_sp(lb:ub) = src%d%c_sp(lb_s:ub_s) END IF CASE (dbcsr_type_complex_8) IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d%c_dp)) & DBCSR_ABORT("associated(dst%d%c_dp)") IF (.NOT. ASSOCIATED(src%d%c_dp)) & DBCSR_ABORT("associated(src%d%c_dp)") IF (lb < LBOUND(dst%d%c_dp, 1)) & DBCSR_ABORT("lb dst%d%c_dp") IF (ub > UBOUND(dst%d%c_dp, 1)) & DBCSR_ABORT("ub dst%d%c_dp") IF (lb_s < LBOUND(src%d%c_dp, 1)) & DBCSR_ABORT("lb src%d%c_dp") IF (ub_s > UBOUND(src%d%c_dp, 1)) & DBCSR_ABORT("ub src%d%c_dp") END IF IF (PRESENT(scale)) THEN dst%d%c_dp(lb:ub) = scale%c_dp*src%d%c_dp(lb_s:ub_s) ELSE dst%d%c_dp(lb:ub) = src%d%c_dp(lb_s:ub_s) END IF CASE (dbcsr_type_real_4_2d) IF (PRESENT(scale)) THEN dst%d%r2_sp(lb:ub, lb2:ub2) = & scale%r_sp*src%d%r2_sp(lb_s:ub_s, lb2_s:ub2_s) ELSE dst%d%r2_sp(lb:ub, lb2:ub2) = src%d%r2_sp(lb_s:ub_s, lb2_s:ub2_s) END IF CASE (dbcsr_type_real_8_2d) IF (PRESENT(scale)) THEN dst%d%r2_dp(lb:ub, lb2:ub2) = & scale%r_dp*src%d%r2_dp(lb_s:ub_s, lb2_s:ub2_s) ELSE dst%d%r2_dp(lb:ub, lb2:ub2) = src%d%r2_dp(lb_s:ub_s, lb2_s:ub2_s) END IF CASE (dbcsr_type_complex_4_2d) IF (PRESENT(scale)) THEN dst%d%c2_sp(lb:ub, lb2:ub2) = & scale%c_sp*src%d%c2_sp(lb_s:ub_s, lb2_s:ub2_s) ELSE dst%d%c2_sp(lb:ub, lb2:ub2) = src%d%c2_sp(lb_s:ub_s, lb2_s:ub2_s) END IF CASE (dbcsr_type_complex_8_2d) IF (PRESENT(scale)) THEN dst%d%c2_dp(lb:ub, lb2:ub2) = & scale%c_dp*src%d%c2_dp(lb_s:ub_s, lb2_s:ub2_s) ELSE dst%d%c2_dp(lb:ub, lb2:ub2) = src%d%c2_dp(lb_s:ub_s, lb2_s:ub2_s) END IF CASE default DBCSR_ABORT("Invalid data type") END SELECT END SUBROUTINE dbcsr_data_copy_aa SUBROUTINE dbcsr_data_copy_aa2(dst, dst_lb, dst_sizes, & src, src_lb, src_sizes) !! Copy data from one data area to another, the most basic form. !! There are no checks done for correctness! TYPE(dbcsr_data_obj), INTENT(INOUT) :: dst !! destination data area INTEGER, DIMENSION(:), INTENT(IN) :: dst_lb, dst_sizes !! lower bounds for destination !! sizes for destination TYPE(dbcsr_data_obj), INTENT(IN) :: src !! source data area INTEGER, DIMENSION(:), INTENT(IN) :: src_lb, src_sizes !! lower bounds for source !! sizes for source CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_copy_aa2' INTEGER :: dst_d, dst_dt, handle, src_d, src_dt INTEGER, DIMENSION(2) :: dst_ub, src_ub ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) ! src_dt = dbcsr_data_get_type(src) dst_dt = dbcsr_data_get_type(dst) IF (dbcsr_type_is_2d(src_dt)) THEN src_d = 2 ELSE src_d = 1 END IF IF (dbcsr_type_is_2d(dst_dt)) THEN dst_d = 2 ELSE dst_d = 1 END IF src_ub(1:src_d) = src_lb(1:src_d) + src_sizes(1:src_d) - 1 dst_ub(1:dst_d) = dst_lb(1:dst_d) + dst_sizes(1:dst_d) - 1 IF (careful_mod) THEN IF (.NOT. dbcsr_data_exists(dst)) & DBCSR_ABORT("Invalid target data area") IF (.NOT. dbcsr_data_exists(src)) & DBCSR_ABORT("Invalid source data area") IF (dbcsr_type_2d_to_1d(src_dt) /= dbcsr_type_2d_to_1d(dst_dt)) & DBCSR_ABORT("Data types must be comptable: ") IF (dbcsr_type_is_2d(dst_dt)) THEN IF (SIZE(dst_lb) /= 2) & DBCSR_ABORT("size must be 2 for 2-d dst_lb") IF (SIZE(dst_sizes) /= 2) & DBCSR_ABORT("size must be 2 for 2-d dst_sizes") ELSE IF (SIZE(dst_lb) /= 1) & DBCSR_ABORT("size must be 1 for 1-d dst_lb") IF (SIZE(dst_sizes) /= 1) & DBCSR_ABORT("size must be 1 for 1-d dst_sizes") END IF IF (dbcsr_type_is_2d(src_dt)) THEN IF (SIZE(src_lb) /= 2) & DBCSR_ABORT("size must be 2 for 2-d src_lb") IF (SIZE(src_sizes) /= 2) & DBCSR_ABORT("size must be 2 for 2-d src_sizes") ELSE IF (SIZE(src_lb) /= 1) & DBCSR_ABORT("size must be 1 for 1-d src_lb") IF (SIZE(src_sizes) /= 1) & DBCSR_ABORT("size must be 1 for 1-d src_sizes") END IF IF (debug_mod) THEN CALL dbcsr_data_verify_bounds(dst, dst_lb(1:dst_d), dst_ub(1:dst_d)) CALL dbcsr_data_verify_bounds(src, src_lb(1:src_d), src_ub(1:src_d)) END IF END IF ! SELECT CASE (src_dt) CASE (dbcsr_type_real_4) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%r2_sp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%r_sp(src_lb(1):src_ub(1)), & src_sizes(1), 1) ELSE CALL dbcsr_block_copy(dst%d%r_sp(dst_lb(1):dst_ub(1)), & src%d%r_sp(src_lb(1):src_ub(1)), & src_sizes(1), 1) END IF CASE (dbcsr_type_real_8) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%r2_dp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%r_dp(src_lb(1):src_ub(1)), & src_sizes(1), 1) ELSE CALL dbcsr_block_copy(dst%d%r_dp(dst_lb(1):dst_ub(1)), & src%d%r_dp(src_lb(1):src_ub(1)), & src_sizes(1), 1) END IF CASE (dbcsr_type_complex_4) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%c2_sp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%c_sp(src_lb(1):src_ub(1)), & src_sizes(1), 1) ELSE CALL dbcsr_block_copy(dst%d%c_sp(dst_lb(1):dst_ub(1)), & src%d%c_sp(src_lb(1):src_ub(1)), & src_sizes(1), 1) END IF CASE (dbcsr_type_complex_8) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%c2_dp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%c_dp(src_lb(1):src_ub(1)), & src_sizes(1), 1) ELSE CALL dbcsr_block_copy(dst%d%c_dp(dst_lb(1):dst_ub(1)), & src%d%c_dp(src_lb(1):src_ub(1)), & src_sizes(1), 1) END IF CASE (dbcsr_type_real_4_2d) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%r2_sp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%r2_sp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) ELSE CALL dbcsr_block_copy(dst%d%r_sp(dst_lb(1):dst_ub(1)), & src%d%r2_sp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) END IF CASE (dbcsr_type_real_8_2d) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%r2_dp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%r2_dp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) ELSE CALL dbcsr_block_copy(dst%d%r_dp(dst_lb(1):dst_ub(1)), & src%d%r2_dp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) END IF CASE (dbcsr_type_complex_4_2d) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%c2_sp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%c2_sp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) ELSE CALL dbcsr_block_copy(dst%d%c_sp(dst_lb(1):dst_ub(1)), & src%d%c2_sp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) END IF CASE (dbcsr_type_complex_8_2d) IF (dbcsr_type_is_2d(dst_dt)) THEN CALL dbcsr_block_copy(dst%d%c2_dp(dst_lb(1):dst_ub(1), & dst_lb(2):dst_ub(2)), & src%d%c2_dp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) ELSE CALL dbcsr_block_copy(dst%d%c_dp(dst_lb(1):dst_ub(1)), & src%d%c2_dp(src_lb(1):src_ub(1), & src_lb(2):src_ub(2)), & dst_sizes(1), dst_sizes(2)) END IF CASE default DBCSR_ABORT("Invalid data type") END SELECT CALL timestop(handle) END SUBROUTINE dbcsr_data_copy_aa2 SUBROUTINE dbcsr_data_clear_nt(area, lb, ub, value, lb2, ub2, tr) !! Clears a data area, possibly transposed. TYPE(dbcsr_data_obj), INTENT(INOUT) :: area INTEGER, INTENT(IN), OPTIONAL :: lb, ub TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: value INTEGER, INTENT(IN), OPTIONAL :: lb2, ub2 LOGICAL, INTENT(in) :: tr ! --------------------------------------------------------------------------- IF (tr) THEN CALL dbcsr_data_clear0(area, lb=lb2, ub=ub2, value=value, lb2=lb, ub2=ub) ELSE CALL dbcsr_data_clear0(area, lb=lb, ub=ub, value=value, lb2=lb2, ub2=ub2) END IF END SUBROUTINE dbcsr_data_clear_nt SUBROUTINE dbcsr_data_clear0(area, lb, ub, value, lb2, ub2) !! Clears a data area TYPE(dbcsr_data_obj), INTENT(INOUT) :: area !! area with encapsulated data INTEGER, INTENT(IN), OPTIONAL :: lb, ub !! lower bound for clearing !! lower bound for clearing TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: value !! value to use for clearing INTEGER, INTENT(IN), OPTIONAL :: lb2, ub2 !! upper bound for clearing !! upper bound for clearing INTEGER :: l, l2, s, u, u2 ! --------------------------------------------------------------------------- IF (.NOT. ASSOCIATED(area%d)) & DBCSR_ABORT("Data area must be setup.") IF (PRESENT(value)) THEN IF (area%d%data_type .NE. value%data_type) & DBCSR_ABORT("Incompatible data types") END IF l = 0 u = 0 SELECT CASE (area%d%data_type) CASE (dbcsr_type_real_4) l = LBOUND(area%d%r_sp, 1) u = UBOUND(area%d%r_sp, 1) IF (PRESENT(lb)) THEN IF (lb < l) DBCSR_ABORT("lower bound too low") l = lb END IF IF (PRESENT(ub)) THEN IF (ub > u) DBCSR_ABORT("upper bound too high") u = ub END IF IF (PRESENT(value)) THEN area%d%r_sp(l:u) = value%r_sp ELSE area%d%r_sp(l:u) = 0.0_real_4 END IF CASE (dbcsr_type_real_8) l = LBOUND(area%d%r_dp, 1) u = UBOUND(area%d%r_dp, 1) IF (PRESENT(lb)) THEN IF (lb < l) DBCSR_ABORT("lower bound too low") l = lb END IF IF (PRESENT(ub)) THEN IF (ub > u) DBCSR_ABORT("upper bound too high") u = ub END IF IF (PRESENT(value)) THEN area%d%r_dp(l:u) = value%r_dp ELSE area%d%r_dp(l:u) = 0.0_real_8 END IF CASE (dbcsr_type_complex_4) l = LBOUND(area%d%c_sp, 1) u = UBOUND(area%d%c_sp, 1) IF (PRESENT(lb)) THEN IF (lb < l) DBCSR_ABORT("lower bound too low") l = lb END IF IF (PRESENT(ub)) THEN IF (ub > u) DBCSR_ABORT("upper bound too high") u = ub END IF IF (PRESENT(value)) THEN area%d%c_sp(l:u) = value%c_sp ELSE area%d%c_sp(l:u) = CMPLX(0.0, 0.0, real_4) END IF CASE (dbcsr_type_complex_8) l = LBOUND(area%d%c_dp, 1) u = UBOUND(area%d%c_dp, 1) IF (PRESENT(lb)) THEN IF (lb < l) DBCSR_ABORT("lower bound too low") l = lb END IF IF (PRESENT(ub)) THEN IF (ub > u) DBCSR_ABORT("upper bound too high") u = ub END IF IF (PRESENT(value)) THEN area%d%c_dp(l:u) = value%c_dp ELSE area%d%c_dp(l:u) = CMPLX(0.0, 0.0, real_8) END IF CASE (dbcsr_type_real_4_2d) l = LBOUND(area%d%r2_sp, 1) u = UBOUND(area%d%r2_sp, 1) l2 = LBOUND(area%d%r2_sp, 2) u2 = UBOUND(area%d%r2_sp, 2) IF (PRESENT(lb)) THEN IF (lb < l) DBCSR_ABORT("lower bound too low") l = lb END IF IF (PRESENT(ub)) THEN IF (ub > u) DBCSR_ABORT("upper bound too high") u = ub END IF IF (PRESENT(lb2)) THEN IF (lb2 < l2) DBCSR_ABORT("lower2 bound too low") l2 = lb2 END IF IF (PRESENT(ub2)) THEN IF (ub2 > u2) DBCSR_ABORT("upper2 bound too high") u2 = ub2 END IF IF (PRESENT(value)) THEN area%d%r2_sp(l:u, l2:u2) = value%r_sp ELSE area%d%r2_sp(l:u, l2:u2) = 0.0_real_4 END IF CASE (dbcsr_type_real_8_2d) l = LBOUND(area%d%r2_dp, 1) u = UBOUND(area%d%r2_dp, 1) l2 = LBOUND(area%d%r2_dp, 2) u2 = UBOUND(area%d%r2_dp, 2) IF (PRESENT(lb)) THEN IF (lb < l) DBCSR_ABORT("lower bound too low") l = lb END IF IF (PRESENT(ub)) THEN IF (ub > u) DBCSR_ABORT("upper bound too high") u = ub END IF IF (PRESENT(lb2)) THEN IF (lb2 < l2) DBCSR_ABORT("lower2 bound too low") l2 = lb2 END IF IF (PRESENT(ub2)) THEN IF (ub2 > u2) DBCSR_ABORT("upper2 bound too high") u2 = ub2 END IF IF (PRESENT(value)) THEN area%d%r2_dp(l:u, l2:u2) = value%r_dp ELSE area%d%r2_dp(l:u, l2:u2) = 0.0_real_8 END IF CASE (dbcsr_type_complex_4_2d) l = LBOUND(area%d%c2_sp, 1) u = UBOUND(area%d%c2_sp, 1) l2 = LBOUND(area%d%c2_sp, 2) u2 = UBOUND(area%d%c2_sp, 2) IF (PRESENT(lb)) THEN IF (lb < l) DBCSR_ABORT("lower bound too low") l = lb END IF IF (PRESENT(ub)) THEN IF (ub > u) DBCSR_ABORT("upper bound too high") u = ub END IF IF (PRESENT(lb2)) THEN IF (lb2 < l2) DBCSR_ABORT("lower2 bound too low") l2 = lb2 END IF IF (PRESENT(ub2)) THEN IF (ub2 > u2) DBCSR_ABORT("upper2 bound too high") u2 = ub2 END IF IF (PRESENT(value)) THEN area%d%c2_sp(l:u, l2:u2) = value%c_sp ELSE area%d%c2_sp(l:u, l2:u2) = CMPLX(0.0, 0.0, real_4) END IF CASE (dbcsr_type_complex_8_2d) l = LBOUND(area%d%c2_dp, 1) u = UBOUND(area%d%c2_dp, 1) l2 = LBOUND(area%d%c2_dp, 2) u2 = UBOUND(area%d%c2_dp, 2) IF (PRESENT(lb)) THEN IF (lb < l) DBCSR_ABORT("lower bound too low") l = lb END IF IF (PRESENT(ub)) THEN IF (ub > u) DBCSR_ABORT("upper bound too high") u = ub END IF IF (PRESENT(lb2)) THEN IF (lb2 < l2) DBCSR_ABORT("lower2 bound too low") l2 = lb2 END IF IF (PRESENT(ub2)) THEN IF (ub2 > u2) DBCSR_ABORT("upper2 bound too high") u2 = ub2 END IF IF (PRESENT(value)) THEN area%d%c2_dp(l:u, l2:u2) = value%c_dp ELSE area%d%c2_dp(l:u, l2:u2) = CMPLX(0.0, 0.0, real_8) END IF CASE default DBCSR_ABORT("Invalid or unsupported data type.") END SELECT IF (acc_devmem_allocated(area%d%acc_devmem)) THEN IF (PRESENT(value)) & DBCSR_ABORT("dbcsr_data_clear0 with value not implemented for acc_devmem") s = dbcsr_datatype_sizeof(area%d%data_type) CALL acc_devmem_setzero_bytes(area%d%acc_devmem, s*l, s*u, area%d%memory_type%acc_stream) END IF ! CALL timestop(handle) END SUBROUTINE dbcsr_data_clear0 SUBROUTINE dbcsr_block_partial_copy(dst, dst_rs, dst_cs, dst_tr, & src, src_rs, src_cs, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & dst_offset, src_offset) !! Copies a block subset TYPE(dbcsr_data_obj), INTENT(INOUT) :: dst !! target data area INTEGER, INTENT(IN) :: dst_rs, dst_cs !! target block row size (logical) !! target block column size (logical) LOGICAL :: dst_tr !! whether target block is transposed TYPE(dbcsr_data_obj), INTENT(IN) :: src !! source data area INTEGER, INTENT(IN) :: src_rs, src_cs !! source block row size (logical) !! source block column size (logical) LOGICAL :: src_tr !! whether source block is transposed INTEGER, INTENT(IN) :: dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, & nrow, ncol !! first row in target !! first column in target !! first_row in source !! first column in target !! number of rows to copy !! number of columns to copy INTEGER, INTENT(IN), OPTIONAL :: dst_offset, src_offset !! offset in target !! offset in source LOGICAL, PARAMETER :: verification = careful_mod INTEGER :: dst_o, src_o LOGICAL :: src_is_2d ! --------------------------------------------------------------------------- IF (careful_mod) THEN IF (dbcsr_type_2d_to_1d(dbcsr_data_get_type(dst)) /= dbcsr_type_2d_to_1d(dbcsr_data_get_type(src))) & DBCSR_ABORT("Incompatible data types.") END IF dst_o = 0; src_o = 0 IF (PRESENT(dst_offset)) dst_o = dst_offset IF (PRESENT(src_offset)) src_o = src_offset IF (verification) THEN IF (dst_r_lb + nrow - 1 > dst_rs) & DBCSR_ABORT("Incompatible dst row sizes") IF (dst_c_lb + ncol - 1 > dst_cs) & DBCSR_ABORT("Incompatible dst col sizes") IF (src_r_lb + nrow - 1 > src_rs) & DBCSR_ABORT("Incompatible src row sizes") IF (src_c_lb + ncol - 1 > src_cs) & DBCSR_ABORT("Incompatible src col sizes") END IF ! src_is_2d = dbcsr_type_is_2d(dbcsr_data_get_type(src)) SELECT CASE (dbcsr_data_get_type(dst)) CASE (dbcsr_type_real_4) IF (src_is_2d) THEN CALL block_partial_copy_1d2d_s(dst%d%r_sp, dst_rs, dst_cs, dst_tr, & src%d%r2_sp, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & dst_offset=dst_o) ELSE CALL block_partial_copy_s(dst%d%r_sp, dst_rs, dst_cs, dst_tr, & src%d%r_sp, src_rs, src_cs, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & dst_offset=dst_o, src_offset=src_o) END IF CASE (dbcsr_type_real_8) IF (src_is_2d) THEN CALL block_partial_copy_1d2d_d(dst%d%r_dp, dst_rs, dst_cs, dst_tr, & src%d%r2_dp, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & dst_offset=dst_o) ELSE CALL block_partial_copy_d(dst%d%r_dp, dst_rs, dst_cs, dst_tr, & src%d%r_dp, src_rs, src_cs, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & dst_offset=dst_o, src_offset=src_o) END IF CASE (dbcsr_type_complex_4) IF (src_is_2d) THEN CALL block_partial_copy_1d2d_c(dst%d%c_sp, dst_rs, dst_cs, dst_tr, & src%d%c2_sp, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & dst_offset=dst_o) ELSE CALL block_partial_copy_c(dst%d%c_sp, dst_rs, dst_cs, dst_tr, & src%d%c_sp, src_rs, src_cs, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & dst_offset=dst_o, src_offset=src_o) END IF CASE (dbcsr_type_complex_8) IF (src_is_2d) THEN CALL block_partial_copy_1d2d_z(dst%d%c_dp, dst_rs, dst_cs, dst_tr, & src%d%c2_dp, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & dst_offset=dst_o) ELSE CALL block_partial_copy_z(dst%d%c_dp, dst_rs, dst_cs, dst_tr, & src%d%c_dp, src_rs, src_cs, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & dst_offset=dst_o, src_offset=src_o) END IF CASE (dbcsr_type_real_4_2d) IF (src_is_2d) THEN CALL block_partial_copy_2d2d_s(dst%d%r2_sp, dst_tr, & src%d%r2_sp, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol) ELSE CALL block_partial_copy_2d1d_s(dst%d%r2_sp, dst_tr, & src%d%r_sp, src_rs, src_cs, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & src_offset=src_o) END IF CASE (dbcsr_type_real_8_2d) IF (src_is_2d) THEN CALL block_partial_copy_2d2d_d(dst%d%r2_dp, dst_tr, & src%d%r2_dp, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol) ELSE CALL block_partial_copy_2d1d_d(dst%d%r2_dp, dst_tr, & src%d%r_dp, src_rs, src_cs, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & src_offset=src_o) END IF CASE (dbcsr_type_complex_4_2d) IF (src_is_2d) THEN CALL block_partial_copy_2d2d_c(dst%d%c2_sp, dst_tr, & src%d%c2_sp, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol) ELSE CALL block_partial_copy_2d1d_c(dst%d%c2_sp, dst_tr, & src%d%c_sp, src_rs, src_cs, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & src_offset=src_o) END IF CASE (dbcsr_type_complex_8_2d) IF (src_is_2d) THEN CALL block_partial_copy_2d2d_z(dst%d%c2_dp, dst_tr, & src%d%c2_dp, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol) ELSE CALL block_partial_copy_2d1d_z(dst%d%c2_dp, dst_tr, & src%d%c_dp, src_rs, src_cs, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & src_offset=src_o) END IF CASE default DBCSR_ABORT("Invalid data type.") END SELECT END SUBROUTINE dbcsr_block_partial_copy SUBROUTINE block_add_anytype(block_a, block_b, len) !! Adds two blocks TYPE(dbcsr_data_obj), INTENT(INOUT) :: block_a !! Block to add to TYPE(dbcsr_data_obj), INTENT(IN) :: block_b !! Block to add to block_a INTEGER, INTENT(IN), OPTIONAL :: len INTEGER :: n ! --------------------------------------------------------------------------- IF (careful_mod) THEN IF (dbcsr_data_get_type(block_a) /= dbcsr_data_get_type(block_a)) & DBCSR_ABORT("Mismatched data types.") END IF IF (PRESENT(len)) THEN n = len IF (dbcsr_data_get_size(block_b) < n) & DBCSR_ABORT("Block B too small.") ELSE n = dbcsr_data_get_size_referenced(block_b) END IF IF (dbcsr_data_get_size(block_a) < n) & DBCSR_ABORT("Block A too small.") SELECT CASE (dbcsr_data_get_type(block_a)) CASE (dbcsr_type_real_4) CALL block_add_s(block_a%d%r_sp, block_b%d%r_sp, n) CASE (dbcsr_type_real_8) CALL block_add_d(block_a%d%r_dp, block_b%d%r_dp, n) CASE (dbcsr_type_complex_4) CALL block_add_c(block_a%d%c_sp, block_b%d%c_sp, n) CASE (dbcsr_type_complex_8) CALL block_add_z(block_a%d%c_dp, block_b%d%c_dp, n) CASE (dbcsr_type_real_4_2d) CALL block_add_s(block_a%d%r2_sp, block_b%d%r2_sp, n) CASE (dbcsr_type_real_8_2d) CALL block_add_d(block_a%d%r2_dp, block_b%d%r2_dp, n) CASE (dbcsr_type_complex_4_2d) CALL block_add_c(block_a%d%c2_sp, block_b%d%c2_sp, n) CASE (dbcsr_type_complex_8_2d) CALL block_add_z(block_a%d%c2_dp, block_b%d%c2_dp, n) CASE default DBCSR_ABORT("Invalid data type!") END SELECT END SUBROUTINE block_add_anytype SUBROUTINE block_add_anytype_bounds(block_a, block_b, lb_a, lb_b, len) !! Adds two blocks TYPE(dbcsr_data_obj), INTENT(INOUT) :: block_a !! Block to add to TYPE(dbcsr_data_obj), INTENT(IN) :: block_b !! Block to add to block_a INTEGER, INTENT(IN) :: lb_a, lb_b, len ! --------------------------------------------------------------------------- IF (careful_mod) THEN IF (dbcsr_data_get_type(block_a) /= dbcsr_data_get_type(block_a)) & DBCSR_ABORT("Mismatched data types.") END IF IF (dbcsr_data_get_size(block_b) < lb_b + len - 1) & DBCSR_ABORT("Block B too small.") IF (dbcsr_data_get_size(block_a) < lb_a + len - 1) & DBCSR_ABORT("Block A too small.") SELECT CASE (dbcsr_data_get_type(block_a)) CASE (dbcsr_type_real_4) CALL block_add_s(block_a%d%r_sp(lb_a:), block_b%d%r_sp(lb_b:), len) CASE (dbcsr_type_real_8) CALL block_add_d(block_a%d%r_dp(lb_a:), block_b%d%r_dp(lb_b:), len) CASE (dbcsr_type_complex_4) CALL block_add_c(block_a%d%c_sp(lb_a:), block_b%d%c_sp(lb_b:), len) CASE (dbcsr_type_complex_8) CALL block_add_z(block_a%d%c_dp(lb_a:), block_b%d%c_dp(lb_b:), len) CASE default DBCSR_ABORT("Invalid data type!") END SELECT END SUBROUTINE block_add_anytype_bounds #:include '../data/dbcsr.fypp' #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float PURE_BLOCKOPS SUBROUTINE block_partial_copy_${nametype1}$ (dst, dst_rs, dst_cs, dst_tr, & src, src_rs, src_cs, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & dst_offset, src_offset) !! Copies a block subset !! @note !! see block_partial_copy_a !! @endnote #if defined(__LIBXSMM_BLOCKOPS) USE libxsmm, ONLY: libxsmm_matcopy, libxsmm_otrans, libxsmm_ptr0 #endif ${type1}$, DIMENSION(:), & INTENT(INOUT) :: dst INTEGER, INTENT(IN) :: dst_rs, dst_cs INTEGER, INTENT(IN) :: src_offset, dst_offset LOGICAL, INTENT(IN) :: dst_tr ${type1}$, DIMENSION(:), & INTENT(IN) :: src INTEGER, INTENT(IN) :: src_rs, src_cs LOGICAL, INTENT(IN) :: src_tr INTEGER, INTENT(IN) :: dst_r_lb, dst_c_lb, src_r_lb, & src_c_lb, nrow, ncol INTEGER :: col, row ! --------------------------------------------------------------------------- ! Factors out the 4 combinations to remove branches from the inner loop. ! rs is the logical row size so it always remains the leading dimension. IF (.NOT. dst_tr .AND. .NOT. src_tr) THEN #if defined(__LIBXSMM_BLOCKOPS) IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN CALL libxsmm_matcopy(libxsmm_ptr0(dst(dst_offset + dst_r_lb + (dst_c_lb - 1)*dst_rs)), & libxsmm_ptr0(src(src_offset + src_r_lb + (src_c_lb - 1)*src_rs)), & ${typesize1[n]}$, nrow, ncol, src_rs, dst_rs) END IF #else DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_offset + dst_r_lb + row + (dst_c_lb + col - 1)*dst_rs) & = src(src_offset + src_r_lb + row + (src_c_lb + col - 1)*src_rs) END DO END DO #endif ELSEIF (dst_tr .AND. .NOT. src_tr) THEN DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_offset + dst_c_lb + col + (dst_r_lb + row - 1)*dst_cs) & = src(src_offset + src_r_lb + row + (src_c_lb + col - 1)*src_rs) END DO END DO ELSEIF (.NOT. dst_tr .AND. src_tr) THEN DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_offset + dst_r_lb + row + (dst_c_lb + col - 1)*dst_rs) & = src(src_offset + src_c_lb + col + (src_r_lb + row - 1)*src_cs) END DO END DO ELSE DBCSR_ASSERT(dst_tr .AND. src_tr) #if defined(__LIBXSMM_BLOCKOPS) IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN CALL libxsmm_matcopy(libxsmm_ptr0(dst(dst_offset + dst_c_lb + (dst_r_lb - 1)*dst_cs)), & libxsmm_ptr0(src(src_offset + src_c_lb + (src_r_lb - 1)*src_cs)), & ${typesize1[n]}$, nrow, ncol, src_cs, dst_cs) END IF #else DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_offset + dst_c_lb + col + (dst_r_lb + row - 1)*dst_cs) & = src(src_offset + src_c_lb + col + (src_r_lb + row - 1)*src_cs) END DO END DO #endif END IF END SUBROUTINE block_partial_copy_${nametype1}$ PURE_BLOCKOPS SUBROUTINE block_partial_copy_1d2d_${nametype1}$ (dst, dst_rs, dst_cs, dst_tr, & src, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & dst_offset) !! Copies a block subset !! @note !! see block_partial_copy_a !! @endnote #if defined(__LIBXSMM_BLOCKOPS) USE libxsmm, ONLY: libxsmm_matcopy, libxsmm_otrans, libxsmm_ptr0 #else INTEGER :: col, row #endif ${type1}$, DIMENSION(:), & INTENT(INOUT) :: dst INTEGER, INTENT(IN) :: dst_rs, dst_cs INTEGER, INTENT(IN) :: dst_offset LOGICAL, INTENT(IN) :: dst_tr ${type1}$, DIMENSION(:, :), & INTENT(IN) :: src LOGICAL, INTENT(IN) :: src_tr INTEGER, INTENT(IN) :: dst_r_lb, dst_c_lb, src_r_lb, & src_c_lb, nrow, ncol ! --------------------------------------------------------------------------- ! Factors out the 4 combinations to remove branches from the inner loop. ! rs is the logical row size so it always remains the leading dimension. IF (.NOT. dst_tr .AND. .NOT. src_tr) THEN #if defined(__LIBXSMM_BLOCKOPS) IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN CALL libxsmm_matcopy(libxsmm_ptr0(dst(dst_offset + dst_r_lb + (dst_c_lb - 1)*dst_rs)), & libxsmm_ptr0(src(src_r_lb, src_c_lb)), & ${typesize1[n]}$, nrow, ncol, SIZE(src, 1), dst_rs) END IF #else DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_offset + dst_r_lb + row + (dst_c_lb + col - 1)*dst_rs) & = src(src_r_lb + row, src_c_lb + col) END DO END DO #endif ELSEIF (dst_tr .AND. .NOT. src_tr) THEN #if defined(__LIBXSMM_BLOCKOPS) IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN CALL libxsmm_otrans(libxsmm_ptr0(dst(dst_offset + dst_c_lb + (dst_r_lb - 1)*dst_cs)), & libxsmm_ptr0(src(src_r_lb, src_c_lb)), & ${typesize1[n]}$, nrow, ncol, SIZE(src, 1), dst_cs) END IF #else DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_offset + dst_c_lb + col + (dst_r_lb + row - 1)*dst_cs) & = src(src_r_lb + row, src_c_lb + col) END DO END DO #endif ELSEIF (.NOT. dst_tr .AND. src_tr) THEN #if defined(__LIBXSMM_BLOCKOPS) IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN CALL libxsmm_otrans(libxsmm_ptr0(dst(dst_offset + dst_r_lb + (dst_c_lb - 1)*dst_rs)), & libxsmm_ptr0(src(src_c_lb, src_r_lb)), & ${typesize1[n]}$, nrow, ncol, SIZE(src, 2), dst_rs) END IF #else DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_offset + dst_r_lb + row + (dst_c_lb + col - 1)*dst_rs) & = src(src_c_lb + col, src_r_lb + row) END DO END DO #endif ELSE DBCSR_ASSERT(dst_tr .AND. src_tr) #if defined(__LIBXSMM_BLOCKOPS) IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN CALL libxsmm_matcopy(libxsmm_ptr0(dst(dst_offset + dst_c_lb + (dst_r_lb - 1)*dst_cs)), & libxsmm_ptr0(src(src_c_lb, src_r_lb)), & ${typesize1[n]}$, nrow, ncol, SIZE(src, 2), dst_cs) END IF #else DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_offset + dst_c_lb + col + (dst_r_lb + row - 1)*dst_cs) & = src(src_c_lb + col, src_r_lb + row) END DO END DO #endif END IF END SUBROUTINE block_partial_copy_1d2d_${nametype1}$ PURE_BLOCKOPS SUBROUTINE block_partial_copy_2d1d_${nametype1}$ (dst, dst_tr, & src, src_rs, src_cs, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, & src_offset) !! Copies a block subset !! @note !! see block_partial_copy_a !! @endnote #if defined(__LIBXSMM_BLOCKOPS) USE libxsmm, ONLY: libxsmm_matcopy, libxsmm_otrans, libxsmm_ptr0 #endif ${type1}$, DIMENSION(:, :), & INTENT(INOUT) :: dst INTEGER, INTENT(IN) :: src_offset LOGICAL, INTENT(IN) :: dst_tr ${type1}$, DIMENSION(:), & INTENT(IN) :: src INTEGER, INTENT(IN) :: src_rs, src_cs LOGICAL, INTENT(IN) :: src_tr INTEGER, INTENT(IN) :: dst_r_lb, dst_c_lb, src_r_lb, & src_c_lb, nrow, ncol INTEGER :: col, row ! --------------------------------------------------------------------------- ! Factors out the 4 combinations to remove branches from the inner loop. ! rs is the logical row size so it always remains the leading dimension. IF (.NOT. dst_tr .AND. .NOT. src_tr) THEN DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_r_lb + row, dst_c_lb + col) & = src(src_offset + src_r_lb + row + (src_c_lb + col - 1)*src_rs) END DO END DO ELSEIF (dst_tr .AND. .NOT. src_tr) THEN DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_c_lb + col, dst_r_lb + row) & = src(src_offset + src_r_lb + row + (src_c_lb + col - 1)*src_rs) END DO END DO ELSEIF (.NOT. dst_tr .AND. src_tr) THEN DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_r_lb + row, dst_c_lb + col) & = src(src_offset + src_c_lb + col + (src_r_lb + row - 1)*src_cs) END DO END DO ELSE DBCSR_ASSERT(dst_tr .AND. src_tr) DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_c_lb + col, dst_r_lb + row) & = src(src_offset + src_c_lb + col + (src_r_lb + row - 1)*src_cs) END DO END DO END IF END SUBROUTINE block_partial_copy_2d1d_${nametype1}$ PURE_BLOCKOPS SUBROUTINE block_partial_copy_2d2d_${nametype1}$ (dst, dst_tr, & src, src_tr, & dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol) !! Copies a block subset !! @note !! see block_partial_copy_a !! @endnote #if defined(__LIBXSMM_BLOCKOPS) USE libxsmm, ONLY: libxsmm_matcopy, libxsmm_otrans, libxsmm_ptr0 #else INTEGER :: col, row #endif ${type1}$, DIMENSION(:, :), & INTENT(INOUT) :: dst LOGICAL, INTENT(IN) :: dst_tr ${type1}$, DIMENSION(:, :), & INTENT(IN) :: src LOGICAL, INTENT(IN) :: src_tr INTEGER, INTENT(IN) :: dst_r_lb, dst_c_lb, src_r_lb, & src_c_lb, nrow, ncol ! --------------------------------------------------------------------------- ! Factors out the 4 combinations to remove branches from the inner loop. ! rs is the logical row size so it always remains the leading dimension. IF (.NOT. dst_tr .AND. .NOT. src_tr) THEN #if defined(__LIBXSMM_BLOCKOPS) IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN CALL libxsmm_matcopy(libxsmm_ptr0(dst(dst_r_lb, dst_c_lb)), & libxsmm_ptr0(src(src_r_lb, src_c_lb)), & ${typesize1[n]}$, nrow, ncol, & SIZE(src, 1), SIZE(dst, 1)) END IF #else DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_r_lb + row, dst_c_lb + col) & = src(src_r_lb + row, src_c_lb + col) END DO END DO #endif ELSEIF (dst_tr .AND. .NOT. src_tr) THEN #if defined(__LIBXSMM_BLOCKOPS) IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN CALL libxsmm_otrans(libxsmm_ptr0(dst(dst_c_lb, dst_r_lb)), & libxsmm_ptr0(src(src_r_lb, src_c_lb)), & ${typesize1[n]}$, nrow, ncol, & SIZE(src, 1), SIZE(dst, 2)) END IF #else DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_c_lb + col, dst_r_lb + row) & = src(src_r_lb + row, src_c_lb + col) END DO END DO #endif ELSEIF (.NOT. dst_tr .AND. src_tr) THEN #if defined(__LIBXSMM_BLOCKOPS) IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN CALL libxsmm_otrans(libxsmm_ptr0(dst(dst_r_lb, dst_c_lb)), & libxsmm_ptr0(src(src_c_lb, src_r_lb)), & ${typesize1[n]}$, nrow, ncol, & SIZE(src, 2), SIZE(dst, 1)) END IF #else DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_r_lb + row, dst_c_lb + col) & = src(src_c_lb + col, src_r_lb + row) END DO END DO #endif ELSE DBCSR_ASSERT(dst_tr .AND. src_tr) #if defined(__LIBXSMM_BLOCKOPS) IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN CALL libxsmm_matcopy(libxsmm_ptr0(dst(dst_c_lb, dst_r_lb)), & libxsmm_ptr0(src(src_c_lb, src_r_lb)), & ${typesize1[n]}$, nrow, ncol, & SIZE(src, 2), SIZE(dst, 2)) END IF #else DO col = 0, ncol - 1 DO row = 0, nrow - 1 dst(dst_c_lb + col, dst_r_lb + row) & = src(src_c_lb + col, src_r_lb + row) END DO END DO #endif END IF END SUBROUTINE block_partial_copy_2d2d_${nametype1}$ PURE SUBROUTINE block_copy_${nametype1}$ (extent_out, extent_in, n, out_fe, in_fe) !! Copy a block INTEGER, INTENT(IN) :: n, out_fe, in_fe !! number of elements to copy !! first element of output !! first element of input ${type1}$, DIMENSION(*), INTENT(OUT) :: extent_out !! output data ${type1}$, DIMENSION(*), INTENT(IN) :: extent_in !! input data ! --------------------------------------------------------------------------- extent_out(out_fe:out_fe + n - 1) = extent_in(in_fe:in_fe + n - 1) END SUBROUTINE block_copy_${nametype1}$ PURE_BLOCKOPS SUBROUTINE block_transpose_copy_${nametype1}$ (extent_out, extent_in, & rows, columns) !! Copy and transpose block. #if defined(__LIBXSMM_TRANS) USE libxsmm, ONLY: libxsmm_otrans, libxsmm_ptr1 #endif ${type1}$, DIMENSION(:), INTENT(OUT), TARGET :: extent_out !! output matrix in the form of a 1-d array ${type1}$, DIMENSION(:), INTENT(IN) :: extent_in !! input matrix in the form of a 1-d array INTEGER, INTENT(IN) :: rows, columns !! input matrix size !! input matrix size ! --------------------------------------------------------------------------- #if defined(__LIBXSMM_TRANS) CALL libxsmm_otrans(libxsmm_ptr1(extent_out), libxsmm_ptr1(extent_in), & ${typesize1[n]}$, rows, columns, rows, columns) #elif defined(__MKL) CALL mkl_${nametype1}$omatcopy('C', 'T', rows, columns, ${one1[n]}$, extent_in, rows, extent_out, columns) #else extent_out(1:rows*columns) = RESHAPE(TRANSPOSE( & RESHAPE(extent_in(1:rows*columns), (/rows, columns/))), (/rows*columns/)) #endif END SUBROUTINE block_transpose_copy_${nametype1}$ PURE SUBROUTINE block_copy_2d1d_${nametype1}$ (extent_out, extent_in, & rows, columns) !! Copy a block INTEGER, INTENT(IN) :: rows, columns !! input matrix size !! input matrix size ${type1}$, DIMENSION(rows, columns), INTENT(OUT) :: extent_out !! output matrix in the form of a 2-d array ${type1}$, DIMENSION(:), INTENT(IN) :: extent_in !! input matrix in the form of a 1-d array ! --------------------------------------------------------------------------- extent_out = RESHAPE(extent_in, (/rows, columns/)) END SUBROUTINE block_copy_2d1d_${nametype1}$ PURE SUBROUTINE block_copy_1d1d_${nametype1}$ (extent_out, extent_in, & rows, columns) !! Copy a block INTEGER, INTENT(IN) :: rows, columns !! input matrix size !! input matrix size ${type1}$, DIMENSION(rows*columns), INTENT(OUT) :: extent_out !! output matrix in the form of a 1-d array ${type1}$, DIMENSION(rows*columns), INTENT(IN) :: extent_in !! input matrix in the form of a 1-d array ! --------------------------------------------------------------------------- extent_out(:) = extent_in(:) END SUBROUTINE block_copy_1d1d_${nametype1}$ PURE SUBROUTINE block_copy_2d2d_${nametype1}$ (extent_out, extent_in, & rows, columns) !! Copy a block INTEGER, INTENT(IN) :: rows, columns !! input matrix size !! input matrix size ${type1}$, DIMENSION(rows, columns), INTENT(OUT) :: extent_out !! output matrix in the form of a 2-d array ${type1}$, DIMENSION(rows, columns), INTENT(IN) :: extent_in !! input matrix in the form of a 2-d array ! --------------------------------------------------------------------------- extent_out(:, :) = extent_in(:, :) END SUBROUTINE block_copy_2d2d_${nametype1}$ PURE_BLOCKOPS SUBROUTINE block_transpose_copy_2d1d_${nametype1}$ (extent_out, extent_in, & rows, columns) !! Copy and transpose block. #if defined(__LIBXSMM_TRANS) USE libxsmm, ONLY: libxsmm_otrans, libxsmm_ptr1, libxsmm_ptr2 #endif INTEGER, INTENT(IN) :: rows, columns !! input matrix size !! input matrix size ${type1}$, DIMENSION(columns, rows), INTENT(OUT), TARGET :: extent_out !! output matrix in the form of a 2-d array ${type1}$, DIMENSION(:), INTENT(IN) :: extent_in !! input matrix in the form of a 1-d array ! --------------------------------------------------------------------------- #if defined(__LIBXSMM_TRANS) CALL libxsmm_otrans(libxsmm_ptr2(extent_out), libxsmm_ptr1(extent_in), & ${typesize1[n]}$, rows, columns, rows, columns) #elif defined(__MKL) CALL mkl_${nametype1}$omatcopy('C', 'T', rows, columns, ${one1[n]}$, extent_in, rows, extent_out, columns) #else extent_out = TRANSPOSE(RESHAPE(extent_in, (/rows, columns/))) #endif END SUBROUTINE block_transpose_copy_2d1d_${nametype1}$ PURE SUBROUTINE block_copy_1d2d_${nametype1}$ (extent_out, extent_in, & rows, columns) !! Copy and transpose block. INTEGER, INTENT(IN) :: rows, columns !! input matrix size !! input matrix size ${type1}$, DIMENSION(:), INTENT(OUT) :: extent_out !! output matrix in the form of a 1-d array ${type1}$, DIMENSION(rows, columns), INTENT(IN) :: extent_in !! input matrix in the form of a 2-d array ! --------------------------------------------------------------------------- extent_out = RESHAPE(extent_in, (/rows*columns/)) END SUBROUTINE block_copy_1d2d_${nametype1}$ PURE_BLOCKOPS SUBROUTINE block_transpose_copy_1d2d_${nametype1}$ (extent_out, extent_in, & rows, columns) !! Copy and transpose block. #if defined(__LIBXSMM_TRANS) USE libxsmm, ONLY: libxsmm_otrans, libxsmm_ptr1, libxsmm_ptr2 #endif INTEGER, INTENT(IN) :: rows, columns !! input matrix size !! input matrix size ${type1}$, DIMENSION(:), INTENT(OUT), TARGET :: extent_out !! output matrix in the form of a 1-d array ${type1}$, DIMENSION(rows, columns), INTENT(IN) :: extent_in !! input matrix in the form of a 2-d array ! --------------------------------------------------------------------------- #if defined(__LIBXSMM_TRANS) CALL libxsmm_otrans(libxsmm_ptr1(extent_out), libxsmm_ptr2(extent_in), & ${typesize1[n]}$, rows, columns, rows, columns) #elif defined(__MKL) CALL mkl_${nametype1}$omatcopy('C', 'T', rows, columns, ${one1[n]}$, extent_in, rows, extent_out, columns) #else extent_out = RESHAPE(TRANSPOSE(extent_in), (/rows*columns/)) #endif END SUBROUTINE block_transpose_copy_1d2d_${nametype1}$ PURE_BLOCKOPS SUBROUTINE block_transpose_inplace_${nametype1}$ (extent, rows, columns) !! In-place block transpose. #if defined(__LIBXSMM_TRANS) && 0 USE libxsmm, ONLY: libxsmm_itrans, libxsmm_ptr1 #endif INTEGER, INTENT(IN) :: rows, columns !! input matrix size !! input matrix size ${type1}$, DIMENSION(rows*columns), INTENT(INOUT) :: extent !! Matrix in the form of a 1-d array ! --------------------------------------------------------------------------- #if defined(__LIBXSMM_TRANS) && 0 CALL libxsmm_itrans(libxsmm_ptr1(extent), ${typesize1[n]}$, rows, columns, rows) #elif defined(__MKL) CALL mkl_${nametype1}$imatcopy('C', 'T', rows, columns, ${one1[n]}$, extent, rows, columns) #else ${type1}$, DIMENSION(rows*columns) :: extent_tr INTEGER :: r, c DO r = 1, columns DO c = 1, rows extent_tr(r + (c - 1)*columns) = extent(c + (r - 1)*rows) END DO END DO DO r = 1, columns DO c = 1, rows extent(r + (c - 1)*columns) = extent_tr(r + (c - 1)*columns) END DO END DO #endif END SUBROUTINE block_transpose_inplace_${nametype1}$ SUBROUTINE dbcsr_data_set_a${nametype1}$ (dst, lb, data_size, src, source_lb) !! Copy data from a double real array to a data area !! There are no checks done for correctness! TYPE(dbcsr_data_obj), INTENT(INOUT) :: dst !! destination data area INTEGER, INTENT(IN) :: lb, data_size !! lower bound for destination (and source if not given explicitly) !! number of elements to copy ${type1}$, DIMENSION(:), INTENT(IN), CONTIGUOUS :: src !! source data array INTEGER, INTENT(IN), OPTIONAL :: source_lb !! lower bound of source INTEGER :: lb_s, ub, ub_s ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: cont_data ! --------------------------------------------------------------------------- IF (debug_mod) THEN IF (.NOT. ASSOCIATED(dst%d)) & DBCSR_ABORT("Target data area must be setup.") IF (SIZE(src) .LT. data_size) & DBCSR_ABORT("Not enough source data.") IF (dst%d%data_type .NE. ${dkind1}$) & DBCSR_ABORT("Data type mismatch.") END IF ub = lb + data_size - 1 IF (PRESENT(source_lb)) THEN lb_s = source_lb ub_s = source_lb + data_size - 1 ELSE lb_s = lb ub_s = ub END IF cont_data => dst%d%${base1}$_${prec1}$ (lb:ub) CALL memory_copy(cont_data, src(lb_s:ub_s), data_size) END SUBROUTINE dbcsr_data_set_a${nametype1}$ PURE SUBROUTINE block_add_${nametype1}$ (block_a, block_b, len) INTEGER, INTENT(IN) :: len ${type1}$, DIMENSION(len), INTENT(INOUT) :: block_a ${type1}$, DIMENSION(len), INTENT(IN) :: block_b block_a(1:len) = block_a(1:len) + block_b(1:len) END SUBROUTINE block_add_${nametype1}$ #:endfor END MODULE dbcsr_block_operations ================================================ FILE: src/block/dbcsr_index_operations.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_index_operations !! Operations on the DBCSR index USE dbcsr_array_types, ONLY: array_data, & array_size USE dbcsr_config, ONLY: default_resize_factor USE dbcsr_dist_methods, ONLY: dbcsr_distribution_local_cols, & dbcsr_distribution_local_rows, & dbcsr_distribution_ncols, & dbcsr_distribution_nlocal_cols, & dbcsr_distribution_nlocal_rows, & dbcsr_distribution_nrows, & dbcsr_distribution_thread_dist USE dbcsr_dist_operations, ONLY: get_stored_canonical USE dbcsr_kinds, ONLY: int_4, & int_8 USE dbcsr_methods, ONLY: dbcsr_distribution, & dbcsr_get_index_memory_type USE dbcsr_ptr_util, ONLY: ensure_array_size, & memory_allocate, & memory_deallocate USE dbcsr_toollib, ONLY: joaat_hash, & sort, & swap USE dbcsr_types, ONLY: & dbcsr_distribution_obj, dbcsr_meta_size, dbcsr_num_slots, dbcsr_slot_blk_p, & dbcsr_slot_col_i, dbcsr_slot_coo_l, dbcsr_slot_home_prow, dbcsr_slot_home_vprow, & dbcsr_slot_nblkcols_local, dbcsr_slot_nblkcols_total, dbcsr_slot_nblkrows_local, & dbcsr_slot_nblkrows_total, dbcsr_slot_nblks, dbcsr_slot_nfullcols_local, dbcsr_slot_nze, & dbcsr_slot_row_p, dbcsr_slot_size, dbcsr_slot_thr_c, dbcsr_type #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_max_threads, omp_get_thread_num, omp_get_num_threads IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_index_operations' LOGICAL, PARAMETER :: careful_mod = .FALSE. LOGICAL, PARAMETER :: debug_mod = .FALSE. ! Index transformations PUBLIC :: dbcsr_make_index_canonical, & transpose_index_local PUBLIC :: dbcsr_make_index_local_row, dbcsr_has_local_row_index PUBLIC :: dbcsr_make_index_list ! Dense/Sparse PUBLIC :: make_dense_index, make_undense_index ! Working with DBCSR and linear indices PUBLIC :: dbcsr_make_dbcsr_index, dbcsr_sort_indices, & merge_index_arrays, & dbcsr_expand_row_index, & dbcsr_count_row_index, dbcsr_build_row_index, & dbcsr_index_prune_deleted, & dbcsr_index_compact PUBLIC :: dbcsr_index_checksum ! Index array manipulation PUBLIC :: dbcsr_addto_index_array, dbcsr_clearfrom_index_array, & dbcsr_repoint_index, dbcsr_make_index_exist INTERFACE dbcsr_count_row_index MODULE PROCEDURE dbcsr_count_row_index_copy, & dbcsr_count_row_index_inplace END INTERFACE INTERFACE dbcsr_build_row_index MODULE PROCEDURE dbcsr_build_row_index_copy, & dbcsr_build_row_index_inplace END INTERFACE CONTAINS SUBROUTINE make_index_canonical(new_row_p, new_col_i, new_blk_p, & old_row_p, old_col_i, old_blk_p, matrix) !! Makes a canonical index given the index arrays !! !! Description of canonical ordering !! A non-(anti)symmetric matrix is left as is. Otherwise, the row and column !! are stored in the position prescribed by the distribution. !! @note !! This routine uses hard-coded logic as to what constitutes a !! canonical ordering !! @endnote INTEGER, DIMENSION(:), INTENT(OUT) :: new_row_p, new_col_i, new_blk_p INTEGER, DIMENSION(:), INTENT(IN) :: old_row_p, old_col_i, old_blk_p TYPE(dbcsr_type), INTENT(IN) :: matrix CHARACTER(len=*), PARAMETER :: routineN = 'make_index_canonical' INTEGER :: blk, col, nblks, row, stored_col, & stored_row INTEGER, ALLOCATABLE, DIMENSION(:) :: row_i LOGICAL :: tr ! --------------------------------------------------------------------------- nblks = SIZE(old_blk_p) ALLOCATE (row_i(nblks)) IF (debug_mod) THEN WRITE (*, *) "old row_p", old_row_p WRITE (*, *) "old col_i", old_col_i WRITE (*, *) "old blk_p", old_blk_p END IF DO row = 1, SIZE(old_row_p) - 1 DO blk = old_row_p(row) + 1, old_row_p(row + 1) col = old_col_i(blk) stored_row = row stored_col = col tr = .FALSE. CALL get_stored_canonical(matrix, stored_row, stored_col, tr) IF (debug_mod) & WRITE (*, '(A,2(1X,I5),A,2(1X,I5),";",I7,1X,L1)') & routineN//" X->", row, col, "->", & stored_row, stored_col, blk, tr row_i(blk) = stored_row new_col_i(blk) = stored_col IF (.NOT. tr) THEN new_blk_p(blk) = old_blk_p(blk) ELSE new_blk_p(blk) = -old_blk_p(blk) END IF END DO END DO CALL dbcsr_sort_indices(nblks, row_i, new_col_i, blk_p=new_blk_p) ! Re-create the index CALL dbcsr_make_dbcsr_index(new_row_p, row_i, SIZE(new_row_p) - 1, nblks) IF (debug_mod) THEN WRITE (*, *) "new row_p", new_row_p WRITE (*, *) "new row_i", row_i WRITE (*, *) "new col_i", new_col_i WRITE (*, *) "new blk_p", new_blk_p END IF END SUBROUTINE make_index_canonical SUBROUTINE make_index_triangular(new_row_p, new_col_i, new_blk_p, & old_row_p, old_col_i, old_blk_p, matrix) !! Makes a CP2K triangular index given the index arrays !! !! Description of canonical ordering !! A non-(anti)symmetric matrix is left as is. Otherwise, the row and column !! are stored in the position prescribed by the distribution. !! @note !! This routine uses hard-coded logic as to what constitutes a !! canonical ordering !! @endnote INTEGER, DIMENSION(:), INTENT(OUT) :: new_row_p, new_col_i, new_blk_p INTEGER, DIMENSION(:), INTENT(IN) :: old_row_p, old_col_i, old_blk_p TYPE(dbcsr_type), INTENT(IN) :: matrix CHARACTER(len=*), PARAMETER :: routineN = 'make_index_triangular' INTEGER :: blk, col, nblks, row, stored_col, & stored_row INTEGER, ALLOCATABLE, DIMENSION(:) :: row_i LOGICAL :: tr ! --------------------------------------------------------------------------- nblks = SIZE(old_blk_p) ALLOCATE (row_i(nblks)) IF (debug_mod) THEN WRITE (*, *) "old row_p", old_row_p WRITE (*, *) "old col_i", old_col_i WRITE (*, *) "old blk_p", old_blk_p END IF DO row = 1, SIZE(old_row_p) - 1 DO blk = old_row_p(row) + 1, old_row_p(row + 1) col = old_col_i(blk) stored_row = row stored_col = col tr = .FALSE. CALL get_stored_canonical(matrix, stored_row, stored_col, tr) IF (stored_row .GT. stored_col) THEN CALL swap(stored_row, stored_col) tr = .NOT. tr END IF IF (debug_mod) & WRITE (*, '(A,2(1X,I5),A,2(1X,I5),";",I7,1X,L1)') & routineN//" X->", row, col, "->", & stored_row, stored_col, blk, tr row_i(blk) = stored_row new_col_i(blk) = stored_col IF (.NOT. tr) THEN new_blk_p(blk) = old_blk_p(blk) ELSE new_blk_p(blk) = -old_blk_p(blk) END IF END DO END DO CALL dbcsr_sort_indices(nblks, row_i, new_col_i, blk_p=new_blk_p) ! Re-create the index CALL dbcsr_make_dbcsr_index(new_row_p, row_i, SIZE(new_row_p) - 1, nblks) IF (debug_mod) THEN WRITE (*, *) "new row_p", new_row_p WRITE (*, *) "new row_i", row_i WRITE (*, *) "new col_i", new_col_i WRITE (*, *) "new blk_p", new_blk_p END IF END SUBROUTINE make_index_triangular SUBROUTINE dbcsr_make_dbcsr_index(row_p, row_i, nrows, nblks) !! Collapses a row_p index INTEGER, INTENT(in) :: nrows, nblks INTEGER, DIMENSION(1:nrows + 1), INTENT(out) :: row_p INTEGER, DIMENSION(1:nblks), INTENT(in) :: row_i CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_dbcsr_index' INTEGER :: blk, error_handle, row CALL timeset(routineN, error_handle) row_p(1) = 0 row_p(nrows + 1) = nblks row = 1 blk = 1 DO WHILE (row .LE. nrows) IF (blk .LE. nblks) THEN DO WHILE (row_i(blk) .EQ. row) blk = blk + 1 IF (blk .GT. nblks) THEN row_p(row + 1) = nblks - 1 EXIT END IF END DO END IF row_p(row + 1) = blk - 1 row = row + 1 END DO CALL timestop(error_handle) END SUBROUTINE dbcsr_make_dbcsr_index PURE SUBROUTINE dbcsr_expand_row_index(row_p, row_i, nrows, nblks) !! Expands a row_p index INTEGER, INTENT(IN) :: nrows, nblks INTEGER, DIMENSION(1:nrows + 1), INTENT(IN) :: row_p INTEGER, DIMENSION(1:nblks), INTENT(OUT) :: row_i INTEGER :: row DO row = 1, nrows row_i(row_p(row) + 1:row_p(row + 1)) = row END DO END SUBROUTINE dbcsr_expand_row_index PURE SUBROUTINE dbcsr_expand_row_index_2d(row_p, row_i, nrows, dst_i) !! Expands a row_p index INTEGER, INTENT(IN) :: nrows, dst_i INTEGER, DIMENSION(1:nrows + 1), INTENT(IN) :: row_p INTEGER, DIMENSION(:, :), INTENT(OUT) :: row_i INTEGER :: row DO row = 1, nrows row_i(dst_i, row_p(row) + 1:row_p(row + 1)) = row END DO END SUBROUTINE dbcsr_expand_row_index_2d PURE SUBROUTINE dbcsr_count_row_index_inplace(rows, nrows) !! Counts columns-per-row count from row index array, in-place. INTEGER, INTENT(IN) :: nrows !! number of rows INTEGER, DIMENSION(1:nrows + 1), INTENT(INOUT) :: rows !! the row_p index (input); the count of the number of columns per row (output) INTEGER :: row DO row = 1, nrows rows(row) = rows(row + 1) - rows(row) END DO rows(nrows + 1) = 0 END SUBROUTINE dbcsr_count_row_index_inplace PURE SUBROUTINE dbcsr_count_row_index_copy(rows, counts, nrows) !! Counts columns-per-row count from row index array. INTEGER, INTENT(IN) :: nrows !! number of rows INTEGER, DIMENSION(1:nrows), INTENT(OUT) :: counts !! the count of the number of columns per row INTEGER, DIMENSION(1:nrows + 1), INTENT(IN) :: rows !! the row_p index (input) INTEGER :: row DO row = 1, nrows counts(row) = rows(row + 1) - rows(row) END DO END SUBROUTINE dbcsr_count_row_index_copy PURE SUBROUTINE dbcsr_build_row_index_inplace(rows, nrows) !! Builds row index array from a columns-per-row count, in-place. INTEGER, INTENT(IN) :: nrows !! number of rows INTEGER, DIMENSION(1:nrows + 1), INTENT(INOUT) :: rows !! count of the number of columns per row (input); the row_p index (output) INTEGER :: o, old_count, row old_count = rows(1) rows(1) = 0 IF (nrows .GE. 1) THEN DO row = 2, nrows + 1 o = rows(row) rows(row) = rows(row - 1) + old_count old_count = o END DO END IF END SUBROUTINE dbcsr_build_row_index_inplace PURE SUBROUTINE dbcsr_build_row_index_copy(counts, rows, nrows) !! Builds row index array from a columns-per-row count. INTEGER, INTENT(IN) :: nrows !! number of rows INTEGER, DIMENSION(1:nrows + 1), INTENT(OUT) :: rows !! count of the number of columns per row (input); the row_p index (output) INTEGER, DIMENSION(1:nrows), INTENT(IN) :: counts !! count of the number of columns per row !WTF?!rows(1) = 0 !WTF?!IF (nrows .GE. 1) THEN !WTF?! DO row = 2, nrows+1 !WTF?! rows(row) = rows(row-1) + counts(rows-1) !WTF?! ENDDO !WTF?!ENDIF rows(1:nrows) = counts(1:nrows) CALL dbcsr_build_row_index_inplace(rows, nrows) END SUBROUTINE dbcsr_build_row_index_copy SUBROUTINE dbcsr_addto_index_array(matrix, slot, DATA, reservation, extra) !! Adds data to the index. Increases the index size when necessary. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! bcsr matrix INTEGER, INTENT(IN) :: slot !! which index array to add (e.g., dbcsr_slot_row_blk_sizes) INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: DATA !! array holding the index data to add to the index array INTEGER, INTENT(IN), OPTIONAL :: reservation, extra !! only reserve space for subsequent array !! reserve extra space for later additions CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_addto_index_array', & routineP = moduleN//':'//routineN INTEGER :: deplus, space, ub, ub_new ! --------------------------------------------------------------------------- IF (debug_mod) THEN IF (.NOT. ASSOCIATED(matrix%index)) & DBCSR_ABORT("Index must be preallocated.") IF (UBOUND(matrix%index, 1) < dbcsr_num_slots) & DBCSR_ABORT("Actual index size less than declared size") IF (.NOT. PRESENT(DATA) .AND. .NOT. PRESENT(reservation)) & DBCSR_ABORT('Either an array or its size must be specified.') WRITE (*, *) routineP//' index', matrix%index(:dbcsr_num_slots) END IF IF (PRESENT(reservation)) THEN space = reservation ELSE space = SIZE(DATA) END IF IF (PRESENT(extra)) THEN deplus = extra ELSE deplus = 0 END IF ub = UBOUND(matrix%index, 1) ! The data area was not defined or the new area is greater than the old: IF (matrix%index(slot) .EQ. 0 .OR. & space .GT. matrix%index(slot + 1) - matrix%index(slot) + 1) THEN IF (debug_mod) WRITE (*, *) routineP//' Slot', slot, 'not filled, adding at', & matrix%index(dbcsr_slot_size) + 1, 'sized', space matrix%index(slot) = matrix%index(dbcsr_slot_size) + 1 matrix%index(slot + 1) = matrix%index(slot) + space - 1 matrix%index(dbcsr_slot_size) = matrix%index(slot + 1) END IF ! Shorten an index entry. IF (space .LT. matrix%index(slot + 1) - matrix%index(slot) + 1) THEN IF (debug_mod) WRITE (*, *) routineP//' Shortening index' matrix%index(slot + 1) = matrix%index(slot) + space - 1 CALL dbcsr_repoint_index(matrix, slot) END IF ub_new = matrix%index(slot + 1) + deplus IF (debug_mod) WRITE (*, *) routineP//' need', space, 'at', matrix%index(slot), & 'to', matrix%index(slot + 1), '(', ub_new, ')', 'have', ub IF (ub_new .GT. ub) THEN IF (debug_mod) WRITE (*, *) routineP//' Reallocating index to ubound', ub_new !CALL reallocate(matrix%index, 1, ub_new) CALL ensure_array_size(matrix%index, lb=1, ub=ub_new, & factor=default_resize_factor, & nocopy=.FALSE., & memory_type=matrix%index_memory_type) CALL dbcsr_repoint_index(matrix) END IF IF (debug_mod) WRITE (*, *) routineP//' Adding slot', slot, 'at', & matrix%index(slot), 'sized', space CALL dbcsr_repoint_index(matrix, slot) IF (PRESENT(DATA)) & matrix%index(matrix%index(slot):matrix%index(slot + 1)) = DATA(:) END SUBROUTINE dbcsr_addto_index_array SUBROUTINE dbcsr_clearfrom_index_array(matrix, slot) !! Removes data from the index. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! bcsr matrix INTEGER, INTENT(IN) :: slot !! which index array to remove (e.g., dbcsr_slot_row_blk_sizes) CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_clearfrom_index_array', & routineP = moduleN//':'//routineN INTEGER :: space INTEGER, DIMENSION(5) :: max_extents ! --------------------------------------------------------------------------- IF (.NOT. ASSOCIATED(matrix%index)) & DBCSR_ABORT("Index must be preallocated.") IF (UBOUND(matrix%index, 1) < dbcsr_num_slots) & DBCSR_ABORT("Actual index size less than declared size") IF (debug_mod) WRITE (*, *) routineP//' index', & matrix%index(:dbcsr_num_slots) ! Clear index entry pointer matrix%index(slot) = 1 matrix%index(slot + 1) = 0 CALL dbcsr_repoint_index(matrix, slot) ! Update the declared index size max_extents = (/ & matrix%index(dbcsr_slot_row_p + 1), & matrix%index(dbcsr_slot_col_i + 1), & matrix%index(dbcsr_slot_blk_p + 1), & matrix%index(dbcsr_slot_thr_c + 1), & matrix%index(dbcsr_slot_coo_l + 1)/) space = MAX(MAXVAL(max_extents), dbcsr_num_slots) matrix%index(dbcsr_slot_size) = space END SUBROUTINE dbcsr_clearfrom_index_array SUBROUTINE dbcsr_repoint_index(m, slot) !! Updates the index pointers of a bcsr matrix TYPE(dbcsr_type), INTENT(INOUT) :: m !! matrix for which index pointers are updated INTEGER, INTENT(IN), OPTIONAL :: slot !! only repoint this index INTEGER :: s LOGICAL :: all ! --------------------------------------------------------------------------- IF (m%nblks .NE. m%index(dbcsr_slot_nblks)) THEN m%nblks = m%index(dbcsr_slot_nblks) m%nze = m%index(dbcsr_slot_nze) END IF all = .TRUE. IF (PRESENT(slot)) THEN all = .FALSE. s = slot ELSE s = 0 END IF IF (m%index(dbcsr_slot_row_p) .GT. 0 .AND. all .OR. & s .EQ. dbcsr_slot_row_p) THEN IF (m%index(dbcsr_slot_row_p) .GT. 0) THEN m%row_p => m%index(m%index(dbcsr_slot_row_p): & m%index(dbcsr_slot_row_p + 1)) ELSE NULLIFY (m%row_p) END IF END IF IF (m%index(dbcsr_slot_col_i) .GT. 0 .AND. all .OR. & s .EQ. dbcsr_slot_col_i) THEN IF (m%index(dbcsr_slot_col_i) .GT. 0) THEN m%col_i => m%index(m%index(dbcsr_slot_col_i): & m%index(dbcsr_slot_col_i + 1)) ELSE NULLIFY (m%col_i) END IF END IF IF (m%index(dbcsr_slot_blk_p) .GT. 0 .AND. all .OR. & s .EQ. dbcsr_slot_blk_p) THEN IF (m%index(dbcsr_slot_blk_p) .GT. 0) THEN m%blk_p => m%index(m%index(dbcsr_slot_blk_p): & m%index(dbcsr_slot_blk_p + 1)) ELSE NULLIFY (m%blk_p) END IF END IF IF (m%index(dbcsr_slot_thr_c) .GT. 0 .AND. all .OR. & s .EQ. dbcsr_slot_thr_c) THEN IF (m%index(dbcsr_slot_thr_c) .GT. 0) THEN m%thr_c => m%index(m%index(dbcsr_slot_thr_c): & m%index(dbcsr_slot_thr_c + 1)) ELSE NULLIFY (m%thr_c) END IF END IF IF (m%index(dbcsr_slot_coo_l) .GT. 0 .AND. all .OR. & s .EQ. dbcsr_slot_coo_l) THEN IF (m%index(dbcsr_slot_coo_l) .GT. 0) THEN m%coo_l => m%index(m%index(dbcsr_slot_coo_l): & m%index(dbcsr_slot_coo_l + 1)) ELSE NULLIFY (m%coo_l) END IF END IF IF (all) THEN m%index(dbcsr_slot_nblks) = m%nblks m%index(dbcsr_slot_nze) = m%nze END IF END SUBROUTINE dbcsr_repoint_index SUBROUTINE dbcsr_make_index_exist(m) TYPE(dbcsr_type), INTENT(INOUT) :: m !! Create index for this matrix CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_index_exist' INTEGER :: error_handle ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) IF (.NOT. ASSOCIATED(m%index)) & DBCSR_ABORT("Index array does not yet exist.") IF (.NOT. ASSOCIATED(m%row_p)) THEN CALL dbcsr_addto_index_array(m, dbcsr_slot_row_p, & reservation=m%nblkrows_total + 1) m%row_p(:) = 0 END IF IF (.NOT. ASSOCIATED(m%col_i)) THEN CALL dbcsr_addto_index_array(m, dbcsr_slot_col_i, & reservation=0) END IF IF (.NOT. ASSOCIATED(m%blk_p)) THEN CALL dbcsr_addto_index_array(m, dbcsr_slot_blk_p, & reservation=0) END IF CALL dbcsr_repoint_index(m) CALL timestop(error_handle) END SUBROUTINE dbcsr_make_index_exist SUBROUTINE dbcsr_sort_indices(n, row_i, col_i, blk_p, blk_d) !! Sorts the rows & columns of a work matrix !! !! Description !! Sorts the row and column indices so that the rows monotonically !! increase and the columns monotonically increase within each row. !! Passing the blk_p array rearranges the block pointers accordingly. !! This must be done if they are pointing to valid data, otherwise !! they become invalid. INTEGER, INTENT(IN) :: n !! number of blocks (elements) to sort INTEGER, DIMENSION(1:), INTENT(INOUT) :: row_i, col_i !! row indices !! column indices INTEGER, DIMENSION(1:), INTENT(INOUT), OPTIONAL :: blk_p, blk_d !! block pointers !! data storage CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_sort_indices', & routineP = moduleN//':'//routineN INTEGER(KIND=int_8), PARAMETER :: lmask8 = 4294967295_int_8 INTEGER :: error_handle, i INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:) :: sort_keys INTEGER, ALLOCATABLE, DIMENSION(:) :: buf, buf_d ! --------------------------------------------------------------------------- IF (n .LE. 0) RETURN IF (SIZE(row_i) .EQ. 0) RETURN CALL timeset(routineN, error_handle) IF (SIZE(row_i) < n) DBCSR_ABORT('row_i too small') IF (SIZE(col_i) < n) DBCSR_ABORT('col_i too small') IF (PRESENT(blk_p)) THEN IF (SIZE(blk_p) < n) DBCSR_ABORT('blk_p too small') ALLOCATE (buf(n)) buf(1:n) = blk_p(1:n) END IF IF (PRESENT(blk_d)) THEN ALLOCATE (buf_d(n)) buf_d(1:n) = blk_d(1:n) END IF ! Create an ordering for both rows and columns. If the blk_p must ! be rearranged, then the col_i array will be used as a ! permutation vector. ALLOCATE (sort_keys(n)) sort_keys(:) = IOR(ISHFT(INT(row_i(1:n), int_8), 32), INT(col_i(1:n), int_8)) IF (PRESENT(blk_p)) col_i(1:n) = (/(i, i=1, n)/) ! Now do a nice quicksort. CALL sort(sort_keys, n, col_i) ! Since blk_d is usually not present we can have two loops that ! are essentially the same. IF (PRESENT(blk_p)) THEN DO i = 1, n blk_p(i) = buf(col_i(i)) END DO DEALLOCATE (buf) END IF IF (PRESENT(blk_d)) THEN DO i = 1, n blk_d(i) = buf_d(col_i(i)) END DO DEALLOCATE (buf_d) END IF DO i = 1, n col_i(i) = INT(IAND(sort_keys(i), lmask8), int_4) row_i(i) = INT(ISHFT(sort_keys(i), -32), int_4) END DO DEALLOCATE (sort_keys) IF (debug_mod .AND. PRESENT(blk_p)) & WRITE (*, *) routineP//' sort, blk_p =', blk_p CALL timestop(error_handle) END SUBROUTINE dbcsr_sort_indices SUBROUTINE dbcsr_index_prune_deleted(matrix) !! Removes the deleted blocks from the index. !! !! Description TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! Prune the index of this matrix. CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_index_prune_deleted' INTEGER :: error_handle, nblks_max, new_blk, nrows, & old_blk, row INTEGER, ALLOCATABLE, DIMENSION(:) :: new_blk_p, new_col_i, new_row_count INTEGER, DIMENSION(:), POINTER :: old_blk_p, old_col_i, old_row_p ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) ! old_row_p => matrix%row_p old_col_i => matrix%col_i old_blk_p => matrix%blk_p ! nrows = matrix%nblkrows_total nblks_max = old_row_p(nrows + 1) ALLOCATE (new_row_count(nrows)) ALLOCATE (new_col_i(nblks_max)) ALLOCATE (new_blk_p(nblks_max)) ! ! Build up the new index from all non-deleted blocks in the ! existing index. new_blk = 0 DO row = 1, nrows new_row_count(row) = 0 DO old_blk = old_row_p(row) + 1, old_row_p(row + 1) IF (old_blk_p(old_blk) .GT. 0) THEN new_blk = new_blk + 1 new_row_count(row) = new_row_count(row) + 1 new_col_i(new_blk) = old_col_i(old_blk) new_blk_p(new_blk) = old_blk_p(old_blk) END IF END DO END DO ! CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_row_p) CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_col_i) CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_blk_p) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_row_p, & reservation=nrows + 1, extra=2*new_blk) old_row_p => matrix%row_p CALL dbcsr_build_row_index(counts=new_row_count, rows=old_row_p, & nrows=nrows) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_col_i, DATA=new_col_i(1:new_blk)) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, DATA=new_blk_p(1:new_blk)) matrix%nblks = new_blk matrix%index(dbcsr_slot_nblks) = new_blk ! DEALLOCATE (new_col_i, new_blk_p, new_row_count) ! CALL timestop(error_handle) END SUBROUTINE dbcsr_index_prune_deleted SUBROUTINE transpose_index_local(new_col_p, new_row_i, old_row_p, & old_col_i, new_blk_p, old_blk_p) !! Re-indexes row_p and blk_i according to columns. !! !! The re-indexing is equivalent to a local-only transpose. INTEGER, DIMENSION(:), INTENT(OUT) :: new_col_p, new_row_i !! new column pointer !! new row index INTEGER, DIMENSION(:), INTENT(IN) :: old_row_p, old_col_i !! old row pointer !! old column index INTEGER, DIMENSION(:), INTENT(OUT), OPTIONAL :: new_blk_p !! new block pointer INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: old_blk_p !! old block pointer CHARACTER(len=*), PARAMETER :: routineN = 'transpose_index_local' INTEGER :: error_handle, nblks, ncols_new, nrows_old INTEGER, ALLOCATABLE, DIMENSION(:) :: new_col_i LOGICAL :: blks ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) blks = PRESENT(new_blk_p) .AND. PRESENT(old_blk_p) nblks = SIZE(old_col_i) nrows_old = SIZE(old_row_p) - 1 ncols_new = SIZE(new_col_p) - 1 IF (blks) new_blk_p(:) = old_blk_p(:) ALLOCATE (new_col_i(nblks)) CALL dbcsr_expand_row_index(old_row_p, new_row_i, nrows_old, nblks) new_col_i(:) = old_col_i(:) CALL dbcsr_sort_indices(nblks, new_col_i, new_row_i, new_blk_p) CALL dbcsr_make_dbcsr_index(new_col_p, new_col_i, ncols_new, nblks) DEALLOCATE (new_col_i) CALL timestop(error_handle) END SUBROUTINE transpose_index_local SUBROUTINE dbcsr_make_index_canonical(matrix, cp2k) !! Makes a canonical index to the distribution. !! !! Canonical means that it respects the distribution. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! matrix for which to make canonical index LOGICAL, INTENT(IN), OPTIONAL :: cp2k !! make CP2K triangular index from canonical; default is false INTEGER :: nb, nc, nr INTEGER, ALLOCATABLE, DIMENSION(:) :: new_blk_p, new_col_i, new_row_p LOGICAL :: rev ! --------------------------------------------------------------------------- rev = .FALSE. IF (PRESENT(cp2k)) rev = cp2k nr = SIZE(matrix%row_p) ALLOCATE (new_row_p(nr)) nc = SIZE(matrix%col_i) ALLOCATE (new_col_i(nc)) nb = SIZE(matrix%blk_p) ALLOCATE (new_blk_p(nb)) IF (rev) THEN CALL make_index_triangular(new_row_p, new_col_i, new_blk_p, & matrix%row_p, matrix%col_i, matrix%blk_p, matrix) ELSE CALL make_index_canonical(new_row_p, new_col_i, new_blk_p, & matrix%row_p, matrix%col_i, matrix%blk_p, matrix) END IF matrix%row_p(:) = new_row_p matrix%col_i(:) = new_col_i matrix%blk_p(:) = new_blk_p END SUBROUTINE dbcsr_make_index_canonical SUBROUTINE make_dense_index(row_p, col_i, blk_p, & nblkrows_total, nblkcols_total, myblkrows, myblkcols, & row_blk_offsets, col_blk_offsets, meta, make_tr) !! Makes the index for a dense matrix !! @note !! Used for making matrices dense/undense !! @endnote !INTEGER, DIMENSION(:), INTENT(OUT) :: row_p, col_i, blk_p INTEGER, INTENT(IN) :: nblkrows_total !! Total blocked rows INTEGER, DIMENSION(:), INTENT(OUT) :: blk_p, col_i !! Storage for new index !! Storage for new index INTEGER, DIMENSION(1:nblkrows_total + 1), & INTENT(OUT) :: row_p !! Storage for new index INTEGER, INTENT(IN) :: nblkcols_total !! Total blocked columns INTEGER, DIMENSION(:), INTENT(IN) :: myblkrows, myblkcols, row_blk_offsets, & col_blk_offsets !! List of blocked rows in my process row !! List of blocked columns in my process column INTEGER, DIMENSION(dbcsr_meta_size), INTENT(INOUT) :: meta !! Metadata updates for new index LOGICAL, INTENT(IN), OPTIONAL :: make_tr !! Dense blocks are transposed CHARACTER(len=*), PARAMETER :: routineN = 'make_dense_index' INTEGER :: blk, c, col_l, mynblkcols, mynblkrows, & nblks, nze, prev_row, row, row_l, & sign_carrier, sz ! --------------------------------------------------------------------------- sign_carrier = 1 IF (PRESENT(make_tr)) THEN IF (make_tr) sign_carrier = -1 END IF mynblkrows = SIZE(myblkrows) mynblkcols = SIZE(myblkcols) meta(dbcsr_slot_nblkrows_local) = mynblkrows meta(dbcsr_slot_nblkcols_local) = mynblkcols nblks = mynblkrows*mynblkcols nze = 1 IF (nblks .EQ. 0) THEN row_p(1:) = 0 ELSE row_p(1) = 0 !row_p(nrows+1) = nblks prev_row = 1 blk = 0 DO row_l = 1, mynblkrows row = myblkrows(row_l) row_p(prev_row + 1:row) = blk DO col_l = 1, mynblkcols c = myblkcols(col_l) col_i(blk + col_l) = c sz = (row_blk_offsets(row + 1) - row_blk_offsets(row))* & (col_blk_offsets(c + 1) - col_blk_offsets(c)) IF (sz .GT. 0) THEN blk_p(blk + col_l) = SIGN(nze, sign_carrier) nze = nze + sz ELSE blk_p(blk + col_l) = 0 END IF END DO prev_row = row blk = blk + mynblkcols END DO IF (blk /= nblks) DBCSR_ABORT("Block mismatch") row_p(prev_row + 1:nblkrows_total + 1) = nblks END IF IF (debug_mod) THEN WRITE (*, *) routineN//" new index" WRITE (*, *) "row_p=", row_p WRITE (*, *) "col_i=", col_i WRITE (*, *) "blk_p=", blk_p END IF meta(dbcsr_slot_nblkrows_total) = nblkrows_total meta(dbcsr_slot_nblkcols_total) = nblkcols_total END SUBROUTINE make_dense_index SUBROUTINE make_undense_index( & row_p, col_i, blk_p, & distribution, local_row_offsets, local_col_offsets, & meta) !! Makes a blocked index from a dense matrix !! @note !! Used for making matrices dense/undense !! @endnote INTEGER, DIMENSION(:), INTENT(OUT) :: row_p, col_i, blk_p !! Storage for new index !! Storage for new index !! Storage for new index TYPE(dbcsr_distribution_obj) :: distribution !! Blocked distribution INTEGER, DIMENSION(:), INTENT(IN) :: local_row_offsets, local_col_offsets INTEGER, DIMENSION(dbcsr_meta_size), INTENT(INOUT) :: meta !! Metadata updates for new index INTEGER :: col, lr, lrow, nblkcols_local, & nblkrows_local, nblkrows_total, & nfullcols_local, prev_row, row INTEGER, DIMENSION(:), POINTER :: local_cols, local_rows ! --------------------------------------------------------------------------- local_cols => dbcsr_distribution_local_cols(distribution) local_rows => dbcsr_distribution_local_rows(distribution) meta(dbcsr_slot_nblkrows_total) = dbcsr_distribution_nrows(distribution) meta(dbcsr_slot_nblkcols_total) = dbcsr_distribution_ncols(distribution) meta(dbcsr_slot_nblkrows_local) = dbcsr_distribution_nlocal_rows(distribution) meta(dbcsr_slot_nblkcols_local) = dbcsr_distribution_nlocal_cols(distribution) nblkrows_total = meta(dbcsr_slot_nblkrows_total) nblkcols_local = meta(dbcsr_slot_nblkcols_local) nblkrows_local = meta(dbcsr_slot_nblkrows_local) nfullcols_local = meta(dbcsr_slot_nfullcols_local) ! Fill the row_p array. lr = 0 row_p(1) = 0 prev_row = 1 DO lrow = 1, nblkrows_local row = local_rows(lrow) row_p(prev_row + 1:row) = lr lr = lr + nblkcols_local row_p(row + 1) = lr prev_row = row END DO row_p(prev_row + 1:nblkrows_total + 1) = lr ! DO row = 1, nblkrows_local DO col = 1, nblkcols_local col_i(nblkcols_local*(row - 1) + col) = local_cols(col) blk_p(nblkcols_local*(row - 1) + col) = 1 + & (local_row_offsets(row) - 1)*nfullcols_local & + (local_col_offsets(col) - 1)* & (local_row_offsets(row + 1) - local_row_offsets(row)) END DO END DO END SUBROUTINE make_undense_index SUBROUTINE merge_index_arrays(new_row_i, new_col_i, new_blk_p, new_size, & old_row_i, old_col_i, old_blk_p, old_size, & add_ip, add_size, new_blk_d, old_blk_d, & added_size_offset, added_sizes, added_size, added_nblks) !! Merges two indices !! !! Added sizes !! added_size_offset and added_sizes can be optionally !! specified. This is meant for cases where the added blocks may !! be duplicates of existing blocks. In this way it is possible !! to recalculate new block pointers to avoid wasted space. !! @note !! Used in local multiply !! Assumes they are both pre-sorted !! @endnote INTEGER, INTENT(IN) :: new_size !! size of merged index INTEGER, DIMENSION(new_size), INTENT(OUT) :: new_blk_p, new_col_i, new_row_i !! merged result !! merged result !! merged result INTEGER, INTENT(IN) :: old_size !! size of current index INTEGER, DIMENSION(old_size), INTENT(IN) :: old_blk_p, old_col_i, old_row_i !! current index !! current index !! current index INTEGER, INTENT(IN) :: add_size !! size of index to add into the current index INTEGER, DIMENSION(3, add_size), INTENT(IN) :: add_ip !! index to add into the current index INTEGER, DIMENSION(new_size), INTENT(OUT), & OPTIONAL :: new_blk_d INTEGER, DIMENSION(old_size), INTENT(IN), OPTIONAL :: old_blk_d INTEGER, INTENT(IN), OPTIONAL :: added_size_offset !! specify base of added sizes INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: added_sizes !! specify sizes of added blocks INTEGER, INTENT(OUT), OPTIONAL :: added_size, added_nblks !! counts number of sizes of added blocks !! actual number of new elements INTEGER :: add_blk, bp, i, merge_from_whom, & new_blk, old_blk LOGICAL :: multidata ! --------------------------------------------------------------------------- bp = 0 multidata = PRESENT(old_blk_d) .AND. PRESENT(new_blk_d) IF (old_size + add_size .NE. new_size) & DBCSR_WARN("Mismatch of new and old size") IF (PRESENT(added_size_offset) .NEQV. PRESENT(added_sizes)) & DBCSR_ABORT("Must specify a set of arguments") IF (PRESENT(added_sizes) .NEQV. PRESENT(added_size)) & DBCSR_ABORT("Must specify a set of arguments") IF (debug_mod) THEN WRITE (*, *) " Old array", old_size DO i = 1, old_size WRITE (*, '(I7,2X,I7,2X,I7)') old_row_i(i), old_col_i(i), old_blk_p(i) END DO WRITE (*, *) " Add array", add_size DO i = 1, add_size WRITE (*, '(I7,2X,I7,2X,I7)') add_ip(1:3, i) END DO END IF IF (PRESENT(added_nblks)) added_nblks = 0 IF (PRESENT(added_size)) THEN added_size = 0 bp = added_size_offset END IF IF (add_size .GT. 0) THEN old_blk = 1 add_blk = 1 new_blk = 1 IF (old_size .EQ. 0) THEN new_row_i(1:add_size) = add_ip(1, 1:add_size) new_col_i(1:add_size) = add_ip(2, 1:add_size) new_blk_p(1:add_size) = add_ip(3, 1:add_size) !IF (multidata) new_blk_d(1:add_size) = add_ip(4, 1:add_size) IF (PRESENT(added_nblks)) added_nblks = add_size IF (PRESENT(added_size)) added_size = SUM(added_sizes) ELSE DO WHILE (new_blk .LE. new_size) merge_from_whom = 0 IF (old_blk .LE. old_size .AND. add_blk .LE. add_size) THEN IF (add_ip(1, add_blk) .EQ. old_row_i(old_blk) & .AND. add_ip(2, add_blk) .EQ. old_col_i(old_blk)) THEN IF (debug_mod) THEN WRITE (*, *) "Duplicate block! addblk", & add_blk, "oldblk", old_blk END IF END IF ! Rows come first IF (add_ip(1, add_blk) .LT. old_row_i(old_blk)) THEN merge_from_whom = 2 ELSEIF (add_ip(1, add_blk) .GT. old_row_i(old_blk)) THEN merge_from_whom = 1 ELSE ! Same rows, so now come the columns IF (add_ip(2, add_blk) .LT. old_col_i(old_blk)) THEN ! Merges from the add array merge_from_whom = 2 ELSEIF (add_ip(2, add_blk) .GT. old_col_i(old_blk)) THEN ! Merges from the old array merge_from_whom = 1 ELSE ! Merge from old array and skip one in the new array IF (debug_mod) THEN WRITE (*, *) "Duplicate, keeping old", & add_ip(1, add_blk), add_ip(2, add_blk) END IF merge_from_whom = 1 add_blk = add_blk + 1 END IF END IF ELSE IF (add_blk .LE. add_size) THEN ! Merges from the add array merge_from_whom = 2 ELSEIF (old_blk .LE. old_size) THEN ! Merges from the old array merge_from_whom = 1 ELSE ! Hmmm, nothing to merge... merge_from_whom = 0 !WRITE(*,*)"Ran out of data to merge" END IF END IF SELECT CASE (merge_from_whom) CASE (2) ! Merges from the add array new_row_i(new_blk) = add_ip(1, add_blk) new_col_i(new_blk) = add_ip(2, add_blk) new_blk_p(new_blk) = add_ip(3, add_blk) !IF (multidata) new_blk_d(new_blk) = add_ip(4, add_blk) IF (PRESENT(added_nblks)) added_nblks = added_nblks + 1 IF (PRESENT(added_sizes)) THEN new_blk_p(new_blk) = bp bp = bp + added_sizes(add_blk) added_size = added_size + added_sizes(add_blk) END IF add_blk = add_blk + 1 CASE (1) ! Merges from the old array new_row_i(new_blk) = old_row_i(old_blk) new_col_i(new_blk) = old_col_i(old_blk) new_blk_p(new_blk) = old_blk_p(old_blk) IF (multidata) new_blk_p(new_blk) = old_blk_d(old_blk) old_blk = old_blk + 1 CASE DEFAULT !WRITE(*,*)"Nothing to merge" END SELECT new_blk = new_blk + 1 END DO END IF ELSE new_row_i(1:old_size) = old_row_i(1:old_size) new_col_i(1:old_size) = old_col_i(1:old_size) new_blk_p(1:old_size) = old_blk_p(1:old_size) IF (multidata) new_blk_d(1:old_size) = old_blk_d(1:old_size) END IF IF (debug_mod) THEN WRITE (*, *) " New array" DO i = 1, new_size WRITE (*, '(4(2X,I7))') new_row_i(i), new_col_i(i), new_blk_p(i) END DO END IF END SUBROUTINE merge_index_arrays SUBROUTINE dbcsr_make_index_local_row(matrix) !! Converts BCSR global row index to local row index. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! matrix for which to make canonical index CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_index_local_row' INTEGER :: error_handle, lrow, nlocal_rows, & ntotal_rows, prow INTEGER, ALLOCATABLE, DIMENSION(:) :: local_row_p INTEGER, DIMENSION(:), POINTER :: local_rows ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) IF (.NOT. ASSOCIATED(matrix%row_p)) & DBCSR_ABORT("The row index must be initialized.") IF (matrix%bcsc) & DBCSR_ABORT("Not support for BCSC yet.") ! prow = matrix%index(dbcsr_slot_home_vprow) IF (prow .LT. 0) THEN prow = matrix%index(dbcsr_slot_home_prow) END IF nlocal_rows = matrix%nblkrows_local ALLOCATE (local_row_p(nlocal_rows + 1)) ! The existing row_p is converted from an indexing array into a ! counting array. Because it is later discarded, the counting is ! done in-place. ntotal_rows = matrix%nblkrows_total CALL dbcsr_count_row_index(matrix%row_p, ntotal_rows) ! We first have to find the local rows for the given prow. local_rows => array_data(matrix%local_rows) IF (SIZE(local_rows) /= nlocal_rows) & DBCSR_ABORT("Mismatch in the number of local rows.") ! The counts are mapped to local rows, DO lrow = 1, nlocal_rows local_row_p(lrow) = matrix%row_p(local_rows(lrow)) END DO IF (SUM(matrix%row_p(1:ntotal_rows)) /= SUM(local_row_p(1:nlocal_rows))) & DBCSR_ABORT("Inconsistent row counts. Perhaps non-local rows contain data?.") ! then converted into an index. CALL dbcsr_build_row_index(local_row_p, nlocal_rows) ! The local row index replaces the global one. CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_row_p) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_row_p, DATA=local_row_p) ! Finally the matrix is designated as having a local-based index. matrix%local_indexing = .TRUE. IF (careful_mod) THEN IF (array_size(matrix%local_rows) /= nlocal_rows) & DBCSR_ABORT("Inconsistent local row counts.") IF (array_size(matrix%global_rows) /= ntotal_rows) & DBCSR_ABORT("Inconsistent global row counts.") IF (array_size(matrix%global_rows) .EQ. 0) THEN IF (nlocal_rows /= 0) & DBCSR_ABORT("Invalid number of local or global rows.") END IF END IF DEALLOCATE (local_row_p) ! CALL timestop(error_handle) END SUBROUTINE dbcsr_make_index_local_row SUBROUTINE dbcsr_make_index_list(matrix, thread_redist) !! Converts BCSR index into list indices (similar to work matrices) TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! matrix for which to make canonical index LOGICAL, INTENT(IN) :: thread_redist !! make a thread subdistribution CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_index_list' LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: blk, error_handle, ithread, my_cnt, & nblks, nrows, nthreads INTEGER, ALLOCATABLE, DIMENSION(:, :) :: blki INTEGER, DIMENSION(0) :: zero_len_array INTEGER, DIMENSION(:), POINTER :: global_cols, local_rows, td, thr_c ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) IF (.NOT. ASSOCIATED(matrix%row_p)) & DBCSR_ABORT("The row index must be initialized.") IF (matrix%list_indexing) & DBCSR_ABORT("List index already exists?") IF (matrix%bcsc) & DBCSR_ABORT("Not support for BCSC yet.") IF (matrix%nblks /= SIZE(matrix%col_i)) & DBCSR_ABORT("Block count mismatch.") IF (matrix%nblks /= SIZE(matrix%blk_p)) & DBCSR_ABORT("Block count mismatch") ! IF (matrix%local_indexing) THEN IF (SIZE(matrix%row_p) - 1 /= matrix%nblkrows_local) & DBCSR_ABORT("Local row index incorrectly sized.") ELSE IF (SIZE(matrix%row_p) - 1 /= matrix%nblkrows_total) & DBCSR_ABORT("Global row index incorrectly sized") END IF ! matrix%list_indexing = .TRUE. ! IF (matrix%local_indexing) THEN nrows = matrix%nblkrows_local ELSE nrows = matrix%nblkrows_total END IF ! nblks = matrix%nblks ALLOCATE (blki(3, nblks)) CALL dbcsr_expand_row_index_2d(matrix%row_p, blki, nrows, 1) IF (matrix%local_indexing) THEN global_cols => array_data(matrix%global_cols) ! If local indexing is enabled, then the rows but not the ! columns are already localized IF (dbg) THEN WRITE (*, *) routineN//" Making local columns" WRITE (*, '(10(1X,i7))') global_cols WRITE (*, *) 'local' WRITE (*, '(10(1X,i7))') array_data(matrix%local_cols) END IF DO blk = 1, nblks blki(2, blk) = global_cols(matrix%col_i(blk)) blki(3, blk) = matrix%blk_p(blk) END DO ELSE IF (dbg) WRITE (*, *) routineN//" Not making local columns" DO blk = 1, nblks blki(2, blk) = matrix%col_i(blk) blki(3, blk) = matrix%blk_p(blk) END DO END IF CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_row_p) CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_col_i) CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_blk_p) nthreads = 0 !$ nthreads = OMP_GET_MAX_THREADS() ! ! Reshuffle according to threads IF (nthreads .GT. 0 .AND. thread_redist) THEN td => array_data(dbcsr_distribution_thread_dist(dbcsr_distribution(matrix))) IF (matrix%local_indexing) THEN local_rows => array_data(matrix%local_rows) END IF !$OMP PARALLEL DEFAULT (NONE) & !$OMP PRIVATE (my_cnt, ithread, blk) & !$OMP SHARED (td, blki, nthreads, thr_c, nblks, matrix,local_rows) ! ithread = 0 !$ ithread = OMP_GET_THREAD_NUM() !$OMP MASTER !$ nthreads = OMP_GET_NUM_THREADS() CALL dbcsr_addto_index_array(matrix, dbcsr_slot_thr_c, & reservation=nthreads + 1, extra=3*nblks) thr_c => matrix%thr_c CALL dbcsr_addto_index_array(matrix, dbcsr_slot_coo_l, & reservation=3*nblks) !$OMP END MASTER !$OMP BARRIER my_cnt = 0 IF (matrix%local_indexing) THEN my_cnt = COUNT(td(local_rows(blki(1, :))) .EQ. ithread) ELSE my_cnt = COUNT(td(blki(1, :)) .EQ. ithread) END IF !DO blk = 1, nblks ! IF (td(blki(1, blk)) .EQ. ithread) my_cnt = my_cnt+1 !ENDDO thr_c(ithread + 1) = my_cnt !$OMP BARRIER !$OMP MASTER CALL dbcsr_build_row_index_inplace(thr_c, nthreads) !$OMP END MASTER !$OMP BARRIER my_cnt = (thr_c(ithread + 1) + 1)*3 - 2 IF (matrix%local_indexing) THEN DO blk = 1, nblks IF (td(local_rows(blki(1, blk))) .EQ. ithread) THEN matrix%coo_l(my_cnt:my_cnt + 2) = blki(1:3, blk) my_cnt = my_cnt + 3 END IF END DO ELSE DO blk = 1, nblks IF (td(blki(1, blk)) .EQ. ithread) THEN matrix%coo_l(my_cnt:my_cnt + 2) = blki(1:3, blk) my_cnt = my_cnt + 3 END IF END DO END IF !$OMP END PARALLEL ELSE ! Small price to pay for avoiding infinite recursions. DO blk = 2, nblks IF (blki(1, blk) .EQ. blki(1, blk - 1) .AND. blki(2, blk) .EQ. blki(2, blk - 1)) THEN ! Weird assertion to give some idea of the two blocks. IF (-blki(1, blk) /= blki(2, blk)) & CALL dbcsr_abort(__LOCATION__, & "Should not have duplicate matrix blocks. (-row, col) is duplicated.") END IF END DO ! IF (nblks > 0) THEN CALL dbcsr_addto_index_array(matrix, dbcsr_slot_coo_l, & DATA=RESHAPE(blki, (/3*nblks/))) ELSE CALL dbcsr_addto_index_array(matrix, dbcsr_slot_coo_l, & DATA=zero_len_array) END IF END IF DEALLOCATE (blki) ! CALL timestop(error_handle) END SUBROUTINE dbcsr_make_index_list SUBROUTINE dbcsr_index_compact(matrix) !! Compacts an index. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! matrix for which to make canonical index CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_index_compact' INTEGER :: error_handle, new_size, size_blk_p, & size_col_i, size_coo_l, size_row_p, & size_thr_c INTEGER, ALLOCATABLE, DIMENSION(:) :: blk_p, col_i, coo_l, meta, row_p, thr_c LOGICAL :: compact, has_blk_p, has_col_i, & has_coo_l, has_row_p, has_thr_c ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) ! Ensures the index pointers are set. CALL dbcsr_repoint_index(matrix) ! Check that compaction is even needed. has_row_p = ASSOCIATED(matrix%row_p) IF (has_row_p) THEN size_row_p = SIZE(matrix%row_p) ELSE size_row_p = 0 END IF has_col_i = ASSOCIATED(matrix%col_i) IF (has_col_i) THEN size_col_i = SIZE(matrix%col_i) ELSE size_col_i = 0 END IF has_blk_p = ASSOCIATED(matrix%blk_p) IF (has_blk_p) THEN size_blk_p = SIZE(matrix%blk_p) ELSE size_blk_p = 0 END IF has_thr_c = ASSOCIATED(matrix%thr_c) IF (has_thr_c) THEN size_thr_c = SIZE(matrix%thr_c) ELSE size_thr_c = 0 END IF has_coo_l = ASSOCIATED(matrix%coo_l) IF (has_coo_l) THEN size_coo_l = SIZE(matrix%coo_l) ELSE size_coo_l = 0 END IF ! new_size = dbcsr_num_slots + & size_row_p + size_col_i + size_blk_p + size_thr_c + size_coo_l compact = new_size .LT. SIZE(matrix%index) IF (compact) THEN ! Store old index arrays. IF (has_row_p) THEN ALLOCATE (row_p(size_row_p)) row_p(:) = matrix%row_p(:) END IF IF (has_col_i) THEN ALLOCATE (col_i(size_col_i)) col_i(:) = matrix%col_i(:) END IF IF (has_blk_p) THEN ALLOCATE (blk_p(size_blk_p)) blk_p(:) = matrix%blk_p(:) END IF IF (has_thr_c) THEN ALLOCATE (thr_c(size_thr_c)) thr_c(:) = matrix%thr_c(:) END IF IF (has_coo_l) THEN ALLOCATE (coo_l(size_coo_l)) coo_l(:) = matrix%coo_l(:) END IF ALLOCATE (meta(dbcsr_num_slots)) meta(:) = matrix%index(1:dbcsr_num_slots) ! Clear the index. CALL memory_deallocate(matrix%index, & dbcsr_get_index_memory_type(matrix)) NULLIFY (matrix%index) CALL memory_allocate(matrix%index, new_size, & dbcsr_get_index_memory_type(matrix)) ! ! Now copy the old index arrays into the index. We must not ! copy the positions of the old pointers. matrix%index(1:dbcsr_meta_size) = meta(1:dbcsr_meta_size) matrix%index(dbcsr_meta_size + 1:) = 0 matrix%index(dbcsr_slot_size) = dbcsr_num_slots IF (has_thr_c) THEN CALL dbcsr_addto_index_array(matrix, dbcsr_slot_thr_c, thr_c) DEALLOCATE (thr_c) END IF IF (has_row_p) THEN CALL dbcsr_addto_index_array(matrix, dbcsr_slot_row_p, row_p) DEALLOCATE (row_p) END IF IF (has_col_i) THEN CALL dbcsr_addto_index_array(matrix, dbcsr_slot_col_i, col_i) DEALLOCATE (col_i) END IF IF (has_blk_p) THEN CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, blk_p) DEALLOCATE (blk_p) END IF IF (has_coo_l) THEN CALL dbcsr_addto_index_array(matrix, dbcsr_slot_coo_l, coo_l) DEALLOCATE (coo_l) END IF DEALLOCATE (meta) IF (careful_mod) THEN ! This is pretty strong but it should be true. IF (matrix%index(dbcsr_slot_size) /= new_size) & DBCSR_ABORT("Unexpected index size.") IF (SIZE(matrix%index) /= new_size) & DBCSR_ABORT("Unexpected index size.") END IF CALL dbcsr_repoint_index(matrix) END IF CALL timestop(error_handle) END SUBROUTINE dbcsr_index_compact SUBROUTINE dbcsr_index_checksum(matrix, checksum) !! Calculates the checksum of an index. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! matrix for which to make canonical index INTEGER, INTENT(OUT) :: checksum CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_index_checksum' INTEGER :: error_handle ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) ! checksum = joaat_hash((/joaat_hash(matrix%row_p), & joaat_hash(matrix%col_i), & joaat_hash(matrix%blk_p)/)) ! CALL timestop(error_handle) END SUBROUTINE dbcsr_index_checksum FUNCTION dbcsr_has_local_row_index(matrix) RESULT(local_indexing) TYPE(dbcsr_type), INTENT(INOUT) :: matrix LOGICAL :: local_indexing local_indexing = matrix%local_indexing END FUNCTION dbcsr_has_local_row_index END MODULE dbcsr_index_operations ================================================ FILE: src/block/dbcsr_iterator_operations.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_iterator_operations !! DBCSR iterator operations USE dbcsr_array_types, ONLY: array_data, & array_exists USE dbcsr_data_methods, ONLY: dbcsr_data_hold, & dbcsr_data_release, & dbcsr_data_set_pointer, & dbcsr_get_data USE dbcsr_dist_methods, ONLY: dbcsr_distribution_has_threads, & dbcsr_distribution_num_threads, & dbcsr_distribution_thread_dist USE dbcsr_methods, ONLY: dbcsr_distribution USE dbcsr_ptr_util, ONLY: pointer_rank_remap2 USE dbcsr_string_utilities, ONLY: stringify USE dbcsr_toollib, ONLY: swap USE dbcsr_types, ONLY: dbcsr_data_obj, & dbcsr_distribution_obj, & dbcsr_iterator, & dbcsr_scalar_type, & dbcsr_type USE dbcsr_kinds, ONLY: real_4, & real_8 #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads, omp_in_parallel IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_iterator_operations' INTEGER, PRIVATE, POINTER, SAVE :: common_int_pointer PUBLIC :: dbcsr_iterator_start, dbcsr_iterator_stop PUBLIC :: dbcsr_iterator_blocks_left, dbcsr_iterator_next_block INTERFACE dbcsr_iterator_next_block MODULE PROCEDURE iterator_next_block_index, & iterator_next_area_block MODULE PROCEDURE iterator_next_2d_block_d, & iterator_next_2d_block_s, & iterator_next_2d_block_c, & iterator_next_2d_block_z, & iterator_next_1d_block_d, & iterator_next_1d_block_s, & iterator_next_1d_block_c, & iterator_next_1d_block_z END INTERFACE LOGICAL, PARAMETER :: careful_mod = .FALSE. INTEGER, PARAMETER, PRIVATE :: rpslot_owner = 1 INTEGER, PARAMETER, PRIVATE :: rpslot_addblks = 2 INTEGER, PARAMETER, PRIVATE :: rpslot_addoffset = 3 INTEGER, PARAMETER, PRIVATE :: rpslot_oldblks = 4 INTEGER, PARAMETER, PRIVATE :: rpslot_oldoffset = 5 INTEGER, PARAMETER, PRIVATE :: rpslot_totaloffset = 6 INTEGER, PARAMETER, PRIVATE :: rpnslots = 6 LOGICAL, PARAMETER, PRIVATE :: detailed_timing = .FALSE. TYPE block_parameters LOGICAL :: tr = .FALSE. INTEGER :: logical_rows = -1, logical_cols = -1 INTEGER :: offset = -1, nze = -1 END TYPE block_parameters TYPE dgemm_join INTEGER :: p_a = -1, p_b = -1, p_c = -1 INTEGER :: last_k = -1, last_n = -1 TYPE(dbcsr_scalar_type) :: alpha = dbcsr_scalar_type(), beta = dbcsr_scalar_type() END TYPE dgemm_join CONTAINS ! ************************************************************************************************** ! Iterator functions ! ************************************************************************************************** SUBROUTINE dbcsr_iterator_start(iterator, matrix, shared, dynamic, & dynamic_byrows, contiguous_pointers, read_only) !! Sets up an iterator !! !! Contiguous pointers !! Contiguous pointers may incur reallocation penalties but enable quick !! passing of arrays to routines with unspecified interfaces (i.e., direct !! calls to BLACS or MPI). !! !! Threading !! The TYPE(dbcsr_iterator) variable should be thread-private. !! !! The iterator has several modes of operation when used with !! OpenMP. Two options can be set to influence the behavior. !! !! Threading: shared vs. non-shared !! The "shared" flag specifies that several threads will be !! iterating through the same matrix. !! - Sharing is the default when called from an active parallel !! region. In the shared mode no two threads will receive the !! same block; i.e., the work is split among the threads. !! - If each (or one) thread needs to iterator through all blocks !! then shared should be set to .FALSE.. (E.g., when called !! from an enclosing MASTER region or when each thread has its !! own matrix.) !! - It is safe to use an iterator in non-shared mode with only !! one thread. No thread synchronization constructs are used !! in this case) !! !! Threading in shared mode !! When in shared mode there are three possibilities to select !! how the blocks are distributed to the threads. !!
!!
Thread distribution
!!
The default is to use the thread distribution. The thread !! distribution statically maps rows to threads and should be !! used whenever retaining a consistent mapping among !! subsequent iterations is important.
!!
Dynamic scheduling
!!
If the dynamic flag is .TRUE., then blocks are given to !! threads dynamically. By default the assignment is grouped !! by rows (to minimize synchronization); however, if the !! dynamic_byrows flag is .FALSE. then every block is !! assigned dynamically.
TYPE(dbcsr_iterator), INTENT(OUT) :: iterator !! the iterator TYPE(dbcsr_type), INTENT(IN) :: matrix !! DBCSR matrix LOGICAL, INTENT(IN), OPTIONAL :: shared, dynamic, dynamic_byrows, & contiguous_pointers, read_only !! The matrix is shared between several iterators. Default is .TRUE. !! Threads are given blocks regardless of the thread distribution; default is .FALSE. !! Threads are given blocks regardless of the thread distribution, but still grouped by rows; default is .FALSE. !! Whether returned pointers need to be contiguous; default is FALSE. !! User promises not to change returned data; default is FALSE CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_iterator_start' INTEGER :: error_handle TYPE(dbcsr_distribution_obj) :: dist ! --------------------------------------------------------------------------- MARK_USED(dynamic) ! only used with OMP CALL timeset(routineN, error_handle) iterator%shared = .TRUE. !$ iterator%shared = omp_in_parallel() IF (PRESENT(shared)) iterator%shared = shared iterator%dynamic = .TRUE. !$ iterator%dynamic = .FALSE. !$ IF (PRESENT(dynamic)) iterator%dynamic = dynamic IF (PRESENT(dynamic_byrows)) THEN iterator%dynamic_byrows = dynamic_byrows IF (iterator%dynamic_byrows) iterator%dynamic = .TRUE. ELSE iterator%dynamic_byrows = iterator%dynamic !$ iterator%dynamic_byrows = iterator%dynamic END IF !$ IF (.NOT. iterator%shared) THEN !$ iterator%dynamic = .FALSE. !$ END IF dist = dbcsr_distribution(matrix) !$ IF (.NOT. dbcsr_distribution_has_threads(dist)) & !$ DBCSR_WARN("Thread distribution should be defined for OpenMP.") IF (.NOT. iterator%dynamic .AND. .NOT. dbcsr_distribution_has_threads(dist)) & DBCSR_ABORT("Thread distribution must be defined for non-dynamic iterator.") !$ IF (omp_in_parallel() .AND. omp_get_num_threads() /= dbcsr_distribution_num_threads(dist)) & !$ CALL dbcsr_abort(__LOCATION__, & !$ "Number of threads has changed from "// & !$ stringify(dbcsr_distribution_num_threads(dist))// & !$ " to "//stringify(omp_get_num_threads())//"!") !Synchronize the positions NULLIFY (iterator%common_pos) IF (iterator%dynamic) THEN ! All threads point into the master thread's data space ! (temporarily using the common_int_pointer variable). This is ! not the nicest OpenMP way of doing this but it is also not ! explicitly forbidden. ! !$OMP BARRIER !$OMP MASTER ALLOCATE (iterator%common_pos) common_int_pointer => iterator%common_pos common_int_pointer = 0 !$OMP FLUSH (common_int_pointer) !$OMP END MASTER !$OMP BARRIER IF (.NOT. ASSOCIATED(iterator%common_pos)) THEN iterator%common_pos => common_int_pointer END IF !$OMP BARRIER END IF ! IF (PRESENT(contiguous_pointers)) THEN iterator%contiguous_pointers = contiguous_pointers ELSE iterator%contiguous_pointers = .TRUE. END IF IF (PRESENT(read_only)) THEN iterator%read_only = read_only ELSE iterator%read_only = .FALSE. END IF iterator%row = 0 iterator%pos = 0 iterator%rbs => array_data(matrix%row_blk_size) iterator%cbs => array_data(matrix%col_blk_size) iterator%roff => array_data(matrix%row_blk_offset) iterator%coff => array_data(matrix%col_blk_offset) iterator%local_indexing = matrix%local_indexing !IF(iterator%local_indexing .AND. .NOT. iterator%dynamic) & ! DBCSR_ABORT("Locally-indexed matrices can only have a dynamic iterator.") IF (iterator%local_indexing .AND. .NOT. array_exists(matrix%local_rows)) & CALL dbcsr_abort(__LOCATION__, & "Local rows mapping array should exist when local indexing is used.") IF (iterator%local_indexing .AND. .NOT. array_exists(matrix%global_rows)) & CALL dbcsr_abort(__LOCATION__, & "Global rows mapping array should exist when local indexing is used.") iterator%global_rows => array_data(matrix%global_rows) iterator%local_rows => array_data(matrix%local_rows) iterator%transpose = .FALSE. !matrix%transpose iterator%nblks = matrix%nblks IF (iterator%transpose) THEN iterator%nblkrows_total = matrix%nblkcols_total ELSE iterator%nblkrows_total = matrix%nblkrows_total END IF iterator%row_p => matrix%row_p iterator%col_i => matrix%col_i iterator%blk_p => matrix%blk_p !$OMP CRITICAL (crit_data) iterator%data_area = matrix%data_area CALL dbcsr_data_hold(iterator%data_area) !$OMP END CRITICAL (crit_data) iterator%row_size = 0 IF (.NOT. iterator%dynamic) THEN iterator%tdist => array_data(dbcsr_distribution_thread_dist(dist)) ELSE NULLIFY (iterator%tdist) END IF !$ IF (iterator%dynamic) THEN !$OMP SINGLE !$ IF (iterator%dynamic_byrows) THEN !$ iterator%common_pos = omp_get_num_threads() !$ END IF !$OMP END SINGLE !$ CALL dbcsr_iterator_seek(iterator, omp_get_thread_num() + 1) !$ ELSE CALL dbcsr_iterator_seek(iterator, 1) !$ END IF CALL timestop(error_handle) END SUBROUTINE dbcsr_iterator_start SUBROUTINE dbcsr_iterator_stop(iterator) !! Stops up an iterator TYPE(dbcsr_iterator), INTENT(INOUT) :: iterator !! the iterator CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_iterator_stop' INTEGER :: error_handle ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) iterator%row = 0 iterator%pos = 0 NULLIFY (iterator%tdist) !$OMP CRITICAL (crit_data) CALL dbcsr_data_release(iterator%data_area) !$OMP END CRITICAL (crit_data) IF (iterator%dynamic) THEN !$OMP BARRIER !$OMP MASTER common_int_pointer => iterator%common_pos DEALLOCATE (common_int_pointer) !$OMP FLUSH (common_int_pointer) !$OMP END MASTER NULLIFY (iterator%common_pos) !$OMP BARRIER END IF IF (iterator%local_indexing) THEN NULLIFY (iterator%local_rows) NULLIFY (iterator%global_rows) END IF CALL timestop(error_handle) END SUBROUTINE dbcsr_iterator_stop PURE SUBROUTINE find_first_valid_block(pos, maxpos, blk_p) !! Finds the first valid block, inclusive from the current position. !! If there is no valid block, pos is set to 0 INTEGER, INTENT(INOUT) :: pos !! input: current position; output: next valid position or 0 INTEGER, INTENT(IN) :: maxpos !! maximal allowed position INTEGER, DIMENSION(:), INTENT(IN) :: blk_p !! block pointers, used to check validity ! --------------------------------------------------------------------------- !IF (pos .LT. 1) pos = 1 DO WHILE (pos .LE. maxpos) IF (blk_p(pos) .EQ. 0) THEN pos = pos + 1 ELSE EXIT END IF END DO IF (pos .GT. maxpos) pos = 0 END SUBROUTINE find_first_valid_block PURE SUBROUTINE find_proper_row(pos, row, maxrows, row_p) !! Finds the row to which the current block belongs !! If there is no valid block, pos is set to 0 INTEGER, INTENT(IN) :: pos !! current position INTEGER, INTENT(INOUT) :: row !! input: current row; output: the row corresponding to the position INTEGER, INTENT(IN) :: maxrows !! maxmimum row INTEGER, DIMENSION(:), INTENT(IN) :: row_p !! row pointers ! --------------------------------------------------------------------------- IF (pos .GT. 0) THEN IF (row .LT. 1) THEN row = 1 ELSEIF (row .GT. maxrows) THEN row = maxrows END IF DO WHILE (row_p(row + 1) .LT. pos) row = row + 1 IF (row .GT. maxrows) THEN row = 0 EXIT END IF END DO ELSE row = 0 END IF END SUBROUTINE find_proper_row PURE SUBROUTINE find_proper_position(pos, row, maxpos, maxrows, & blk_p, row_p, tdist, tid, local2global) !! Finds the next proper position accounting for threads !! First time: pos and row are set to 0. !! If there is no valid block, pos is set to 0 INTEGER, INTENT(INOUT) :: pos, row !! current position and updated position !! input: current row; output: the row corresponding to the next proper position INTEGER, INTENT(IN) :: maxpos, maxrows !! maximum allowable position !! maxmimum row INTEGER, DIMENSION(:), INTENT(IN) :: blk_p, row_p !! block pointercs !! row pointers INTEGER, DIMENSION(1:maxrows), INTENT(IN), & OPTIONAL :: tdist !! thread distribution INTEGER, INTENT(IN), OPTIONAL :: tid !! my thread number INTEGER, DIMENSION(1:*), INTENT(IN), OPTIONAL :: local2global LOGICAL :: local, row_inrange, row_ok ! --------------------------------------------------------------------------- MARK_USED(tdist) ! only used with OMP MARK_USED(tid) ! only used with OMP local = PRESENT(local2global) IF (maxpos .GE. 1) THEN !IF (pos.EQ.0) pos = 1 CALL find_first_valid_block(pos, maxpos, blk_p) CALL find_proper_row(pos, row, maxrows, row_p) row_inrange = row .NE. 0 .AND. row .LE. maxrows row_ok = row_inrange !$ IF (present(tdist) .AND. PRESENT(tid) .AND. row_inrange) THEN !$ IF (.NOT. local) THEN !$ row_ok = tdist(row) .EQ. tid !$ ELSE !$ row_ok = tdist(local2global(row)) .EQ. tid !$ END IF !$ END IF DO WHILE (row_inrange .AND. .NOT. row_ok) row = row + 1 pos = row_p(row) + 1 IF (row .GT. maxrows) THEN row = 0 EXIT END IF CALL find_first_valid_block(pos, maxpos, blk_p) CALL find_proper_row(pos, row, maxrows, row_p) row_inrange = row .NE. 0 row_ok = row_inrange !$ IF (present(tdist) .AND. PRESENT(tid) .AND. row_inrange) THEN !$ IF (.NOT. local) THEN !$ row_ok = tdist(row) .EQ. tid !$ ELSE !$ row_ok = tdist(local2global(row)) .EQ. tid !$ END IF !$ END IF END DO IF (row .EQ. 0) pos = 0 ELSE pos = 0 row = 0 END IF END SUBROUTINE find_proper_position SUBROUTINE iterator_advance(iterator) !! Advances to the next block TYPE(dbcsr_iterator), INTENT(INOUT) :: iterator !! the iterator INTEGER :: ithread, my_old_row, p LOGICAL :: advance, jumped_row ! --------------------------------------------------------------------------- ithread = 0 !$ ithread = omp_get_thread_num() IF (iterator%dynamic .AND. iterator%shared) THEN IF (iterator%dynamic_byrows) THEN ! In this case common_row holds the last assigned row. ! ! The idea is to advance in this thread's row. If it gets bumped ! into the next row, then we have to find the correct one. advance = .TRUE. DO WHILE (advance) iterator%pos = iterator%pos + 1 my_old_row = iterator%row CALL find_proper_position_caller(iterator) jumped_row = iterator%row .GT. my_old_row advance = jumped_row IF (jumped_row) THEN !$OMP CRITICAL (crit_common_pos) ! Set the common_pos to the next available row. iterator%common_pos = MAX(iterator%row, iterator%common_pos + 1) iterator%row = iterator%common_pos !$OMP END CRITICAL (crit_common_pos) IF (iterator%row .GT. iterator%nblkrows_total) THEN iterator%pos = 0 iterator%row = 0 advance = .FALSE. ELSE ! To be incremented in the next loop. IF (.NOT. iterator%local_indexing) THEN iterator%pos = iterator%row_p(iterator%row) ELSE iterator%pos = iterator%row_p(iterator%global_rows(iterator%row)) END IF END IF END IF END DO ELSE ! In this case common_pos holds the last-assigned block. ! !$OMP CRITICAL (crit_common_pos) iterator%common_pos = iterator%common_pos + 1 iterator%pos = iterator%common_pos CALL find_proper_position_caller(iterator) p = iterator%pos iterator%common_pos = MAX(iterator%common_pos, p) !$OMP END CRITICAL (crit_common_pos) END IF ELSEIF (iterator%shared) THEN iterator%pos = iterator%pos + 1 ithread = 0 !$ ithread = OMP_GET_THREAD_NUM() CALL find_proper_position_caller(iterator, use_ithread=ithread) ELSE iterator%pos = iterator%pos + 1 CALL find_proper_position_caller(iterator) END IF END SUBROUTINE iterator_advance SUBROUTINE find_proper_position_caller(iterator, use_ithread) TYPE(dbcsr_iterator), INTENT(INOUT) :: iterator INTEGER, INTENT(in), OPTIONAL :: use_ithread INTEGER :: post_pos, post_row, pre_pos, pre_row, r pre_row = iterator%row pre_pos = iterator%pos IF (.NOT. iterator%local_indexing) THEN IF (PRESENT(use_ithread)) THEN CALL find_proper_position(iterator%pos, & iterator%row, iterator%nblks, iterator%nblkrows_total, & iterator%blk_p, iterator%row_p, & tdist=iterator%tdist, tid=use_ithread) ELSE CALL find_proper_position(iterator%pos, & iterator%row, iterator%nblks, iterator%nblkrows_total, & iterator%blk_p, iterator%row_p) END IF ELSE IF (iterator%row .GT. 0) THEN r = iterator%global_rows(iterator%row) ELSE r = 0 END IF IF (PRESENT(use_ithread)) THEN CALL find_proper_position(iterator%pos, & r, iterator%nblks, SIZE(iterator%local_rows), & iterator%blk_p, iterator%row_p, & local2global=iterator%local_rows, & tdist=iterator%tdist, tid=use_ithread) ELSE CALL find_proper_position(iterator%pos, & r, iterator%nblks, SIZE(iterator%local_rows), & iterator%blk_p, iterator%row_p, & local2global=iterator%local_rows) END IF IF (r .GT. 0) THEN iterator%row = iterator%local_rows(r) ELSE iterator%row = 0 END IF END IF post_row = iterator%row post_pos = iterator%pos END SUBROUTINE find_proper_position_caller PURE SUBROUTINE update_row_info(iterator) !! Updates the row info stored in the iterator !! @note !! Added to handle the complexity introduced with the transpose !! @endnote TYPE(dbcsr_iterator), INTENT(INOUT) :: iterator !! the iterator IF (iterator%row .GT. 0) THEN IF (iterator%transpose) THEN iterator%row_size = iterator%cbs(iterator%row) iterator%row_offset = iterator%coff(iterator%row) ELSE iterator%row_size = iterator%rbs(iterator%row) iterator%row_offset = iterator%roff(iterator%row) END IF END IF END SUBROUTINE update_row_info SUBROUTINE dbcsr_iterator_seek(iterator, row) !! Places the iterator to the desired row. TYPE(dbcsr_iterator), INTENT(INOUT) :: iterator !! the iterator INTEGER, INTENT(in) :: row !! seek to this row CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_iterator_seek' INTEGER :: error_handle ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) IF (iterator%nblks .GT. 0 .AND. row .LE. iterator%nblkrows_total) THEN iterator%row = row ! This line is replaced because iterator_advance increments the block ! number !iterator%pos = iterator%row_p(row)+1 iterator%pos = iterator%row_p(row) ! +1-1 CALL iterator_advance(iterator) CALL update_row_info(iterator) ELSE iterator%row = 0 iterator%pos = 0 END IF CALL timestop(error_handle) END SUBROUTINE dbcsr_iterator_seek SUBROUTINE iterator_next_block_index(iterator, row, column, blk, & transposed, blk_p, row_size, col_size, row_offset, col_offset) !! Gets the index information of the next block, no data. TYPE(dbcsr_iterator), INTENT(INOUT) :: iterator !! the iterator INTEGER, INTENT(OUT) :: row, column, blk !! row of the data block !! column of the data block !! block number LOGICAL, INTENT(OUT), OPTIONAL :: transposed !! whether block is transposed INTEGER, INTENT(OUT), OPTIONAL :: blk_p, row_size, col_size, row_offset, & col_offset !! index into block data array !! logical row size of block !! logical column size of block !! logical row offset of block !! logical column offset of block CHARACTER(len=*), PARAMETER :: routineN = 'iterator_next_block_index' INTEGER :: bp, error_handle ! --------------------------------------------------------------------------- IF (careful_mod) CALL timeset(routineN, error_handle) IF (iterator%pos .LE. iterator%nblks & .AND. iterator%pos .NE. 0) THEN row = iterator%row column = iterator%col_i(iterator%pos) IF (iterator%transpose) CALL swap(row, column) blk = iterator%pos IF (PRESENT(row_size)) row_size = iterator%row_size IF (PRESENT(col_size)) col_size = iterator%cbs(column) IF (PRESENT(row_offset)) row_offset = iterator%row_offset IF (PRESENT(col_offset)) col_offset = iterator%coff(column) IF (PRESENT(blk_p) .OR. PRESENT(transposed)) THEN bp = iterator%blk_p(iterator%pos) IF (PRESENT(blk_p)) blk_p = bp IF (PRESENT(transposed)) transposed = bp .LT. 0 END IF CALL iterator_advance(iterator) CALL update_row_info(iterator) ELSE row = 0 column = 0 END IF IF (careful_mod) CALL timestop(error_handle) END SUBROUTINE iterator_next_block_index SUBROUTINE iterator_next_area_block(iterator, row, column, block, & transposed, block_number, row_size, col_size, row_offset, col_offset) !! Gets the next data block encapsulated in an object. TYPE(dbcsr_iterator), INTENT(INOUT) :: iterator !! the iterator INTEGER, INTENT(OUT) :: row, column !! row of the data block !! column of the data block TYPE(dbcsr_data_obj), INTENT(INOUT) :: block !! encapsulated data LOGICAL, INTENT(OUT) :: transposed !! whether the block data is transposed INTEGER, INTENT(OUT), OPTIONAL :: block_number, row_size, col_size, & row_offset, col_offset !! block number !! logical row size of block !! logical column size of block !! logical row offset of block !! logical column offset of block CHARACTER(len=*), PARAMETER :: routineN = 'iterator_next_area_block' INTEGER :: blk_p, block_col_size, block_row_size, & bp, csize, error_handle, nze, rsize ! --------------------------------------------------------------------------- IF (careful_mod) CALL timeset(routineN, error_handle) IF (iterator%pos .LE. iterator%nblks & .AND. iterator%pos .NE. 0) THEN row = iterator%row column = iterator%col_i(iterator%pos) IF (iterator%transpose) CALL swap(row, column) blk_p = iterator%blk_p(iterator%pos) transposed = blk_p .LT. 0 bp = ABS(blk_p) rsize = iterator%row_size csize = iterator%cbs(column) block_row_size = rsize block_col_size = csize nze = rsize*csize IF (PRESENT(row_size)) row_size = rsize IF (PRESENT(col_size)) col_size = csize IF (PRESENT(row_offset)) row_offset = iterator%row_offset IF (PRESENT(col_offset)) col_offset = iterator%coff(column) ! Redirect the encapsulated pointer to the correct pointer here. IF (transposed) CALL swap(rsize, csize) CALL dbcsr_data_set_pointer(block, rsize, csize, iterator%data_area, & source_lb=bp) IF (PRESENT(block_number)) block_number = iterator%pos ! Move to the next non-deleted position. CALL iterator_advance(iterator) CALL update_row_info(iterator) ELSE row = 0 column = 0 IF (PRESENT(block_number)) block_number = 0 END IF IF (careful_mod) CALL timestop(error_handle) END SUBROUTINE iterator_next_area_block PURE FUNCTION dbcsr_iterator_blocks_left(iterator) RESULT(blocks_left) !! Returns whether there any blocks left in the iterator. TYPE(dbcsr_iterator), INTENT(IN) :: iterator !! the iterator LOGICAL :: blocks_left blocks_left = iterator%pos .NE. 0 END FUNCTION dbcsr_iterator_blocks_left #:include '../data/dbcsr.fypp' #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float SUBROUTINE iterator_next_1d_block_${nametype1}$ (iterator, row, column, block, & transposed, block_number, row_size, col_size, row_offset, col_offset) !! Gets the next data block, single/double precision real/complex TYPE(dbcsr_iterator), INTENT(INOUT) :: iterator !! the iterator INTEGER, INTENT(OUT) :: row, column !! row of the data block !! column of the data block ${type1}$, DIMENSION(:), POINTER :: block !! pointer to the data block LOGICAL, INTENT(OUT) :: transposed !! whether the block data is transposed INTEGER, INTENT(OUT), OPTIONAL :: block_number !! block number INTEGER, INTENT(OUT), OPTIONAL :: row_size, col_size, & row_offset, col_offset !! logical row size of block !! logical column size of block INTEGER :: blk_p, bp, csize, nze, rsize ! --------------------------------------------------------------------------- ! If we're pointing to a valid block, return that block. IF (iterator%pos .LE. iterator%nblks & .AND. iterator%pos .NE. 0) THEN row = iterator%row column = iterator%col_i(iterator%pos) IF (iterator%transpose) CALL swap(row, column) blk_p = iterator%blk_p(iterator%pos) transposed = blk_p .LT. 0 bp = ABS(blk_p) rsize = iterator%row_size csize = iterator%cbs(column) nze = rsize*csize IF (PRESENT(row_size)) row_size = rsize IF (PRESENT(col_size)) col_size = csize IF (PRESENT(row_offset)) row_offset = iterator%row_offset IF (PRESENT(col_offset)) col_offset = iterator%coff(column) CALL dbcsr_get_data(iterator%data_area, block, & lb=bp, ub=bp + nze - 1) IF (PRESENT(block_number)) block_number = iterator%pos ! Move to the next non-deleted position. CALL iterator_advance(iterator) CALL update_row_info(iterator) ELSE row = 0 column = 0 NULLIFY (block) IF (PRESENT(block_number)) block_number = 0 END IF END SUBROUTINE iterator_next_1d_block_${nametype1}$ SUBROUTINE iterator_next_2d_block_${nametype1}$ (iterator, row, column, & block, transposed, & block_number, row_size, col_size, row_offset, col_offset) !! Gets the next data block, single/double precision real/complex TYPE(dbcsr_iterator), INTENT(INOUT) :: iterator !! the iterator INTEGER, INTENT(OUT) :: row, column !! row of the data block !! column of the data block ${type1}$, DIMENSION(:, :), & POINTER :: block !! pointer to the data block LOGICAL, INTENT(OUT) :: transposed !! whether the block data is transposed INTEGER, INTENT(OUT), OPTIONAL :: block_number !! block number INTEGER, INTENT(OUT), OPTIONAL :: row_size, col_size, row_offset, col_offset !! logical row size of block !! logical column size of block CHARACTER(len=*), PARAMETER :: routineN = 'iterator_next_2d_block_${nametype1}$' INTEGER :: blk_p, bp, csize, nze, rsize, & block_row_size, block_col_size ${type1}$, DIMENSION(:), POINTER :: lin_blk_p INTEGER :: error_handle ! --------------------------------------------------------------------------- ! If we're pointing to a valid block, return that block. IF (careful_mod) CALL timeset(routineN, error_handle) IF (iterator%pos .LE. iterator%nblks & .AND. iterator%pos .NE. 0) THEN row = iterator%row column = iterator%col_i(iterator%pos) IF (iterator%transpose) CALL swap(row, column) blk_p = iterator%blk_p(iterator%pos) transposed = blk_p .LT. 0 bp = ABS(blk_p) rsize = iterator%row_size csize = iterator%cbs(column) block_row_size = rsize block_col_size = csize IF (PRESENT(row_size)) row_size = rsize IF (PRESENT(col_size)) col_size = csize IF (PRESENT(row_offset)) row_offset = iterator%row_offset IF (PRESENT(col_offset)) col_offset = iterator%coff(column) nze = rsize*csize IF (transposed) CALL swap(rsize, csize) CALL dbcsr_get_data(iterator%data_area, lin_blk_p, & lb=bp, ub=bp + nze - 1) CALL pointer_rank_remap2(block, rsize, csize, lin_blk_p) IF (PRESENT(block_number)) block_number = iterator%pos ! Move to the next non-deleted position. CALL iterator_advance(iterator) CALL update_row_info(iterator) ELSE row = 0 column = 0 NULLIFY (block) IF (PRESENT(block_number)) block_number = 0 END IF IF (careful_mod) CALL timestop(error_handle) END SUBROUTINE iterator_next_2d_block_${nametype1}$ #:endfor END MODULE dbcsr_iterator_operations ================================================ FILE: src/cmake/DBCSRConfig.cmake.in ================================================ @PACKAGE_INIT@ include(CMakeFindDependencyMacro) # the following should only be needed when building statically if (@USE_MPI@) set(DBCSR_USE_MPI @USE_MPI@) find_dependency(MPI) endif () if (@USE_OPENMP@) set(DBCSR_USE_OPENMP @USE_OPENMP@) find_dependency(OpenMP) endif () if ("@USE_ACCEL@" MATCHES "cuda") set(DBCSR_USE_ACCEL @USE_ACCEL@) enable_language(CUDA) find_dependency(CUDAToolkit) endif () if ("@USE_ACCEL@" MATCHES "hip") set(DBCSR_USE_ACCEL @USE_ACCEL@) enable_language(HIP) find_dependency(hip) find_dependency(hipblas) find_dependency(hiprtc) endif () if (("@USE_SMM@" MATCHES "libxsmm") OR ("@USE_ACCEL@" MATCHES "opencl")) set(DBCSR_USE_SMM @USE_SMM@) find_package(PkgConfig) pkg_check_modules(LIBXSMM IMPORTED_TARGET GLOBAL libxsmmf) if (@USE_OPENMP@) pkg_check_modules(LIBXSMMEXT IMPORTED_TARGET GLOBAL libxsmmext) endif () endif () include("${CMAKE_CURRENT_LIST_DIR}/DBCSRTargets.cmake") ================================================ FILE: src/core/PACKAGE ================================================ { "description": "Core DBCSR matrix datastructure", "archive": "libdbcsr", "requires": ["../acc", "../acc/cuda", "../acc/hip", "../mpi", "../base", "../data", "../mm", "../utils"], } ================================================ FILE: src/core/dbcsr_array_types.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_array_types !! Array objects with reference counting. #include "base/dbcsr_base_uses.f90" #if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) USE libxsmm, ONLY: libxsmm_diff # define PURE_ARRAY_EQUALITY #else # define PURE_ARRAY_EQUALITY PURE #endif IMPLICIT NONE PRIVATE PUBLIC :: array_i1d_obj PUBLIC :: array_new, & array_hold, & array_release, & array_nullify, & array_exists PUBLIC :: array_data, & array_size, & array_equality PUBLIC :: array_get INTERFACE array_new MODULE PROCEDURE array_new_i1d, array_new_i1d_lb END INTERFACE INTERFACE array_hold MODULE PROCEDURE array_hold_i1d END INTERFACE INTERFACE array_release MODULE PROCEDURE array_release_i1d END INTERFACE INTERFACE array_nullify MODULE PROCEDURE array_nullify_i1d END INTERFACE INTERFACE array_exists MODULE PROCEDURE array_exists_i1d END INTERFACE INTERFACE array_data MODULE PROCEDURE array_data_i1d END INTERFACE INTERFACE array_size MODULE PROCEDURE array_size_i1d END INTERFACE INTERFACE array_equality MODULE PROCEDURE array_equality_i1 MODULE PROCEDURE array_equality_i1d END INTERFACE INTERFACE array_get MODULE PROCEDURE array_get_i1d MODULE PROCEDURE array_get_i1 END INTERFACE TYPE array_i1d_type INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: DATA => Null() INTEGER :: refcount = 0 END TYPE array_i1d_type TYPE array_i1d_obj TYPE(array_i1d_type), POINTER :: low => Null() END TYPE array_i1d_obj CONTAINS SUBROUTINE array_new_i1d(array, DATA, gift) TYPE(array_i1d_obj), INTENT(OUT) :: array INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: DATA LOGICAL, INTENT(IN), OPTIONAL :: gift INTEGER :: lb, ub LOGICAL :: g ALLOCATE (array%low) array%low%refcount = 1 g = .FALSE. IF (PRESENT(gift)) g = gift IF (g) THEN array%low%data => DATA NULLIFY (DATA) ELSE lb = LBOUND(DATA, 1) ub = UBOUND(DATA, 1) ALLOCATE (array%low%data(lb:ub)) array%low%data(:) = DATA(:) END IF END SUBROUTINE array_new_i1d SUBROUTINE array_new_i1d_lb(array, DATA, lb) TYPE(array_i1d_obj), INTENT(OUT) :: array INTEGER, DIMENSION(:), INTENT(IN) :: DATA INTEGER, INTENT(IN) :: lb INTEGER :: ub ALLOCATE (array%low) array%low%refcount = 1 ub = lb + SIZE(DATA) - 1 ALLOCATE (array%low%data(lb:ub)) array%low%data(:) = DATA(:) END SUBROUTINE array_new_i1d_lb SUBROUTINE array_hold_i1d(array) TYPE(array_i1d_obj), INTENT(INOUT) :: array !$OMP ATOMIC array%low%refcount = array%low%refcount + 1 END SUBROUTINE array_hold_i1d SUBROUTINE array_release_i1d(array) TYPE(array_i1d_obj), INTENT(INOUT) :: array IF (ASSOCIATED(array%low)) THEN array%low%refcount = array%low%refcount - 1 IF (array%low%refcount .EQ. 0) THEN DEALLOCATE (array%low%data) DEALLOCATE (array%low) END IF END IF END SUBROUTINE array_release_i1d PURE SUBROUTINE array_nullify_i1d(array) TYPE(array_i1d_obj), INTENT(INOUT) :: array NULLIFY (array%low) END SUBROUTINE array_nullify_i1d PURE FUNCTION array_exists_i1d(array) RESULT(array_exists) TYPE(array_i1d_obj), INTENT(IN) :: array LOGICAL :: array_exists array_exists = ASSOCIATED(array%low) IF (array_exists) array_exists = array%low%refcount .GT. 0 END FUNCTION array_exists_i1d FUNCTION array_data_i1d(array) RESULT(DATA) TYPE(array_i1d_obj), INTENT(IN) :: array INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: DATA IF (ASSOCIATED(array%low)) THEN DATA => array%low%data ELSE NULLIFY (DATA) END IF END FUNCTION array_data_i1d PURE FUNCTION array_size_i1d(array) RESULT(the_size) TYPE(array_i1d_obj), INTENT(IN) :: array INTEGER :: the_size IF (ASSOCIATED(array%low)) THEN the_size = SIZE(array%low%data) ELSE the_size = 0 END IF END FUNCTION array_size_i1d PURE_ARRAY_EQUALITY FUNCTION array_equality_i1(array1, array2) RESULT(are_equal) INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: array1, array2 LOGICAL :: are_equal are_equal = .FALSE. IF (ASSOCIATED(array1) .AND. ASSOCIATED(array2)) THEN #if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) are_equal = .NOT. libxsmm_diff(array1, array2) #else IF (SIZE(array1) .NE. SIZE(array2)) RETURN are_equal = ALL(array1 .EQ. array2) #endif END IF END FUNCTION array_equality_i1 PURE_ARRAY_EQUALITY FUNCTION array_equality_i1d(array1, array2) RESULT(are_equal) TYPE(array_i1d_obj), INTENT(IN) :: array1, array2 LOGICAL :: are_equal are_equal = .FALSE. IF (ASSOCIATED(array1%low) .AND. ASSOCIATED(array2%low)) THEN #if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) are_equal = .NOT. libxsmm_diff(array1%low%data, array2%low%data) #else IF (SIZE(array1%low%data) .NE. SIZE(array2%low%data)) RETURN are_equal = ALL(array1%low%data .EQ. array2%low%data) #endif END IF END FUNCTION array_equality_i1d PURE FUNCTION array_get_i1d(array, index1) RESULT(value) TYPE(array_i1d_obj), INTENT(IN) :: array INTEGER, INTENT(IN) :: index1 INTEGER :: value value = array%low%data(index1) END FUNCTION array_get_i1d PURE FUNCTION array_get_i1(array, index1) RESULT(value) INTEGER, DIMENSION(:), INTENT(IN), POINTER :: array INTEGER, INTENT(IN) :: index1 INTEGER :: value value = array(index1) END FUNCTION array_get_i1 END MODULE dbcsr_array_types ================================================ FILE: src/core/dbcsr_config.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_config !! Configuration options for DBCSR USE dbcsr_acc_device, ONLY: dbcsr_acc_get_ndevices USE dbcsr_kinds, ONLY: default_string_length, & dp USE dbcsr_kinds, ONLY: real_8 USE dbcsr_mpiwrap, ONLY: mp_environ, mp_comm_world USE dbcsr_string_utilities, ONLY: uppercase, str2int #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_num_threads, omp_get_max_threads IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_config' REAL(KIND=dp), PARAMETER :: default_resize_factor = 1.2_dp INTEGER, PARAMETER :: max_paramter_name_len = 100 INTEGER, PARAMETER :: max_paramter_value_len = 100 ! Possible drivers to use for matrix multiplications INTEGER, PARAMETER :: mm_driver_auto = 0 INTEGER, PARAMETER :: mm_driver_matmul = 1 INTEGER, PARAMETER :: mm_driver_blas = 2 INTEGER, PARAMETER :: mm_driver_smm = 3 INTEGER, PARAMETER :: mm_driver_xsmm = 4 CHARACTER(len=*), PARAMETER :: mm_name_auto = "AUTO", & mm_name_blas = "BLAS", & mm_name_matmul = "MATMUL", & mm_name_smm = "SMM", & mm_name_xsmm = "XSMM" #if defined (__HAS_smm_dnn) LOGICAL, PARAMETER :: has_smm = .TRUE. #else LOGICAL, PARAMETER :: has_smm = .FALSE. #endif #if defined(__HAS_smm_vec) LOGICAL, PARAMETER :: has_smm_vec = .TRUE. #else LOGICAL, PARAMETER :: has_smm_vec = .FALSE. #endif #if defined(__LIBXSMM) LOGICAL, PARAMETER :: has_xsmm = .TRUE. #else LOGICAL, PARAMETER :: has_xsmm = .FALSE. #endif #if defined (__DBCSR_ACC) LOGICAL, PARAMETER :: has_acc = .TRUE. #else LOGICAL, PARAMETER :: has_acc = .FALSE. #endif #if defined (__parallel) LOGICAL, PARAMETER :: has_MPI = .TRUE. #else LOGICAL, PARAMETER :: has_MPI = .FALSE. #endif INTEGER, PARAMETER :: mm_stack_default_size_cpu = 1000 INTEGER, PARAMETER :: mm_stack_default_size_gpu = 30000 #if defined(__HAS_smm_vec) || defined (__DBCSR_ACC) INTEGER, PARAMETER :: mm_stack_default_size = mm_stack_default_size_gpu #else INTEGER, PARAMETER :: mm_stack_default_size = mm_stack_default_size_cpu #endif LOGICAL, PARAMETER :: mm_dense_default_cpu = .TRUE. LOGICAL, PARAMETER :: mm_dense_default_gpu = .FALSE. #if defined (__DBCSR_ACC) LOGICAL, PARAMETER :: mm_dense_default = mm_dense_default_gpu #else LOGICAL, PARAMETER :: mm_dense_default = mm_dense_default_cpu #endif #if defined(__LIBXSMM) INTEGER, PARAMETER :: mm_default_driver = mm_driver_xsmm #elif defined (__HAS_smm_dnn) INTEGER, PARAMETER :: mm_default_driver = mm_driver_smm #else INTEGER, PARAMETER :: mm_default_driver = mm_driver_blas ! always available #endif TYPE, ABSTRACT :: CONF_PAR CHARACTER :: source = 'D' ! Possible values are: D=Default, E=Environment, U=User code CHARACTER(len=max_paramter_name_len) :: name = "" CONTAINS PROCEDURE, NON_OVERRIDABLE :: env_value => conf_par_env_value PROCEDURE, NON_OVERRIDABLE :: print_source END TYPE CONF_PAR TYPE, EXTENDS(CONF_PAR) :: CONF_PAR_INT INTEGER :: val = -1, defval = -1 LOGICAL :: ensure_positive = .TRUE. CONTAINS PROCEDURE :: set => set_conf_par_int END TYPE CONF_PAR_INT TYPE, EXTENDS(CONF_PAR) :: CONF_PAR_MM_DRIVER INTEGER :: val = -1, defval = -1 CONTAINS PROCEDURE :: set => set_conf_par_mm_driver END TYPE CONF_PAR_MM_DRIVER TYPE, EXTENDS(CONF_PAR) :: CONF_PAR_LOGICAL LOGICAL :: val = .FALSE., defval = .FALSE. CONTAINS PROCEDURE :: set => set_conf_par_logical END TYPE CONF_PAR_LOGICAL TYPE, EXTENDS(CONF_PAR) :: CONF_PAR_REAL REAL(KIND=real_8) :: val = -1, defval = -1 CONTAINS PROCEDURE :: set => set_conf_par_real END TYPE CONF_PAR_REAL ! Convenient macro to define a configuration parameter #define DBCSR_PARAMETER(N, T, V) TYPE(T) :: N = T(name=DBCSR_STRINGIZE(N), val=V, defval=V) TYPE dbcsr_config_type TYPE(CONF_PAR_MM_DRIVER) :: MM_DRIVER = & CONF_PAR_MM_DRIVER(name="MM_DRIVER", val=mm_default_driver, defval=mm_default_driver) TYPE(CONF_PAR_INT) :: MM_STACK_SIZE = & CONF_PAR_INT(name="MM_STACK_SIZE", val=mm_stack_default_size, defval=mm_stack_default_size) DBCSR_PARAMETER(AVG_ELEMENTS_IMAGES, CONF_PAR_INT, 0) DBCSR_PARAMETER(NUM_MULT_IMAGES, CONF_PAR_INT, 1) DBCSR_PARAMETER(N_STACKS, CONF_PAR_INT, 3) DBCSR_PARAMETER(USE_MPI_RMA, CONF_PAR_LOGICAL, .FALSE.) DBCSR_PARAMETER(NUM_LAYERS_3D, CONF_PAR_INT, 1) DBCSR_PARAMETER(USE_COMM_THREAD, CONF_PAR_LOGICAL, .TRUE.) DBCSR_PARAMETER(COMM_THREAD_LOAD, CONF_PAR_INT, 100) DBCSR_PARAMETER(MM_DENSE, CONF_PAR_LOGICAL, mm_dense_default) DBCSR_PARAMETER(MULTREC_LIMIT, CONF_PAR_INT, 512) DBCSR_PARAMETER(RUN_ON_GPU, CONF_PAR_LOGICAL, .TRUE.) DBCSR_PARAMETER(ACCDRV_THREAD_BUFFERS, CONF_PAR_INT, 8) TYPE(CONF_PAR_LOGICAL) :: ACCDRV_AVOID_AFTER_BUSY = & CONF_PAR_LOGICAL(name="ACCDRV_AVOID_AFTER_BUSY", val=.FALSE., defval=.FALSE.) DBCSR_PARAMETER(ACCDRV_MIN_FLOP_PROCESS, CONF_PAR_INT, 0) DBCSR_PARAMETER(ACCDRV_STACK_SORT, CONF_PAR_LOGICAL, .TRUE.) DBCSR_PARAMETER(ACCDRV_MIN_FLOP_SORT, CONF_PAR_INT, 4000) TYPE(CONF_PAR_LOGICAL) :: ACCDRV_DO_INHOMOGENOUS = & CONF_PAR_LOGICAL(name="ACCDRV_DO_INHOMOGENOUS", val=.TRUE., defval=.TRUE.) DBCSR_PARAMETER(ACCDRV_BINNING_NBINS, CONF_PAR_INT, 4096) DBCSR_PARAMETER(ACCDRV_BINNING_BINSIZE, CONF_PAR_INT, 16) DBCSR_PARAMETER(USE_MEMPOOLS_CPU, CONF_PAR_LOGICAL, .FALSE.) DBCSR_PARAMETER(USE_MPI_ALLOCATOR, CONF_PAR_LOGICAL, .FALSE.) DBCSR_PARAMETER(TAS_SPLIT_FACTOR, CONF_PAR_REAL, 1.0_real_8) DBCSR_PARAMETER(USE_ACC_G2G, CONF_PAR_LOGICAL, .FALSE.) END TYPE dbcsr_config_type TYPE(dbcsr_config_type), PROTECTED, SAVE :: dbcsr_cfg = dbcsr_config_type() ! defaults ! Max dimension for any block dimension INTEGER, PARAMETER :: max_kernel_dim = 80 ! Accelerator active device, default to -1, i.e. no device INTEGER, PARAMETER :: default_accdrv_active_device_id = -1 INTEGER :: accdrv_active_device_id = default_accdrv_active_device_id PUBLIC :: dbcsr_cfg, has_MPI, has_acc, default_resize_factor PUBLIC :: mm_driver_blas, mm_driver_matmul, mm_driver_smm, mm_driver_xsmm, mm_driver_auto PUBLIC :: dbcsr_set_config, dbcsr_get_default_config, dbcsr_print_config PUBLIC :: max_kernel_dim PUBLIC :: get_accdrv_active_device_id, set_accdrv_active_device_id, reset_accdrv_active_device_id PUBLIC :: use_acc CONTAINS FUNCTION print_source(this) CLASS(CONF_PAR), INTENT(IN) :: this CHARACTER(len=3) :: print_source print_source = "("//this%source//")" END FUNCTION print_source FUNCTION conf_par_env_value(this, env_val) result(status) CLASS(CONF_PAR), INTENT(INOUT) :: this CLASS(*), INTENT(OUT) :: env_val LOGICAL :: status CHARACTER(len=max_paramter_name_len) :: string_val INTEGER :: stat ! Do nothing is already set via environment variable IF (this%source == 'E') THEN status = .TRUE. RETURN END IF ! Check environment variable, only if default is set IF (this%source == 'D') THEN CALL uppercase(this%name) CALL get_environment_variable("DBCSR_"//this%name, string_val, status=stat) IF (stat .NE. 0 .AND. stat .NE. 1) DBCSR_ABORT("Invalid environment value") IF (stat == 0) THEN this%source = 'E' SELECT TYPE (env_val) TYPE IS (CHARACTER(len=*)) env_val = string_val TYPE IS (INTEGER) call str2int(string_val, env_val, stat) IF (stat .NE. 0) & DBCSR_ABORT("Wrong environment variable reading. Expecting an integer value.") CLASS DEFAULT DBCSR_ABORT("Unrecognized type") END SELECT END IF END IF status = .FALSE. END FUNCTION CONF_PAR_ENV_VALUE SUBROUTINE set_conf_par_int(this, integer_val) CLASS(CONF_PAR_INT), INTENT(INOUT) :: this INTEGER, INTENT(IN), OPTIONAL :: integer_val INTEGER :: my_integer_val IF (this%env_value(my_integer_val)) RETURN ! Use User-code value IF (PRESENT(integer_val) .AND. this%source .NE. 'E') THEN my_integer_val = integer_val this%source = 'U' END IF IF (PRESENT(integer_val) .OR. this%source .EQ. 'E') THEN ! Set default if the number is negative IF (this%ensure_positive .AND. my_integer_val < 0) THEN this%val = this%defval this%source = 'D' ELSE this%val = my_integer_val END IF END IF END SUBROUTINE set_conf_par_int SUBROUTINE set_conf_par_mm_driver(this, mm_driver) CLASS(CONF_PAR_MM_DRIVER), INTENT(INOUT) :: this CHARACTER(len=*), INTENT(IN), OPTIONAL :: mm_driver CHARACTER(len=max_paramter_value_len) :: my_mm_driver IF (this%env_value(my_mm_driver)) RETURN ! Use User-code value IF (PRESENT(mm_driver) .AND. this%source .NE. 'E') THEN my_mm_driver = TRIM(mm_driver) this%source = 'U' END IF ! Check input value IF (PRESENT(mm_driver) .OR. this%source .EQ. 'E') THEN CALL uppercase(my_mm_driver) IF (my_mm_driver .EQ. mm_name_auto) THEN this%val = this%defval ELSE IF (my_mm_driver .EQ. mm_name_blas) THEN this%val = mm_driver_blas ! always available ELSE IF (my_mm_driver .EQ. mm_name_matmul) THEN this%val = mm_driver_matmul ! always available ELSE IF (my_mm_driver .EQ. mm_name_smm) THEN IF (.NOT. has_smm) DBCSR_ABORT("Support for libsmm not compiled in.") this%val = mm_driver_smm ELSE IF (my_mm_driver .EQ. mm_name_xsmm) THEN IF (.NOT. has_xsmm) DBCSR_ABORT("Support for libxsmm not compiled in.") this%val = mm_driver_xsmm ELSE DBCSR_ABORT("Unknown MM driver: "//TRIM(mm_driver)) END IF END IF END SUBROUTINE set_conf_par_mm_driver SUBROUTINE set_conf_par_logical(this, logical_val) CLASS(CONF_PAR_LOGICAL), INTENT(INOUT) :: this LOGICAL, INTENT(IN), OPTIONAL :: logical_val INTEGER :: my_integer_val IF (this%env_value(my_integer_val)) RETURN ! Use env value IF (this%source .EQ. 'E') THEN this%val = (my_integer_val .NE. 0) RETURN END IF ! Use User-code value IF (PRESENT(logical_val)) THEN this%val = logical_val this%source = 'U' END IF END SUBROUTINE set_conf_par_logical SUBROUTINE set_conf_par_real(this, real_val) CLASS(CONF_PAR_REAL), INTENT(INOUT) :: this REAL(KIND=real_8), INTENT(IN), OPTIONAL :: real_val IF (PRESENT(real_val)) THEN this%val = real_val this%source = 'U' END IF END SUBROUTINE set_conf_par_real SUBROUTINE dbcsr_set_config( & mm_driver, & use_mpi_allocator, & mm_stack_size, & avg_elements_images, & num_mult_images, & nstacks, & use_mpi_rma, & num_layers_3D, & use_comm_thread, & comm_thread_load, & mm_dense, & multrec_limit, & run_on_gpu, & accdrv_thread_buffers, & accdrv_avoid_after_busy, & accdrv_min_flop_process, & accdrv_stack_sort, & accdrv_min_flop_sort, & accdrv_do_inhomogenous, & accdrv_binning_nbins, & accdrv_binning_binsize, & use_mempools_cpu, & tas_split_factor, & use_acc_g2g) CHARACTER(len=*), INTENT(IN), OPTIONAL :: mm_driver LOGICAL, INTENT(IN), OPTIONAL :: use_mpi_allocator INTEGER, INTENT(IN), OPTIONAL :: avg_elements_images !! Maximum number of elements for each image INTEGER, INTENT(IN), OPTIONAL :: num_mult_images !! Multiplicative factor for number of virtual images INTEGER, INTENT(IN), OPTIONAL :: nstacks !! Number of stacks to use INTEGER, INTENT(IN), OPTIONAL :: mm_stack_size LOGICAL, INTENT(IN), OPTIONAL :: use_mpi_rma !! use_mpi_rma RMA algorithm INTEGER, INTENT(IN), OPTIONAL :: num_layers_3D !! num_layers_3D 3D layers LOGICAL, INTENT(IN), OPTIONAL :: use_comm_thread INTEGER, INTENT(IN), OPTIONAL :: comm_thread_load LOGICAL, INTENT(IN), OPTIONAL :: mm_dense LOGICAL, INTENT(IN), OPTIONAL :: run_on_gpu INTEGER, INTENT(IN), OPTIONAL :: multrec_limit, accdrv_thread_buffers LOGICAL, INTENT(IN), OPTIONAL :: accdrv_avoid_after_busy INTEGER, INTENT(IN), OPTIONAL :: accdrv_min_flop_process LOGICAL, INTENT(IN), OPTIONAL :: accdrv_stack_sort INTEGER, INTENT(IN), OPTIONAL :: accdrv_min_flop_sort LOGICAL, INTENT(IN), OPTIONAL :: accdrv_do_inhomogenous INTEGER, INTENT(IN), OPTIONAL :: accdrv_binning_nbins, & accdrv_binning_binsize LOGICAL, INTENT(IN), OPTIONAL :: use_mempools_cpu REAL(KIND=real_8), INTENT(IN), OPTIONAL :: tas_split_factor LOGICAL, INTENT(IN), OPTIONAL :: use_acc_g2g INTEGER, SAVE :: nthreads = 0 CALL dbcsr_cfg%use_mpi_allocator%set(use_mpi_allocator) CALL dbcsr_cfg%avg_elements_images%set(avg_elements_images) CALL dbcsr_cfg%num_mult_images%set(num_mult_images) CALL dbcsr_cfg%use_mpi_rma%set(use_mpi_rma) CALL dbcsr_cfg%num_layers_3D%set(num_layers_3D) CALL dbcsr_cfg%use_comm_thread%set(use_comm_thread) CALL dbcsr_cfg%multrec_limit%set(multrec_limit) CALL dbcsr_cfg%run_on_gpu%set(run_on_gpu) CALL dbcsr_cfg%accdrv_thread_buffers%set(accdrv_thread_buffers) CALL dbcsr_cfg%accdrv_avoid_after_busy%set(accdrv_avoid_after_busy) CALL dbcsr_cfg%accdrv_min_flop_process%set(accdrv_min_flop_process) CALL dbcsr_cfg%accdrv_stack_sort%set(accdrv_stack_sort) CALL dbcsr_cfg%accdrv_min_flop_sort%set(accdrv_min_flop_sort) CALL dbcsr_cfg%accdrv_do_inhomogenous%set(accdrv_do_inhomogenous) CALL dbcsr_cfg%accdrv_binning_nbins%set(accdrv_binning_nbins) CALL dbcsr_cfg%accdrv_binning_binsize%set(accdrv_binning_binsize) CALL dbcsr_cfg%use_mempools_cpu%set(use_mempools_cpu) CALL dbcsr_cfg%tas_split_factor%set(tas_split_factor) CALL dbcsr_cfg%use_acc_g2g%set(use_acc_g2g) IF (0 == nthreads) THEN nthreads = 1 !$ nthreads = OMP_GET_MAX_THREADS() END IF ! Change default values IF (dbcsr_cfg%use_mpi_rma%val) THEN dbcsr_cfg%comm_thread_load%defval = 100 ELSE dbcsr_cfg%comm_thread_load%defval = MAX(0, 90 - (30*nthreads)/8) END IF CALL dbcsr_cfg%comm_thread_load%set(comm_thread_load) CALL dbcsr_cfg%n_stacks%set(nstacks) CALL dbcsr_cfg%mm_driver%set(mm_driver) ! If ACC is turned-off, use the CPU defaults IF (.NOT. PRESENT(mm_stack_size) .AND. .NOT. dbcsr_cfg%run_on_gpu%val) THEN CALL dbcsr_cfg%mm_stack_size%set(mm_stack_default_size_cpu) ELSE CALL dbcsr_cfg%mm_stack_size%set(mm_stack_size) END IF IF (.NOT. PRESENT(mm_dense) .AND. .NOT. dbcsr_cfg%run_on_gpu%val) THEN CALL dbcsr_cfg%mm_dense%set(mm_dense_default_cpu) ELSE CALL dbcsr_cfg%mm_dense%set(mm_dense) END IF END SUBROUTINE dbcsr_set_config SUBROUTINE dbcsr_get_default_config( & use_mpi_allocator, & mm_stack_size, & avg_elements_images, & num_mult_images, & nstacks, & use_mpi_rma, & num_layers_3D, & use_comm_thread, & comm_thread_load, & mm_dense, & run_on_gpu, & multrec_limit, & accdrv_thread_buffers, & accdrv_avoid_after_busy, & accdrv_min_flop_process, & accdrv_stack_sort, & accdrv_min_flop_sort, & accdrv_do_inhomogenous, & accdrv_binning_nbins, & accdrv_binning_binsize, & use_mempools_cpu, & tas_split_factor, & use_acc_g2g) ! LOGICAL, INTENT(OUT), OPTIONAL :: use_mpi_allocator INTEGER, INTENT(OUT), OPTIONAL :: mm_stack_size, avg_elements_images, & num_mult_images, nstacks LOGICAL, INTENT(OUT), OPTIONAL :: use_mpi_rma INTEGER, INTENT(OUT), OPTIONAL :: num_layers_3D LOGICAL, INTENT(OUT), OPTIONAL :: use_comm_thread INTEGER, INTENT(OUT), OPTIONAL :: comm_thread_load LOGICAL, INTENT(OUT), OPTIONAL :: mm_dense, run_on_gpu INTEGER, INTENT(OUT), OPTIONAL :: multrec_limit, accdrv_thread_buffers LOGICAL, INTENT(OUT), OPTIONAL :: accdrv_avoid_after_busy INTEGER, INTENT(OUT), OPTIONAL :: accdrv_min_flop_process LOGICAL, INTENT(OUT), OPTIONAL :: accdrv_stack_sort INTEGER, INTENT(OUT), OPTIONAL :: accdrv_min_flop_sort LOGICAL, INTENT(OUT), OPTIONAL :: accdrv_do_inhomogenous INTEGER, INTENT(OUT), OPTIONAL :: accdrv_binning_nbins, & accdrv_binning_binsize LOGICAL, INTENT(OUT), OPTIONAL :: use_mempools_cpu REAL(KIND=real_8), INTENT(OUT), OPTIONAL :: tas_split_factor LOGICAL, INTENT(OUT), OPTIONAL :: use_acc_g2g IF (PRESENT(use_mpi_allocator)) use_mpi_allocator = dbcsr_cfg%use_mpi_allocator%defval IF (PRESENT(mm_stack_size)) mm_stack_size = dbcsr_cfg%mm_stack_size%defval IF (PRESENT(avg_elements_images)) avg_elements_images = dbcsr_cfg%avg_elements_images%defval IF (PRESENT(num_mult_images)) num_mult_images = dbcsr_cfg%num_mult_images%defval IF (PRESENT(use_mpi_rma)) use_mpi_rma = dbcsr_cfg%use_mpi_rma%defval IF (PRESENT(num_layers_3D)) num_layers_3D = dbcsr_cfg%num_layers_3D%defval IF (PRESENT(use_comm_thread)) use_comm_thread = dbcsr_cfg%use_comm_thread%defval IF (PRESENT(comm_thread_load)) comm_thread_load = dbcsr_cfg%comm_thread_load%defval IF (PRESENT(mm_dense)) mm_dense = dbcsr_cfg%mm_dense%defval IF (PRESENT(multrec_limit)) multrec_limit = dbcsr_cfg%multrec_limit%defval IF (PRESENT(run_on_gpu)) run_on_gpu = dbcsr_cfg%run_on_gpu%defval IF (PRESENT(accdrv_thread_buffers)) accdrv_thread_buffers = dbcsr_cfg%accdrv_thread_buffers%defval IF (PRESENT(accdrv_avoid_after_busy)) accdrv_avoid_after_busy = dbcsr_cfg%accdrv_avoid_after_busy%defval IF (PRESENT(accdrv_min_flop_process)) accdrv_min_flop_process = dbcsr_cfg%accdrv_min_flop_process%defval IF (PRESENT(accdrv_stack_sort)) accdrv_stack_sort = dbcsr_cfg%accdrv_stack_sort%defval IF (PRESENT(accdrv_min_flop_sort)) accdrv_min_flop_sort = dbcsr_cfg%accdrv_min_flop_sort%defval IF (PRESENT(accdrv_do_inhomogenous)) accdrv_do_inhomogenous = dbcsr_cfg%accdrv_do_inhomogenous%defval IF (PRESENT(accdrv_binning_nbins)) accdrv_binning_nbins = dbcsr_cfg%accdrv_binning_nbins%defval IF (PRESENT(accdrv_binning_binsize)) accdrv_binning_binsize = dbcsr_cfg%accdrv_binning_binsize%defval IF (PRESENT(use_mempools_cpu)) use_mempools_cpu = dbcsr_cfg%use_mempools_cpu%defval IF (PRESENT(nstacks)) nstacks = dbcsr_cfg%n_stacks%defval IF (PRESENT(tas_split_factor)) tas_split_factor = dbcsr_cfg%tas_split_factor%defval IF (PRESENT(use_acc_g2g)) use_acc_g2g = dbcsr_cfg%use_acc_g2g%defval END SUBROUTINE dbcsr_get_default_config SUBROUTINE dbcsr_print_config(unit_nr) !! Prints configuration for DBCSR INTEGER, INTENT(IN) :: unit_nr CHARACTER(len=default_string_length) :: mm_name IF (unit_nr <= 0) & RETURN SELECT CASE (dbcsr_cfg%mm_driver%val) CASE (mm_driver_blas); mm_name = mm_name_blas CASE (mm_driver_matmul); mm_name = mm_name_matmul CASE (mm_driver_smm); mm_name = mm_name_smm CASE (mm_driver_xsmm); mm_name = mm_name_xsmm CASE DEFAULT DBCSR_ABORT("Unknown MM driver") END SELECT WRITE (UNIT=unit_nr, FMT='(1X,A,T41,A40,A4)') & "DBCSR| CPU Multiplication driver", ADJUSTR(mm_name(1:40)), & dbcsr_cfg%mm_driver%print_source() WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') & "DBCSR| Multrec recursion limit", dbcsr_cfg%multrec_limit%val, & dbcsr_cfg%multrec_limit%print_source() WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') & "DBCSR| Multiplication stack size", dbcsr_cfg%mm_stack_size%val, & dbcsr_cfg%mm_stack_size%print_source() IF (dbcsr_cfg%avg_elements_images%val > 0) THEN WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') & "DBCSR| Average elements for images", dbcsr_cfg%avg_elements_images%val, & dbcsr_cfg%avg_elements_images%print_source() ELSE WRITE (UNIT=unit_nr, FMT='(1X,A,T72,A,A4)') & "DBCSR| Maximum elements for images", "UNLIMITED", & dbcsr_cfg%avg_elements_images%print_source() END IF WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') & "DBCSR| Multiplicative factor virtual images", dbcsr_cfg%num_mult_images%val, & dbcsr_cfg%num_mult_images%print_source() WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') & "DBCSR| Use multiplication densification", dbcsr_cfg%mm_dense%val, & dbcsr_cfg%mm_dense%print_source() WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') & "DBCSR| Multiplication size stacks", dbcsr_cfg%n_stacks%val, & dbcsr_cfg%n_stacks%print_source() WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') & "DBCSR| Use memory pool for CPU allocation", dbcsr_cfg%use_mempools_cpu%val, & dbcsr_cfg%use_mempools_cpu%print_source() IF (has_mpi) THEN IF (dbcsr_cfg%num_layers_3D%val < 2) THEN WRITE (UNIT=unit_nr, FMT='(1X,A,T75,A,A4)') & "DBCSR| Number of 3D layers", "SINGLE", & dbcsr_cfg%use_mempools_cpu%print_source() ELSE WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') & "DBCSR| Number of 3D layers", dbcsr_cfg%num_layers_3D%val, & dbcsr_cfg%use_mempools_cpu%print_source() END IF WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') & "DBCSR| Use MPI memory allocation", dbcsr_cfg%use_mpi_allocator%val, & dbcsr_cfg%use_mpi_allocator%print_source() WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') & "DBCSR| Use RMA algorithm", dbcsr_cfg%use_mpi_rma%val, & dbcsr_cfg%use_mpi_rma%print_source() WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') & "DBCSR| Use Communication thread", dbcsr_cfg%use_comm_thread%val, & dbcsr_cfg%use_comm_thread%print_source() WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') & "DBCSR| Communication thread load", dbcsr_cfg%comm_thread_load%val, & dbcsr_cfg%comm_thread_load%print_source() BLOCK INTEGER :: numnodes, mynode CALL mp_environ(numnodes, mynode, mp_comm_world) WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11)') & "DBCSR| MPI: My process id", mynode WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11)') & "DBCSR| MPI: Number of processes", numnodes END BLOCK END IF BLOCK INTEGER :: numthreads, numthreads_max numthreads = -1 numthreads_max = -1 !$OMP PARALLEL DEFAULT(NONE) SHARED(numthreads, numthreads_max) !$OMP MASTER !$ numthreads = omp_get_num_threads() !$ numthreads_max = omp_get_max_threads() !$OMP END MASTER !$OMP END PARALLEL IF (numthreads_max > 0) THEN WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11)') & "DBCSR| OMP: Current number of threads", numthreads WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11)') & "DBCSR| OMP: Max number of threads", numthreads_max ELSE WRITE (UNIT=unit_nr, FMT='(1X,A,T70,A11)') & "DBCSR| OMP: Current number of threads", "" WRITE (UNIT=unit_nr, FMT='(1X,A,T70,A11)') & "DBCSR| OMP: Max number of threads", "" END IF END BLOCK IF (has_acc) THEN WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11)') & "DBCSR| ACC: Number of devices/node", dbcsr_acc_get_ndevices() WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') & "DBCSR| ACC: Number of stack-buffers per thread", dbcsr_cfg%accdrv_thread_buffers%val, & dbcsr_cfg%accdrv_thread_buffers%print_source() WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') & "DBCSR| ACC: Avoid driver after busy ", dbcsr_cfg%accdrv_avoid_after_busy%val, & dbcsr_cfg%accdrv_avoid_after_busy%print_source() WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') & "DBCSR| ACC: Process inhomogeneous stacks", dbcsr_cfg%accdrv_do_inhomogenous%val, & dbcsr_cfg%accdrv_do_inhomogenous%print_source() WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') & "DBCSR| ACC: Min. flop for processing", dbcsr_cfg%accdrv_min_flop_process%val, & dbcsr_cfg%accdrv_min_flop_process%print_source() WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') & "DBCSR| ACC: Use G2G algorithm", dbcsr_cfg%use_acc_g2g%val, & dbcsr_cfg%use_acc_g2g%print_source() IF (dbcsr_cfg%accdrv_stack_sort%val) THEN WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') & "DBCSR| ACC: Min. flop for sorting", dbcsr_cfg%accdrv_min_flop_sort%val, & dbcsr_cfg%accdrv_min_flop_sort%print_source() WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') & "DBCSR| ACC: Number of binning bins", dbcsr_cfg%accdrv_binning_nbins%val, & dbcsr_cfg%accdrv_binning_nbins%print_source() WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') & "DBCSR| ACC: Size of binning bins", dbcsr_cfg%accdrv_binning_binsize%val, & dbcsr_cfg%accdrv_binning_binsize%print_source() END IF WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') & "DBCSR| ACC: GPU backend is enabled", dbcsr_cfg%run_on_gpu%val, dbcsr_cfg%run_on_gpu%print_source() END IF WRITE (UNIT=unit_nr, FMT='(1X,A,T74,ES7.1,A4)') & "DBCSR| Split modifier for TAS multiplication algorithm", dbcsr_cfg%tas_split_factor%val, & dbcsr_cfg%tas_split_factor%print_source() END SUBROUTINE dbcsr_print_config FUNCTION get_accdrv_active_device_id() INTEGER :: get_accdrv_active_device_id get_accdrv_active_device_id = accdrv_active_device_id END FUNCTION get_accdrv_active_device_id SUBROUTINE set_accdrv_active_device_id(in_accdrv_active_device_id) INTEGER, INTENT(IN) :: in_accdrv_active_device_id ! Abort if device already assigned IF (dbcsr_acc_get_ndevices() .GT. 0) THEN IF (accdrv_active_device_id .GE. 0) & DBCSR_ABORT("Accelerator device ID already set") IF (in_accdrv_active_device_id .LT. 0 .OR. in_accdrv_active_device_id .GE. dbcsr_acc_get_ndevices()) & DBCSR_ABORT("Invalid accelerator device ID") accdrv_active_device_id = in_accdrv_active_device_id END IF END SUBROUTINE set_accdrv_active_device_id SUBROUTINE reset_accdrv_active_device_id() accdrv_active_device_id = default_accdrv_active_device_id END SUBROUTINE reset_accdrv_active_device_id PURE FUNCTION use_acc() LOGICAL :: use_acc IF (has_acc .AND. dbcsr_cfg%run_on_gpu%val) THEN use_acc = .TRUE. ELSE use_acc = .FALSE. END IF END FUNCTION use_acc END MODULE dbcsr_config ================================================ FILE: src/core/dbcsr_dict.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! #:include 'dbcsr_dict.fypp' MODULE dbcsr_dict !! A dictionary (also known as hashtable or hashmap). !! Internally the dictionary uses an array to holds its data. !! If this array reaches a load-factor of 75%, a new array with twice the !! size will be allocated and the items are then copied over. !! This ensures that the dictionary will perform operations in O(1). USE dbcsr_kinds, ONLY: ${uselist(usekinds)}$ USE dbcsr_timings_base_type, ONLY: ${uselist(usetimings)}$ #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_dict' PUBLIC :: dict_init, dict_items, dict_haskey, & dict_set, dict_get, dict_size, dict_destroy #:for keytype, valuetype in keyvalue_list PUBLIC :: dict_${keytype}$_${valuetype}$_type PUBLIC :: dict_${keytype}$_${valuetype}$_item_type #:endfor #:for keytype, valuetype, keytype_fort, valuetype_fort, key_assign, value_assign, isequal, default_key, default_value in inst_params !this is an internal type !Calculating hashes might be expensive, therefore they are stored !for use during change_capacity(). TYPE private_item_type_${keytype}$_${valuetype}$ PRIVATE ${keytype_fort}$ :: key ${key_assign}$${default_key}$ ${valuetype_fort}$ :: value ${value_assign}$${default_value}$ INTEGER(KIND=int_8) :: hash = -1_int_8 TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER :: next => Null() END TYPE private_item_type_${keytype}$_${valuetype}$ !this is an internal type TYPE private_item_p_type_${keytype}$_${valuetype}$ PRIVATE TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER :: p => Null() END TYPE private_item_p_type_${keytype}$_${valuetype}$ ! this is the public type, which holds a dictionary-instance TYPE dict_${keytype}$_${valuetype}$_type PRIVATE TYPE(private_item_p_type_${keytype}$_${valuetype}$), DIMENSION(:), POINTER :: buckets => Null() INTEGER :: size = -1 END TYPE dict_${keytype}$_${valuetype}$_type ! this is a public type, its returned by dict_items() TYPE dict_${keytype}$_${valuetype}$_item_type ${keytype_fort}$ :: key ${key_assign}$${default_key}$ ${valuetype_fort}$ :: value ${value_assign}$${default_value}$ END TYPE dict_${keytype}$_${valuetype}$_item_type #:endfor INTERFACE dict_init #:for keytype, valuetype in keyvalue_list MODULE PROCEDURE dict_${keytype}$_${valuetype}$_init #:endfor END INTERFACE INTERFACE dict_haskey #:for keytype, valuetype in keyvalue_list MODULE PROCEDURE dict_${keytype}$_${valuetype}$_haskey #:endfor END INTERFACE INTERFACE dict_set #:for keytype, valuetype in keyvalue_list MODULE PROCEDURE dict_${keytype}$_${valuetype}$_set #:endfor END INTERFACE INTERFACE dict_get #:for keytype, valuetype in keyvalue_list MODULE PROCEDURE dict_${keytype}$_${valuetype}$_get #:endfor END INTERFACE INTERFACE dict_items #:for keytype, valuetype in keyvalue_list MODULE PROCEDURE dict_${keytype}$_${valuetype}$_items #:endfor END INTERFACE INTERFACE dict_size #:for keytype, valuetype in keyvalue_list MODULE PROCEDURE dict_${keytype}$_${valuetype}$_size #:endfor END INTERFACE INTERFACE dict_destroy #:for keytype, valuetype in keyvalue_list MODULE PROCEDURE dict_${keytype}$_${valuetype}$_destroy #:endfor END INTERFACE CONTAINS #:for fct in hash_fct $:fct #:endfor #:for keytype, valuetype, keytype_fort, valuetype_fort, key_assign, value_assign, isequal, default_key, default_value in inst_params SUBROUTINE dict_${keytype}$_${valuetype}$_init(dict, initial_capacity) !! Allocates the internal data-structures of the given dictionary. TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout) :: dict INTEGER, INTENT(in), OPTIONAL :: initial_capacity !! The initial size of the internal array (default=11). INTEGER :: initial_capacity_ initial_capacity_ = 11 IF (PRESENT(initial_capacity)) initial_capacity_ = initial_capacity IF (initial_capacity_ < 1) & DBCSR_ABORT("dict_${keytype}$_${valuetype}$_init: initial_capacity < 1") IF (ASSOCIATED(dict%buckets)) & DBCSR_ABORT("dict_${keytype}$_${valuetype}$_init: dictionary is already initialized.") ALLOCATE (dict%buckets(initial_capacity_)) dict%size = 0 END SUBROUTINE dict_${keytype}$_${valuetype}$_init SUBROUTINE dict_${keytype}$_${valuetype}$_destroy(dict) !! Deallocated the internal data-structures if the given dictionary. !! Caution: If the stored keys or values are pointers, their targets will !! not get deallocated by this routine. TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout) :: dict TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER :: item, prev_item INTEGER :: i IF (.not. ASSOCIATED(dict%buckets)) & DBCSR_ABORT("dict_${keytype}$_${valuetype}$_destroy: dictionary is not initialized.") do i = 1, size(dict%buckets) item => dict%buckets(i)%p do while (ASSOCIATED(item)) prev_item => item item => item%next deallocate (prev_item) end do end do deallocate (dict%buckets) dict%size = -1 END SUBROUTINE dict_${keytype}$_${valuetype}$_destroy SUBROUTINE dict_${keytype}$_${valuetype}$_set(dict, key, value) !! Stores, and possibly overwrites, a given value under a given key. TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout) :: dict ${keytype_fort}$, intent(in) :: key ${valuetype_fort}$, intent(in) :: value INTEGER(KIND=int_8) :: hash IF (.not. ASSOCIATED(dict%buckets)) & DBCSR_ABORT("dict_${keytype}$_${valuetype}$_set: dictionary is not initialized.") hash = hash_${keytype}$ (key) call set_hashed_${keytype}$_${valuetype}$ (dict, key, value, hash) END SUBROUTINE dict_${keytype}$_${valuetype}$_set RECURSIVE SUBROUTINE set_hashed_${keytype}$_${valuetype}$ (dict, key, value, hash) !! Common code used internally by dict_set() and change_capacity(). TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout) :: dict ${keytype_fort}$, intent(in) :: key ${valuetype_fort}$, intent(in) :: value INTEGER(KIND=int_8), intent(in) :: hash TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER :: item, new_item INTEGER(KIND=int_8) :: idx idx = MOD(hash, INT(size(dict%buckets), KIND=int_8)) + 1 ! if already in dict just update its value item => dict%buckets(idx)%p do while (ASSOCIATED(item)) IF (item%hash == hash) THEN IF (@{isequal(item%key, key)}@) THEN item%value ${value_assign}$value return END IF END IF item => item%next end do ! check load-factor IF (4*dict%size > 3*size(dict%buckets)) THEN ! load-factor > 75% call change_capacity_${keytype}$_${valuetype}$ (dict, 2*size(dict%buckets)) !double capacity idx = MOD(hash, INT(size(dict%buckets), KIND=int_8)) + 1 END IF ! create a new item allocate (new_item) new_item%hash = hash new_item%key ${key_assign}$key new_item%value ${value_assign}$value new_item%next => dict%buckets(idx)%p dict%buckets(idx)%p => new_item dict%size = dict%size + 1 END SUBROUTINE set_hashed_${keytype}$_${valuetype}$ RECURSIVE SUBROUTINE change_capacity_${keytype}$_${valuetype}$ (dict, new_capacity) !! Internal routine for changing the dictionary's capacity. TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout) :: dict INTEGER, intent(in) :: new_capacity INTEGER :: i, old_size, new_cap TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER :: item, prev_item TYPE(private_item_p_type_${keytype}$_${valuetype}$), DIMENSION(:), POINTER :: old_buckets new_cap = new_capacity ! pre checks IF (new_cap > HUGE(i)) THEN IF (size(dict%buckets) == HUGE(i)) RETURN ! reached maximum - stay there. new_cap = HUGE(i) ! grow as far as possible END IF IF (new_cap < 1) & DBCSR_ABORT("dict_${keytype}$_${valuetype}$_change_capacity: new_capacity < 1.") IF (4*dict%size > 3*new_cap) & DBCSR_ABORT("dict_${keytype}$_${valuetype}$_change_capacity: new_capacity too small.") old_size = dict%size old_buckets => dict%buckets ALLOCATE (dict%buckets(new_capacity)) dict%size = 0 do i = 1, size(old_buckets) item => old_buckets(i)%p do while (ASSOCIATED(item)) call set_hashed_${keytype}$_${valuetype}$ (dict, item%key, item%value, item%hash) prev_item => item item => item%next deallocate (prev_item) end do end do deallocate (old_buckets) IF (old_size /= dict%size) & DBCSR_ABORT("dict_${keytype}$_${valuetype}$_change_capacity: assertion failed") END SUBROUTINE change_capacity_${keytype}$_${valuetype}$ FUNCTION dict_${keytype}$_${valuetype}$_get(dict, key, default_value) RESULT(value) !! Gets a value for a given key from the dictionary. !! If the key is not found the default_value will be returned. !! If the key is not found and default_value was not provided the program stops. TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout) :: dict ${keytype_fort}$ :: key ${valuetype_fort}$, intent(in), optional :: default_value ${valuetype_fort}$ :: value TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER :: item INTEGER(KIND=int_8) :: hash, idx #:if valuetype_fort == 'INTEGER(kind=int_4)' value = 0 #:elif valuetype_fort == 'TYPE(call_stat_type), POINTER' NULLIFY (value) #:endif IF (.not. ASSOCIATED(dict%buckets)) & DBCSR_ABORT("dict_${keytype}$_${valuetype}$_get: dictionary is not initialized.") hash = hash_${keytype}$ (key) idx = MOD(hash, INT(size(dict%buckets), KIND=int_8)) + 1 item => dict%buckets(idx)%p do while (ASSOCIATED(item)) IF (item%hash == hash) THEN IF (@{isequal(item%key, key)}@) THEN value ${value_assign}$item%value return END IF END IF item => item%next end do IF (PRESENT(default_value)) THEN value ${value_assign}$default_value return END IF DBCSR_ABORT("dict_${keytype}$_${valuetype}$_get: Key not found in dictionary.") END FUNCTION dict_${keytype}$_${valuetype}$_get FUNCTION dict_${keytype}$_${valuetype}$_size(dict) RESULT(size) !! Returns the number of key/value-items currently stored in the dictionary. TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout) :: dict INTEGER :: size IF (.not. ASSOCIATED(dict%buckets)) & DBCSR_ABORT("dict_${keytype}$_${valuetype}$_size: dictionary is not initialized.") size = dict%size END FUNCTION dict_${keytype}$_${valuetype}$_size FUNCTION dict_${keytype}$_${valuetype}$_haskey(dict, key) RESULT(res) !! Checks whether a given key is currently stored in the dictionary. TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout) :: dict ${keytype_fort}$ :: key LOGICAL :: res TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER :: item INTEGER(KIND=int_8) :: hash, idx IF (.not. ASSOCIATED(dict%buckets)) & DBCSR_ABORT("dict_${keytype}$_${valuetype}$_haskey: dictionary is not initialized.") res = .FALSE. IF (dict%size == 0) RETURN hash = hash_${keytype}$ (key) idx = MOD(hash, INT(size(dict%buckets), KIND=int_8)) + 1 item => dict%buckets(idx)%p do while (ASSOCIATED(item)) IF (item%hash == hash) THEN IF (@{isequal(item%key, key)}@) THEN res = .TRUE. return END IF END IF item => item%next end do END FUNCTION dict_${keytype}$_${valuetype}$_haskey FUNCTION dict_${keytype}$_${valuetype}$_items(dict) RESULT(items) !! Returns a pointer to an array of all key/value-items stored in the dictionary. !! Caution: The caller is responsible for deallocating targeted array after usage. TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout) :: dict TYPE(dict_${keytype}$_${valuetype}$_item_type), dimension(:), POINTER :: items TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER :: item INTEGER :: i, j IF (.not. ASSOCIATED(dict%buckets)) & DBCSR_ABORT("dict_${keytype}$_${valuetype}$_items: dictionary is not initialized.") allocate (items(dict%size)) j = 1 do i = 1, size(dict%buckets) item => dict%buckets(i)%p do while (ASSOCIATED(item)) items(j)%key ${key_assign}$item%key items(j)%value ${value_assign}$item%value j = j + 1 item => item%next end do end do IF (j /= dict%size + 1) & DBCSR_ABORT("dict_${keytype}$_${valuetype}$_items: assertion failed!") END FUNCTION dict_${keytype}$_${valuetype}$_items #:endfor END MODULE dbcsr_dict ================================================ FILE: src/core/dbcsr_dict.fypp ================================================ #!--------------------------------------------------------------------------------------------------! #! Copyright (C) by the DBCSR developers group - All rights reserved ! #! This file is part of the DBCSR library. ! #! ! #! For information on the license, see the LICENSE file. ! #! For further information please visit https://dbcsr.cp2k.org ! #! SPDX-License-Identifier: GPL-2.0+ ! #!--------------------------------------------------------------------------------------------------! #:mute #:set keytype = ['str', 'i4tuple'] #:set valuetype = ['i4', 'callstat'] #:set keyvalue_list = list(zip(keytype, valuetype)) #:set keytype_fort = ['CHARACTER(LEN=default_string_length)', 'INTEGER(kind=int_4), dimension(2)'] #:set valuetype_fort = ['INTEGER(kind=int_4)', 'TYPE(call_stat_type), POINTER'] #:set key_assign = ['=', '='] #:set value_assign = ['=', '=>'] #:set default_key = ['""', '-1_int_4'] #:set default_value = ['-1_int_4', 'NULL()'] #:def isequal_str(k1, k2) ${k1}$ == ${k2}$ #:enddef #:def isequal_i4tuple(k1, k2) ALL(${k1}$==${k2}$) #:enddef #:set isequal = [isequal_str, isequal_i4tuple] #:def hash_str() FUNCTION hash_str(key) RESULT(hash) !! This is joaat_hash from string_table.F, generates the hash of a given string !! @note !! http://en.wikipedia.org/wiki/Hash_table !! http://www.burtleburtle.net/bob/hash/doobs.html CHARACTER(LEN=*), INTENT(IN) :: key !! key a string of any length INTEGER(KIND=int_8) :: hash INTEGER(KIND=int_8), PARAMETER :: b32 = 2_int_8**32-1_int_8 INTEGER :: i hash=0_int_8 DO i=1,LEN(key) hash=IAND(hash+ICHAR(key(i:i)) ,b32) hash=IAND( hash+IAND(ISHFT(hash,10),b32) ,b32) hash=IAND(IEOR(hash,IAND(ISHFT(hash,-6),b32)) ,b32) ENDDO hash=IAND( hash+IAND(ISHFT(hash, 3),b32) ,b32) hash=IAND(IEOR(hash,IAND(ISHFT(hash,-11),b32)) ,b32) hash=IAND( hash+IAND(ISHFT(hash, 15),b32) ,b32) END FUNCTION hash_str #:enddef #:def hash_i4tuple() FUNCTION hash_i4tuple(key) RESULT(hash) INTEGER(kind=int_4), dimension(2), INTENT(IN) :: key INTEGER(kind=int_4) :: hash hash = SUM(key) END FUNCTION hash_i4tuple #:enddef #:set hash_fct = [hash_str(), hash_i4tuple()] #:set usekinds = ['default_string_length', 'int_8', 'int_4'] #:set usetimings = ['call_stat_type'] #:set inst_params = list(zip(keytype, valuetype, keytype_fort, valuetype_fort, key_assign, value_assign, isequal, default_key, default_value)) #:def uselist(list_in) #! comma-separated list of unique entries of list_in $: ", ".join(list(set(list_in))) #:enddef #:endmute ================================================ FILE: src/core/dbcsr_error_handling.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_error_handling !! Module that contains the routines for error handling USE dbcsr_base_hooks, ONLY: dbcsr_abort_hook, & dbcsr_warn_hook USE dbcsr_kinds, ONLY: dp USE dbcsr_log_handling, ONLY: dbcsr_logger_get_default_io_unit USE dbcsr_machine, ONLY: default_output_unit, & m_flush, & m_walltime USE dbcsr_mpiwrap, ONLY: mp_abort USE dbcsr_print_messages, ONLY: print_message USE dbcsr_timings, ONLY: print_stack !$ USE OMP_LIB, ONLY: omp_get_thread_num IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_error_handling' !API public routines PUBLIC :: dbcsr_error_handling_setup !API (via pointer assignment to hook, PR67982, not meant to be called directly) PUBLIC :: dbcsr_abort_handler, dbcsr_warn_handler INTEGER, PUBLIC, SAVE :: warning_counter = 0 CONTAINS SUBROUTINE dbcsr_error_handling_setup() !! Registers handlers with base_hooks.F dbcsr_abort_hook => dbcsr_abort_handler dbcsr_warn_hook => dbcsr_warn_handler END SUBROUTINE dbcsr_error_handling_setup SUBROUTINE dbcsr_abort_handler(location, message) !! Abort program with error message CHARACTER(len=*), INTENT(in) :: location, message INTEGER :: unit_nr CALL delay_non_master() ! cleaner output if all ranks abort simultaneously unit_nr = dbcsr_logger_get_default_io_unit() IF (unit_nr <= 0) & unit_nr = default_output_unit ! fall back to stdout CALL print_abort_message(message, location, unit_nr) CALL print_stack(unit_nr) CALL m_flush(unit_nr) CALL mp_abort() END SUBROUTINE dbcsr_abort_handler SUBROUTINE dbcsr_warn_handler(location, message) !! Signal a warning CHARACTER(len=*), INTENT(in) :: location, message INTEGER :: unit_nr !$OMP MASTER warning_counter = warning_counter + 1 !$OMP END MASTER unit_nr = dbcsr_logger_get_default_io_unit() IF (unit_nr > 0) THEN CALL print_message("WARNING in "//TRIM(location)//' :: '//TRIM(ADJUSTL(message)), unit_nr, 1, 1, 1) CALL m_flush(unit_nr) END IF END SUBROUTINE dbcsr_warn_handler SUBROUTINE delay_non_master() !! Delay non-master ranks/threads, used by dbcsr_abort_handler() INTEGER :: unit_nr REAL(KIND=dp) :: t1, wait_time wait_time = 0.0_dp ! we (ab)use the logger to determine the first MPI rank unit_nr = dbcsr_logger_get_default_io_unit() IF (unit_nr <= 0) & wait_time = wait_time + 1.0_dp ! rank-0 gets a head start of one second. !$ IF (omp_get_thread_num() /= 0) & !$ wait_time = wait_time + 1.0_dp ! master threads gets another second ! sleep IF (wait_time > 0.0_dp) THEN t1 = m_walltime() DO IF (m_walltime() - t1 > wait_time .OR. t1 < 0) EXIT END DO END IF END SUBROUTINE delay_non_master SUBROUTINE print_abort_message(message, location, output_unit) !! Prints a nicely formatted abort message box CHARACTER(LEN=*), INTENT(IN) :: message, location INTEGER, INTENT(IN) :: output_unit CHARACTER(LEN=*), PARAMETER :: img = " ___ "//" / \ "//" [ABORT] "//" \___/ "// & " | "//" O/| "//" /| | "//" / \ " INTEGER, PARAMETER :: img_height = 8, img_width = 9, screen_width = 80, & txt_width = screen_width - img_width - 5 CHARACTER(LEN=screen_width) :: msg_line INTEGER :: a, b, c, fill, i, img_start, indent, & msg_height, msg_start ! count message lines a = 1; b = -1; msg_height = 0 DO WHILE (b < LEN_TRIM(message)) b = next_linebreak(message, a, txt_width) a = b + 1 msg_height = msg_height + 1 END DO ! calculate message and image starting lines IF (img_height > msg_height) THEN msg_start = (img_height - msg_height)/2 + 1 img_start = 1 ELSE msg_start = 1 img_start = msg_height - img_height + 2 END IF ! print empty line WRITE (UNIT=output_unit, FMT="(A)") "" ! print opening line WRITE (UNIT=output_unit, FMT="(T2,A)") REPEAT("*", screen_width - 1) ! print body a = 1; b = -1; c = 1 DO i = 1, MAX(img_height - 1, msg_height) WRITE (UNIT=output_unit, FMT="(A)", advance='no') " *" IF (i < img_start) THEN WRITE (UNIT=output_unit, FMT="(A)", advance='no') REPEAT(" ", img_width) ELSE WRITE (UNIT=output_unit, FMT="(A)", advance='no') img(c:c + img_width - 1) c = c + img_width END IF IF (i < msg_start) THEN WRITE (UNIT=output_unit, FMT="(A)", advance='no') REPEAT(" ", txt_width + 2) ELSE b = next_linebreak(message, a, txt_width) msg_line = message(a:b) a = b + 1 fill = (txt_width - LEN_TRIM(msg_line))/2 + 1 indent = txt_width - LEN_TRIM(msg_line) - fill + 2 WRITE (UNIT=output_unit, FMT="(A)", advance='no') REPEAT(" ", indent) WRITE (UNIT=output_unit, FMT="(A)", advance='no') TRIM(msg_line) WRITE (UNIT=output_unit, FMT="(A)", advance='no') REPEAT(" ", fill) END IF WRITE (UNIT=output_unit, FMT="(A)", advance='yes') "*" END DO ! print location line WRITE (UNIT=output_unit, FMT="(A)", advance='no') " *" WRITE (UNIT=output_unit, FMT="(A)", advance='no') img(c:c + img_width - 1) indent = txt_width - LEN_TRIM(location) + 1 WRITE (UNIT=output_unit, FMT="(A)", advance='no') REPEAT(" ", indent) WRITE (UNIT=output_unit, FMT="(A)", advance='no') TRIM(location) WRITE (UNIT=output_unit, FMT="(A)", advance='yes') " *" ! print closing line WRITE (UNIT=output_unit, FMT="(T2,A)") REPEAT("*", screen_width - 1) ! print empty line WRITE (UNIT=output_unit, FMT="(A)") "" END SUBROUTINE print_abort_message FUNCTION next_linebreak(message, pos, rowlen) RESULT(ibreak) !! Helper routine for print_abort_message() CHARACTER(LEN=*), INTENT(IN) :: message INTEGER, INTENT(IN) :: pos, rowlen INTEGER :: ibreak INTEGER :: i, n n = LEN_TRIM(message) IF (n - pos <= rowlen) THEN ibreak = n ! remaining message shorter than line ELSE i = INDEX(message(pos + 1:pos + 1 + rowlen), " ", BACK=.TRUE.) IF (i == 0) THEN ibreak = pos + rowlen - 1 ! no space found, break mid-word ELSE ibreak = pos + i ! break at space closest to rowlen END IF END IF END FUNCTION next_linebreak END MODULE dbcsr_error_handling ================================================ FILE: src/core/dbcsr_iter_types.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_iter_types !! Collection of routines to handle the iteration info USE dbcsr_kinds, ONLY: default_path_length, & default_string_length #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE ! iteration_info PUBLIC :: dbcsr_iteration_info_type, & dbcsr_iteration_info_create, & dbcsr_iteration_info_retain, & dbcsr_iteration_info_release CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_iter_types' LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .FALSE. INTEGER, SAVE, PRIVATE :: last_it_info_id = 0 TYPE dbcsr_iteration_info_type !! contains the information about the current state of the program !! to be able to decide if output is necessary INTEGER :: ref_count = -1, id_nr = -1 INTEGER :: print_level = -1, n_rlevel = -1 INTEGER, DIMENSION(:), POINTER :: iteration => NULL() LOGICAL, DIMENSION(:), POINTER :: last_iter => NULL() CHARACTER(len=default_string_length) :: project_name = "" CHARACTER(LEN=default_string_length), & DIMENSION(:), POINTER :: level_name => NULL() END TYPE dbcsr_iteration_info_type CONTAINS SUBROUTINE dbcsr_iteration_info_create(iteration_info, project_name) !! creates an output info object TYPE(dbcsr_iteration_info_type), POINTER :: iteration_info !! the object to create CHARACTER(len=*), INTENT(in) :: project_name !! name of the project, used to create the filenames CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_iteration_info_create', & routineP = moduleN//':'//routineN INTEGER :: stat ALLOCATE (iteration_info, stat=stat) IF (stat /= 0) & DBCSR_ABORT(routineP//" could not allocate iteration_info") last_it_info_id = last_it_info_id + 1 iteration_info%id_nr = last_it_info_id iteration_info%ref_count = 1 iteration_info%print_level = 2 iteration_info%n_rlevel = 1 iteration_info%project_name = project_name NULLIFY (iteration_info%iteration) NULLIFY (iteration_info%level_name) NULLIFY (iteration_info%last_iter) ALLOCATE (iteration_info%iteration(iteration_info%n_rlevel), stat=stat) IF (stat /= 0) THEN DBCSR_ABORT(routineP//" iteration_info%iteration allocation") END IF ALLOCATE (iteration_info%level_name(iteration_info%n_rlevel), stat=stat) IF (stat /= 0) THEN DBCSR_ABORT(routineP//" iteration_info%level_name allocation") END IF ALLOCATE (iteration_info%last_iter(iteration_info%n_rlevel), stat=stat) IF (stat /= 0) THEN DBCSR_ABORT(routineP//" iteration_info%last_iter allocation") END IF iteration_info%iteration(iteration_info%n_rlevel) = 1 iteration_info%level_name(iteration_info%n_rlevel) = "__ROOT__" iteration_info%last_iter(iteration_info%n_rlevel) = .FALSE. END SUBROUTINE dbcsr_iteration_info_create SUBROUTINE dbcsr_iteration_info_retain(iteration_info) !! retains the iteration_info (see doc/ReferenceCounting.html) TYPE(dbcsr_iteration_info_type), POINTER :: iteration_info !! the iteration_info to retain CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_iteration_info_retain', & routineP = moduleN//':'//routineN IF (.NOT. ASSOCIATED(iteration_info)) THEN DBCSR_ABORT(routineP//" iteration_info not associated") END IF IF (iteration_info%ref_count <= 0) THEN DBCSR_ABORT(routineP//" iteration_info%ref_counf<=0") END IF iteration_info%ref_count = iteration_info%ref_count + 1 END SUBROUTINE dbcsr_iteration_info_retain SUBROUTINE dbcsr_iteration_info_release(iteration_info) !! releases the iteration_info (see doc/ReferenceCounting.html) TYPE(dbcsr_iteration_info_type), POINTER :: iteration_info !! the iteration_info to release CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_iteration_info_release', & routineP = moduleN//':'//routineN IF (ASSOCIATED(iteration_info)) THEN IF (iteration_info%ref_count <= 0) THEN DBCSR_ABORT(routineP//" iteration_info%ref_counf<=0") END IF iteration_info%ref_count = iteration_info%ref_count - 1 IF (iteration_info%ref_count == 0) THEN IF (ASSOCIATED(iteration_info%iteration)) THEN DEALLOCATE (iteration_info%iteration) END IF IF (ASSOCIATED(iteration_info%last_iter)) THEN DEALLOCATE (iteration_info%last_iter) END IF IF (ASSOCIATED(iteration_info%level_name)) THEN DEALLOCATE (iteration_info%level_name) END IF DEALLOCATE (iteration_info) END IF END IF END SUBROUTINE dbcsr_iteration_info_release END MODULE dbcsr_iter_types ================================================ FILE: src/core/dbcsr_lib.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_lib !! Routines that affect the DBCSR library as a whole USE dbcsr_acc_init, ONLY: acc_finalize, acc_init USE dbcsr_acc_device, ONLY: dbcsr_acc_get_ndevices USE dbcsr_config, ONLY: set_accdrv_active_device_id, & reset_accdrv_active_device_id, & dbcsr_set_config, & use_acc USE dbcsr_kinds, ONLY: int_1_size, & int_2_size, & int_4_size, & int_8_size, dp USE dbcsr_machine, ONLY: default_output_unit USE dbcsr_mpiwrap, ONLY: add_mp_perf_env, & describe_mp_perf_env, & has_mp_perf_env, & mp_environ, mp_cart_rank, & rm_mp_perf_env, & mp_comm_free, & mp_get_comm_count, mp_comm_type, mp_comm_null USE dbcsr_mm, ONLY: dbcsr_multiply_clear_mempools, & dbcsr_multiply_lib_finalize, & dbcsr_multiply_lib_init, & dbcsr_multiply_print_statistics USE dbcsr_timings, ONLY: add_timer_env, & rm_timer_env, & timings_register_hooks USE dbcsr_timings_report, ONLY: cost_type_time, & timings_report_callgraph, & timings_report_print USE dbcsr_log_handling, ONLY: dbcsr_add_default_logger, & dbcsr_logger_create, & dbcsr_logger_release, & dbcsr_logger_type, & dbcsr_rm_default_logger USE dbcsr_base_hooks, ONLY: timeset_hook, & timestop_hook, & dbcsr_abort_hook, & dbcsr_warn_hook, & dbcsr_abort_interface, dbcsr_warn_interface, & timeset_interface, timestop_interface use dbcsr_types, only: dbcsr_mp_obj use dbcsr_mp_methods, only: dbcsr_mp_new, dbcsr_mp_release, & dbcsr_mp_make_env use dbcsr_error_handling, only: dbcsr_error_handling_setup #include "base/dbcsr_base_uses.f90" #if defined (__DBCSR_ACC) USE ISO_C_BINDING, ONLY: C_INT #endif IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_lib' PUBLIC :: dbcsr_init_lib, dbcsr_finalize_lib, dbcsr_clear_mempools PUBLIC :: dbcsr_print_statistics LOGICAL, PRIVATE, SAVE :: is_initialized = .FALSE. LOGICAL, PRIVATE, SAVE :: check_comm_count = .FALSE. TYPE(dbcsr_logger_type), POINTER :: logger => Null() TYPE(dbcsr_mp_obj), SAVE :: mp_env TYPE(mp_comm_type), SAVE :: default_group = mp_comm_null INTEGER, SAVE :: ext_io_unit INTERFACE dbcsr_init_lib MODULE PROCEDURE dbcsr_init_lib_def MODULE PROCEDURE dbcsr_init_lib_hooks END INTERFACE #if defined (__DBCSR_ACC) INTERFACE FUNCTION libsmm_acc_is_thread_safe() & RESULT(thread_safe) & BIND(C, name="libsmm_acc_is_thread_safe") IMPORT INTEGER(KIND=C_INT) :: thread_safe END FUNCTION libsmm_acc_is_thread_safe END INTERFACE INTERFACE FUNCTION libsmm_acc_gpu_warp_size() & RESULT(warp_size) & BIND(C, name="libsmm_acc_gpu_warp_size") IMPORT INTEGER(KIND=C_INT) :: warp_size END FUNCTION libsmm_acc_gpu_warp_size END INTERFACE #endif CONTAINS SUBROUTINE dbcsr_init_lib_def(mp_comm, io_unit, accdrv_active_device_id) !! Initialize the DBCSR library using internal loggers and timer callbacks !! We do not need this routine within the library, so we keep the communicator as a handle !! and convert it here to a communicator type INTEGER, INTENT(IN) :: mp_comm INTEGER, INTENT(IN), OPTIONAL :: io_unit, accdrv_active_device_id TYPE(mp_comm_type) :: my_mp_comm IF (is_initialized) THEN ! Update ext_io_unit IF (.NOT. ASSOCIATED(logger) .AND. PRESENT(io_unit)) ext_io_unit = io_unit RETURN END IF CALL my_mp_comm%set_handle(mp_comm) CALL dbcsr_init_lib_pre(my_mp_comm, io_unit, accdrv_active_device_id) ! ! Declare loggers CALL dbcsr_logger_create(logger, mp_env=mp_env, & default_global_unit_nr=ext_io_unit, & close_global_unit_on_dealloc=.FALSE.) CALL dbcsr_add_default_logger(logger) CALL dbcsr_logger_release(logger) ! abort/warn hooks CALL dbcsr_error_handling_setup() ! timeset/timestop hooks CALL timings_register_hooks() ! timer environment CALL add_mp_perf_env() CALL add_timer_env() ! CALL dbcsr_init_lib_low() END SUBROUTINE dbcsr_init_lib_def SUBROUTINE dbcsr_init_lib_hooks(mp_comm, & in_timeset_hook, in_timestop_hook, & in_abort_hook, in_warn_hook, io_unit, & accdrv_active_device_id) !! Initialize the DBCSR library using external loggers and timer callbacks !! We do not need this routine within the library, so we keep the communicator as a handle !! and convert it here to a communicator type INTEGER, INTENT(IN) :: mp_comm PROCEDURE(timeset_interface), INTENT(IN), POINTER :: in_timeset_hook PROCEDURE(timestop_interface), INTENT(IN), POINTER :: in_timestop_hook PROCEDURE(dbcsr_abort_interface), INTENT(IN), POINTER :: in_abort_hook PROCEDURE(dbcsr_warn_interface), INTENT(IN), POINTER :: in_warn_hook INTEGER, INTENT(IN), OPTIONAL :: io_unit, accdrv_active_device_id TYPE(mp_comm_type) :: my_mp_comm IF (is_initialized) THEN ! Update ext_io_unit IF (.NOT. ASSOCIATED(logger) .AND. PRESENT(io_unit)) ext_io_unit = io_unit RETURN END IF CALL my_mp_comm%set_handle(mp_comm) CALL dbcsr_init_lib_pre(my_mp_comm, io_unit, accdrv_active_device_id) ! abort/warn hooks dbcsr_abort_hook => in_abort_hook dbcsr_warn_hook => in_warn_hook ! timeset/timestop hooks timeset_hook => in_timeset_hook timestop_hook => in_timestop_hook ! timer environment is assumed ! CALL dbcsr_init_lib_low() END SUBROUTINE dbcsr_init_lib_hooks SUBROUTINE dbcsr_init_lib_pre(mp_comm, io_unit, accdrv_active_device_id) !! Initialize the DBCSR library !! Prepares the DBCSR library for use. #if defined(__LIBXSMM) USE libxsmm, ONLY: libxsmm_init #endif TYPE(mp_comm_type), INTENT(IN) :: mp_comm INTEGER, INTENT(IN), OPTIONAL :: io_unit, accdrv_active_device_id INTEGER :: numnodes, mynode #if defined(__DBCSR_ACC) INTEGER :: dbcsr_thread_safe, libsmm_acc_thread_safe #endif ! construct defaults which were unknown at compile-time (dbcsr_config_type) CALL dbcsr_set_config() CALL mp_environ(numnodes, mynode, mp_comm) IF (PRESENT(io_unit)) THEN ext_io_unit = io_unit ELSE ext_io_unit = 0 IF (mynode .EQ. 0) ext_io_unit = default_output_unit END IF ! if MPI was not initialized in DBCSR, then need to check for the number of communicators ! when we finalize DBCSR IF (mp_get_comm_count() .EQ. 0) THEN check_comm_count = .TRUE. END IF CALL dbcsr_mp_make_env(mp_env, default_group, mp_comm) #if defined(__LIBXSMM) CALL libxsmm_init() #endif ! Initialize Acc and set active device IF (use_acc()) THEN IF (PRESENT(accdrv_active_device_id)) THEN CALL set_accdrv_active_device_id(accdrv_active_device_id) ELSEIF (dbcsr_acc_get_ndevices() > 0) THEN ! Use round-robin assignment per rank CALL set_accdrv_active_device_id(MOD(mynode, dbcsr_acc_get_ndevices())) ELSE DBCSR_ABORT("dbcsr_init_lib: No recognized GPU devices") END IF CALL acc_init() END IF #if defined(__DBCSR_ACC) ! Checks related to DBCSR's GPU backend: check consistency in threading level libsmm_acc_thread_safe = libsmm_acc_is_thread_safe() ! 0: not threaded, 1: threaded dbcsr_thread_safe = 0 ! not threaded !$ dbcsr_thread_safe = 1 ! if DBCSR is compiled with openmp, set to threaded ! Check whether DBCSR and libsmm_acc (GPU backend) have the same level of threading IF (dbcsr_thread_safe /= libsmm_acc_thread_safe) then IF (dbcsr_thread_safe /= 0) then CALL dbcsr_abort(__LOCATION__, & "DBCSR compiled w/ threading support while libsmm_acc compiled w/o threading support.") ELSE CALL dbcsr_abort(__LOCATION__, & "DBCSR compiled w/o threading support while libsmm_acc is compiled w/ threading support.") END IF END IF #endif END SUBROUTINE dbcsr_init_lib_pre SUBROUTINE dbcsr_init_lib_low() !! Initialize the DBCSR library !! Prepares the DBCSR library for use. CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_init_lib_low' INTEGER :: error_handle CALL timeset(routineN, error_handle) ! IF (int_1_size /= 1) & DBCSR_ABORT("Incorrect assumption of an 8-bit integer size!") IF (int_2_size /= 2) & DBCSR_ABORT("Incorrect assumption of a 16-bit integer size!") IF (int_4_size /= 4) & DBCSR_ABORT("Incorrect assumption of a 32-bit integer size!") IF (int_8_size /= 8) & DBCSR_ABORT("Incorrect assumption of a 64-bit integer size!") IF (.NOT. has_mp_perf_env()) THEN CALL add_mp_perf_env() END IF !$OMP PARALLEL DEFAULT(NONE) CALL dbcsr_multiply_lib_init() !$OMP END PARALLEL is_initialized = .TRUE. CALL timestop(error_handle) END SUBROUTINE dbcsr_init_lib_low SUBROUTINE dbcsr_finalize_lib() !! Finalize the DBCSR library !! Cleans up after the DBCSR library. Used to deallocate persistent objects. #if defined(__LIBXSMM) USE libxsmm, ONLY: libxsmm_finalize #endif CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_finalize_lib' INTEGER :: error_handle IF (.NOT. is_initialized) RETURN CALL timeset(routineN, error_handle) !$OMP PARALLEL DEFAULT(NONE) SHARED(ext_io_unit, default_group) CALL dbcsr_multiply_lib_finalize() !$OMP END PARALLEL is_initialized = .FALSE. CALL timestop(error_handle) IF (ASSOCIATED(logger)) THEN CALL dbcsr_rm_default_logger() CALL rm_mp_perf_env() CALL rm_timer_env() NULLIFY (logger) END IF NULLIFY (timeset_hook) NULLIFY (timestop_hook) NULLIFY (dbcsr_abort_hook) NULLIFY (dbcsr_warn_hook) CALL dbcsr_mp_release(mp_env) CALL mp_comm_free(default_group) #if defined(__LIBXSMM) CALL libxsmm_finalize() #endif ! Reset Acc ID CALL reset_accdrv_active_device_id() IF (use_acc()) THEN CALL acc_finalize() END IF ! Check the number of communicators IF (check_comm_count .AND. mp_get_comm_count() .NE. 0) THEN DBCSR_ABORT("Number of DBCSR sub-communicators is not zero!") END IF END SUBROUTINE dbcsr_finalize_lib SUBROUTINE dbcsr_print_statistics(print_timers, callgraph_filename) !! Show the whole DBCSR statistics !! Prepares the DBCSR library for use. LOGICAL, INTENT(IN), OPTIONAL :: print_timers CHARACTER(len=*), INTENT(IN), OPTIONAL :: callgraph_filename LOGICAL :: my_print_timers IF (ext_io_unit > 0) THEN WRITE (UNIT=ext_io_unit, FMT="(/,T2,A)") REPEAT("-", 79) WRITE (UNIT=ext_io_unit, FMT="(T2,A,T80,A)") "-", "-" WRITE (UNIT=ext_io_unit, FMT="(T2,A,T35,A,T80,A)") "-", "DBCSR STATISTICS", "-" WRITE (UNIT=ext_io_unit, FMT="(T2,A,T80,A)") "-", "-" WRITE (UNIT=ext_io_unit, FMT="(T2,A)") REPEAT("-", 79) END IF call dbcsr_multiply_print_statistics(default_group, ext_io_unit) IF (ext_io_unit > 0) WRITE (UNIT=ext_io_unit, FMT="(T2,A)") REPEAT("-", 79) CALL describe_mp_perf_env(ext_io_unit) my_print_timers = .FALSE. IF (PRESENT(print_timers)) my_print_timers = print_timers IF (my_print_timers) CALL dbcsr_print_timers() ! Dump callgraph IF (PRESENT(callgraph_filename) .AND. ASSOCIATED(logger)) THEN CALL timings_report_callgraph(callgraph_filename) END IF END SUBROUTINE dbcsr_print_statistics SUBROUTINE dbcsr_print_timers() !! Print timers IF (ASSOCIATED(logger)) THEN CALL timings_report_print(ext_io_unit, 0.0_dp, .FALSE., cost_type_time, .TRUE., mp_env) END IF END SUBROUTINE dbcsr_print_timers SUBROUTINE dbcsr_clear_mempools() !! Deallocate memory contained in mempools !$OMP PARALLEL DEFAULT(NONE) CALL dbcsr_multiply_clear_mempools() !$OMP END PARALLEL END SUBROUTINE dbcsr_clear_mempools END MODULE dbcsr_lib ================================================ FILE: src/core/dbcsr_list.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! #:include 'dbcsr_list.fypp' MODULE dbcsr_list !! An array-based list which grows on demand. !! When the internal array is full, a new array of twice the size will be !! allocated and the items are copied over. !! This list can also be used as a stack. !! Have look at list_push(), list_pop() and list_peek(). !! @note !! it's not possible to put all templates in a single module because this would lead to circular !! dependencies (timer_env_type contains list_routinestat_type and list_callstackentry_type, and !! list_timerenv_type contains timer_env_type) !! @endnote USE dbcsr_timings_base_type, ONLY: ${uselist(usetimingsbase)}$ USE dbcsr_list_callstackentry, ONLY: @{uselist_listmethods(callstackentry)}@ USE dbcsr_list_routinereport, ONLY: @{uselist_listmethods(routinereport)}@ USE dbcsr_list_routinestat, ONLY: @{uselist_listmethods(routinestat)}@ USE dbcsr_list_timerenv, ONLY: @{uselist_listmethods(timerenv)}@ #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_list' PUBLIC :: list_init, list_isready, list_push, list_pop, list_peek, & list_get, list_size, list_destroy #:for vtype in valuetype PUBLIC :: list_${vtype}$_type #:endfor INTERFACE list_init #:for vtype in valuetype MODULE PROCEDURE list_${vtype}$_init #:endfor END INTERFACE INTERFACE list_isready #:for vtype in valuetype MODULE PROCEDURE list_${vtype}$_isready #:endfor END INTERFACE INTERFACE list_push #:for vtype in valuetype MODULE PROCEDURE list_${vtype}$_push #:endfor END INTERFACE INTERFACE list_pop #:for vtype in valuetype MODULE PROCEDURE list_${vtype}$_pop #:endfor END INTERFACE INTERFACE list_peek #:for vtype in valuetype MODULE PROCEDURE list_${vtype}$_peek #:endfor END INTERFACE INTERFACE list_insert #:for vtype in valuetype MODULE PROCEDURE list_${vtype}$_insert #:endfor END INTERFACE INTERFACE list_set #:for vtype in valuetype MODULE PROCEDURE list_${vtype}$_set #:endfor END INTERFACE INTERFACE list_get #:for vtype in valuetype MODULE PROCEDURE list_${vtype}$_get #:endfor END INTERFACE INTERFACE list_del #:for vtype in valuetype MODULE PROCEDURE list_${vtype}$_del #:endfor END INTERFACE INTERFACE list_clear #:for vtype in valuetype MODULE PROCEDURE list_${vtype}$_clear #:endfor END INTERFACE INTERFACE list_size #:for vtype in valuetype MODULE PROCEDURE list_${vtype}$_size #:endfor END INTERFACE INTERFACE list_destroy #:for vtype in valuetype MODULE PROCEDURE list_${vtype}$_destroy #:endfor END INTERFACE END MODULE dbcsr_list ================================================ FILE: src/core/dbcsr_list.fypp ================================================ #!--------------------------------------------------------------------------------------------------! #! Copyright (C) by the DBCSR developers group - All rights reserved ! #! This file is part of the DBCSR library. ! #! ! #! For information on the license, see the LICENSE file. ! #! For further information please visit https://dbcsr.cp2k.org ! #! SPDX-License-Identifier: GPL-2.0+ ! #!--------------------------------------------------------------------------------------------------! #:mute #:set valuetype = ['timerenv', 'routinestat', 'routinereport', 'callstackentry'] #:set usetimings = ['timer_env_type'] #:set usetimingsbase = ['routine_stat_type', 'routine_report_type', 'callstack_entry_type'] #:set valuetype_in = ['TYPE(timer_env_type), POINTER', 'TYPE(routine_stat_type), POINTER', 'TYPE(routine_report_type), POINTER', 'TYPE(callstack_entry_type)'] #:set valuetype_out = valuetype_in #:set value_assign = ['=>','=>','=>','='] #:set inst_params = list(zip(valuetype, valuetype_in, valuetype_out, value_assign)) #:def uselist(list_in) #! comma-separated list of unique entries of list_in $: ", ".join(list(set(list_in))) #:enddef #:def uselist_listmethods(t) $:", ".join(['list_'+t+'_type', 'list_'+t+'_init', 'list_'+t+'_push', 'list_'+t+'_pop', 'list_'+t+'_peek', & 'list_'+t+'_insert', 'list_'+t+'_set', 'list_'+t+'_get', 'list_'+t+'_del', 'list_'+t+'_clear', & 'list_'+t+'_size', 'list_'+t+'_destroy', 'list_'+t+'_isready']) #:enddef #:def list_body(valuetype, valuetype_in, valuetype_out, value_assign) #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE PUBLIC :: ${uselist_listmethods(valuetype)}$ !this is an internal type TYPE private_item_type_${valuetype}$ PRIVATE ${valuetype_out}$ :: value END TYPE private_item_type_${valuetype}$ !this is an internal type TYPE private_item_p_type_${valuetype}$ PRIVATE TYPE(private_item_type_${valuetype}$), POINTER :: p => Null() END TYPE private_item_p_type_${valuetype}$ ! this is the public type, which holds a list-instance TYPE list_${valuetype}$_type PRIVATE TYPE(private_item_p_type_${valuetype}$), DIMENSION(:), POINTER :: arr => Null() INTEGER :: size = -1 END TYPE list_${valuetype}$_type CONTAINS FUNCTION list_${valuetype}$_isready(list) RESULT(res) !! Test if the given list has been initialized. TYPE(list_${valuetype}$_type), intent(in) :: list LOGICAL :: res res = ASSOCIATED(list%arr) END FUNCTION list_${valuetype}$_isready SUBROUTINE list_${valuetype}$_init(list, initial_capacity) !! Allocates the internal data-structures of the given list. !! This has to be called before any of the other routines. !! For deallocation call list_[valuetype]_destroy. TYPE(list_${valuetype}$_type), intent(inout) :: list INTEGER, INTENT(in), OPTIONAL :: initial_capacity !! The initial size of the internal array (default=11). INTEGER :: stat INTEGER :: initial_capacity_ initial_capacity_ = 11 If(PRESENT(initial_capacity)) initial_capacity_ = initial_capacity IF(initial_capacity_ < 0) & DBCSR_ABORT("list_${valuetype}$_create: initial_capacity < 0") IF(ASSOCIATED(list%arr)) & DBCSR_ABORT("list_${valuetype}$_create: list is already initialized.") ALLOCATE(list%arr(initial_capacity_), stat=stat) IF (stat/=0)& DBCSR_ABORT("list_${valuetype}$_init: allocation failed") list%size = 0 END SUBROUTINE list_${valuetype}$_init SUBROUTINE list_${valuetype}$_destroy(list) !! Deallocated the internal data-structures of the given list. !! Caution: If the stored values are pointers, their targets will !! not get deallocated by this routine. TYPE(list_${valuetype}$_type), intent(inout) :: list INTEGER :: i IF(.not. ASSOCIATED(list%arr)) & DBCSR_ABORT("list_${valuetype}$_destroy: list is not initialized.") do i=1, list%size deallocate(list%arr(i)%p) end do deallocate(list%arr) list%size = -1 END SUBROUTINE list_${valuetype}$_destroy SUBROUTINE list_${valuetype}$_set(list, value, pos) !! Assings the given value to the given position in the list. !! Thereby, the former value at that position gets overwritten. !! If the position is out of bounds, the program stops. TYPE(list_${valuetype}$_type), intent(inout) :: list ${valuetype_in}$, intent(in) :: value INTEGER, intent(in) :: pos !! Position in the list - must fulfill 0 < pos < list_size+1. IF(.not. ASSOCIATED(list%arr)) & DBCSR_ABORT("list_${valuetype}$_set: list is not initialized.") IF(pos < 1)& DBCSR_ABORT("list_${valuetype}$_set: pos < 1") IF(pos > list%size)& DBCSR_ABORT("list_${valuetype}$_set: pos > size") list%arr(pos)%p%value ${value_assign}$ value END SUBROUTINE list_${valuetype}$_set SUBROUTINE list_${valuetype}$_push(list, value) !! Appends the given value at the end of the list. TYPE(list_${valuetype}$_type), intent(inout) :: list ${valuetype_in}$, intent(in) :: value INTEGER :: stat IF(.not. ASSOCIATED(list%arr)) & DBCSR_ABORT("list_${valuetype}$_push: list is not initialized.") if(list%size == size(list%arr)) & call change_capacity_${valuetype}$(list, 2*size(list%arr)+1) list%size = list%size + 1 ALLOCATE(list%arr(list%size)%p, stat=stat) IF (stat/=0)& DBCSR_ABORT("list_${valuetype}$_push: allocation failed") list%arr(list%size)%p%value ${value_assign}$ value END SUBROUTINE list_${valuetype}$_push SUBROUTINE list_${valuetype}$_insert(list, value, pos) !! Inserts the given value at the given position within the list. !! Values which lay behind the insertion-position move one position up. TYPE(list_${valuetype}$_type), intent(inout) :: list ${valuetype_in}$, intent(in) :: value INTEGER, intent(in) :: pos !! Position in the list - must fulfill 0 < pos < list_size+2 . INTEGER :: i, stat IF(.not. ASSOCIATED(list%arr)) & DBCSR_ABORT("list_${valuetype}$_insert: list is not initialized.") IF(pos < 1)& DBCSR_ABORT("list_${valuetype}$_insert: pos < 1") IF(pos > list%size+1)& DBCSR_ABORT("list_${valuetype}$_insert: pos > size+1") if(list%size == size(list%arr)) & call change_capacity_${valuetype}$(list, 2*size(list%arr)+1) list%size = list%size + 1 do i=list%size, pos+1, -1 list%arr(i)%p => list%arr(i-1)%p end do ALLOCATE(list%arr(pos)%p, stat=stat) IF (stat/=0)& DBCSR_ABORT("list_${valuetype}$_insert: allocation failed.") list%arr(pos)%p%value ${value_assign}$ value END SUBROUTINE list_${valuetype}$_insert FUNCTION list_${valuetype}$_peek(list) RESULT(value) !! Returns the last element in the list. !! Is equivalent to: list_${valuetype}$_get(list, list_${valuetype}$_size(list)) TYPE(list_${valuetype}$_type), intent(inout) :: list ${valuetype_out}$ :: value IF(.not. ASSOCIATED(list%arr)) & DBCSR_ABORT("list_${valuetype}$_peek: list is not initialized.") IF(list%size < 1) & DBCSR_ABORT("list_${valuetype}$_peek: list is empty.") value ${value_assign}$ list%arr(list%size)%p%value END FUNCTION list_${valuetype}$_peek FUNCTION list_${valuetype}$_pop(list) RESULT(value) !! Returns the last element in the list and removes it. !! Is equivialent to: !! value = list_${valuetype}$_get(list, list_${valuetype}$_size(list)) !! call list_${valuetype}$_del(list, list_${valuetype}$_size(list)) TYPE(list_${valuetype}$_type), intent(inout) :: list ${valuetype_out}$ :: value IF(.not. ASSOCIATED(list%arr)) & DBCSR_ABORT("list_${valuetype}$_pop: list is not initialized.") IF(list%size < 1) & DBCSR_ABORT("list_${valuetype}$_pop: list is empty.") value ${value_assign}$ list%arr(list%size)%p%value deallocate(list%arr(list%size)%p) list%size = list%size - 1 END FUNCTION list_${valuetype}$_pop SUBROUTINE list_${valuetype}$_clear(list) !! Removes all values from the list. The list itself is not deallocated. TYPE(list_${valuetype}$_type), intent(inout) :: list INTEGER :: i IF(.not. ASSOCIATED(list%arr)) & DBCSR_ABORT("list_${valuetype}$_clear: list is not initialized.") do i=1, list%size deallocate(list%arr(i)%p) end do list%size = 0 END SUBROUTINE list_${valuetype}$_clear ! FUNCTION list_${valuetype}$_get(list, pos) RESULT(value) !! Returns the value at the given position from the list. TYPE(list_${valuetype}$_type), intent(in) :: list INTEGER, intent(in) :: pos !! Position in the list - must fulfill 0 < pos < list_size+1 . ${valuetype_out}$ :: value IF(.not. ASSOCIATED(list%arr)) & DBCSR_ABORT("list_${valuetype}$_get: list is not initialized.") IF(pos < 1)& DBCSR_ABORT("list_${valuetype}$_get: pos < 1") IF(pos > list%size)& DBCSR_ABORT("list_${valuetype}$_get: pos > size") value ${value_assign}$ list%arr(pos)%p%value END FUNCTION list_${valuetype}$_get SUBROUTINE list_${valuetype}$_del(list, pos) !! Removes the value at the given position from the list. TYPE(list_${valuetype}$_type), intent(inout) :: list INTEGER, intent(in) :: pos !! Position in the list - must fulfill 0 < pos < list_size+1 . INTEGER :: i IF(.not. ASSOCIATED(list%arr)) & DBCSR_ABORT("list_${valuetype}$_del: list is not initialized.") IF(pos < 1)& DBCSR_ABORT("list_${valuetype}$_det: pos < 1") IF(pos > list%size)& DBCSR_ABORT("list_${valuetype}$_det: pos > size") deallocate(list%arr(pos)%p) do i=pos, list%size-1 list%arr(i)%p => list%arr(i+1)%p end do list%size = list%size - 1 END SUBROUTINE list_${valuetype}$_del FUNCTION list_${valuetype}$_size(list) RESULT(size) !! Returns the current size of the list. TYPE(list_${valuetype}$_type), intent(in) :: list INTEGER :: size IF(.not. ASSOCIATED(list%arr)) & DBCSR_ABORT("list_${valuetype}$_size: list is not initialized.") size = list%size END FUNCTION list_${valuetype}$_size SUBROUTINE change_capacity_${valuetype}$(list, new_capacity) !! Internal routine for changing the size of the internal array. TYPE(list_${valuetype}$_type), intent(inout) :: list INTEGER, intent(in) :: new_capacity INTEGER :: i, new_cap, stat TYPE(private_item_p_type_${valuetype}$), DIMENSION(:), POINTER :: old_arr new_cap = new_capacity IF(new_cap < 0) & DBCSR_ABORT("list_${valuetype}$_change_capacity: new_capacity < 0") IF(new_cap < list%size) & DBCSR_ABORT("list_${valuetype}$_change_capacity: new_capacity < size") IF(new_cap > HUGE(i)) THEN IF(size(list%arr) == HUGE(i)) & DBCSR_ABORT("list_${valuetype}$_change_capacity: list has reached integer limit.") new_cap = HUGE(i) ! grow as far as possible END IF old_arr => list%arr allocate(list%arr(new_cap), stat=stat) IF (stat/=0)& DBCSR_ABORT("list_${valuetype}$_change_capacity: allocation failed") do i=1, list%size allocate(list%arr(i)%p, stat=stat) IF (stat/=0)& DBCSR_ABORT("list_${valuetype}$_change_capacity: allocation failed") list%arr(i)%p%value ${value_assign}$ old_arr(i)%p%value deallocate(old_arr(i)%p) end do deallocate(old_arr) END SUBROUTINE change_capacity_${valuetype}$ #:enddef #:endmute ================================================ FILE: src/core/dbcsr_list_callstackentry.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! #:include 'dbcsr_list.fypp' #:set n_inst = 3 !! An array-based list which grows on demand. !! When the internal array is full, a new array of twice the size will be !! allocated and the items are copied over. !! This list can also be used as a stack. !! Have look at list_push(), list_pop() and list_peek(). MODULE dbcsr_list_callstackentry USE dbcsr_timings_base_type, ONLY: ${uselist(usetimingsbase)}$ $:list_body(valuetype[n_inst], valuetype_in[n_inst], valuetype_out[n_inst], value_assign[n_inst]) END MODULE dbcsr_list_callstackentry ================================================ FILE: src/core/dbcsr_list_routinereport.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! #:include 'dbcsr_list.fypp' #:set n_inst = 2 !! An array-based list which grows on demand. !! When the internal array is full, a new array of twice the size will be !! allocated and the items are copied over. !! This list can also be used as a stack. !! Have look at list_push(), list_pop() and list_peek(). MODULE dbcsr_list_routinereport USE dbcsr_timings_base_type, ONLY: ${uselist(usetimingsbase)}$ $:list_body(valuetype[n_inst], valuetype_in[n_inst], valuetype_out[n_inst], value_assign[n_inst]) END MODULE dbcsr_list_routinereport ================================================ FILE: src/core/dbcsr_list_routinestat.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! #:include 'dbcsr_list.fypp' #:set n_inst = 1 !! An array-based list which grows on demand. !! When the internal array is full, a new array of twice the size will be !! allocated and the items are copied over. !! This list can also be used as a stack. !! Have look at list_push(), list_pop() and list_peek(). MODULE dbcsr_list_routinestat USE dbcsr_timings_base_type, ONLY: ${uselist(usetimingsbase)}$ $:list_body(valuetype[n_inst], valuetype_in[n_inst], valuetype_out[n_inst], value_assign[n_inst]) END MODULE dbcsr_list_routinestat ================================================ FILE: src/core/dbcsr_list_timerenv.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! #:include 'dbcsr_list.fypp' #:set n_inst = 0 !! An array-based list which grows on demand. !! When the internal array is full, a new array of twice the size will be !! allocated and the items are copied over. !! This list can also be used as a stack. !! Have look at list_push(), list_pop() and list_peek(). MODULE dbcsr_list_timerenv USE dbcsr_timings_types, ONLY: ${uselist(usetimings)}$ $:list_body(valuetype[n_inst], valuetype_in[n_inst], valuetype_out[n_inst], value_assign[n_inst]) END MODULE dbcsr_list_timerenv ================================================ FILE: src/core/dbcsr_log_handling.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_log_handling !! various routines to log and control the output. !! The idea is that decisions about where to log should not be done in !! the code that generates the log, but should be globally changeable !! a central place. !! So some care has been taken to have enough information about the !! place from where the log comes so that in the future intelligent and !! flexible decisions can be taken by the logger, without having to change !! other code. !! @note !! contains also routines to convert to a string. !! in my idea they should have been with variable length, !! (i.e. they should have returned a trim(adjustl(actual_result))) !! As a logger should be robust, at the moment I have given up. !! At the moment logging and output refer to the same object !! (dbcsr_logger_type) !! as these are actually different it might be better to separate them !! (they have already separate routines in a separate module !! @see dbcsr_output_handling). !! some practices (use of print *, no dbcsr_error_type, !! manual retain release of some objects) are dictated by the need to !! have minimal dependency !! @endnote !! !! @see dbcsr_error_handling !! @version 12.2001 USE dbcsr_files, ONLY: close_file, & open_file USE dbcsr_iter_types, ONLY: dbcsr_iteration_info_create, & dbcsr_iteration_info_release, & dbcsr_iteration_info_retain, & dbcsr_iteration_info_type USE dbcsr_kinds, ONLY: default_path_length, & default_string_length, & dp USE dbcsr_machine, ONLY: default_output_unit, & m_getpid, & m_hostnm USE dbcsr_methods, ONLY: dbcsr_mp_release USE dbcsr_string_utilities, ONLY: compress USE dbcsr_timings, ONLY: print_stack USE dbcsr_types, ONLY: dbcsr_mp_obj #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE !API types PUBLIC :: dbcsr_logger_type, dbcsr_logger_p_type !API parameter vars PUBLIC :: dbcsr_note_level, dbcsr_warning_level, dbcsr_failure_level, dbcsr_fatal_level !API default loggers PUBLIC :: dbcsr_get_default_logger, dbcsr_add_default_logger, dbcsr_rm_default_logger, & dbcsr_default_logger_stack_size !API logger routines PUBLIC :: dbcsr_logger_create, dbcsr_logger_retain, dbcsr_logger_release, & dbcsr_logger_would_log, dbcsr_logger_set, dbcsr_logger_get_default_unit_nr, & dbcsr_logger_get_default_io_unit, dbcsr_logger_get_unit_nr, & dbcsr_logger_set_log_level, dbcsr_logger_generate_filename, & dbcsr_to_string CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_log_handling' LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .FALSE. !! level of an error INTEGER, PARAMETER :: dbcsr_fatal_level = 3 !! level of a failure INTEGER, PARAMETER :: dbcsr_failure_level = 2 !! level of a warning INTEGER, PARAMETER :: dbcsr_warning_level = 1 !! level of a note INTEGER, PARAMETER :: dbcsr_note_level = 0 !! a generic function to trasform different types to strings INTERFACE dbcsr_to_string MODULE PROCEDURE dbcsr_int_to_string, dbcsr_real_dp_to_string, dbcsr_logical_to_string END INTERFACE TYPE dbcsr_logger_type !! type of a logger, at the moment it contains just a print level !! starting at which level it should be logged !! (0 note, 1 warning, 2 failure, 3 fatal) !! it could be expanded with the ability to focus on one or more !! module/object/thread/processor !! @note !! This should be private, but as the output functions have been !! moved to another module and there is no "friend" keyword, they !! are public. !! DO NOT USE THE INTERNAL COMPONENTS DIRECTLY!!! INTEGER :: id_nr = -1, ref_count = -1 !! unique number to identify the logger !! reference count (see cp2k/doc/ReferenceCounting.html) INTEGER :: print_level = -1 !! the level starting at which something gets printed INTEGER :: default_local_unit_nr = -1 !! default unit for local logging (-1 if not yet initialized). Local logging guarantee to each task its own file. INTEGER :: default_global_unit_nr = -1 !! default unit for global logging (-1 if not yet initialized). This unit is valid only on the processor with !! %mp_env%mp%mynode==%mv_env%mp%source. LOGICAL :: close_local_unit_on_dealloc = .FALSE., close_global_unit_on_dealloc = .FALSE. !! if the local unit should be closed when this logger is deallocated !! whether the global unit should be closed when this logger is deallocated CHARACTER(len=default_string_length) :: suffix = "" !! a short string that is used as suffix in all the filenames created by this logger. Can be used to guarantee the !! uniqueness of generated filename CHARACTER(len=default_path_length) :: local_filename = "", global_filename = "" !! the root of the name of the file used for local logging (can be different from the name of the file corresponding to !! default_local_unit_nr, only the one used if the unit needs to be opened) !! the root of the name of the file used for global logging (can be different from the name of the file corresponding to !! default_global_unit_nr, only the one used if the unit needs to be opened) TYPE(dbcsr_mp_obj) :: mp_env = dbcsr_mp_obj() !! the parallel environment for the output. TYPE(dbcsr_iteration_info_type), POINTER :: iter_info => NULL() END TYPE dbcsr_logger_type TYPE dbcsr_logger_p_type TYPE(dbcsr_logger_type), POINTER :: p => Null() END TYPE dbcsr_logger_p_type ! ************************************************************************************************** TYPE default_logger_stack_type TYPE(dbcsr_logger_type), POINTER :: dbcsr_default_logger => Null() END TYPE default_logger_stack_type INTEGER, PRIVATE :: stack_pointer = 0 INTEGER, PARAMETER, PRIVATE :: max_stack_pointer = 10 TYPE(default_logger_stack_type), SAVE, DIMENSION(max_stack_pointer) :: default_logger_stack INTEGER, SAVE, PRIVATE :: last_logger_id_nr = 0 CONTAINS FUNCTION dbcsr_default_logger_stack_size() RESULT(res) INTEGER :: res res = stack_pointer END FUNCTION dbcsr_default_logger_stack_size SUBROUTINE dbcsr_add_default_logger(logger) !! adds a default logger. !! MUST be called before logging occurs !! @note !! increments a stack of default loggers the latest one will be !! available within the program TYPE(dbcsr_logger_type), POINTER :: logger CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_default_logger', & routineP = moduleN//':'//routineN IF (stack_pointer + 1 > max_stack_pointer) THEN CALL dbcsr_abort(__LOCATION__, routineP// & "too many default loggers, increase max_stack_pointer in "//moduleN) END IF stack_pointer = stack_pointer + 1 NULLIFY (default_logger_stack(stack_pointer)%dbcsr_default_logger) default_logger_stack(stack_pointer)%dbcsr_default_logger => logger CALL dbcsr_logger_retain(logger) END SUBROUTINE dbcsr_add_default_logger SUBROUTINE dbcsr_rm_default_logger() !! the cousin of dbcsr_add_default_logger, decrements the stack, so that !! the default logger is what it has !! been IF (stack_pointer - 1 < 0) THEN CALL dbcsr_abort(__LOCATION__, moduleN//":dbcsr_rm_default_logger"// & "can not destroy default logger "//moduleN) END IF CALL dbcsr_logger_release(default_logger_stack(stack_pointer)%dbcsr_default_logger) NULLIFY (default_logger_stack(stack_pointer)%dbcsr_default_logger) stack_pointer = stack_pointer - 1 END SUBROUTINE dbcsr_rm_default_logger FUNCTION dbcsr_get_default_logger() RESULT(res) !! returns the default logger !! @note !! initializes the default loggers if necessary TYPE(dbcsr_logger_type), POINTER :: res IF (.NOT. stack_pointer > 0) THEN CALL dbcsr_abort(__LOCATION__, "dbcsr_log_handling:dbcsr_get_default_logger"// & "default logger not yet initialized (CALL dbcsr_init_default_logger)") END IF res => default_logger_stack(stack_pointer)%dbcsr_default_logger IF (.NOT. ASSOCIATED(res)) THEN CALL dbcsr_abort(__LOCATION__, "dbcsr_log_handling:dbcsr_get_default_logger"// & "default logger is null (released too much ?)") END IF END FUNCTION dbcsr_get_default_logger ! ================== log ================== SUBROUTINE dbcsr_logger_create(logger, mp_env, print_level, & default_global_unit_nr, default_local_unit_nr, global_filename, & local_filename, close_global_unit_on_dealloc, iter_info, & close_local_unit_on_dealloc, suffix, template_logger) !! initializes a logger !! @note !! the handling of *_filename, default_*_unit_nr, close_*_unit_on_dealloc !! tries to take the right decision with different inputs, and thus is a !! little complex. TYPE(dbcsr_logger_type), POINTER :: logger !! the logger to initialize TYPE(dbcsr_mp_obj), OPTIONAL :: mp_env !! the parallel environment (this is most likely the global parallel environment INTEGER, INTENT(in), OPTIONAL :: print_level, default_global_unit_nr, & default_local_unit_nr !! the level starting with which something is written (defaults to dbcsr_note_level) !! the default unit_nr for output (if not given, and no file is given defaults to the standard output) !! the default unit number for local (i.e. task) output. If not given defaults to a out.taskid file created upon CHARACTER(len=*), INTENT(in), OPTIONAL :: global_filename, local_filename !! a new file to open (can be given instead of the global_unit_nr) !! a new file to open (with suffix and mp_env%mp%mynode appended). Can be given instead of the default_local_unit_nr). the !! file is created only upon the first local logging request LOGICAL, INTENT(in), OPTIONAL :: close_global_unit_on_dealloc !! if the unit should be closed when the logger is deallocated (defaults to true if a local_filename is given, to false !! otherwise) TYPE(dbcsr_iteration_info_type), OPTIONAL, POINTER :: iter_info LOGICAL, INTENT(in), OPTIONAL :: close_local_unit_on_dealloc !! if the unit should be closed when the logger is deallocated (defaults to true) CHARACTER(len=*), INTENT(in), OPTIONAL :: suffix !! the suffix that should be added to all the generated filenames TYPE(dbcsr_logger_type), OPTIONAL, POINTER :: template_logger !! a logger from where to take the unspecified things CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_create', & routineP = moduleN//':'//routineN INTEGER :: stat ALLOCATE (logger, stat=stat) IF (stat /= 0) & DBCSR_ABORT(routineP//" could not ALLOCATE a logger") NULLIFY (logger%iter_info) logger%ref_count = 1 last_logger_id_nr = last_logger_id_nr + 1 logger%id_nr = last_logger_id_nr IF (PRESENT(template_logger)) THEN IF (template_logger%ref_count < 1) & DBCSR_ABORT(routineP//" template_logger%ref_count<1") logger%print_level = template_logger%print_level logger%default_global_unit_nr = template_logger%default_global_unit_nr logger%close_local_unit_on_dealloc = template_logger%close_local_unit_on_dealloc IF (logger%close_local_unit_on_dealloc) THEN logger%default_local_unit_nr = -1 ELSE logger%default_local_unit_nr = template_logger%default_local_unit_nr END IF logger%close_global_unit_on_dealloc = template_logger%close_global_unit_on_dealloc IF (logger%close_global_unit_on_dealloc) THEN logger%default_global_unit_nr = -1 ELSE logger%default_global_unit_nr = template_logger%default_global_unit_nr END IF logger%local_filename = template_logger%local_filename logger%global_filename = template_logger%global_filename logger%mp_env = template_logger%mp_env logger%suffix = template_logger%suffix logger%iter_info => template_logger%iter_info ELSE ! create a file if nothing is specified, one can also get the unit from the default logger ! which should have something reasonable as the argument is required in that case logger%default_global_unit_nr = -1 logger%close_global_unit_on_dealloc = .TRUE. logger%local_filename = "localLog" logger%global_filename = "mainLog" logger%print_level = dbcsr_note_level ! generate a file for default local logger ! except the ionode that should write to the default global logger logger%default_local_unit_nr = -1 logger%close_local_unit_on_dealloc = .TRUE. logger%suffix = "" END IF IF (PRESENT(mp_env)) logger%mp_env = mp_env IF (.NOT. ASSOCIATED(logger%mp_env%mp)) & DBCSR_ABORT(routineP//" mp env not associated") IF (logger%mp_env%mp%refcount < 1) & DBCSR_ABORT(routineP//" mp_env%ref_count<1") logger%mp_env%mp%refcount = logger%mp_env%mp%refcount + 1 IF (PRESENT(print_level)) logger%print_level = print_level IF (PRESENT(default_global_unit_nr)) & logger%default_global_unit_nr = default_global_unit_nr IF (PRESENT(global_filename)) THEN logger%global_filename = global_filename logger%close_global_unit_on_dealloc = .TRUE. logger%default_global_unit_nr = -1 END IF IF (PRESENT(close_global_unit_on_dealloc)) THEN logger%close_global_unit_on_dealloc = close_global_unit_on_dealloc IF (PRESENT(default_global_unit_nr) .AND. PRESENT(global_filename) .AND. & (.NOT. close_global_unit_on_dealloc)) THEN logger%default_global_unit_nr = default_global_unit_nr END IF END IF IF (PRESENT(default_local_unit_nr)) & logger%default_local_unit_nr = default_local_unit_nr IF (PRESENT(local_filename)) THEN logger%local_filename = local_filename logger%close_local_unit_on_dealloc = .TRUE. logger%default_local_unit_nr = -1 END IF IF (PRESENT(suffix)) logger%suffix = suffix IF (PRESENT(close_local_unit_on_dealloc)) THEN logger%close_local_unit_on_dealloc = close_local_unit_on_dealloc IF (PRESENT(default_local_unit_nr) .AND. PRESENT(local_filename) .AND. & (.NOT. close_local_unit_on_dealloc)) THEN logger%default_local_unit_nr = default_local_unit_nr END IF END IF IF (logger%default_local_unit_nr == -1) THEN IF (logger%mp_env%mp%mynode == logger%mp_env%mp%source) THEN logger%default_local_unit_nr = logger%default_global_unit_nr logger%close_local_unit_on_dealloc = .FALSE. END IF END IF IF (PRESENT(iter_info)) logger%iter_info => iter_info IF (ASSOCIATED(logger%iter_info)) THEN CALL dbcsr_iteration_info_retain(logger%iter_info) ELSE CALL dbcsr_iteration_info_create(logger%iter_info, "") END IF END SUBROUTINE dbcsr_logger_create SUBROUTINE dbcsr_logger_retain(logger) !! retains the given logger (to be called to keep a shared copy of !! the logger) TYPE(dbcsr_logger_type), POINTER :: logger !! the logger to retain CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_retain', & routineP = moduleN//':'//routineN IF (.NOT. ASSOCIATED(logger)) & DBCSR_ABORT(routineP//" logger not associated") IF (logger%ref_count < 1) & DBCSR_ABORT(routineP//" logger%ref_count<1") logger%ref_count = logger%ref_count + 1 END SUBROUTINE dbcsr_logger_retain SUBROUTINE dbcsr_logger_release(logger) !! releases this logger TYPE(dbcsr_logger_type), POINTER :: logger !! the logger to release CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_release', & routineP = moduleN//':'//routineN IF (ASSOCIATED(logger)) THEN IF (logger%ref_count < 1) & DBCSR_ABORT(routineP//" logger%ref_count<1") logger%ref_count = logger%ref_count - 1 IF (logger%ref_count == 0) THEN IF (logger%close_global_unit_on_dealloc .AND. & logger%default_global_unit_nr >= 0) THEN CALL close_file(logger%default_global_unit_nr) logger%close_global_unit_on_dealloc = .FALSE. logger%default_global_unit_nr = -1 END IF IF (logger%close_local_unit_on_dealloc .AND. & logger%default_local_unit_nr >= 0) THEN CALL close_file(logger%default_local_unit_nr) logger%close_local_unit_on_dealloc = .FALSE. logger%default_local_unit_nr = -1 END IF CALL dbcsr_mp_release(logger%mp_env) CALL dbcsr_iteration_info_release(logger%iter_info) DEALLOCATE (logger) END IF END IF END SUBROUTINE dbcsr_logger_release FUNCTION dbcsr_logger_would_log(logger, level) RESULT(res) !! this function can be called to check if the logger would log !! a message with the given level from the given source !! you should use this function if you do direct logging !! (without using dbcsr_logger_log), or if you want to know if the generation !! of some costly log info is necessary TYPE(dbcsr_logger_type), POINTER :: logger !! the logger you want to log in INTEGER, INTENT(in) :: level !! describes the of the message: dbcsr_fatal_level(3), dbcsr_failure_level(2), dbcsr_warning_level(1), dbcsr_note_level(0). LOGICAL :: res CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_would_log', & routineP = moduleN//':'//routineN TYPE(dbcsr_logger_type), POINTER :: lggr lggr => logger IF (.NOT. ASSOCIATED(lggr)) lggr => dbcsr_get_default_logger() IF (lggr%ref_count < 1) & DBCSR_ABORT(routineP//" logger%ref_count<1") res = level >= lggr%print_level END FUNCTION dbcsr_logger_would_log FUNCTION dbcsr_logger_get_unit_nr(logger, local) RESULT(res) !! returns the unit nr for the requested kind of log. TYPE(dbcsr_logger_type), POINTER :: logger !! the logger you want to log in LOGICAL, INTENT(in), OPTIONAL :: local !! if true returns a local logger (one per task), otherwise returns a global logger (only the process with !! mp_env%mp%mynode== mp_env%mp%source should write to the global logger). Defaults to false INTEGER :: res res = dbcsr_logger_get_default_unit_nr(logger, local=local) END FUNCTION dbcsr_logger_get_unit_nr FUNCTION dbcsr_logger_get_default_io_unit(logger) RESULT(res) !! returns the unit nr for the ionode (-1 on all other processors) !! skips as well checks if the procs calling this function is not the ionode TYPE(dbcsr_logger_type), OPTIONAL, POINTER :: logger !! the logger you want to log in INTEGER :: res TYPE(dbcsr_logger_type), POINTER :: local_logger IF (PRESENT(logger)) THEN local_logger => logger ELSE IF (stack_pointer == 0) THEN res = -1 ! edge case: default logger not yet/anymore available RETURN ELSE local_logger => dbcsr_get_default_logger() END IF res = dbcsr_logger_get_default_unit_nr(local_logger, local=.FALSE., skip_not_ionode=.TRUE.) END FUNCTION dbcsr_logger_get_default_io_unit ! *************************** dbcsr_logger_type settings *************************** SUBROUTINE dbcsr_logger_set_log_level(logger, level) !! changes the logging level. Log messages with a level less than the one !! given wo not be printed. TYPE(dbcsr_logger_type), POINTER :: logger !! the logger to change INTEGER, INTENT(in) :: level !! the new logging level for the logger CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_set_log_level', & routineP = moduleN//':'//routineN IF (.NOT. ASSOCIATED(logger)) & DBCSR_ABORT(routineP//" logger not associated") IF (logger%ref_count < 1) & DBCSR_ABORT(routineP//" logger%ref_count<1") logger%print_level = level END SUBROUTINE dbcsr_logger_set_log_level RECURSIVE FUNCTION dbcsr_logger_get_default_unit_nr(logger, local, skip_not_ionode) RESULT(res) !! asks the default unit number of the given logger. !! try to use dbcsr_logger_get_unit_nr TYPE(dbcsr_logger_type), OPTIONAL, POINTER :: logger !! the logger you want info from LOGICAL, INTENT(in), OPTIONAL :: local, skip_not_ionode !! if you want the local unit nr (defaults to false) INTEGER :: res CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_get_default_unit_nr', & routineP = moduleN//':'//routineN CHARACTER(len=default_path_length) :: filename, host_name INTEGER :: iostat, pid LOGICAL :: loc, skip TYPE(dbcsr_logger_type), POINTER :: lggr loc = .TRUE. skip = .FALSE. IF (PRESENT(logger)) THEN lggr => logger ELSE NULLIFY (lggr) END IF IF (.NOT. ASSOCIATED(lggr)) lggr => dbcsr_get_default_logger() IF (lggr%ref_count < 1) & DBCSR_ABORT(routineP//" logger%ref_count<1") IF (PRESENT(local)) loc = local IF (PRESENT(skip_not_ionode)) skip = skip_not_ionode IF (.NOT. loc) THEN IF (lggr%default_global_unit_nr <= 0) THEN IF (lggr%mp_env%mp%mynode == lggr%mp_env%mp%source) THEN CALL dbcsr_logger_generate_filename(lggr, filename, lggr%global_filename, & ".out", local=.FALSE.) CALL open_file(TRIM(filename), file_status="unknown", & file_action="WRITE", file_position="APPEND", & unit_number=lggr%default_global_unit_nr) ELSE IF (.NOT. skip) THEN lggr%default_global_unit_nr = dbcsr_logger_get_default_unit_nr(lggr, .TRUE.) lggr%close_global_unit_on_dealloc = .FALSE. ELSE lggr%default_global_unit_nr = -1 lggr%close_global_unit_on_dealloc = .FALSE. END IF END IF IF ((lggr%mp_env%mp%mynode /= lggr%mp_env%mp%source) .AND. (.NOT. skip)) THEN WRITE (UNIT=lggr%default_global_unit_nr, FMT='(/,T2,A)', IOSTAT=iostat) & ' *** WARNING non ionode asked for global logger ***' IF (iostat /= 0) THEN CALL m_getpid(pid) CALL m_hostnm(host_name) PRINT *, " *** Error trying to WRITE to the local logger ***" PRINT *, " *** MPI_id = ", lggr%mp_env%mp%mynode PRINT *, " *** MPI_Communicator = ", lggr%mp_env%mp%mp_group%get_handle() PRINT *, " *** PID = ", pid PRINT *, " *** Hostname = "//TRIM(host_name) CALL print_stack(default_output_unit) ELSE CALL print_stack(lggr%default_global_unit_nr) END IF END IF res = lggr%default_global_unit_nr ELSE IF (lggr%default_local_unit_nr <= 0) THEN CALL dbcsr_logger_generate_filename(lggr, filename, lggr%local_filename, & ".out", local=.TRUE.) CALL open_file(TRIM(filename), file_status="unknown", & file_action="WRITE", & file_position="APPEND", & unit_number=lggr%default_local_unit_nr) WRITE (UNIT=lggr%default_local_unit_nr, FMT='(/,T2,A,I0,A,I0,A)', IOSTAT=iostat) & '*** Local logger file of MPI task ', lggr%mp_env%mp%mynode, & ' in communicator ', lggr%mp_env%mp%mp_group%get_handle(), ' ***' IF (iostat == 0) THEN CALL m_getpid(pid) CALL m_hostnm(host_name) WRITE (UNIT=lggr%default_local_unit_nr, FMT='(T2,A,I0)', IOSTAT=iostat) & '*** PID = ', pid, & '*** Hostname = '//host_name CALL print_stack(lggr%default_local_unit_nr) END IF IF (iostat /= 0) THEN CALL m_getpid(pid) CALL m_hostnm(host_name) PRINT *, " *** Error trying to WRITE to the local logger ***" PRINT *, " *** MPI_id = ", lggr%mp_env%mp%mynode PRINT *, " *** MPI_Communicator = ", lggr%mp_env%mp%mp_group%get_handle() PRINT *, " *** PID = ", pid PRINT *, " *** Hostname = "//TRIM(host_name) CALL print_stack(default_output_unit) END IF END IF res = lggr%default_local_unit_nr END IF END FUNCTION dbcsr_logger_get_default_unit_nr SUBROUTINE dbcsr_logger_generate_filename(logger, res, root, postfix, & local) !! generates a unique filename (ie adding eventual suffixes and !! process ids) !! @note !! this should be a function returning a variable length string. !! All spaces are moved to the end of the string. !! Not fully optimized: result must be a little longer than the !! resulting compressed filename TYPE(dbcsr_logger_type), POINTER :: logger CHARACTER(len=*), INTENT(inout) :: res !! the resulting string CHARACTER(len=*), INTENT(in) :: root, postfix !! the start of filename !! the end of the name LOGICAL, INTENT(in), OPTIONAL :: local !! if the name should be local to this task (defaults to false) CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_generate_filename', & routineP = moduleN//':'//routineN LOGICAL :: loc TYPE(dbcsr_logger_type), POINTER :: lggr loc = .FALSE. res = ' ' lggr => logger IF (.NOT. ASSOCIATED(lggr)) lggr => dbcsr_get_default_logger() IF (lggr%ref_count < 1) & DBCSR_ABORT(routineP//" logger%ref_count<1") IF (PRESENT(local)) loc = local IF (loc) THEN res = TRIM(root)//TRIM(lggr%suffix)//'_p'// & dbcsr_to_string(lggr%mp_env%mp%mynode)//postfix ELSE res = TRIM(root)//TRIM(lggr%suffix)//postfix END IF CALL compress(res, full=.TRUE.) END SUBROUTINE dbcsr_logger_generate_filename SUBROUTINE dbcsr_logger_set(logger, local_filename, global_filename) !! sets various attributes of the given logger TYPE(dbcsr_logger_type), POINTER :: logger !! the logger you want to change CHARACTER(len=*), INTENT(in), OPTIONAL :: local_filename, global_filename !! the root of the name of the file used for local logging !! the root of the name of the file used for global logging CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_set', & routineP = moduleN//':'//routineN IF (.NOT. ASSOCIATED(logger)) & DBCSR_ABORT(routineP//" unassociated logger") IF (PRESENT(local_filename)) logger%local_filename = local_filename IF (PRESENT(global_filename)) logger%global_filename = global_filename END SUBROUTINE dbcsr_logger_set FUNCTION dbcsr_int_to_string(i) RESULT(res) !! converts an int to a string !! (should be a variable length string, but that does not work with !! all the compilers) INTEGER, INTENT(in) :: i !! the integer to convert CHARACTER(len=6) :: res CHARACTER(len=6) :: t_res INTEGER :: iostat REAL(KIND=dp) :: tmp_r iostat = 0 IF (i > 999999 .OR. i < -99999) THEN tmp_r = i WRITE (t_res, fmt='(es6.1)', iostat=iostat) tmp_r ELSE WRITE (t_res, fmt='(i6)', iostat=iostat) i END IF res = t_res IF (iostat /= 0) THEN PRINT *, "dbcsr_int_to_string ioerror", iostat CALL print_stack(dbcsr_logger_get_default_unit_nr()) END IF END FUNCTION dbcsr_int_to_string FUNCTION dbcsr_real_dp_to_string(val) RESULT(res) !! convert a double precision real in a string !! (should be a variable length string, but that does not work with !! all the compilers) REAL(KIND=dp), INTENT(in) :: val !! the number to convert CHARACTER(len=11) :: res WRITE (res, '(es11.4)') val END FUNCTION dbcsr_real_dp_to_string FUNCTION dbcsr_logical_to_string(val) RESULT(res) !! convert a logical in a string ('T' or 'F') LOGICAL, INTENT(in) :: val !! the number to convert CHARACTER(len=1) :: res IF (val) THEN res = 'T' ELSE res = 'F' END IF END FUNCTION dbcsr_logical_to_string END MODULE dbcsr_log_handling ================================================ FILE: src/core/dbcsr_methods.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_methods !! Base methods on DBCSR data structures USE dbcsr_array_types, ONLY: array_data, & array_release USE dbcsr_btree, ONLY: btree_delete, & btree_new USE dbcsr_data_methods, ONLY: dbcsr_data_get_size, & dbcsr_data_release USE dbcsr_kinds, ONLY: default_string_length USE dbcsr_mpiwrap, ONLY: mp_comm_free USE dbcsr_ptr_util, ONLY: memory_deallocate USE dbcsr_types, ONLY: & dbcsr_1d_array_type, dbcsr_2d_array_type, dbcsr_data_obj, dbcsr_distribution_obj, & dbcsr_imagedistribution_obj, dbcsr_imagedistribution_type, dbcsr_memtype_type, & dbcsr_mp_obj, dbcsr_mutable_obj, dbcsr_type, dbcsr_type_antihermitian, & dbcsr_type_antisymmetric, dbcsr_type_complex_4, dbcsr_type_complex_8, & dbcsr_type_hermitian, dbcsr_type_invalid, dbcsr_type_no_symmetry, dbcsr_type_real_4, & dbcsr_type_real_8, dbcsr_type_symmetric, dbcsr_work_type #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_methods' INTEGER, PUBLIC, SAVE :: dbcsr_matrix_counter = 111111 PUBLIC :: dbcsr_release PUBLIC :: dbcsr_valid_index PUBLIC :: dbcsr_release_locals PUBLIC :: dbcsr_distribution, & dbcsr_get_matrix_type, dbcsr_get_data_type, dbcsr_get_replication_type, & dbcsr_row_block_sizes, dbcsr_col_block_sizes, & dbcsr_nblkrows_total, dbcsr_nblkcols_total, dbcsr_nfullrows_total, & dbcsr_nfullcols_total, dbcsr_nblkcols_local, dbcsr_nblkrows_local, & dbcsr_max_row_size, dbcsr_max_col_size, & dbcsr_get_index_memory_type, dbcsr_get_data_memory_type, & dbcsr_name, dbcsr_setname, dbcsr_get_data_size, & dbcsr_use_mutable, dbcsr_wm_use_mutable, dbcsr_has_symmetry, & dbcsr_get_nze, dbcsr_nfullrows_local, dbcsr_nfullcols_local PUBLIC :: dbcsr_get_data_size_used PUBLIC :: dbcsr_col_block_offsets, dbcsr_row_block_offsets PUBLIC :: dbcsr_data_area PUBLIC :: dbcsr_get_num_blocks PUBLIC :: dbcsr_blk_row_size, dbcsr_blk_column_size, & dbcsr_blk_row_offset, dbcsr_blk_col_offset PUBLIC :: dbcsr_destroy_array PUBLIC :: dbcsr_image_dist_init, dbcsr_image_dist_hold, dbcsr_image_dist_release PUBLIC :: dbcsr_mutable_init, dbcsr_mutable_new, dbcsr_mutable_destroy, & dbcsr_mutable_release, & dbcsr_mutable_instantiated PUBLIC :: dbcsr_distribution_release PUBLIC :: dbcsr_mp_release, dbcsr_mp_grid_remove ! For the 1-D and 2-D arrays INTERFACE dbcsr_destroy_array MODULE PROCEDURE dbcsr_destroy_1d_array, dbcsr_destroy_2d_array END INTERFACE CONTAINS PURE FUNCTION dbcsr_valid_index(matrix) RESULT(valid_index) !! Returns whether the index structure of the matrix is valid. TYPE(dbcsr_type), INTENT(IN) :: matrix !! verify index validity of this matrix LOGICAL :: valid_index !! index validity valid_index = matrix%valid END FUNCTION dbcsr_valid_index RECURSIVE SUBROUTINE dbcsr_release(matrix) !! Releases a reference for a DBCSR matrix !! If there are no references left, the matrix is destroyed. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! DBCSR matrix matrix%refcount = matrix%refcount - 1 IF (matrix%refcount .EQ. 0) THEN CALL dbcsr_destroy(matrix) END IF END SUBROUTINE dbcsr_release RECURSIVE SUBROUTINE dbcsr_destroy(matrix, force) !! Deallocates and destroys a matrix. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! matrix LOGICAL, INTENT(IN), OPTIONAL :: force !! force deallocation CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_destroy' INTEGER :: error_handle LOGICAL :: force_all ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) force_all = .FALSE. IF (PRESENT(force)) force_all = force IF (.NOT. force_all .AND. matrix%refcount .NE. 0) & DBCSR_WARN("You should not destroy referenced matrix.") IF (force_all .AND. matrix%refcount .GT. 1) & DBCSR_WARN("You should not destroy referenced matrix.") IF (force_all .OR. matrix%refcount .EQ. 0) THEN IF (ASSOCIATED(matrix%wms)) & DBCSR_WARN("Destroying unfinalized matrix") IF (ASSOCIATED(matrix%index)) THEN CALL memory_deallocate(matrix%index, matrix%index_memory_type) END IF CALL dbcsr_data_release(matrix%data_area) CALL array_release(matrix%row_blk_size) CALL array_release(matrix%col_blk_size) CALL array_release(matrix%row_blk_offset) CALL array_release(matrix%col_blk_offset) CALL dbcsr_distribution_release(matrix%dist) CALL dbcsr_release_locals(matrix) matrix%valid = .FALSE. matrix%refcount = 0 END IF CALL timestop(error_handle) END SUBROUTINE dbcsr_destroy SUBROUTINE dbcsr_distribution_release(dist) !! Releases and potentially destroys a distribution TYPE(dbcsr_distribution_obj), INTENT(INOUT) :: dist ! --------------------------------------------------------------------------- IF (ASSOCIATED(dist%d)) THEN dist%d%refcount = dist%d%refcount - 1 IF (dist%d%refcount .EQ. 0) THEN CALL array_release(dist%d%row_dist_block) CALL array_release(dist%d%col_dist_block) CALL array_release(dist%d%local_rows) CALL array_release(dist%d%local_cols) CALL dbcsr_mp_release(dist%d%mp_env) IF (dist%d%has_thread_dist) & CALL array_release(dist%d%thread_dist) CALL array_release(dist%d%row_map) CALL array_release(dist%d%col_map) CALL dbcsr_dist_release_locals(dist) DEALLOCATE (dist%d) END IF END IF END SUBROUTINE dbcsr_distribution_release SUBROUTINE dbcsr_dist_release_locals(dist) TYPE(dbcsr_distribution_obj), INTENT(INOUT) :: dist INTEGER :: i IF (dist%d%has_other_l_rows) THEN DO i = LBOUND(dist%d%other_l_rows, 1), UBOUND(dist%d%other_l_rows, 1) CALL array_release(dist%d%other_l_rows(i)) END DO DEALLOCATE (dist%d%other_l_rows) END IF IF (dist%d%has_other_l_cols) THEN DO i = LBOUND(dist%d%other_l_cols, 1), UBOUND(dist%d%other_l_cols, 1) CALL array_release(dist%d%other_l_cols(i)) END DO DEALLOCATE (dist%d%other_l_cols) END IF IF (dist%d%has_global_row_map) THEN CALL array_release(dist%d%global_row_map) END IF IF (dist%d%has_global_col_map) THEN CALL array_release(dist%d%global_col_map) END IF dist%d%has_other_l_rows = .FALSE. dist%d%has_other_l_cols = .FALSE. dist%d%has_global_row_map = .FALSE. dist%d%has_global_col_map = .FALSE. END SUBROUTINE dbcsr_dist_release_locals SUBROUTINE dbcsr_mp_release(mp_env) !! Releases and potentially destroys an mp_env TYPE(dbcsr_mp_obj), INTENT(INOUT) :: mp_env !! multiprocessor environment ! --------------------------------------------------------------------------- IF (ASSOCIATED(mp_env%mp)) THEN mp_env%mp%refcount = mp_env%mp%refcount - 1 IF (mp_env%mp%refcount .LE. 0) THEN CALL dbcsr_mp_grid_remove(mp_env) DEALLOCATE (mp_env%mp%pgrid) DEALLOCATE (mp_env%mp) END IF END IF END SUBROUTINE dbcsr_mp_release SUBROUTINE dbcsr_mp_grid_remove(mp_env) !! Removes an MPI cartesian process grid TYPE(dbcsr_mp_obj), INTENT(INOUT) :: mp_env !! multiprocessor environment IF (mp_env%mp%subgroups_defined) THEN CALL mp_comm_free(mp_env%mp%prow_group) CALL mp_comm_free(mp_env%mp%pcol_group) END IF END SUBROUTINE dbcsr_mp_grid_remove SUBROUTINE dbcsr_release_locals(matrix) TYPE(dbcsr_type), INTENT(INOUT) :: matrix IF (matrix%has_local_rows) & CALL array_release(matrix%local_rows) IF (matrix%has_global_rows) & CALL array_release(matrix%global_rows) IF (matrix%has_local_cols) & CALL array_release(matrix%local_cols) IF (matrix%has_global_cols) & CALL array_release(matrix%global_cols) matrix%has_local_rows = .FALSE. matrix%has_global_rows = .FALSE. matrix%has_local_cols = .FALSE. matrix%has_global_cols = .FALSE. END SUBROUTINE dbcsr_release_locals ! SUBROUTINE dbcsr_release_vlocals (matrix) ! TYPE(dbcsr_type), INTENT(INOUT) :: matrix ! ! IF (matrix%has_local_vrows) & ! CALL array_release (matrix%local_vrows) ! IF (matrix%has_global_vrows) & ! CALL array_release (matrix%global_vrows) ! IF (matrix%has_local_vcols) & ! CALL array_release (matrix%local_vcols) ! IF (matrix%has_global_vcols) & ! CALL array_release (matrix%global_vcols) ! matrix%has_local_vrows = .FALSE. ! matrix%has_global_vrows = .FALSE. ! matrix%has_local_vcols = .FALSE. ! matrix%has_global_vcols = .FALSE. ! END SUBROUTINE dbcsr_release_vlocals ! ! Pertaining to the dbcsr matrix. FUNCTION dbcsr_nblkrows_total(matrix) RESULT(nblkrows_total) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: nblkrows_total nblkrows_total = matrix%nblkrows_total END FUNCTION dbcsr_nblkrows_total FUNCTION dbcsr_nblkcols_total(matrix) RESULT(nblkcols_total) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: nblkcols_total nblkcols_total = matrix%nblkcols_total END FUNCTION dbcsr_nblkcols_total FUNCTION dbcsr_nfullrows_total(matrix) RESULT(nfullrows_total) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: nfullrows_total nfullrows_total = matrix%nfullrows_total END FUNCTION dbcsr_nfullrows_total FUNCTION dbcsr_nfullcols_total(matrix) RESULT(nfullcols_total) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: nfullcols_total nfullcols_total = matrix%nfullcols_total END FUNCTION dbcsr_nfullcols_total FUNCTION dbcsr_nblkrows_local(matrix) RESULT(nblkrows_local) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: nblkrows_local nblkrows_local = matrix%nblkrows_local END FUNCTION dbcsr_nblkrows_local FUNCTION dbcsr_nblkcols_local(matrix) RESULT(nblkcols_local) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: nblkcols_local nblkcols_local = matrix%nblkcols_local END FUNCTION dbcsr_nblkcols_local FUNCTION dbcsr_nfullrows_local(matrix) RESULT(nfullrows_local) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: nfullrows_local nfullrows_local = matrix%nfullrows_local END FUNCTION dbcsr_nfullrows_local FUNCTION dbcsr_nfullcols_local(matrix) RESULT(nfullcols_local) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: nfullcols_local nfullcols_local = matrix%nfullcols_local END FUNCTION dbcsr_nfullcols_local FUNCTION dbcsr_max_row_size(matrix) RESULT(max_row_size) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: max_row_size max_row_size = matrix%max_rbs END FUNCTION dbcsr_max_row_size FUNCTION dbcsr_max_col_size(matrix) RESULT(max_col_size) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: max_col_size max_col_size = matrix%max_cbs END FUNCTION dbcsr_max_col_size FUNCTION dbcsr_distribution(matrix) RESULT(distribution) TYPE(dbcsr_type), INTENT(IN) :: matrix TYPE(dbcsr_distribution_obj) :: distribution distribution = matrix%dist END FUNCTION dbcsr_distribution FUNCTION dbcsr_name(matrix) RESULT(name) TYPE(dbcsr_type), INTENT(IN) :: matrix CHARACTER(len=default_string_length) :: name name = matrix%name END FUNCTION dbcsr_name SUBROUTINE dbcsr_setname(matrix, newname) TYPE(dbcsr_type), INTENT(INOUT) :: matrix CHARACTER(len=*), INTENT(IN) :: newname matrix%name = newname END SUBROUTINE dbcsr_setname PURE FUNCTION dbcsr_wm_use_mutable(wm) RESULT(use_mutable) !! Returns whether this work matrix uses the mutable type TYPE(dbcsr_work_type), INTENT(IN) :: wm !! work matrix LOGICAL :: use_mutable !! use the mutable and not append-only working structures ! --------------------------------------------------------------------------- use_mutable = dbcsr_mutable_instantiated(wm%mutable) END FUNCTION dbcsr_wm_use_mutable PURE FUNCTION dbcsr_use_mutable(matrix) RESULT(use_mutable) !! Returns whether work matrices should use the mutable data type TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix LOGICAL :: use_mutable !! use the mutable and not append-only working structures ! --------------------------------------------------------------------------- use_mutable = matrix%work_mutable END FUNCTION dbcsr_use_mutable FUNCTION dbcsr_row_block_sizes(matrix) RESULT(row_blk_sizes) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: row_blk_sizes row_blk_sizes => array_data(matrix%row_blk_size) END FUNCTION dbcsr_row_block_sizes FUNCTION dbcsr_col_block_sizes(matrix) RESULT(col_blk_sizes) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_blk_sizes col_blk_sizes => array_data(matrix%col_blk_size) END FUNCTION dbcsr_col_block_sizes FUNCTION dbcsr_col_block_offsets(matrix) RESULT(col_blk_offsets) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_blk_offsets col_blk_offsets => array_data(matrix%col_blk_offset) END FUNCTION dbcsr_col_block_offsets FUNCTION dbcsr_row_block_offsets(matrix) RESULT(row_blk_offsets) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: row_blk_offsets row_blk_offsets => array_data(matrix%row_blk_offset) END FUNCTION dbcsr_row_block_offsets PURE FUNCTION dbcsr_blk_row_size(matrix, row) RESULT(row_size) !! Returns the blocked row size of a row !! This routine is optimized for speed and no checks are performed. TYPE(dbcsr_type), INTENT(IN) :: matrix !! DBCSR matrix INTEGER, INTENT(IN) :: row !! row number INTEGER :: row_size !! blocked row size row_size = matrix%row_blk_size%low%data(row) END FUNCTION dbcsr_blk_row_size PURE FUNCTION dbcsr_blk_row_offset(matrix, row) RESULT(row_offset) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: row INTEGER :: row_offset row_offset = matrix%row_blk_offset%low%data(row) END FUNCTION dbcsr_blk_row_offset PURE FUNCTION dbcsr_blk_column_size(matrix, column) RESULT(column_size) !! Returns the blocked column size of a column !! This routine is optimized for speed and no checks are performed. TYPE(dbcsr_type), INTENT(IN) :: matrix !! DBCSR matrix INTEGER, INTENT(IN) :: column !! column number INTEGER :: column_size !! blocked row size column_size = matrix%col_blk_size%low%data(column) END FUNCTION dbcsr_blk_column_size PURE FUNCTION dbcsr_blk_col_offset(matrix, col) RESULT(col_offset) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: col INTEGER :: col_offset col_offset = matrix%col_blk_offset%low%data(col) END FUNCTION dbcsr_blk_col_offset FUNCTION dbcsr_data_area(matrix) RESULT(data_area) !! Returns the data area TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix from which to get data TYPE(dbcsr_data_obj) :: data_area !! data area data_area = matrix%data_area END FUNCTION dbcsr_data_area PURE FUNCTION dbcsr_get_matrix_type(matrix) RESULT(matrix_type) !! Returns the matrix type TYPE(dbcsr_type), INTENT(IN) :: matrix !! query this matrix CHARACTER :: matrix_type !! matrix_type (see dbcsr_types.F for possible values) matrix_type = dbcsr_type_invalid IF (matrix%symmetry) THEN IF ((.NOT. matrix%negate_real) .AND. matrix%negate_imaginary) THEN matrix_type = dbcsr_type_hermitian ELSEIF (matrix%negate_real .AND. (.NOT. matrix%negate_imaginary)) THEN matrix_type = dbcsr_type_antihermitian ELSEIF (matrix%negate_real .AND. matrix%negate_imaginary) THEN matrix_type = dbcsr_type_antisymmetric ELSEIF ((.NOT. matrix%negate_real) .AND. (.NOT. matrix%negate_imaginary)) THEN matrix_type = dbcsr_type_symmetric END IF ELSE matrix_type = dbcsr_type_no_symmetry END IF END FUNCTION dbcsr_get_matrix_type PURE FUNCTION dbcsr_has_symmetry(matrix) RESULT(has_symmetry) !! Whether matrix has symmetry TYPE(dbcsr_type), INTENT(IN) :: matrix !! query this matrix LOGICAL :: has_symmetry !! matrix has symmetry has_symmetry = matrix%symmetry END FUNCTION dbcsr_has_symmetry PURE FUNCTION dbcsr_get_replication_type(matrix) RESULT(repl_type) !! Returns the data type stored in the matrix TYPE(dbcsr_type), INTENT(IN) :: matrix !! query this matrix CHARACTER :: repl_type !! repl_type (see dbcsr_types.F for possible values) repl_type = matrix%replication_type END FUNCTION dbcsr_get_replication_type PURE FUNCTION dbcsr_get_data_type(matrix) RESULT(data_type) !! Returns the data type stored in the matrix TYPE(dbcsr_type), INTENT(IN) :: matrix !! query this matrix INTEGER :: data_type !! data_type (see dbcsr_types.F for possible values) data_type = matrix%data_type END FUNCTION dbcsr_get_data_type FUNCTION dbcsr_get_data_memory_type(matrix) & RESULT(memory_type) !! Returns the type of memory used for data in the matrix !! @note !! It returns the declared data type, not the actually used type !! @endnote TYPE(dbcsr_type), INTENT(IN) :: matrix !! query this matrix TYPE(dbcsr_memtype_type) :: memory_type !! memory type used for data memory_type = matrix%data_memory_type END FUNCTION dbcsr_get_data_memory_type FUNCTION dbcsr_get_index_memory_type(matrix) RESULT(memory_type) !! Returns the type of memory used for the index in the matrix TYPE(dbcsr_type), INTENT(IN) :: matrix !! query this matrix TYPE(dbcsr_memtype_type) :: memory_type !! memory type used for the index memory_type = matrix%index_memory_type END FUNCTION dbcsr_get_index_memory_type ! PURE FUNCTION uses_special_memory_matrix (matrix) RESULT (uses_special) ! !! Returns whether the matrix uses specially-allocated memory ! TYPE(dbcsr_type), INTENT(IN) :: matrix ! !! query this matrix ! LOGICAL :: uses_special ! !! whether the matrix uses specially allocated memory ! ! uses_special = matrix%data_memory_type .NE. dbcsr_memory_default ! END FUNCTION uses_special_memory_matrix ! ! ! PURE FUNCTION uses_special_memory_area (area) RESULT (uses_special) ! !! Returns whether the data area uses special-allocated memory ! TYPE(dbcsr_data_obj), INTENT(IN) :: area ! !! query this data area ! LOGICAL :: uses_special ! !! whether the data area uses specially allocated memory ! ! IF (ASSOCIATED (area%d)) THEN ! uses_special = area%d%memory_type .NE. dbcsr_memory_default ! ELSE ! uses_special = .FALSE. ! ENDIF ! END FUNCTION uses_special_memory_area ! FUNCTION dbcsr_get_data_size(matrix) RESULT(data_size) !! Returns the allocated data size of a DBCSR matrix TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix INTEGER :: data_size !! size of data INTEGER :: data_type data_size = 0 data_type = dbcsr_get_data_type(matrix) IF (data_type .NE. dbcsr_type_real_8 .AND. & data_type .NE. dbcsr_type_real_4 .AND. & data_type .NE. dbcsr_type_complex_8 .AND. & data_type .NE. dbcsr_type_complex_4) DBCSR_ABORT("Incorrect data type") data_size = dbcsr_data_get_size(matrix%data_area) END FUNCTION dbcsr_get_data_size FUNCTION dbcsr_get_data_size_used(matrix) RESULT(data_size) !! Count actual data storage used for matrix data. TYPE(dbcsr_type), INTENT(IN) :: matrix !! Count data of this matrix INTEGER :: data_size !! Data size used by matrix CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_data_size_used' INTEGER :: blk, col, error_handle, nze, row INTEGER, DIMENSION(:), POINTER :: col_blk_sizes, row_blk_sizes !type(dbcsr_iterator_type) :: iter ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) row_blk_sizes => dbcsr_row_block_sizes(matrix) col_blk_sizes => dbcsr_col_block_sizes(matrix) data_size = 0 !$OMP DO DO row = 1, matrix%nblkrows_total DO blk = matrix%row_p(row) + 1, matrix%row_p(row + 1) col = matrix%col_i(blk) IF (matrix%blk_p(blk) .NE. 0) THEN nze = row_blk_sizes(row)*col_blk_sizes(col) data_size = data_size + nze END IF END DO END DO !$OMP END DO CALL timestop(error_handle) END FUNCTION dbcsr_get_data_size_used PURE FUNCTION dbcsr_get_num_blocks(matrix) RESULT(num_blocks) !! Returns the number of blocks in the matrix TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix from which to get data INTEGER :: num_blocks num_blocks = matrix%nblks END FUNCTION dbcsr_get_num_blocks PURE FUNCTION dbcsr_get_nze(matrix) RESULT(num_nze) !! Returns the number of non-zero elements in the matrix TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix from which to get data INTEGER :: num_nze num_nze = matrix%nze END FUNCTION dbcsr_get_nze ! ************************************************************************************************** ! Arrays ! ************************************************************************************************** SUBROUTINE dbcsr_destroy_1d_array(marray) !! Releases all matrices in a 1-d array. TYPE(dbcsr_1d_array_type), INTENT(INOUT) :: marray !! matrix array INTEGER :: i ! --------------------------------------------------------------------------- DO i = LBOUND(marray%mats, 1), UBOUND(marray%mats, 1) CALL dbcsr_destroy(marray%mats(i), force=.TRUE.) END DO CALL dbcsr_image_dist_release(marray%image_dist) DEALLOCATE (marray%mats) END SUBROUTINE dbcsr_destroy_1d_array SUBROUTINE dbcsr_destroy_2d_array(marray) !! Releases all matrices in 2-d array. TYPE(dbcsr_2d_array_type), INTENT(INOUT) :: marray !! matrix array INTEGER :: col, row ! --------------------------------------------------------------------------- DO row = LBOUND(marray%mats, 1), UBOUND(marray%mats, 1) DO col = LBOUND(marray%mats, 2), UBOUND(marray%mats, 2) CALL dbcsr_destroy(marray%mats(row, col), force=.TRUE.) END DO END DO CALL dbcsr_image_dist_release(marray%image_dist) DEALLOCATE (marray%mats) END SUBROUTINE dbcsr_destroy_2d_array SUBROUTINE dbcsr_image_dist_release(imgdist) !! Releases a reference to and possible deallocates an image !! distribution TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT) :: imgdist IF (ASSOCIATED(imgdist%i)) THEN imgdist%i%refcount = imgdist%i%refcount - 1 IF (imgdist%i%refcount .EQ. 0) THEN CALL dbcsr_destroy_image_dist(imgdist%i) DEALLOCATE (imgdist%i) END IF END IF END SUBROUTINE dbcsr_image_dist_release SUBROUTINE dbcsr_image_dist_hold(imgdist) !! Retains a reference to an image distribution TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT) :: imgdist imgdist%i%refcount = imgdist%i%refcount + 1 END SUBROUTINE dbcsr_image_dist_hold SUBROUTINE dbcsr_image_dist_init(imgdist) !! Initialized an image distribution !! !! Akin to nullify. TYPE(dbcsr_imagedistribution_obj), INTENT(OUT) :: imgdist NULLIFY (imgdist%i) END SUBROUTINE dbcsr_image_dist_init SUBROUTINE dbcsr_destroy_image_dist(imgdist) !! Destroys a DBCSR distribution for a matrix multiplication based on !! the right matrix TYPE(dbcsr_imagedistribution_type), INTENT(INOUT) :: imgdist !! product distribution repetition INTEGER :: i ! --------------------------------------------------------------------------- CALL array_release(imgdist%row_image) CALL array_release(imgdist%col_image) CALL dbcsr_distribution_release(imgdist%main) ! CALL array_release(imgdist%vrow_dist) CALL array_release(imgdist%vcol_dist) ! IF (imgdist%has_other_vl_rows) THEN DO i = LBOUND(imgdist%other_vl_rows, 1), UBOUND(imgdist%other_vl_rows, 1) CALL array_release(imgdist%other_vl_rows(i)) END DO DEALLOCATE (imgdist%other_vl_rows) imgdist%has_other_vl_rows = .FALSE. END IF ! IF (imgdist%has_other_vl_cols) THEN DO i = LBOUND(imgdist%other_vl_cols, 1), UBOUND(imgdist%other_vl_cols, 1) CALL array_release(imgdist%other_vl_cols(i)) END DO DEALLOCATE (imgdist%other_vl_cols) imgdist%has_other_vl_cols = .FALSE. END IF ! IF (imgdist%has_global_vrow_map) THEN CALL array_release(imgdist%global_vrow_map) END IF IF (imgdist%has_global_vcol_map) THEN CALL array_release(imgdist%global_vcol_map) END IF END SUBROUTINE dbcsr_destroy_image_dist ! ************************************************************************************************** ! Mutable data ! ************************************************************************************************** SUBROUTINE dbcsr_mutable_init(mutable) !! Initializes a mutable data type TYPE(dbcsr_mutable_obj), INTENT(OUT) :: mutable !! mutable data NULLIFY (mutable%m) END SUBROUTINE dbcsr_mutable_init SUBROUTINE dbcsr_mutable_destroy(mutable) !! Destroys a mutable data type TYPE(dbcsr_mutable_obj), INTENT(INOUT) :: mutable !! mutable data ! --------------------------------------------------------------------------- IF (ASSOCIATED(mutable%m)) THEN CALL btree_delete(mutable%m%btree_s) CALL btree_delete(mutable%m%btree_d) CALL btree_delete(mutable%m%btree_c) CALL btree_delete(mutable%m%btree_z) DEALLOCATE (mutable%m) END IF NULLIFY (mutable%m) END SUBROUTINE dbcsr_mutable_destroy SUBROUTINE dbcsr_mutable_release(mutable) !! Unregisters a reference to the mutable data type !! The object is destroy when there is no reference to it left. TYPE(dbcsr_mutable_obj), INTENT(INOUT) :: mutable !! mutable data ! --------------------------------------------------------------------------- IF (.NOT. ASSOCIATED(mutable%m)) & DBCSR_ABORT("Mutable data area not instantiated") mutable%m%refcount = mutable%m%refcount - 1 IF (mutable%m%refcount .EQ. 0) THEN CALL dbcsr_mutable_destroy(mutable) END IF END SUBROUTINE dbcsr_mutable_release SUBROUTINE dbcsr_mutable_new(mutable, data_type) !! Creates a new mutable instance. TYPE(dbcsr_mutable_obj), INTENT(INOUT) :: mutable !! mutable data INTEGER, INTENT(IN) :: data_type !! data type to be stored here (see dbcsr_types for possibilities) ! --------------------------------------------------------------------------- IF (ASSOCIATED(mutable%m)) & DBCSR_ABORT("Mutable data area already instantiated") IF (data_type .NE. dbcsr_type_real_4 & .AND. data_type .NE. dbcsr_type_real_8 & .AND. data_type .NE. dbcsr_type_complex_4 & .AND. data_type .NE. dbcsr_type_complex_8) & DBCSR_ABORT("Invalid data type") ALLOCATE (mutable%m) mutable%m%refcount = 1 mutable%m%data_type = data_type CALL btree_new(mutable%m%btree_s) CALL btree_new(mutable%m%btree_d) CALL btree_new(mutable%m%btree_c) CALL btree_new(mutable%m%btree_z) END SUBROUTINE dbcsr_mutable_new PURE FUNCTION dbcsr_mutable_instantiated(mutable) RESULT(instantiated) !! Unregisters a reference to the mutable data type !! The object is destroy when there is no reference to it left. TYPE(dbcsr_mutable_obj), INTENT(IN) :: mutable !! mutable data LOGICAL :: instantiated !! whether the object is instantiated ! --------------------------------------------------------------------------- instantiated = ASSOCIATED(mutable%m) END FUNCTION dbcsr_mutable_instantiated END MODULE dbcsr_methods ================================================ FILE: src/core/dbcsr_print_messages.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_print_messages !! Perform an abnormal program termination. !! @note !! These routines are low-level and thus provide also an error recovery !! when dependencies do not allow the use of the error logger. Only !! the master (root) process will dump, if para_env is available and !! properly specified. Otherwise (without any information about the !! parallel environment) most likely more than one process or even all !! processes will send their error dump to the default output unit. !! @endnote #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_print_messages' PUBLIC :: print_message CONTAINS SUBROUTINE print_message(message, output_unit, declev, before, after) !! Perform a basic blocking of the text in message and print it !! optionally decorated with a frame of stars as defined by declev. !! @note !! after : Number of empty lines after the message. !! before : Number of empty lines before the message. !! declev : Decoration level (0,1,2, ... star lines). !! message : String with the message text. !! output_unit: Logical unit number of output unit. !! @endnote CHARACTER(LEN=*), INTENT(IN) :: message INTEGER, INTENT(IN) :: output_unit INTEGER, INTENT(IN), OPTIONAL :: declev, before, after INTEGER :: blank_lines_after, blank_lines_before, & decoration_level, i, ibreak, ipos1, & ipos2, maxrowlen, msglen, nrow, rowlen IF (PRESENT(after)) THEN blank_lines_after = MAX(after, 0) ELSE blank_lines_after = 1 END IF IF (PRESENT(before)) THEN blank_lines_before = MAX(before, 0) ELSE blank_lines_before = 1 END IF IF (PRESENT(declev)) THEN decoration_level = MAX(declev, 0) ELSE decoration_level = 0 END IF IF (decoration_level == 0) THEN rowlen = 78 ELSE rowlen = 70 END IF msglen = LEN_TRIM(message) ! Calculate number of rows nrow = msglen/(rowlen + 1) + 1 ! Calculate appropriate row length rowlen = MIN(msglen, rowlen) ! Generate the blank lines before the message DO i = 1, blank_lines_before WRITE (UNIT=output_unit, FMT="(A)") "" END DO ! Scan for the longest row ipos1 = 1 ipos2 = rowlen maxrowlen = 0 DO IF (ipos2 < msglen) THEN i = INDEX(message(ipos1:ipos2), " ", BACK=.TRUE.) IF (i == 0) THEN ibreak = ipos2 ELSE ibreak = ipos1 + i - 2 END IF ELSE ibreak = ipos2 END IF maxrowlen = MAX(maxrowlen, ibreak - ipos1 + 1) ipos1 = ibreak + 2 ipos2 = MIN(msglen, ipos1 + rowlen - 1) ! When the last row is processed, exit loop IF (ipos1 > msglen) EXIT END DO ! Generate the first set of star rows IF (decoration_level > 1) THEN DO i = 1, decoration_level - 1 WRITE (UNIT=output_unit, FMT="(T2,A)") REPEAT("*", maxrowlen + 8) END DO END IF ! Break long messages ipos1 = 1 ipos2 = rowlen DO IF (ipos2 < msglen) THEN i = INDEX(message(ipos1:ipos2), " ", BACK=.TRUE.) IF (i == 0) THEN ibreak = ipos2 ELSE ibreak = ipos1 + i - 2 END IF ELSE ibreak = ipos2 END IF IF (decoration_level == 0) THEN WRITE (UNIT=output_unit, FMT="(T2,A)") message(ipos1:ibreak) ELSE IF (decoration_level > 0) THEN WRITE (UNIT=output_unit, FMT="(T2,A)") & "*** "//message(ipos1:ibreak)//REPEAT(" ", ipos1 + maxrowlen - ibreak)//"***" END IF ipos1 = ibreak + 2 ipos2 = MIN(msglen, ipos1 + rowlen - 1) ! When the last row is processed, exit loop IF (ipos1 > msglen) EXIT END DO ! Generate the second set star rows IF (decoration_level > 1) THEN DO i = 1, decoration_level - 1 WRITE (UNIT=output_unit, FMT="(T2,A)") REPEAT("*", maxrowlen + 8) END DO END IF ! Generate the blank lines after the message DO i = 1, blank_lines_after WRITE (UNIT=output_unit, FMT="(A)") "" END DO END SUBROUTINE print_message END MODULE dbcsr_print_messages ================================================ FILE: src/core/dbcsr_timings.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_timings !! Timing routines for accounting USE dbcsr_base_hooks, ONLY: timeset_hook, & timestop_hook USE dbcsr_cuda_profiling, ONLY: cuda_nvtx_range_pop, & cuda_nvtx_range_push USE dbcsr_acc_devmem, ONLY: acc_devmem_info USE dbcsr_dict, ONLY: dict_destroy, & dict_get, & dict_i4tuple_callstat_item_type, & dict_init, & dict_items, & dict_set, & dict_size USE dbcsr_kinds, ONLY: default_string_length, & dp, & int_8 USE dbcsr_list, ONLY: & list_destroy, list_get, list_init, list_isready, list_peek, list_pop, list_push, & list_size, list_timerenv_type USE dbcsr_machine, ONLY: m_energy, & m_flush, & m_memory, & m_walltime USE dbcsr_timings_base_type, ONLY: call_stat_type, & callstack_entry_type, & routine_stat_type USE dbcsr_timings_types, ONLY: timer_env_type USE dbcsr_hip_profiling, ONLY: roctxRangePushA, & roctxRangePop USE ISO_C_BINDING, ONLY: C_NULL_CHAR #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE PUBLIC :: print_stack, timings_register_hooks ! these routines are currently only used by environment.F and f77_interface.F PUBLIC :: add_timer_env, rm_timer_env, get_timer_env PUBLIC :: timer_env_retain, timer_env_release PUBLIC :: timings_setup_tracing ! global variables CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_timings' TYPE(list_timerenv_type), SAVE, PRIVATE :: timers_stack !API (via pointer assignment to hook, PR67982, not meant to be called directly) PUBLIC :: timeset_handler, timestop_handler INTEGER, PUBLIC, PARAMETER :: default_timings_level = 1 INTEGER, PUBLIC, SAVE :: global_timings_level = default_timings_level CONTAINS SUBROUTINE timings_register_hooks() !! Registers handlers with base_hooks.F timeset_hook => timeset_handler timestop_hook => timestop_handler END SUBROUTINE timings_register_hooks SUBROUTINE add_timer_env(timer_env) !! adds the given timer_env to the top of the stack !! @note !! for each init_timer_env there should be the symmetric call to !! rm_timer_env TYPE(timer_env_type), OPTIONAL, POINTER :: timer_env TYPE(timer_env_type), POINTER :: timer_env_ IF (PRESENT(timer_env)) timer_env_ => timer_env IF (.NOT. PRESENT(timer_env)) CALL timer_env_create(timer_env_) IF (.NOT. ASSOCIATED(timer_env_)) & DBCSR_ABORT("add_timer_env: not associated") CALL timer_env_retain(timer_env_) IF (.NOT. list_isready(timers_stack)) CALL list_init(timers_stack) CALL list_push(timers_stack, timer_env_) END SUBROUTINE add_timer_env SUBROUTINE timer_env_create(timer_env) !! creates a new timer env TYPE(timer_env_type), POINTER :: timer_env INTEGER :: stat ALLOCATE (timer_env, stat=stat) IF (stat /= 0) & DBCSR_ABORT("timer_env_create: allocation failed") timer_env%ref_count = 0 timer_env%trace_max = -1 ! tracing disabled by default timer_env%trace_all = .FALSE. CALL dict_init(timer_env%routine_names) CALL dict_init(timer_env%callgraph) CALL list_init(timer_env%routine_stats) CALL list_init(timer_env%callstack) END SUBROUTINE timer_env_create SUBROUTINE rm_timer_env() !! removes the current timer env from the stack !! @note !! for each rm_timer_env there should have been the symmetric call to !! add_timer_env TYPE(timer_env_type), POINTER :: timer_env timer_env => list_pop(timers_stack) CALL timer_env_release(timer_env) IF (list_size(timers_stack) == 0) CALL list_destroy(timers_stack) END SUBROUTINE rm_timer_env FUNCTION get_timer_env() RESULT(timer_env) !! returns the current timer env from the stack TYPE(timer_env_type), POINTER :: timer_env timer_env => list_peek(timers_stack) END FUNCTION get_timer_env SUBROUTINE timer_env_retain(timer_env) !! retains the given timer env TYPE(timer_env_type), POINTER :: timer_env !! the timer env to retain IF (.NOT. ASSOCIATED(timer_env)) & DBCSR_ABORT("timer_env_retain: not associated") IF (timer_env%ref_count < 0) & DBCSR_ABORT("timer_env_retain: negative ref_count") timer_env%ref_count = timer_env%ref_count + 1 END SUBROUTINE timer_env_retain SUBROUTINE timer_env_release(timer_env) !! releases the given timer env TYPE(timer_env_type), POINTER :: timer_env !! the timer env to release INTEGER :: i TYPE(dict_i4tuple_callstat_item_type), & DIMENSION(:), POINTER :: ct_items TYPE(routine_stat_type), POINTER :: r_stat IF (.NOT. ASSOCIATED(timer_env)) & DBCSR_ABORT("timer_env_release: not associated") IF (timer_env%ref_count < 0) & DBCSR_ABORT("timer_env_release: negative ref_count") timer_env%ref_count = timer_env%ref_count - 1 IF (timer_env%ref_count > 0) RETURN ! No more references left - let's tear down this timer_env... DO i = 1, list_size(timer_env%routine_stats) r_stat => list_get(timer_env%routine_stats, i) DEALLOCATE (r_stat) END DO ct_items => dict_items(timer_env%callgraph) DO i = 1, SIZE(ct_items) DEALLOCATE (ct_items(i)%value) END DO DEALLOCATE (ct_items) CALL dict_destroy(timer_env%routine_names) CALL dict_destroy(timer_env%callgraph) CALL list_destroy(timer_env%callstack) CALL list_destroy(timer_env%routine_stats) DEALLOCATE (timer_env) END SUBROUTINE timer_env_release SUBROUTINE timeset_handler(routineN, handle) !! Start timer CHARACTER(LEN=*), INTENT(IN) :: routineN INTEGER, INTENT(OUT) :: handle CHARACTER(LEN=400) :: line, mystring CHARACTER(LEN=60) :: sformat CHARACTER(LEN=default_string_length) :: routine_name_dsl INTEGER :: routine_id, stack_size #if defined( __HIP_PROFILING ) INTEGER :: ret #endif INTEGER(KIND=int_8) :: cpumem, gpumem_free, gpumem_total TYPE(callstack_entry_type) :: cs_entry TYPE(routine_stat_type), POINTER :: r_stat TYPE(timer_env_type), POINTER :: timer_env !$OMP MASTER ! Default value, using a negative value when timing is not taken cs_entry%walltime_start = -HUGE(1.0_dp) cs_entry%energy_start = -HUGE(1.0_dp) ! routine_name_dsl = routineN ! converts to default_string_length routine_id = routine_name2id(routine_name_dsl) ! ! Take timings when the timings_level is appropriated IF (global_timings_level .NE. 0) THEN cs_entry%walltime_start = m_walltime() cs_entry%energy_start = m_energy() END IF timer_env => list_peek(timers_stack) IF (LEN_TRIM(routineN) > default_string_length) THEN DBCSR_ABORT('timings_timeset: routineN too long: "'//TRIM(routineN)//"'") END IF ! update routine r_stats r_stat => list_get(timer_env%routine_stats, routine_id) stack_size = list_size(timer_env%callstack) r_stat%total_calls = r_stat%total_calls + 1 r_stat%active_calls = r_stat%active_calls + 1 r_stat%stackdepth_accu = r_stat%stackdepth_accu + stack_size + 1 ! add routine to callstack cs_entry%routine_id = routine_id CALL list_push(timer_env%callstack, cs_entry) !..if debug mode echo the subroutine name IF ((timer_env%trace_all .OR. r_stat%trace) .AND. & (r_stat%total_calls < timer_env%trace_max)) THEN WRITE (sformat, *) "(A,A,", MAX(1, 3*stack_size - 4), "X,I4,1X,I6,1X,A,A)" WRITE (mystring, sformat) timer_env%trace_str, ">>", stack_size + 1, & r_stat%total_calls, TRIM(r_stat%routineN), " start" CALL acc_devmem_info(gpumem_free, gpumem_total) CALL m_memory(cpumem) WRITE (line, '(A,A,I0,A,A,I0,A)') TRIM(mystring), & " Hostmem: ", (cpumem + 1024**2 - 1)/1024**2, " MiB", & " GPUmem: ", (gpumem_total - gpumem_free)/1024**2, " MiB" WRITE (timer_env%trace_unit, *) TRIM(line) CALL m_flush(timer_env%trace_unit) END IF handle = routine_id #if defined( __CUDA_PROFILING ) CALL cuda_nvtx_range_push(routineN) #endif #if defined( __HIP_PROFILING ) ret = roctxRangePushA(routineN//C_NULL_CHAR) #endif !$OMP END MASTER END SUBROUTINE timeset_handler SUBROUTINE timestop_handler(handle) !! End timer INTEGER, INTENT(in) :: handle CHARACTER(LEN=400) :: line, mystring CHARACTER(LEN=60) :: sformat INTEGER :: routine_id, stack_size INTEGER(KIND=int_8) :: cpumem, gpumem_free, gpumem_total INTEGER, DIMENSION(2) :: routine_tuple REAL(KIND=dp) :: en_elapsed, en_now, wt_elapsed, wt_now TYPE(call_stat_type), POINTER :: c_stat TYPE(callstack_entry_type) :: cs_entry, prev_cs_entry TYPE(routine_stat_type), POINTER :: prev_stat, r_stat TYPE(timer_env_type), POINTER :: timer_env routine_id = handle !$OMP MASTER #if defined( __CUDA_PROFILING ) CALL cuda_nvtx_range_pop() #endif #if defined( __HIP_PROFILING ) CALL roctxRangePop() #endif timer_env => list_peek(timers_stack) cs_entry = list_pop(timer_env%callstack) r_stat => list_get(timer_env%routine_stats, cs_entry%routine_id) IF (handle /= cs_entry%routine_id) THEN PRINT *, "list_size(timer_env%callstack) ", list_size(timer_env%callstack), & " list_size(timers_stack) ", list_size(timers_stack), & " got handle ", handle, " expected routineid ", cs_entry%routine_id DBCSR_ABORT('mismatched timestop '//TRIM(r_stat%routineN)//' in routine timestop') END IF wt_elapsed = 0 en_elapsed = 0 ! Take timings only when the start time is >=0, i.e. the timings_level is appropriated IF (cs_entry%walltime_start .GE. 0) THEN wt_now = m_walltime() en_now = m_energy() ! add the elapsed time for this timeset/timestop to the time accumulator wt_elapsed = wt_now - cs_entry%walltime_start en_elapsed = en_now - cs_entry%energy_start END IF r_stat%active_calls = r_stat%active_calls - 1 ! if we're the last instance in the stack, we do the accounting of the total time IF (r_stat%active_calls == 0) THEN r_stat%incl_walltime_accu = r_stat%incl_walltime_accu + wt_elapsed r_stat%incl_energy_accu = r_stat%incl_energy_accu + en_elapsed END IF ! exclusive time we always sum, since children will correct this time with their total time r_stat%excl_walltime_accu = r_stat%excl_walltime_accu + wt_elapsed r_stat%excl_energy_accu = r_stat%excl_energy_accu + en_elapsed stack_size = list_size(timer_env%callstack) IF (stack_size > 0) THEN prev_cs_entry = list_peek(timer_env%callstack) prev_stat => list_get(timer_env%routine_stats, prev_cs_entry%routine_id) ! we fixup the clock of the caller prev_stat%excl_walltime_accu = prev_stat%excl_walltime_accu - wt_elapsed prev_stat%excl_energy_accu = prev_stat%excl_energy_accu - en_elapsed !update callgraph routine_tuple = (/prev_cs_entry%routine_id, routine_id/) c_stat => dict_get(timer_env%callgraph, routine_tuple, default_value=Null(c_stat)) IF (.NOT. ASSOCIATED(c_stat)) THEN ALLOCATE (c_stat) c_stat%total_calls = 0 c_stat%incl_walltime_accu = 0.0_dp c_stat%incl_energy_accu = 0.0_dp CALL dict_set(timer_env%callgraph, routine_tuple, c_stat) END IF c_stat%total_calls = c_stat%total_calls + 1 c_stat%incl_walltime_accu = c_stat%incl_walltime_accu + wt_elapsed c_stat%incl_energy_accu = c_stat%incl_energy_accu + en_elapsed END IF !..if debug mode echo the subroutine name IF ((timer_env%trace_all .OR. r_stat%trace) .AND. & (r_stat%total_calls < timer_env%trace_max)) THEN WRITE (sformat, *) "(A,A,", MAX(1, 3*stack_size - 4), "X,I4,1X,I6,1X,A,F12.3)" WRITE (mystring, sformat) timer_env%trace_str, "<<", stack_size + 1, & r_stat%total_calls, TRIM(r_stat%routineN), wt_elapsed CALL acc_devmem_info(gpumem_free, gpumem_total) CALL m_memory(cpumem) WRITE (line, '(A,A,I0,A,A,I0,A)') TRIM(mystring), & " Hostmem: ", (cpumem + 1024*1024 - 1)/(1024*1024), " MB", & " GPUmem: ", (gpumem_total - gpumem_free)/(1024*1024), " MB" WRITE (timer_env%trace_unit, *) TRIM(line) CALL m_flush(timer_env%trace_unit) END IF !$OMP END MASTER END SUBROUTINE timestop_handler SUBROUTINE timings_setup_tracing(trace_max, unit_nr, trace_str, routine_names) !! Set routine tracer INTEGER, INTENT(IN) :: trace_max, unit_nr !! maximum number of calls reported per routine. Setting this to zero disables tracing. !! output unit used for printing the trace-messages CHARACTER(len=13), INTENT(IN) :: trace_str !! short info-string which is printed along with every message CHARACTER(len=default_string_length), & DIMENSION(:), INTENT(IN), OPTIONAL :: routine_names !! List of routine-names. If provided only these routines will be traced. If not present all routines will traced. INTEGER :: i, routine_id TYPE(routine_stat_type), POINTER :: r_stat TYPE(timer_env_type), POINTER :: timer_env timer_env => list_peek(timers_stack) timer_env%trace_max = trace_max timer_env%trace_unit = unit_nr timer_env%trace_str = trace_str timer_env%trace_all = .TRUE. IF (.NOT. PRESENT(routine_names)) RETURN ! setup routine-specific tracing timer_env%trace_all = .FALSE. DO i = 1, SIZE(routine_names) routine_id = routine_name2id(routine_names(i)) r_stat => list_get(timer_env%routine_stats, routine_id) r_stat%trace = .TRUE. END DO END SUBROUTINE timings_setup_tracing SUBROUTINE print_stack(unit_nr) !! Print current routine stack INTEGER, INTENT(IN) :: unit_nr INTEGER :: i TYPE(callstack_entry_type) :: cs_entry TYPE(routine_stat_type), POINTER :: r_stat TYPE(timer_env_type), POINTER :: timer_env ! catch edge cases where timer_env is not yet/anymore available IF (.NOT. list_isready(timers_stack)) & RETURN IF (list_size(timers_stack) == 0) & RETURN timer_env => list_peek(timers_stack) WRITE (unit_nr, '(/,A,/)') " ===== Routine Calling Stack ===== " DO i = list_size(timer_env%callstack), 1, -1 cs_entry = list_get(timer_env%callstack, i) r_stat => list_get(timer_env%routine_stats, cs_entry%routine_id) WRITE (unit_nr, '(T10,I4,1X,A)') i, TRIM(r_stat%routineN) END DO CALL m_flush(unit_nr) END SUBROUTINE print_stack FUNCTION routine_name2id(routineN) RESULT(routine_id) !! Internal routine used by timeset_handler and timings_setup_tracing. !! If no routine with given name is found in timer_env%routine_names !! then a new entry is created. CHARACTER(LEN=default_string_length), INTENT(IN) :: routineN INTEGER :: routine_id INTEGER :: stat TYPE(routine_stat_type), POINTER :: r_stat TYPE(timer_env_type), POINTER :: timer_env timer_env => list_peek(timers_stack) routine_id = dict_get(timer_env%routine_names, routineN, default_value=-1) IF (routine_id /= -1) RETURN ! found an id - let's return it ! routine not found - let's create it ! enforce space free timer names, to make the output of trace/timings of a fixed number fields IF (INDEX(routineN(1:LEN_TRIM(routineN)), ' ') /= 0) THEN DBCSR_ABORT("timings_name2id: routineN contains spaces: "//routineN) END IF ! register routine_name_dsl with new routine_id routine_id = dict_size(timer_env%routine_names) + 1 CALL dict_set(timer_env%routine_names, routineN, routine_id) ALLOCATE (r_stat, stat=stat) IF (stat /= 0) & DBCSR_ABORT("timings_name2id: allocation failed") r_stat%routine_id = routine_id r_stat%routineN = routineN r_stat%active_calls = 0 r_stat%excl_walltime_accu = 0.0_dp r_stat%incl_walltime_accu = 0.0_dp r_stat%excl_energy_accu = 0.0_dp r_stat%incl_energy_accu = 0.0_dp r_stat%total_calls = 0 r_stat%stackdepth_accu = 0 r_stat%trace = .FALSE. CALL list_push(timer_env%routine_stats, r_stat) IF (list_size(timer_env%routine_stats) /= dict_size(timer_env%routine_names)) & DBCSR_ABORT("timings_name2id: assertion failed") END FUNCTION routine_name2id END MODULE dbcsr_timings ================================================ FILE: src/core/dbcsr_timings_base_type.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_timings_base_type !! Types used by timings.F and timings_report.F !! The types in this module are used within dict or list, which are !! in turn used in timer_env_type from timings_type.F !! Due to the fortran restriction on circular module-dependencies these !! "inner-types" had to go into a separate module. USE dbcsr_kinds, ONLY: default_string_length, & dp, & int_8 IMPLICIT NONE PRIVATE TYPE routine_stat_type INTEGER :: routine_id = -1 CHARACTER(len=default_string_length) :: routineN = "" REAL(kind=dp) :: excl_walltime_accu = -1.0_dp REAL(kind=dp) :: incl_walltime_accu = -1.0_dp REAL(kind=dp) :: excl_energy_accu = -1.0_dp REAL(kind=dp) :: incl_energy_accu = -1.0_dp INTEGER :: active_calls = -1 INTEGER :: total_calls = -1 INTEGER :: stackdepth_accu = -1 LOGICAL :: trace = .FALSE. END TYPE routine_stat_type TYPE call_stat_type INTEGER :: total_calls = -1 REAL(kind=dp) :: incl_walltime_accu = -1.0_dp REAL(kind=dp) :: incl_energy_accu = -1.0_dp END TYPE call_stat_type TYPE callstack_entry_type INTEGER :: routine_id = -1 REAL(kind=dp) :: walltime_start = -1.0_dp REAL(kind=dp) :: energy_start = -1.0_dp END TYPE callstack_entry_type TYPE routine_report_type CHARACTER(LEN=default_string_length) :: routineN = "" REAL(KIND=dp) :: max_icost = 0.0_dp REAL(KIND=dp) :: sum_icost = 0.0_dp REAL(KIND=dp) :: max_ecost = 0.0_dp REAL(KIND=dp) :: sum_ecost = 0.0_dp INTEGER :: max_irank = 0 INTEGER :: max_erank = 0 INTEGER(kind=int_8) :: max_total_calls = 0 INTEGER(kind=int_8) :: sum_total_calls = 0 INTEGER(kind=int_8) :: sum_stackdepth = 0 END TYPE routine_report_type PUBLIC :: routine_stat_type, call_stat_type, callstack_entry_type, routine_report_type END MODULE dbcsr_timings_base_type ! ************************************************************************************************** ================================================ FILE: src/core/dbcsr_timings_report.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_timings_report !! Timing routines for accounting USE dbcsr_dict, ONLY: dict_get, & dict_haskey, & dict_i4tuple_callstat_item_type, & dict_items USE dbcsr_files, ONLY: close_file, & open_file USE dbcsr_kinds, ONLY: default_string_length, & dp, & int_8 USE dbcsr_list, ONLY: list_destroy, & list_get, & list_init, & list_isready, & list_pop, & list_push, & list_size USE dbcsr_list_routinereport, ONLY: list_routinereport_type USE dbcsr_mpiwrap, ONLY: mp_bcast, & mp_max, & mp_maxloc, & mp_sum USE dbcsr_timings, ONLY: get_timer_env USE dbcsr_timings_base_type, ONLY: call_stat_type, & routine_report_type, & routine_stat_type USE dbcsr_timings_types, ONLY: timer_env_type USE dbcsr_toollib, ONLY: sort USE dbcsr_types, ONLY: dbcsr_mp_obj #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE INTEGER, PUBLIC, PARAMETER :: cost_type_time = 17, cost_type_energy = 18 PUBLIC :: timings_report_print, timings_report_callgraph CONTAINS SUBROUTINE timings_report_print(iw, r_timings, sort_by_self_time, cost_type, report_maxloc, mp_env) !! Print accumulated information on timers INTEGER, INTENT(IN) :: iw REAL(KIND=dp), INTENT(IN) :: r_timings LOGICAL, INTENT(IN) :: sort_by_self_time INTEGER, INTENT(IN) :: cost_type LOGICAL, INTENT(IN) :: report_maxloc TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env !! is needed to collect statistics from other nodes. TYPE(list_routinereport_type) :: reports TYPE(routine_report_type), POINTER :: r_report CALL list_init(reports) CALL collect_reports_from_ranks(reports, cost_type, mp_env) IF (list_size(reports) > 0 .AND. iw > 0) & CALL print_reports(reports, iw, r_timings, sort_by_self_time, cost_type, report_maxloc, mp_env) ! deallocate reports DO WHILE (list_size(reports) > 0) r_report => list_pop(reports) DEALLOCATE (r_report) END DO CALL list_destroy(reports) END SUBROUTINE timings_report_print SUBROUTINE collect_reports_from_ranks(reports, cost_type, mp_env) !! Collects the timing or energy reports from all MPI ranks. TYPE(list_routinereport_type), INTENT(INOUT) :: reports INTEGER, INTENT(IN) :: cost_type TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env CHARACTER(LEN=default_string_length) :: routineN INTEGER :: local_routine_id, sending_rank INTEGER, ALLOCATABLE, DIMENSION(:) :: collected REAL(KIND=dp) :: foobar REAL(KIND=dp), DIMENSION(2) :: dbuf TYPE(routine_report_type), POINTER :: r_report TYPE(routine_stat_type), POINTER :: r_stat TYPE(timer_env_type), POINTER :: timer_env NULLIFY (r_stat, r_report, timer_env) IF (.NOT. list_isready(reports)) & DBCSR_ABORT("BUG") timer_env => get_timer_env() ! make sure all functions have been called so that list_size(timer_env%routine_stats) ! and the actual dictionary are consistent in the loop below, preventing out of bounds. ! this hack makes sure they are called before routineN = "" CALL mp_bcast(routineN, 0, mp_env%mp%mp_group) sending_rank = 0 CALL mp_max(sending_rank, mp_env%mp%mp_group) CALL mp_sum(sending_rank, mp_env%mp%mp_group) foobar = 0.0_dp CALL mp_max(foobar, mp_env%mp%mp_group) dbuf = 0.0_dp CALL mp_maxloc(dbuf, mp_env%mp%mp_group) CALL mp_sum(foobar, mp_env%mp%mp_group) ! end hack ! Array collected is used as a bit field. ! It's of type integer in order to use the convenient MINLOC routine. ALLOCATE (collected(list_size(timer_env%routine_stats))) collected(:) = 0 DO ! does any rank have uncollected stats? sending_rank = -1 IF (.NOT. ALL(collected == 1)) sending_rank = mp_env%mp%mynode CALL mp_max(sending_rank, mp_env%mp%mp_group) IF (sending_rank < 0) EXIT ! every rank got all routines collected IF (sending_rank == mp_env%mp%mynode) THEN local_routine_id = MINLOC(collected, dim=1) r_stat => list_get(timer_env%routine_stats, local_routine_id) routineN = r_stat%routineN END IF CALL mp_bcast(routineN, sending_rank, mp_env%mp%mp_group) ! Create new report for routineN ALLOCATE (r_report) CALL list_push(reports, r_report) r_report%routineN = routineN ! If routineN was called on local node, add local stats IF (dict_haskey(timer_env%routine_names, routineN)) THEN local_routine_id = dict_get(timer_env%routine_names, routineN) collected(local_routine_id) = 1 r_stat => list_get(timer_env%routine_stats, local_routine_id) r_report%max_total_calls = r_stat%total_calls r_report%sum_total_calls = r_stat%total_calls r_report%sum_stackdepth = r_stat%stackdepth_accu SELECT CASE (cost_type) CASE (cost_type_energy) r_report%max_icost = r_stat%incl_energy_accu r_report%sum_icost = r_stat%incl_energy_accu r_report%max_ecost = r_stat%excl_energy_accu r_report%sum_ecost = r_stat%excl_energy_accu CASE (cost_type_time) r_report%max_icost = r_stat%incl_walltime_accu r_report%sum_icost = r_stat%incl_walltime_accu r_report%max_ecost = r_stat%excl_walltime_accu r_report%sum_ecost = r_stat%excl_walltime_accu CASE DEFAULT DBCSR_ABORT("BUG") END SELECT END IF ! collect stats of routineN via MPI CALL mp_max(r_report%max_total_calls, mp_env%mp%mp_group) CALL mp_sum(r_report%sum_total_calls, mp_env%mp%mp_group) CALL mp_sum(r_report%sum_stackdepth, mp_env%mp%mp_group) ! get value and rank of the maximum inclusive cost dbuf = (/r_report%max_icost, REAL(mp_env%mp%mynode, KIND=dp)/) CALL mp_maxloc(dbuf, mp_env%mp%mp_group) r_report%max_icost = dbuf(1) r_report%max_irank = INT(dbuf(2)) CALL mp_sum(r_report%sum_icost, mp_env%mp%mp_group) ! get value and rank of the maximum exclusive cost dbuf = (/r_report%max_ecost, REAL(mp_env%mp%mynode, KIND=dp)/) CALL mp_maxloc(dbuf, mp_env%mp%mp_group) r_report%max_ecost = dbuf(1) r_report%max_erank = INT(dbuf(2)) CALL mp_sum(r_report%sum_ecost, mp_env%mp%mp_group) END DO END SUBROUTINE collect_reports_from_ranks SUBROUTINE print_reports(reports, iw, threshold, sort_by_exclusiv_cost, cost_type, report_maxloc, mp_env) !! Print the collected reports TYPE(list_routinereport_type), INTENT(IN) :: reports INTEGER, INTENT(IN) :: iw REAL(KIND=dp), INTENT(IN) :: threshold LOGICAL, INTENT(IN) :: sort_by_exclusiv_cost INTEGER, INTENT(IN) :: cost_type LOGICAL, INTENT(IN) :: report_maxloc TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env CHARACTER(LEN=4) :: label CHARACTER(LEN=default_string_length) :: fmt, title INTEGER :: decimals, i, j, num_routines INTEGER, ALLOCATABLE, DIMENSION(:) :: indices REAL(KIND=dp) :: asd, maxcost, mincost REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: max_costs TYPE(routine_report_type), POINTER :: r_report_i, r_report_j NULLIFY (r_report_i, r_report_j) IF (.NOT. list_isready(reports)) & DBCSR_ABORT("BUG") ! are we printing timing or energy ? SELECT CASE (cost_type) CASE (cost_type_energy) title = "E N E R G Y" label = "ENER" CASE (cost_type_time) title = "T I M I N G" label = "TIME" CASE DEFAULT DBCSR_ABORT("BUG") END SELECT ! write banner WRITE (UNIT=iw, FMT="(/,T2,A)") REPEAT("-", 79) WRITE (UNIT=iw, FMT="(T2,A,T80,A)") "-", "-" WRITE (UNIT=iw, FMT="(T2,A,T35,A,T80,A)") "-", TRIM(title), "-" WRITE (UNIT=iw, FMT="(T2,A,T80,A)") "-", "-" WRITE (UNIT=iw, FMT="(T2,A)") REPEAT("-", 79) IF (report_maxloc) THEN WRITE (UNIT=iw, FMT="(T2,A,T35,A,T41,A,T45,2A18,A8)") & "SUBROUTINE", "CALLS", " ASD", "SELF "//label, "TOTAL "//label, "MAXRANK" ELSE WRITE (UNIT=iw, FMT="(T2,A,T35,A,T41,A,T45,2A18)") & "SUBROUTINE", "CALLS", " ASD", "SELF "//label, "TOTAL "//label END IF WRITE (UNIT=iw, FMT="(T33,A)") & "MAXIMUM AVERAGE MAXIMUM AVERAGE MAXIMUM" ! sort statistics num_routines = list_size(reports) ALLOCATE (max_costs(num_routines)) DO i = 1, num_routines r_report_i => list_get(reports, i) IF (sort_by_exclusiv_cost) THEN max_costs(i) = r_report_i%max_ecost ELSE max_costs(i) = r_report_i%max_icost END IF END DO ALLOCATE (indices(num_routines)) CALL sort(max_costs, num_routines, indices) maxcost = MAXVAL(max_costs) mincost = maxcost*threshold ! adjust fmt dynamically based on the max walltime. ! few clocks have more than 3 digits resolution, so stop there decimals = 3 IF (maxcost >= 10000) decimals = 2 IF (maxcost >= 100000) decimals = 1 IF (maxcost >= 1000000) decimals = 0 IF (report_maxloc) THEN WRITE (UNIT=fmt, FMT="(A,I0,A)") & "(T2,A30,1X,I7,1X,F4.1,4(1X,F8.", decimals, "),I8)" ELSE WRITE (UNIT=fmt, FMT="(A,I0,A)") & "(T2,A30,1X,I7,1X,F4.1,4(1X,F8.", decimals, "))" END IF !write output DO i = num_routines, 1, -1 IF (max_costs(i) >= mincost) THEN j = indices(i) r_report_j => list_get(reports, j) ! average stack depth asd = REAL(r_report_j%sum_stackdepth, KIND=dp)/ & REAL(MAX(1_int_8, r_report_j%sum_total_calls), KIND=dp) IF (report_maxloc) THEN WRITE (UNIT=iw, FMT=fmt) & ADJUSTL(r_report_j%routineN(1:31)), & r_report_j%max_total_calls, & asd, & r_report_j%sum_ecost/mp_env%mp%numnodes, & r_report_j%max_ecost, & r_report_j%sum_icost/mp_env%mp%numnodes, & r_report_j%max_icost, & r_report_j%max_erank ELSE WRITE (UNIT=iw, FMT=fmt) & ADJUSTL(r_report_j%routineN(1:31)), & r_report_j%max_total_calls, & asd, & r_report_j%sum_ecost/mp_env%mp%numnodes, & r_report_j%max_ecost, & r_report_j%sum_icost/mp_env%mp%numnodes, & r_report_j%max_icost END IF END IF END DO WRITE (UNIT=iw, FMT="(T2,A,/)") REPEAT("-", 79) END SUBROUTINE print_reports SUBROUTINE timings_report_callgraph(filename) !! Write accumulated callgraph information as cachegrind-file. !! http://kcachegrind.sourceforge.net/cgi-bin/show.cgi/KcacheGrindCalltreeFormat CHARACTER(len=*), INTENT(in) :: filename INTEGER, PARAMETER :: E = 1000, T = 100000 INTEGER :: i, unit TYPE(call_stat_type), POINTER :: c_stat TYPE(dict_i4tuple_callstat_item_type), & DIMENSION(:), POINTER :: ct_items TYPE(routine_stat_type), POINTER :: r_stat TYPE(timer_env_type), POINTER :: timer_env CALL open_file(file_name=filename, file_status="REPLACE", file_action="WRITE", & file_form="FORMATTED", unit_number=unit) timer_env => get_timer_env() ! use outermost routine as total runtime r_stat => list_get(timer_env%routine_stats, 1) WRITE (UNIT=unit, FMT="(A)") "events: Walltime Energy" WRITE (UNIT=unit, FMT="(A,I0,1X,I0)") "summary: ", & INT(T*r_stat%incl_walltime_accu, KIND=int_8), & INT(E*r_stat%incl_energy_accu, KIND=int_8) DO i = 1, list_size(timer_env%routine_stats) r_stat => list_get(timer_env%routine_stats, i) WRITE (UNIT=unit, FMT="(A,I0,A,A)") "fn=(", r_stat%routine_id, ") ", r_stat%routineN WRITE (UNIT=unit, FMT="(A,I0,1X,I0)") "1 ", & INT(T*r_stat%excl_walltime_accu, KIND=int_8), & INT(E*r_stat%excl_energy_accu, KIND=int_8) END DO ct_items => dict_items(timer_env%callgraph) DO i = 1, SIZE(ct_items) c_stat => ct_items(i)%value WRITE (UNIT=unit, FMT="(A,I0,A)") "fn=(", ct_items(i)%key(1), ")" WRITE (UNIT=unit, FMT="(A,I0,A)") "cfn=(", ct_items(i)%key(2), ")" WRITE (UNIT=unit, FMT="(A,I0,A)") "calls=", c_stat%total_calls, " 1" WRITE (UNIT=unit, FMT="(A,I0,1X,I0)") "1 ", & INT(T*c_stat%incl_walltime_accu, KIND=int_8), & INT(E*c_stat%incl_energy_accu, KIND=int_8) END DO DEALLOCATE (ct_items) CALL close_file(unit_number=unit, file_status="KEEP") END SUBROUTINE timings_report_callgraph END MODULE dbcsr_timings_report ================================================ FILE: src/core/dbcsr_timings_types.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_timings_types !! Types used by timings.F and timings_report.F !! Due to the fortran restriction on circular module-dependencies !! the types, which are used through dict or list had to go !! into the separate module timings_base_type.F USE dbcsr_dict, ONLY: dict_i4tuple_callstat_type, & dict_str_i4_type USE dbcsr_list_callstackentry, ONLY: list_callstackentry_type USE dbcsr_list_routinestat, ONLY: list_routinestat_type IMPLICIT NONE PRIVATE TYPE timer_env_type INTEGER :: ref_count = -1 TYPE(dict_str_i4_type) :: routine_names = dict_str_i4_type() TYPE(list_routinestat_type) :: routine_stats = list_routinestat_type() TYPE(list_callstackentry_type) :: callstack = list_callstackentry_type() TYPE(dict_i4tuple_callstat_type) :: callgraph = dict_i4tuple_callstat_type() INTEGER :: trace_max = -1 INTEGER :: trace_unit = -1 CHARACTER(len=13) :: trace_str = "" LOGICAL :: trace_all = .FALSE. END TYPE timer_env_type PUBLIC :: timer_env_type END MODULE dbcsr_timings_types ! ************************************************************************************************** ================================================ FILE: src/core/dbcsr_types.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_types !! DBCSR data types USE dbcsr_array_types, ONLY: array_i1d_obj USE dbcsr_btree, ONLY: btree_i8_cp2d, & btree_i8_dp2d, & btree_i8_sp2d, & btree_i8_zp2d USE dbcsr_data_types, ONLY: & dbcsr_data_area_type, dbcsr_data_obj, dbcsr_datatype_sizeof, dbcsr_memtype_default, & dbcsr_memtype_type, dbcsr_scalar_type, dbcsr_type_complex_4, dbcsr_type_complex_4_2d, & dbcsr_type_complex_8, dbcsr_type_complex_8_2d, dbcsr_type_complex_default, & dbcsr_type_int_4, dbcsr_type_real_4, dbcsr_type_real_4_2d, dbcsr_type_real_8, & dbcsr_type_real_8_2d, dbcsr_type_real_default USE dbcsr_kinds, ONLY: default_string_length, & int_8 USE dbcsr_mpiwrap, ONLY: mp_comm_type, mp_comm_null IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_types' PUBLIC :: dbcsr_type, & dbcsr_scalar_type, & dbcsr_data_obj, & dbcsr_data_area_type, & dbcsr_work_type, & dbcsr_1d_array_type, & dbcsr_2d_array_type, & dbcsr_mp_obj, & dbcsr_distribution_obj, & dbcsr_imagedistribution_type, & dbcsr_imagedistribution_obj, & dbcsr_iterator, & dbcsr_mutable_obj, & dbcsr_type_p PUBLIC :: dbcsr_meta_size PUBLIC :: dbcsr_slot_size, & dbcsr_slot_row_p, & dbcsr_slot_col_i, & dbcsr_slot_blk_p, & dbcsr_slot_thr_c, & dbcsr_slot_coo_l, & dbcsr_slot_nblks, & dbcsr_slot_nze, & dbcsr_slot_dense, & dbcsr_slot_nblkrows_total, & dbcsr_slot_nblkcols_total, & dbcsr_slot_nfullrows_total, & dbcsr_slot_nfullcols_total, & dbcsr_slot_nblkrows_local, & dbcsr_slot_nblkcols_local, & dbcsr_slot_nfullrows_local, & dbcsr_slot_nfullcols_local, & dbcsr_slot_type, & dbcsr_slot_home_prow, & dbcsr_slot_home_pcol, & dbcsr_slot_home_rowi, & dbcsr_slot_home_coli, & dbcsr_slot_home_vprow, & dbcsr_slot_home_vpcol, & dbcsr_num_slots PUBLIC :: dbcsr_mpi_size_limits PUBLIC :: dbcsr_type_real_4, dbcsr_type_real_8, & dbcsr_type_complex_4, dbcsr_type_complex_8, & dbcsr_type_real_default, dbcsr_type_complex_default, & dbcsr_type_real_4_2d, dbcsr_type_real_8_2d, & dbcsr_type_complex_4_2d, dbcsr_type_complex_8_2d, & dbcsr_type_int_4 PUBLIC :: dbcsr_datatype_sizeof PUBLIC :: dbcsr_memtype_type, & dbcsr_memtype_default PUBLIC :: dbcsr_type_invalid, dbcsr_type_no_symmetry, dbcsr_type_symmetric, & dbcsr_type_antisymmetric, dbcsr_type_hermitian, dbcsr_type_antihermitian PUBLIC :: dbcsr_no_transpose, dbcsr_transpose, dbcsr_conjugate_transpose PUBLIC :: dbcsr_repl_none, dbcsr_repl_row, dbcsr_repl_col, dbcsr_repl_full PUBLIC :: dbcsr_filter_frobenius PUBLIC :: dbcsr_norm_frobenius, dbcsr_norm_maxabsnorm, & dbcsr_norm_gershgorin, dbcsr_norm_column PUBLIC :: dbcsr_func_inverse, dbcsr_func_tanh, dbcsr_func_dtanh, & dbcsr_func_ddtanh, dbcsr_func_artanh, dbcsr_func_inverse_special, & dbcsr_func_spread_from_zero, & dbcsr_func_sin, & dbcsr_func_dsin, & dbcsr_func_ddsin, & dbcsr_func_asin, & dbcsr_func_truncate, & dbcsr_func_cos PUBLIC :: dbcsr_2d_array_obj PUBLIC :: dbcsr_mpi_statistics_type TYPE dbcsr_mp_type !! A processor (process) grid distribution INTEGER :: mynode = -1 !! my processor/node (process) number INTEGER :: numnodes = -1 !! number of processors/nodes (processes) INTEGER :: myprow = -1 !! my process grid row INTEGER :: mypcol = -1 !! my process grid column TYPE(mp_comm_type) :: mp_group = mp_comm_null !! message-passing group ID INTEGER, DIMENSION(:, :), POINTER, CONTIGUOUS :: pgrid => Null() !! processor grid INTEGER :: refcount = 0 !! reference counter LOGICAL :: subgroups_defined = .FALSE. !! whether the subgroups are defined TYPE(mp_comm_type) :: prow_group = mp_comm_null !! per-process-row communicator TYPE(mp_comm_type) :: pcol_group = mp_comm_null !! pre-process-column communicator INTEGER :: source = -1 END TYPE dbcsr_mp_type TYPE dbcsr_mp_obj !! Wrapper for the dbcsr_mp_type TYPE(dbcsr_mp_type), POINTER :: mp => Null() !! pointer to a dbcsr_mp_type instance END TYPE dbcsr_mp_obj TYPE dbcsr_distribution_type !! Matrix distribution on the processor grid TYPE(array_i1d_obj) :: row_dist_block = array_i1d_obj(), col_dist_block = array_i1d_obj() !! standard row distributions of matrix elements' rows into processor grid rows !! standard column distributions of matrix elements' columns into processor grid columns TYPE(array_i1d_obj) :: local_rows = array_i1d_obj(), local_cols = array_i1d_obj() !! list of rows local to the processor grid row !! list of columns local to the processor grid column INTEGER :: max_row_dist = -1, max_col_dist = -1 TYPE(array_i1d_obj), DIMENSION(:), POINTER :: other_l_rows => Null() !! local rows for each process row TYPE(array_i1d_obj), DIMENSION(:), POINTER :: other_l_cols => Null() !! local columns for each process column LOGICAL :: has_other_l_rows = .FALSE. !! other_rows is defined LOGICAL :: has_other_l_cols = .FALSE. !! other_cols is defined TYPE(array_i1d_obj) :: global_row_map = array_i1d_obj() !! mapping from rows to sequence in local rows (global to local mapping) TYPE(array_i1d_obj) :: global_col_map = array_i1d_obj() !! mapping from rows to sequence in local columns (global to local mapping) LOGICAL :: has_global_row_map = .FALSE. !! whether other_row_map is defined LOGICAL :: has_global_col_map = .FALSE. !! whether other_col_map is defined TYPE(array_i1d_obj) :: row_map = array_i1d_obj() !! distribution map for rows TYPE(array_i1d_obj) :: col_map = array_i1d_obj() !! distribution map for columns LOGICAL :: has_thread_dist = .FALSE. TYPE(array_i1d_obj) :: thread_dist = array_i1d_obj() !! thread distribution (of the rows) INTEGER :: num_threads = -1 !! number of threads in the environment TYPE(dbcsr_mp_obj) :: mp_env = dbcsr_mp_obj() !! multiprocessor environment on which the distribution is based INTEGER :: refcount = 0 !! reference counter END TYPE dbcsr_distribution_type TYPE dbcsr_distribution_obj TYPE(dbcsr_distribution_type), POINTER :: d => Null() END TYPE dbcsr_distribution_obj TYPE dbcsr_imagedistribution_type !! Image distributions are used to map incompatible processor row and !! column distributions. !! Used to ease storage or transfer between two different-sizes !! sets. For example, if there are 4 real processor rows that are !! mapped to 8 "virtual" processor rows, then there are two images for !! every real processor row. TYPE(dbcsr_distribution_obj) :: main = dbcsr_distribution_obj() !! the main distribution TYPE(array_i1d_obj) :: row_image = array_i1d_obj() !! distribution of matrix elements' rows into image rows TYPE(array_i1d_obj) :: col_image = array_i1d_obj() !! distribution of matrix elements' columns into image columns INTEGER :: row_decimation = -1 !! Number of imaged rows mapped to a real row INTEGER :: col_decimation = -1 !! Number of imaged columns mapped to a real column INTEGER :: row_multiplicity = -1 !! Number of real rows mapped to a virtual row INTEGER :: col_multiplicity = -1 !! Number of real columns mapped to a virtual column TYPE(array_i1d_obj) :: vrow_dist = array_i1d_obj() TYPE(array_i1d_obj) :: vcol_dist = array_i1d_obj() TYPE(array_i1d_obj), DIMENSION(:), POINTER :: other_vl_rows => Null() TYPE(array_i1d_obj), DIMENSION(:), POINTER :: other_vl_cols => Null() TYPE(array_i1d_obj) :: global_vrow_map = array_i1d_obj() TYPE(array_i1d_obj) :: global_vcol_map = array_i1d_obj() LOGICAL :: has_other_vl_rows = .FALSE. LOGICAL :: has_other_vl_cols = .FALSE. LOGICAL :: has_global_vrow_map = .FALSE. LOGICAL :: has_global_vcol_map = .FALSE. INTEGER :: id = -1 INTEGER :: refcount = 0 !! count of references END TYPE dbcsr_imagedistribution_type TYPE dbcsr_imagedistribution_obj TYPE(dbcsr_imagedistribution_type), POINTER :: i => Null() END TYPE dbcsr_imagedistribution_obj ! Different method for dbcsr_filter INTEGER, PARAMETER :: dbcsr_filter_frobenius = 1 ! Different norm for dbcsr_norm INTEGER, PARAMETER :: dbcsr_norm_frobenius = 1 INTEGER, PARAMETER :: dbcsr_norm_maxabsnorm = 2 INTEGER, PARAMETER :: dbcsr_norm_gershgorin = 3 INTEGER, PARAMETER :: dbcsr_norm_column = 4 TYPE dbcsr_block_buffer_type !! Buffer for blocks INTEGER :: refcount = 0 !! Reference counter LOGICAL, DIMENSION(:), POINTER :: dirty => Null() !! Whether any buffers are dirty TYPE(dbcsr_data_obj), DIMENSION(:), POINTER :: buffers => Null() !! Buffers INTEGER, DIMENSION(:, :), POINTER :: rcb => Null() !! Row and column and offset and dimensions of data in the buffer TYPE(dbcsr_data_obj) :: main = dbcsr_data_obj() !! Main memory TYPE(dbcsr_data_obj), DIMENSION(:), POINTER :: backing => Null() !! Backing memory (in lieu of main memory) INTEGER :: data_type = -1 !! Data type used for the buffers END TYPE dbcsr_block_buffer_type TYPE dbcsr_block_buffer_obj !! Object for the buffer of blocks TYPE(dbcsr_block_buffer_type), POINTER :: b => Null() !! Block buffer END TYPE dbcsr_block_buffer_obj TYPE dbcsr_iterator !! An iterator over a DBCSR matrix. !! @note !! This is briefly changed to allow being included in the dbcsr_type type !! What is written here is what the structure should be and not what it !! is. !! @endnote TYPE(dbcsr_type), POINTER :: matrix => Null() !! the matrix TYPE(dbcsr_block_buffer_obj) :: buffer_2d = dbcsr_block_buffer_obj() !! Buffers for repointing 2d pointers (1 per thread) INTEGER :: pos = -1 !! Current position (per thread) INTEGER :: row = -1 !! Current row (per thread) INTEGER :: row_size = -1 !! Size of current row INTEGER :: row_offset = -1 INTEGER, DIMENSION(:), POINTER :: rbs => Null() !! Pointer to row size array INTEGER, DIMENSION(:), POINTER :: cbs => Null() !! Pointer to column size array INTEGER, DIMENSION(:), POINTER :: roff => Null() !! Pointer to row offset array INTEGER, DIMENSION(:), POINTER :: coff => Null() !! Pointer to column offset array LOGICAL :: local_indexing = .FALSE. !! The matrix has local indexing LOGICAL :: contiguous_pointers = .FALSE. !! Whether pointers to data should be contiguous in memory. LOGICAL :: transpose = .FALSE. LOGICAL :: read_only = .FALSE. LOGICAL :: shared = .FALSE. !! Iterators share matrix LOGICAL :: dynamic = .FALSE. !! Ignores the thread distribution (FCFS by block) LOGICAL :: dynamic_byrows = .FALSE. !! Ignores the thread distribution (FCFS by row) INTEGER, POINTER :: common_pos => Null() !! Position when in mixed mode (row or block depending in dynamic_byrows ! Copies from the matrix. INTEGER :: nblks = -1 INTEGER :: nblkrows_total = -1 INTEGER, DIMENSION(:), POINTER :: row_p => Null() INTEGER, DIMENSION(:), POINTER :: col_i => Null() INTEGER, DIMENSION(:), POINTER :: blk_p => Null() INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: tdist => Null() INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: local_rows => Null() !! Mapping of local rows to global rows (if local indexing is enabled) INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: global_rows => Null() !! Mapping of global rows to local rows (if local indexing is enabled) TYPE(dbcsr_data_obj) :: data_area = dbcsr_data_obj() END TYPE dbcsr_iterator TYPE dbcsr_mutable_type !! Data area with random access reads, insertions, and deletions. TYPE(btree_i8_sp2d) :: btree_s = btree_i8_sp2d() !! Data types for the various types TYPE(btree_i8_dp2d) :: btree_d = btree_i8_dp2d() !! Data types for the various types TYPE(btree_i8_cp2d) :: btree_c = btree_i8_cp2d() !! Data types for the various types TYPE(btree_i8_zp2d) :: btree_z = btree_i8_zp2d() !! Data types for the various types INTEGER :: refcount = 0 !! Reference counter INTEGER :: data_type = -1 !! The data type that is stored END TYPE dbcsr_mutable_type TYPE dbcsr_mutable_obj !! Object for the mutable data type TYPE(dbcsr_mutable_type), POINTER :: m => Null() END TYPE dbcsr_mutable_obj TYPE dbcsr_work_type !! Used for assembling a real matrix. TYPE(dbcsr_data_obj) :: data_area = dbcsr_data_obj() !! holds actual values. INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: row_i => Null() !! the row index of all of the blocks. INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_i => Null() !! the column index of all of the blocks. INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: blk_p => Null() !! the pointer into the data array of this block. INTEGER :: lastblk = -1 !! index of the last block entered into the row_i, col_i, and blk_p data structures INTEGER :: datasize = -1 !! the actual size of data present in the data element INTEGER :: datasize_after_filtering = -1 !TYPE(btree_i8_dp2d) :: tree = btree_i8_dp2d() !! tree used to index data blocks (alternative to the row_i, col_i, and blk_p indices when index is scattered). TYPE(dbcsr_mutable_obj) :: mutable = dbcsr_mutable_obj() !! the final bcsr matrix END TYPE dbcsr_work_type TYPE dbcsr_type !! The BCSR sparse matrix type. !! !! arrays data and index hold the bulk of the data. !! @note !! the pointers row_p, col_i, blk_p point into the index array. !! @endnote INTEGER :: serial_number = -1 !! a unique number of each created matrix LOGICAL :: valid = .FALSE. !! whether the matrix is valid (consistent) CHARACTER(LEN=default_string_length) :: name = "" !! name of the matrix TYPE(dbcsr_data_obj) :: data_area = dbcsr_data_obj() INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: index => Null() !! agglomeration of the indices and offsets of pointers into this array. INTEGER, DIMENSION(:), POINTER :: row_p => Null() !! points into the col_i and blk_p arrays, each element (1:nblkrows_total+1) points to the previous row's last element. So !! each rows has elements row_p(row)+1:row_p(row+1). INTEGER, DIMENSION(:), POINTER :: col_i => Null() !! the global blocked column number of this block. INTEGER, DIMENSION(:), POINTER :: blk_p => Null() !! the pointer into the data array of this block. INTEGER, DIMENSION(:), POINTER :: thr_c => Null() !! elements/thread for list index INTEGER, DIMENSION(:), POINTER :: coo_l => Null() !! coordinate list (used for direct indexing) TYPE(array_i1d_obj) :: row_blk_size = array_i1d_obj() !! sizes (rows in a block) of blocked rows TYPE(array_i1d_obj) :: col_blk_size = array_i1d_obj() !! sizes (columns in a block) of blocked columns TYPE(array_i1d_obj) :: row_blk_offset = array_i1d_obj() !! row offset (size = nrow+1) TYPE(array_i1d_obj) :: col_blk_offset = array_i1d_obj() !! col offset (size = ncol+1) TYPE(array_i1d_obj) :: local_rows = array_i1d_obj() !! Map of global to local rows when local indexing is enabled TYPE(array_i1d_obj) :: global_rows = array_i1d_obj() TYPE(array_i1d_obj) :: local_cols = array_i1d_obj() TYPE(array_i1d_obj) :: global_cols = array_i1d_obj() LOGICAL :: has_local_rows = .FALSE. LOGICAL :: has_global_rows = .FALSE. LOGICAL :: has_local_cols = .FALSE. LOGICAL :: has_global_cols = .FALSE. INTEGER :: max_rbs = -1 !! maximal row sizes INTEGER :: max_cbs = -1 !! maximal column sizes INTEGER :: sparsity_id = -1 INTEGER :: id_nr = -1 ! use in sm_pool INTEGER :: nblks = -1 !! number of blocks locally present INTEGER :: nze = -1 !! number of non-zero elements locally present INTEGER :: nblkrows_total = -1 !! size of entire matrix in blocked rows INTEGER :: nblkcols_total = -1 !! size of entire matrix in blocked columns INTEGER :: nfullrows_total = -1 !! size of entire matrix in full rows INTEGER :: nfullcols_total = -1 !! size of entire matrix in full columns INTEGER :: nblkrows_local = -1 !! size of local part of matrix in blocked rows INTEGER :: nblkcols_local = -1 !! size of local part of matrix in blocked columns INTEGER :: nfullrows_local = -1 !! size of local part of matrix in full rows INTEGER :: nfullcols_local = -1 !! size of local part of matrix in full columns INTEGER :: data_type = -1 !! 'r'/'R' for single/double precision real or 'c'/'C' for single/double precision complex data CHARACTER :: replication_type = "" !! multi-process replication used in the matrix LOGICAL :: symmetry = .FALSE. !! matrix has symmetry LOGICAL :: negate_real = .FALSE. !! symmetry is realized by negating the real part LOGICAL :: negate_imaginary = .FALSE. !! symmetry is realized by negating complex part (i.e., antisymmetric) LOGICAL :: bcsc = .FALSE. !! BCS Column instead of BCS Row LOGICAL :: local_indexing = .FALSE. !! Local indexing of rows instead of global indexing. LOGICAL :: list_indexing = .FALSE. TYPE(dbcsr_memtype_type) :: data_memory_type = dbcsr_memtype_type() !! memory type for data TYPE(dbcsr_memtype_type) :: index_memory_type = dbcsr_memtype_type() !! memory type for the index TYPE(dbcsr_block_buffer_obj) :: buffers = dbcsr_block_buffer_obj() !! Block buffers TYPE(dbcsr_work_type), DIMENSION(:), POINTER :: wms => Null() TYPE(dbcsr_distribution_obj) :: dist = dbcsr_distribution_obj() !! distribution used by this matrix INTEGER :: refcount = 0 !! reference count LOGICAL :: work_mutable = .FALSE. !! uses the mutable data for working and not the append-only data END TYPE dbcsr_type CHARACTER, PARAMETER :: dbcsr_type_invalid = '0' CHARACTER, PARAMETER :: dbcsr_type_no_symmetry = 'N' CHARACTER, PARAMETER :: dbcsr_type_symmetric = 'S' CHARACTER, PARAMETER :: dbcsr_type_antisymmetric = 'A' CHARACTER, PARAMETER :: dbcsr_type_hermitian = 'H' CHARACTER, PARAMETER :: dbcsr_type_antihermitian = 'K' ! ! multiply transpositions CHARACTER, PARAMETER :: dbcsr_no_transpose = 'N' CHARACTER, PARAMETER :: dbcsr_transpose = 'T' CHARACTER, PARAMETER :: dbcsr_conjugate_transpose = 'C' CHARACTER, PARAMETER :: dbcsr_repl_none = 'N' CHARACTER, PARAMETER :: dbcsr_repl_row = 'R' CHARACTER, PARAMETER :: dbcsr_repl_col = 'C' CHARACTER, PARAMETER :: dbcsr_repl_full = 'A' ! ! Function types INTEGER, PARAMETER :: dbcsr_func_inverse = 0 INTEGER, PARAMETER :: dbcsr_func_tanh = 1 INTEGER, PARAMETER :: dbcsr_func_dtanh = 2 INTEGER, PARAMETER :: dbcsr_func_ddtanh = 3 INTEGER, PARAMETER :: dbcsr_func_artanh = 4 INTEGER, PARAMETER :: dbcsr_func_inverse_special = 5 INTEGER, PARAMETER :: dbcsr_func_spread_from_zero = 6 INTEGER, PARAMETER :: dbcsr_func_sin = 7 INTEGER, PARAMETER :: dbcsr_func_dsin = 8 INTEGER, PARAMETER :: dbcsr_func_ddsin = 9 INTEGER, PARAMETER :: dbcsr_func_asin = 10 INTEGER, PARAMETER :: dbcsr_func_cos = 11 INTEGER, PARAMETER :: dbcsr_func_truncate = 12 ! These specify which array index in the index array is the start of the ! specified variable. For example, row_p => index(dbcsr_bcsr_slot_row_p) INTEGER, PARAMETER :: dbcsr_slot_size = 1 !! Size of the assigned values in the index array. INTEGER, PARAMETER :: dbcsr_slot_nblks = 2 INTEGER, PARAMETER :: dbcsr_slot_nze = 3 INTEGER, PARAMETER :: dbcsr_slot_dense = 4 INTEGER, PARAMETER :: dbcsr_slot_nblkrows_total = 5 INTEGER, PARAMETER :: dbcsr_slot_nblkcols_total = 6 INTEGER, PARAMETER :: dbcsr_slot_nfullrows_total = 7 INTEGER, PARAMETER :: dbcsr_slot_nfullcols_total = 8 INTEGER, PARAMETER :: dbcsr_slot_nblkrows_local = 9 INTEGER, PARAMETER :: dbcsr_slot_nblkcols_local = 10 INTEGER, PARAMETER :: dbcsr_slot_nfullrows_local = 11 INTEGER, PARAMETER :: dbcsr_slot_nfullcols_local = 12 INTEGER, PARAMETER :: dbcsr_slot_type = 13 INTEGER, PARAMETER :: dbcsr_slot_home_prow = 14 INTEGER, PARAMETER :: dbcsr_slot_home_pcol = 15 INTEGER, PARAMETER :: dbcsr_slot_home_rowi = 16 INTEGER, PARAMETER :: dbcsr_slot_home_coli = 17 INTEGER, PARAMETER :: dbcsr_slot_home_vprow = 18 INTEGER, PARAMETER :: dbcsr_slot_home_vpcol = 19 INTEGER, PARAMETER :: dbcsr_meta_size = 19 !! The number of meta fields. Its value should be the index of the last slot listed above. INTEGER, PARAMETER :: dbcsr_slot_row_p = dbcsr_meta_size + 2 INTEGER, PARAMETER :: dbcsr_slot_col_i = dbcsr_meta_size + 4 INTEGER, PARAMETER :: dbcsr_slot_blk_p = dbcsr_meta_size + 6 INTEGER, PARAMETER :: dbcsr_slot_thr_c = dbcsr_meta_size + 8 INTEGER, PARAMETER :: dbcsr_slot_coo_l = dbcsr_meta_size + 10 INTEGER, PARAMETER :: dbcsr_num_slots = dbcsr_meta_size + 11 ! previous + 1 INTEGER(KIND=int_8), DIMENSION(6), PARAMETER :: dbcsr_mpi_size_limits = & (/2**7, 2**13, 2**15, 2**17, 2**22, 2**24/) !! MPI message size limits (in bytes): 128, 8192, 32KB, 128KB, 4MB, 16MB TYPE dbcsr_work_type_p !! Pointer to a work matrix. TYPE(dbcsr_work_type), POINTER :: w => Null() !! the work matrix END TYPE dbcsr_work_type_p TYPE dbcsr_type_p !! Pointer to a object. TYPE(dbcsr_type), POINTER :: matrix => Null() !! the dbcsr_typeect END TYPE dbcsr_type_p TYPE dbcsr_1d_array_obj !! A 1-D array of DBCSR matrices TYPE(dbcsr_type_p), DIMENSION(:), POINTER :: mats => Null() !! the array of matrices END TYPE dbcsr_1d_array_obj TYPE dbcsr_2d_array_obj !! A 2-D array of DBCSR matrices TYPE(dbcsr_type_p), DIMENSION(:, :), POINTER :: mats => Null() !! the array of matrices END TYPE dbcsr_2d_array_obj TYPE dbcsr_1d_array_type !! An array of DBCSR matrices TYPE(dbcsr_type), DIMENSION(:), POINTER :: mats => Null() !! the matrices TYPE(dbcsr_imagedistribution_obj) :: image_dist = dbcsr_imagedistribution_obj() !! image distribution END TYPE dbcsr_1d_array_type TYPE dbcsr_2d_array_type !! A 2-d array of DBCSR matrices TYPE(dbcsr_type), DIMENSION(:, :), POINTER :: mats => Null() !! the matrices TYPE(dbcsr_imagedistribution_obj) :: image_dist = dbcsr_imagedistribution_obj() !! image distribution END TYPE dbcsr_2d_array_type TYPE dbcsr_mpi_statistics_type !! DBCSR MPI statistics INTEGER :: last_mpi_ranks_used = -1 INTEGER :: nimages = -1 INTEGER :: nexchanged = -1 INTEGER :: nfiltered = -1 ! rank 1: 1=right, 2=left ! rank 2: 1=total, 2=min, 3=max REAL, DIMENSION(2, 3) :: data_size = 0.0 ! message size breakdown INTEGER(KIND=int_8), DIMENSION(SIZE(dbcsr_mpi_size_limits) + 1, 2, 2) :: data_size_breakdown = -1 END TYPE dbcsr_mpi_statistics_type END MODULE dbcsr_types ================================================ FILE: src/data/PACKAGE ================================================ { "description": "DBCSR data handling", "archive": "libdbcsr", "requires": ["../acc", "../mpi", "../base", "../core", "../dist", "../block"], } ================================================ FILE: src/data/dbcsr.fypp ================================================ #!--------------------------------------------------------------------------------------------------! #! Copyright (C) by the DBCSR developers group - All rights reserved ! #! This file is part of the DBCSR library. ! #! ! #! For information on the license, see the LICENSE file. ! #! For further information please visit https://dbcsr.cp2k.org ! #! SPDX-License-Identifier: GPL-2.0+ ! #!--------------------------------------------------------------------------------------------------! #! This file contains ALL fypp definitions for DBCSR #:mute #:set n_inst = [0, 1, 2, 3] #:set nametype1 = ['d','s','z','c'] #:set typesize1 = ['8','4','16','8'] #:set base1 = ['r', 'r', 'c', 'c'] #:set prec1 = ['dp','sp','dp','sp'] #:set bits1 = ['64','32','64','32'] #:set kind1 = ['real_8', 'real_4', 'real_8', 'real_4'] #:set type1 = ['REAL(kind=real_8)', 'REAL(kind=real_4)', 'COMPLEX(kind=real_8)', 'COMPLEX(kind=real_4)'] #:set dkind1 = ['dbcsr_type_real_8', 'dbcsr_type_real_4', 'dbcsr_type_complex_8', 'dbcsr_type_complex_4'] #:set gemmname1 = ['DGEMM', 'SGEMM', 'ZGEMM', 'CGEMM'] #:set normname1 = ['(DDOT', '(SDOT', '(DZNRM2', '(SCNRM2'] #:set one1 = ['1.0_real_8', '1.0_real_4', 'CMPLX(1.0, 0.0, real_8)', 'CMPLX(1.0, 0.0, real_4)'] #:set zero1 = ['0.0_real_8', '0.0_real_4', 'CMPLX(0.0, 0.0, real_8)', 'CMPLX(0.0, 0.0, real_4)'] #:set kind2 = ['real_8','real_8','real_8','real_8'] #:set xsmm_supported = ['1', '1', '0', '0'] #:set nametype_int1 = ['i', 'l'] #:set type_int1 = ['INTEGER(kind=int_4)', 'INTEGER(kind=int_8)'] #:set zero_int1 = ['0', '0'] #:set nametype_all1 = nametype1 + nametype_int1 #:set type_all1 = type1 + type_int1 #:set zero_all1 = zero1 + zero_int1 #:set inst_params_float = list(zip(n_inst, nametype1, base1, prec1, kind1, type1, dkind1, normname1)) #:set inst_params_all = list(zip(nametype_all1, type_all1, zero_all1)) #! Definitions for DBCSR_C #:set extype1 = ['double', 'float', 'double _Complex', 'float _Complex'] #:set ctype1 = ['REAL(kind=c_double)', 'REAL(kind=c_float)', 'COMPLEX(kind=c_double_complex)', 'COMPLEX(kind=c_float_complex)'] #:set c_inst_params_float = list(zip(n_inst, nametype1, base1, prec1, kind1, type1, dkind1, normname1, ctype1)) #:set c_exparams = list(zip(n_inst, nametype1, base1, prec1, ctype1, extype1)) #! Handling optional arguments for non-interoperable types #:def add_num(num,numout) #! binary number counter e.g. [1,0,0,0] -> [0,1,0,0] #:set carry = 1 #:for i in range(0,len(num)) #:set outi = 0 #:if carry == 1 #:if num[i] == 0 #:set outi = 1 #:set carry = 0 #:else #:set outi = 0 #:set carry = 1 #:endif #:else #:set outi = num[i] #:endif #:mute $: numout.append(outi) #:endmute #:endfor #:enddef #:def init(list,n) #:mute #! fill a list with n zeros #:for i in range(n) $: list.append(0) #:endfor #:endmute #:enddef #:def gen_permlist(permlist,n) #:mute #! generates a list of permutations from n entries #! example n = 2 -> [[0,0],[0,1],[1,0],[1,1]] where 0/1 means present/not present #:set idx = [] #:set newidx = [] ${init(idx,n)}$ #:set imax = pow(2,n) #:for i in range(0,imax) $: permlist.append(idx) ${add_num(idx,newidx)}$ #:set idx = newidx #:set newidx = [] #:endfor #:endmute #:enddef #:def gen_vargroups(varlist,vargroups) #:mute #! generates permuted groups of variables from a variable list #! optional variables that appear together may be grouped #! example: varlist = [[var1], [var2,var3]] #! this gives: vargroups = [ [[var1],[var2,var3]], [[var1]], [[var2,var3]], []] #:set permlist = [] ${gen_permlist(permlist,len(varlist))}$ #:for p in permlist #:set group = [] #:for i in range(len(varlist)) #:if p[i] == 0 $: group.append(varlist[i]) #:endif #:endfor $: vargroups.append(group) #:endfor #:endmute #:enddef #:def flatten(group,flatgroup) #:mute #! flattens an array by one level: #! [[var1],[var2,var3]] -> [var1,var2,var3] #:for sub in group #:for x in sub $: flatgroup.append(x) #:endfor #:endfor #:endmute #:enddef #:def print_group(group, prefix=", ") #! for a group [[var1],[var2,var3]] #! prints "var1 = var1, var2 = var2, var3 = var3" #:set flatgroup = [item for sublist in group for item in sublist] $: prefix * (bool(len(group))) + ", ".join([str(i) + ' = ' + str(i) for i in flatgroup]) #:enddef #:def print_groupif(vargroups,varlist,i,check='PRESENT',prefix='') #! for a group [[var1]] and a varlist [[var1]],[var2,var3]] #! prints "(ELSE) IF (PRESENT(var1) .AND. .NOT. PRESENT(var2) .AND. .NOT. PRESENT(var3)) THEN" #! to be used in a loop #:set group = vargroups[i] #:set diff = [item for item in varlist if item not in group] #:set stat = "ELSE IF" #:if i == 0 #:set stat = "IF" #:elif i == len(vargroups) - 1 #:set stat = "ELSE" #:endif #:if stat != "ELSE" #:set flatgroup = [] #:set flatdiff = [] #:mute ${flatten(group,flatgroup)}$ ${flatten(diff,flatdiff)}$ #:endmute $: stat + "(" + " .AND. ".join([check + "(" + prefix + str(i) + ")" for i in flatgroup]) & + " .AND. " * (bool(len(diff)) * bool(len(diff) - len(varlist))) & + " .AND. ".join([".NOT. " + check + "(" + prefix + str(i) + ")" for i in flatdiff]) + ") THEN " #:else ELSE #:endif #:enddef #:endmute ================================================ FILE: src/data/dbcsr_data_methods.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_data_methods !! DBCSR data methods USE dbcsr_acc_devmem, ONLY: acc_devmem_allocate_bytes, & acc_devmem_allocated, & acc_devmem_dev2host, & acc_devmem_ensure_size_bytes, & acc_devmem_host2dev, & acc_devmem_setzero_bytes, & acc_devmem_size_in_bytes USE dbcsr_acc_event, ONLY: acc_event_record USE dbcsr_data_methods_low, ONLY: & dbcsr_data_clear_pointer, dbcsr_data_exists, dbcsr_data_get_memory_type, & dbcsr_data_get_size, dbcsr_data_get_size_referenced, dbcsr_data_get_sizes, & dbcsr_data_get_type, dbcsr_data_hold, dbcsr_data_init, dbcsr_data_set_pointer, & dbcsr_data_set_size_referenced, dbcsr_data_valid, dbcsr_data_zero, dbcsr_get_data, & dbcsr_get_data_p, dbcsr_get_data_p_c, dbcsr_get_data_p_d, dbcsr_get_data_p_s, & dbcsr_get_data_p_z, dbcsr_scalar, dbcsr_scalar_are_equal, dbcsr_scalar_fill_all, & dbcsr_scalar_get_type, dbcsr_scalar_get_value, dbcsr_scalar_negative, dbcsr_scalar_one, & dbcsr_scalar_set_type, dbcsr_scalar_zero, dbcsr_type_1d_to_2d, dbcsr_type_2d_to_1d, & dbcsr_type_is_2d, internal_data_allocate, internal_data_deallocate, dbcsr_scalar_multiply USE dbcsr_data_types, ONLY: & dbcsr_data_obj, dbcsr_datatype_sizeof, dbcsr_memtype_default, dbcsr_memtype_type, & dbcsr_type_complex_4, dbcsr_type_complex_8, dbcsr_type_int_4, dbcsr_type_int_8, & dbcsr_type_real_4, dbcsr_type_real_8 USE dbcsr_kinds, ONLY: dp, & int_4, & int_8, & real_4, & real_8 USE dbcsr_mem_methods, ONLY: dbcsr_mempool_add, & dbcsr_mempool_get USE dbcsr_ptr_util, ONLY: ensure_array_size #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_data_methods' LOGICAL, PARAMETER :: careful_mod = .FALSE. INTEGER, SAVE :: id = 0 PUBLIC :: dbcsr_type_2d_to_1d, dbcsr_type_1d_to_2d PUBLIC :: dbcsr_scalar, dbcsr_scalar_one, dbcsr_scalar_zero, & dbcsr_scalar_are_equal, dbcsr_scalar_negative, & dbcsr_scalar_get_type, dbcsr_scalar_set_type, & dbcsr_scalar_fill_all, dbcsr_scalar_get_value, & dbcsr_data_valid, dbcsr_data_exists, dbcsr_scalar_multiply PUBLIC :: dbcsr_data_init, dbcsr_data_new, dbcsr_data_hold, & dbcsr_data_release, dbcsr_data_get_size, dbcsr_data_get_type PUBLIC :: dbcsr_get_data, & dbcsr_data_set_pointer, & dbcsr_data_clear_pointer, & dbcsr_data_ensure_size, & dbcsr_data_get_sizes, & dbcsr_data_get_memory_type PUBLIC :: dbcsr_data_set_size_referenced, dbcsr_data_get_size_referenced PUBLIC :: dbcsr_get_data_p, dbcsr_get_data_p_s, dbcsr_get_data_p_c, & dbcsr_get_data_p_d, dbcsr_get_data_p_z PUBLIC :: dbcsr_data_host2dev, dbcsr_data_dev2host CONTAINS SUBROUTINE dbcsr_data_host2dev(area) !! Transfers data from host- to device-buffer, asynchronously. TYPE(dbcsr_data_obj), INTENT(INOUT) :: area COMPLEX(KIND=real_4), DIMENSION(:), POINTER :: c_sp COMPLEX(KIND=real_8), DIMENSION(:), POINTER :: c_dp INTEGER(KIND=int_4), DIMENSION(:), POINTER :: i4 INTEGER(KIND=int_8), DIMENSION(:), POINTER :: i8 REAL(KIND=real_4), DIMENSION(:), POINTER :: r_sp REAL(KIND=real_8), DIMENSION(:), POINTER :: r_dp IF (.NOT. acc_devmem_allocated(area%d%acc_devmem)) RETURN !nothing to do IF (area%d%ref_size == 0) RETURN !nothing to do SELECT CASE (area%d%data_type) CASE (dbcsr_type_int_4) i4 => area%d%i4(:area%d%ref_size) CALL acc_devmem_host2dev(area%d%acc_devmem, hostmem=i4, stream=area%d%memory_type%acc_stream) CASE (dbcsr_type_int_8) i8 => area%d%i8(:area%d%ref_size) CALL acc_devmem_host2dev(area%d%acc_devmem, hostmem=i8, stream=area%d%memory_type%acc_stream) CASE (dbcsr_type_real_4) r_sp => area%d%r_sp(:area%d%ref_size) CALL acc_devmem_host2dev(area%d%acc_devmem, hostmem=r_sp, stream=area%d%memory_type%acc_stream) CASE (dbcsr_type_real_8) r_dp => area%d%r_dp(:area%d%ref_size) CALL acc_devmem_host2dev(area%d%acc_devmem, hostmem=r_dp, stream=area%d%memory_type%acc_stream) CASE (dbcsr_type_complex_4) c_sp => area%d%c_sp(:area%d%ref_size) CALL acc_devmem_host2dev(area%d%acc_devmem, hostmem=c_sp, stream=area%d%memory_type%acc_stream) CASE (dbcsr_type_complex_8) c_dp => area%d%c_dp(:area%d%ref_size) CALL acc_devmem_host2dev(area%d%acc_devmem, hostmem=c_dp, stream=area%d%memory_type%acc_stream) CASE default DBCSR_ABORT("Invalid data type.") END SELECT CALL acc_event_record(area%d%acc_ready, area%d%memory_type%acc_stream) END SUBROUTINE dbcsr_data_host2dev SUBROUTINE dbcsr_data_dev2host(area) !! Transfers data from device- to host-buffer, asynchronously. TYPE(dbcsr_data_obj), INTENT(INOUT) :: area COMPLEX(KIND=real_4), DIMENSION(:), POINTER :: c_sp COMPLEX(KIND=real_8), DIMENSION(:), POINTER :: c_dp REAL(KIND=real_4), DIMENSION(:), POINTER :: r_sp REAL(KIND=real_8), DIMENSION(:), POINTER :: r_dp IF (area%d%ref_size == 0) RETURN !nothing to do SELECT CASE (area%d%data_type) CASE (dbcsr_type_real_4) r_sp => area%d%r_sp(:area%d%ref_size) CALL acc_devmem_dev2host(area%d%acc_devmem, hostmem=r_sp, stream=area%d%memory_type%acc_stream) CASE (dbcsr_type_real_8) r_dp => area%d%r_dp(:area%d%ref_size) CALL acc_devmem_dev2host(area%d%acc_devmem, hostmem=r_dp, stream=area%d%memory_type%acc_stream) CASE (dbcsr_type_complex_4) c_sp => area%d%c_sp(:area%d%ref_size) CALL acc_devmem_dev2host(area%d%acc_devmem, hostmem=c_sp, stream=area%d%memory_type%acc_stream) CASE (dbcsr_type_complex_8) c_dp => area%d%c_dp(:area%d%ref_size) CALL acc_devmem_dev2host(area%d%acc_devmem, hostmem=c_dp, stream=area%d%memory_type%acc_stream) CASE default DBCSR_ABORT("Invalid data type.") END SELECT END SUBROUTINE dbcsr_data_dev2host SUBROUTINE dbcsr_data_new(area, data_type, data_size, data_size2, & memory_type) !! Initializes a data area and all the actual data pointers TYPE(dbcsr_data_obj), INTENT(INOUT) :: area !! data area INTEGER, INTENT(IN) :: data_type !! select data type to use INTEGER, INTENT(IN), OPTIONAL :: data_size, data_size2 !! allocate this much data !! second dimension data size TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL :: memory_type !! type of memory to use CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_new' INTEGER :: d, handle, total_size_oversized, & total_size_requested INTEGER, DIMENSION(2) :: sizes_oversized, sizes_requested TYPE(dbcsr_memtype_type) :: my_memory_type ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (ASSOCIATED(area%d)) & DBCSR_ABORT("area already associated") my_memory_type = dbcsr_memtype_default IF (PRESENT(memory_type)) my_memory_type = memory_type sizes_requested(:) = 0; d = 1 IF (PRESENT(data_size)) sizes_requested(1) = data_size IF (dbcsr_type_is_2d(data_type)) THEN d = 2 IF (PRESENT(data_size2)) sizes_requested(2) = data_size2 IF (PRESENT(data_size) .NEQV. PRESENT(data_size2)) & DBCSR_ABORT("Must specify 2 sizes for 2-D data") END IF sizes_oversized = INT(sizes_requested*my_memory_type%oversize_factor) total_size_requested = PRODUCT(sizes_requested(1:d)) total_size_oversized = PRODUCT(sizes_oversized(1:d)) IF (ANY(sizes_requested < 0) .OR. ANY(sizes_oversized < 0)) & DBCSR_ABORT("Negative data size requested, integer overflow?") IF (total_size_requested > 1 .AND. ASSOCIATED(my_memory_type%pool)) THEN area = dbcsr_mempool_get(my_memory_type, data_type, total_size_requested) END IF IF (.NOT. ASSOCIATED(area%d)) THEN ALLOCATE (area%d) !$OMP CRITICAL (crit_area_id) id = id + 1 area%d%id = id !$OMP END CRITICAL (crit_area_id) area%d%refcount = 1 area%d%memory_type = my_memory_type area%d%data_type = data_type IF (PRESENT(data_size)) THEN CALL internal_data_allocate(area%d, sizes_oversized(1:d)) END IF END IF area%d%ref_size = total_size_requested CALL timestop(handle) END SUBROUTINE dbcsr_data_new SUBROUTINE dbcsr_data_ensure_size(area, data_size, nocopy, zero_pad, factor, & area_resize) !! Ensures a minimum size of a previously-setup data area. !! The data area must have been previously setup with dbcsr_data_new. TYPE(dbcsr_data_obj), INTENT(INOUT) :: area !! data area INTEGER, INTENT(IN) :: data_size !! allocate this much data LOGICAL, INTENT(IN), OPTIONAL :: nocopy, zero_pad !! do not keep potentially existing data, default is to keep it !! pad new data with zeros REAL(KIND=dp), INTENT(IN), OPTIONAL :: factor !! increase size by this factor TYPE(dbcsr_data_obj), INTENT(INOUT), OPTIONAL :: area_resize CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_ensure_size' INTEGER :: current_size, handle, wanted_size LOGICAL :: nocp, pad TYPE(dbcsr_data_obj) :: area_tmp ! --------------------------------------------------------------------------- IF (careful_mod) CALL timeset(routineN, handle) IF (.NOT. ASSOCIATED(area%d)) & DBCSR_ABORT("Data area must be setup.") current_size = dbcsr_data_get_size(area) IF (PRESENT(area_resize)) THEN ! Sanity check IF (.NOT. dbcsr_data_valid(area_resize)) & DBCSR_ABORT("Previous data area must be setup.") IF (dbcsr_data_exists(area_resize)) & DBCSR_ABORT("Previous data area must be not associated.") IF (area%d%memory_type%acc_devalloc) & DBCSR_ABORT("Cannot use dev memory with previous data area.") IF (ASSOCIATED(area%d%memory_type%pool)) & DBCSR_ABORT("Cannot use memory pool with previous data area.") END IF wanted_size = data_size #if defined(__HAS_smm_dnn) && defined(__HAS_smm_vec) ! allocate some more as padding for libsmm kernels which read over the end. IF (data_size .GT. 0) THEN wanted_size = data_size + 10 END IF #endif !IF(area%d%memory_type%acc_devalloc) THEN ! IF(current_size==acc_devmem_size(area%d%acc_devmem)) & ! WRITE (*,*) "dbcsr_data_ensure_size: Host and device buffer differ in size." !END IF !IF(current_size/=acc_devmem_size(area%d%acc_devmem)) & ! DBCSR_ABORT("Host and device buffer differ in size.") CALL dbcsr_data_set_size_referenced(area, data_size) IF (current_size .GT. 1 .AND. current_size .GE. wanted_size) THEN IF (careful_mod) CALL timestop(handle) RETURN END IF ! nocp = .FALSE. IF (PRESENT(nocopy)) nocp = nocopy pad = .FALSE. IF (PRESENT(zero_pad)) pad = zero_pad IF (dbcsr_data_exists(area)) THEN IF (nocp .AND. dbcsr_data_get_size(area) <= 1) THEN IF (PRESENT(area_resize)) THEN CALL dbcsr_data_set_pointer(area_resize, & dbcsr_data_get_size(area), 1, area) CALL dbcsr_data_clear_pointer(area) ELSE CALL internal_data_deallocate(area%d) END IF END IF END IF IF (.NOT. dbcsr_data_exists(area)) THEN IF (ASSOCIATED(area%d%memory_type%pool)) THEN area_tmp = dbcsr_mempool_get(area%d%memory_type, area%d%data_type, wanted_size) IF (ASSOCIATED(area_tmp%d)) THEN area_tmp%d%ref_size = wanted_size area_tmp%d%refcount = area%d%refcount DEALLOCATE (area%d) area = area_tmp END IF END IF IF (.NOT. dbcsr_data_exists(area)) & CALL internal_data_allocate(area%d, (/wanted_size/)) IF (pad) CALL dbcsr_data_zero(area, (/1/), (/wanted_size/)) ELSE SELECT CASE (area%d%data_type) CASE (dbcsr_type_int_8) IF (PRESENT(area_resize)) THEN CALL ensure_array_size(area%d%i8, & array_resize=area_resize%d%i8, & ub=wanted_size, & memory_type=area%d%memory_type, & nocopy=nocp, zero_pad=zero_pad, & factor=factor) ELSE CALL ensure_array_size(area%d%i8, ub=wanted_size, & memory_type=area%d%memory_type, & nocopy=nocp, zero_pad=zero_pad, & factor=factor) END IF CASE (dbcsr_type_int_4) IF (PRESENT(area_resize)) THEN CALL ensure_array_size(area%d%i4, & array_resize=area_resize%d%i4, & ub=wanted_size, & memory_type=area%d%memory_type, & nocopy=nocp, zero_pad=zero_pad, & factor=factor) ELSE CALL ensure_array_size(area%d%i4, ub=wanted_size, & memory_type=area%d%memory_type, & nocopy=nocp, zero_pad=zero_pad, & factor=factor) END IF CASE (dbcsr_type_real_8) IF (PRESENT(area_resize)) THEN CALL ensure_array_size(area%d%r_dp, & array_resize=area_resize%d%r_dp, & ub=wanted_size, & memory_type=area%d%memory_type, & nocopy=nocp, zero_pad=zero_pad, & factor=factor) ELSE CALL ensure_array_size(area%d%r_dp, ub=wanted_size, & memory_type=area%d%memory_type, & nocopy=nocp, zero_pad=zero_pad, & factor=factor) END IF CASE (dbcsr_type_real_4) IF (PRESENT(area_resize)) THEN CALL ensure_array_size(area%d%r_sp, & array_resize=area_resize%d%r_sp, & ub=wanted_size, & memory_type=area%d%memory_type, & nocopy=nocp, zero_pad=zero_pad, & factor=factor) ELSE CALL ensure_array_size(area%d%r_sp, ub=wanted_size, & memory_type=area%d%memory_type, & nocopy=nocp, zero_pad=zero_pad, & factor=factor) END IF CASE (dbcsr_type_complex_8) IF (PRESENT(area_resize)) THEN CALL ensure_array_size(area%d%c_dp, & array_resize=area_resize%d%c_dp, & ub=wanted_size, & memory_type=area%d%memory_type, & nocopy=nocp, zero_pad=zero_pad, & factor=factor) ELSE CALL ensure_array_size(area%d%c_dp, ub=wanted_size, & memory_type=area%d%memory_type, & nocopy=nocp, zero_pad=zero_pad, & factor=factor) END IF CASE (dbcsr_type_complex_4) IF (PRESENT(area_resize)) THEN CALL ensure_array_size(area%d%c_sp, & array_resize=area_resize%d%c_sp, & ub=wanted_size, & memory_type=area%d%memory_type, & nocopy=nocp, zero_pad=zero_pad, & factor=factor) ELSE CALL ensure_array_size(area%d%c_sp, ub=wanted_size, & memory_type=area%d%memory_type, & nocopy=nocp, zero_pad=zero_pad, & factor=factor) END IF CASE default DBCSR_ABORT("Invalid data type are supported") END SELECT IF (area%d%memory_type%acc_devalloc) THEN IF (.NOT. acc_devmem_allocated(area%d%acc_devmem)) THEN CALL acc_devmem_allocate_bytes(area%d%acc_devmem, & dbcsr_datatype_sizeof(area%d%data_type)*dbcsr_data_get_size(area)) IF (pad) CALL acc_devmem_setzero_bytes(area%d%acc_devmem, stream=area%d%memory_type%acc_stream) ELSE CALL acc_devmem_ensure_size_bytes(area%d%acc_devmem, & area%d%memory_type%acc_stream, & dbcsr_datatype_sizeof(area%d%data_type)*dbcsr_data_get_size(area), & nocopy, zero_pad) END IF CALL acc_event_record(area%d%acc_ready, area%d%memory_type%acc_stream) IF (dbcsr_datatype_sizeof(area%d%data_type)*dbcsr_data_get_size(area) & /= acc_devmem_size_in_bytes(area%d%acc_devmem)) & DBCSR_ABORT("Host and device buffer differ in size.") END IF END IF IF (careful_mod) CALL timestop(handle) END SUBROUTINE dbcsr_data_ensure_size SUBROUTINE dbcsr_data_release(area) !! Removes a reference and/or clears the data area. TYPE(dbcsr_data_obj), INTENT(INOUT) :: area !! data area CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_release' INTEGER :: handle ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (.NOT. ASSOCIATED(area%d)) & DBCSR_WARN("Data seems to be unreferenced.") IF (ASSOCIATED(area%d)) THEN ! IF (careful_mod) THEN IF (area%d%refcount .LE. 0) & DBCSR_WARN("Data seems to be unreferenced.") END IF ! area%d%refcount = area%d%refcount - 1 ! If we're releasing the last reference, then free the memory. IF (area%d%refcount .EQ. 0) THEN IF (.NOT. dbcsr_data_exists(area)) THEN DEALLOCATE (area%d) ELSE IF (dbcsr_data_get_size(area) > 1 .AND. ASSOCIATED(area%d%memory_type%pool)) THEN area%d%ref_size = 0 CALL dbcsr_mempool_add(area) ELSE CALL internal_data_deallocate(area%d) DEALLOCATE (area%d) END IF NULLIFY (area%d) END IF END IF CALL timestop(handle) END SUBROUTINE dbcsr_data_release END MODULE dbcsr_data_methods ================================================ FILE: src/data/dbcsr_data_methods_low.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_data_methods_low !! DBCSR data methods USE dbcsr_acc_devmem, ONLY: acc_devmem_allocate_bytes, & acc_devmem_allocated, & acc_devmem_deallocate, & acc_devmem_set_cptr USE dbcsr_acc_event, ONLY: acc_event_create, & acc_event_destroy USE dbcsr_data_types, ONLY: & dbcsr_data_area_type, dbcsr_data_obj, dbcsr_datatype_sizeof, dbcsr_memtype_type, & dbcsr_scalar_type, dbcsr_type_complex_4, dbcsr_type_complex_4_2d, dbcsr_type_complex_8, & dbcsr_type_complex_8_2d, dbcsr_type_int_4, dbcsr_type_int_8, dbcsr_type_real_4, & dbcsr_type_real_4_2d, dbcsr_type_real_8, dbcsr_type_real_8_2d USE dbcsr_ptr_util, ONLY: memory_allocate, & memory_deallocate, & memory_zero, & pointer_rank_remap2 USE dbcsr_kinds, ONLY: dp, & real_4, & real_8 #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_data_methods_low' PUBLIC :: dbcsr_type_is_2d, dbcsr_type_2d_to_1d, dbcsr_type_1d_to_2d PUBLIC :: dbcsr_scalar, dbcsr_scalar_one, dbcsr_scalar_zero, & dbcsr_scalar_are_equal, dbcsr_scalar_negative, & dbcsr_scalar_get_type, dbcsr_scalar_set_type, & dbcsr_scalar_fill_all, dbcsr_scalar_get_value, & dbcsr_data_valid, dbcsr_scalar_multiply PUBLIC :: dbcsr_data_init, dbcsr_data_hold, & dbcsr_data_get_size, dbcsr_data_get_type PUBLIC :: dbcsr_get_data, & dbcsr_data_set_pointer, & dbcsr_data_clear_pointer, & dbcsr_data_get_sizes, dbcsr_data_verify_bounds, & dbcsr_data_exists, dbcsr_data_get_memory_type PUBLIC :: dbcsr_data_set_size_referenced, dbcsr_data_get_size_referenced PUBLIC :: dbcsr_get_data_p, dbcsr_get_data_p_s, dbcsr_get_data_p_c, & dbcsr_get_data_p_d, dbcsr_get_data_p_z, & dbcsr_get_data_p_2d_s, dbcsr_get_data_p_2d_d, & dbcsr_get_data_p_2d_c, dbcsr_get_data_p_2d_z PUBLIC :: dbcsr_data_zero PUBLIC :: internal_data_allocate, internal_data_deallocate INTERFACE dbcsr_scalar !! Encapsulates a scalar. MODULE PROCEDURE dbcsr_scalar_s, dbcsr_scalar_d, & dbcsr_scalar_c, dbcsr_scalar_z END INTERFACE INTERFACE dbcsr_scalar_get_value !! Encapsulates a scalar. MODULE PROCEDURE dbcsr_scalar_get_value_s, dbcsr_scalar_get_value_d, & dbcsr_scalar_get_value_c, dbcsr_scalar_get_value_z END INTERFACE INTERFACE dbcsr_data_set_pointer MODULE PROCEDURE set_data_p_s, set_data_p_d, set_data_p_c, set_data_p_z MODULE PROCEDURE set_data_p_2d_s, set_data_p_2d_d, & set_data_p_2d_c, set_data_p_2d_z MODULE PROCEDURE set_data_area_area END INTERFACE INTERFACE dbcsr_get_data MODULE PROCEDURE get_data_s, get_data_d, get_data_c, get_data_z MODULE PROCEDURE get_data_2d_s, get_data_2d_d, get_data_2d_c, get_data_2d_z END INTERFACE INTERFACE dbcsr_get_data_p MODULE PROCEDURE dbcsr_get_data_c_s, dbcsr_get_data_c_c, & dbcsr_get_data_c_d, dbcsr_get_data_c_z END INTERFACE INTERFACE dbcsr_get_data_cptr MODULE PROCEDURE dbcsr_get_data_c_s, dbcsr_get_data_c_c, & dbcsr_get_data_c_d, dbcsr_get_data_c_z END INTERFACE INTERFACE dbcsr_data_get_sizes MODULE PROCEDURE dbcsr_data_get_sizes_any MODULE PROCEDURE dbcsr_data_get_sizes_1, dbcsr_data_get_sizes_2 END INTERFACE LOGICAL, PARAMETER :: careful_mod = .FALSE. LOGICAL, PARAMETER :: debug_mod = .FALSE. CONTAINS PURE FUNCTION dbcsr_data_get_type(area) RESULT(data_type) !! Returns data type of a data area TYPE(dbcsr_data_obj), INTENT(IN) :: area !! data area INTEGER :: data_type !! data type of the data area data_type = area%d%data_type END FUNCTION dbcsr_data_get_type FUNCTION dbcsr_data_get_memory_type(area) RESULT(memory_type) TYPE(dbcsr_data_obj), INTENT(IN) :: area TYPE(dbcsr_memtype_type) :: memory_type memory_type = area%d%memory_type END FUNCTION dbcsr_data_get_memory_type SUBROUTINE dbcsr_data_init(area) !! Initializes a data area TYPE(dbcsr_data_obj), INTENT(INOUT) :: area !! data area NULLIFY (area%d) END SUBROUTINE dbcsr_data_init SUBROUTINE internal_data_allocate(area, sizes) !! Allocates pointers in the data type TYPE(dbcsr_data_area_type), INTENT(INOUT) :: area !! internal structure holding array pointers INTEGER, DIMENSION(:), INTENT(IN), CONTIGUOUS :: sizes !! sizes to allocate to CHARACTER(len=*), PARAMETER :: routineN = 'internal_data_allocate' INTEGER :: error_handle ! --------------------------------------------------------------------------- IF (careful_mod) & CALL timeset(routineN, error_handle) IF (debug_mod) & WRITE (*, *) routineN//" Setting to sizes", sizes IF (dbcsr_type_is_2d(area%data_type)) THEN IF (SIZE(sizes) /= 2) & DBCSR_ABORT("Sizes must have 2 elements for 2-D data") ELSE IF (SIZE(sizes) /= 1) & DBCSR_ABORT("Sizes must have 1 elements for 1-D data") END IF SELECT CASE (area%data_type) CASE (dbcsr_type_int_4) CALL memory_allocate(area%i4, n=sizes(1), mem_type=area%memory_type) CASE (dbcsr_type_int_8) CALL memory_allocate(area%i8, n=sizes(1), mem_type=area%memory_type) CASE (dbcsr_type_real_4) CALL memory_allocate(area%r_sp, n=sizes(1), mem_type=area%memory_type) CASE (dbcsr_type_real_8) CALL memory_allocate(area%r_dp, n=sizes(1), mem_type=area%memory_type) CASE (dbcsr_type_complex_4) CALL memory_allocate(area%c_sp, n=sizes(1), mem_type=area%memory_type) CASE (dbcsr_type_complex_8) CALL memory_allocate(area%c_dp, n=sizes(1), mem_type=area%memory_type) CASE (dbcsr_type_real_4_2d) CALL memory_allocate(area%r2_sp, sizes=sizes, mem_type=area%memory_type) CASE (dbcsr_type_real_8_2d) CALL memory_allocate(area%r2_dp, sizes=sizes, mem_type=area%memory_type) CASE (dbcsr_type_complex_4_2d) CALL memory_allocate(area%c2_sp, sizes=sizes, mem_type=area%memory_type) CASE (dbcsr_type_complex_8_2d) CALL memory_allocate(area%c2_dp, sizes=sizes, mem_type=area%memory_type) CASE default DBCSR_ABORT("Invalid data type.") END SELECT IF (area%memory_type%acc_devalloc) THEN IF (sizes(1) >= 0) & CALL acc_devmem_allocate_bytes(area%acc_devmem, dbcsr_datatype_sizeof(area%data_type)*sizes(1)) CALL acc_event_create(area%acc_ready) END IF IF (careful_mod) & CALL timestop(error_handle) END SUBROUTINE internal_data_allocate SUBROUTINE internal_data_deallocate(area) !! Allocates pointers in the data type TYPE(dbcsr_data_area_type), INTENT(INOUT) :: area !! internal structure holding array pointers CHARACTER(len=*), PARAMETER :: routineN = 'internal_data_deallocate' INTEGER :: handle ! --------------------------------------------------------------------------- IF (careful_mod) & CALL timeset(routineN, handle) SELECT CASE (area%data_type) CASE (dbcsr_type_int_4) CALL memory_deallocate(area%i4, mem_type=area%memory_type) NULLIFY (area%i4) CASE (dbcsr_type_int_8) CALL memory_deallocate(area%i8, mem_type=area%memory_type) NULLIFY (area%i8) CASE (dbcsr_type_real_4) CALL memory_deallocate(area%r_sp, mem_type=area%memory_type) NULLIFY (area%r_sp) CASE (dbcsr_type_real_8) CALL memory_deallocate(area%r_dp, mem_type=area%memory_type) NULLIFY (area%r_dp) CASE (dbcsr_type_complex_4) CALL memory_deallocate(area%c_sp, mem_type=area%memory_type) NULLIFY (area%c_sp) CASE (dbcsr_type_complex_8) CALL memory_deallocate(area%c_dp, mem_type=area%memory_type) NULLIFY (area%c_dp) CASE (dbcsr_type_real_4_2d) CALL memory_deallocate(area%r2_sp, mem_type=area%memory_type) NULLIFY (area%r2_sp) CASE (dbcsr_type_real_8_2d) CALL memory_deallocate(area%r2_dp, mem_type=area%memory_type) NULLIFY (area%r2_dp) CASE (dbcsr_type_complex_4_2d) CALL memory_deallocate(area%c2_sp, mem_type=area%memory_type) NULLIFY (area%c2_sp) CASE (dbcsr_type_complex_8_2d) CALL memory_deallocate(area%c2_dp, mem_type=area%memory_type) NULLIFY (area%c2_dp) CASE default DBCSR_ABORT("Invalid data type.") END SELECT IF (area%memory_type%acc_devalloc) THEN IF (acc_devmem_allocated(area%acc_devmem)) & CALL acc_devmem_deallocate(area%acc_devmem) CALL acc_event_destroy(area%acc_ready) END IF IF (careful_mod) & CALL timestop(handle) END SUBROUTINE internal_data_deallocate SUBROUTINE dbcsr_data_clear_pointer(area) !! Clears pointers from the data area. TYPE(dbcsr_data_obj), INTENT(INOUT) :: area !! data area IF (.NOT. ASSOCIATED(area%d)) THEN RETURN END IF IF (area%d%refcount .LE. 0) & DBCSR_WARN("Data seems to be unreferenced.") SELECT CASE (area%d%data_type) CASE (dbcsr_type_int_4) NULLIFY (area%d%i4) CASE (dbcsr_type_int_8) NULLIFY (area%d%i8) CASE (dbcsr_type_real_4) NULLIFY (area%d%r_sp) CASE (dbcsr_type_real_8) NULLIFY (area%d%r_dp) CASE (dbcsr_type_complex_4) NULLIFY (area%d%c_sp) CASE (dbcsr_type_complex_8) NULLIFY (area%d%c_dp) CASE (dbcsr_type_real_8_2d) NULLIFY (area%d%r2_dp) CASE (dbcsr_type_real_4_2d) NULLIFY (area%d%r2_sp) CASE (dbcsr_type_complex_8_2d) NULLIFY (area%d%c2_dp) CASE (dbcsr_type_complex_4_2d) NULLIFY (area%d%c2_sp) CASE default DBCSR_ABORT("Invalid data type.") END SELECT END SUBROUTINE dbcsr_data_clear_pointer ELEMENTAL FUNCTION dbcsr_data_valid(area) RESULT(valid) !! Checks whether a data area is valid TYPE(dbcsr_data_obj), INTENT(IN) :: area !! data area LOGICAL :: valid !! whether the data area is valid valid = ASSOCIATED(area%d) END FUNCTION dbcsr_data_valid FUNCTION dbcsr_data_exists(area) RESULT(valid) !! Checks whether a data pointer exists TYPE(dbcsr_data_obj), INTENT(IN) :: area !! data area LOGICAL :: valid !! whether the data pointer exists CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_exists' INTEGER :: error_handle ! --------------------------------------------------------------------------- IF (careful_mod) THEN CALL timeset(routineN, error_handle) END IF ! valid = dbcsr_data_valid(area) IF (.NOT. valid) & DBCSR_ABORT("Data area is invalid.") SELECT CASE (area%d%data_type) CASE (dbcsr_type_int_4) valid = ASSOCIATED(area%d%i4) CASE (dbcsr_type_int_8) valid = ASSOCIATED(area%d%i8) CASE (dbcsr_type_real_4) valid = ASSOCIATED(area%d%r_sp) CASE (dbcsr_type_real_8) valid = ASSOCIATED(area%d%r_dp) CASE (dbcsr_type_complex_4) valid = ASSOCIATED(area%d%c_sp) CASE (dbcsr_type_complex_8) valid = ASSOCIATED(area%d%c_dp) CASE (dbcsr_type_real_4_2d) valid = ASSOCIATED(area%d%r2_sp) CASE (dbcsr_type_real_8_2d) valid = ASSOCIATED(area%d%r2_dp) CASE (dbcsr_type_complex_4_2d) valid = ASSOCIATED(area%d%c2_sp) CASE (dbcsr_type_complex_8_2d) valid = ASSOCIATED(area%d%c2_dp) CASE default DBCSR_ABORT("Invalid data type.") END SELECT IF (careful_mod) THEN CALL timestop(error_handle) END IF END FUNCTION dbcsr_data_exists SUBROUTINE dbcsr_data_hold(area) !! Registers another use of the data area TYPE(dbcsr_data_obj), INTENT(INOUT) :: area !! data area IF (careful_mod) THEN IF (.NOT. ASSOCIATED(area%d)) & DBCSR_ABORT("Can't hold an empty data area.") IF (area%d%refcount <= 0) & DBCSR_ABORT("Should not hold an area with zero references.") END IF IF (.NOT. ASSOCIATED(area%d)) THEN RETURN END IF !$OMP ATOMIC area%d%refcount = area%d%refcount + 1 END SUBROUTINE dbcsr_data_hold SUBROUTINE set_data_area_area(area, rsize, csize, pointee, source_lb) !! Points data area data pointers to another data area !! Assumes that no memory will be lost when repointing the pointer in the data !! area and that the area is initialized. TYPE(dbcsr_data_obj), INTENT(INOUT) :: area !! data area to repoint INTEGER, INTENT(IN) :: rsize, csize !! size of data area to point to !! size of data area to point to TYPE(dbcsr_data_obj), INTENT(IN) :: pointee !! data area to point to INTEGER, INTENT(IN), OPTIONAL :: source_lb !! point to this offset in pointee COMPLEX(KIND=real_4), DIMENSION(:), POINTER :: c_sp COMPLEX(KIND=real_8), DIMENSION(:), POINTER :: c_dp INTEGER :: bp, dt1, dt2, nze LOGICAL :: compatible, pointee_is_2d, rmp REAL(KIND=real_4), DIMENSION(:), POINTER :: r_sp REAL(KIND=real_8), DIMENSION(:), POINTER :: r_dp ! --------------------------------------------------------------------------- bp = 1; IF (PRESENT(source_lb)) bp = source_lb nze = rsize*csize dt1 = area%d%data_type dt2 = pointee%d%data_type IF (careful_mod) THEN compatible = dt1 .EQ. dt2 .OR. dt1 .EQ. dbcsr_type_1d_to_2d(dt2) IF (.NOT. compatible) & DBCSR_ABORT("Can not point 1-d pointer to 2-d data") END IF pointee_is_2d = dbcsr_type_is_2d(dt2) IF (careful_mod) THEN IF (PRESENT(source_lb) .AND. pointee_is_2d) & DBCSR_ABORT("Lower bound specification not possible with 2-d data") ! Check if size is OK. IF (bp < 1) & DBCSR_ABORT("Attempt to point out of bounds") IF (bp + nze - 1 > dbcsr_data_get_size(pointee)) & DBCSR_ABORT("Attempt to point out of bounds") END IF ! There's a remap if the ranks are compatible but not equal. rmp = dt1 .NE. dt2 SELECT CASE (dt2) CASE (dbcsr_type_int_4) area%d%i4 => pointee%d%i4(bp:bp + nze - 1) CASE (dbcsr_type_real_4_2d) area%d%r2_sp => pointee%d%r2_sp(1:rsize, 1:csize) CASE (dbcsr_type_real_4) IF (rmp) THEN r_sp => dbcsr_get_data_p_s(pointee, bp, bp + nze - 1) CALL pointer_rank_remap2(area%d%r2_sp, rsize, csize, & r_sp) ELSE area%d%r_sp => dbcsr_get_data_p_s(pointee, bp, bp + nze - 1) END IF CASE (dbcsr_type_real_8_2d) area%d%r2_dp => pointee%d%r2_dp(1:rsize, 1:csize) CASE (dbcsr_type_real_8) IF (rmp) THEN r_dp => dbcsr_get_data_p_d(pointee, bp, bp + nze - 1) CALL pointer_rank_remap2(area%d%r2_dp, rsize, csize, & r_dp) ELSE area%d%r_dp => dbcsr_get_data_p_d(pointee, bp, bp + nze - 1) END IF CASE (dbcsr_type_complex_4_2d) area%d%c2_sp => pointee%d%c2_sp(1:rsize, 1:csize) CASE (dbcsr_type_complex_4) IF (rmp) THEN c_sp => dbcsr_get_data_p_c(pointee, bp, bp + nze - 1) CALL pointer_rank_remap2(area%d%c2_sp, rsize, csize, & c_sp) ELSE area%d%c_sp => dbcsr_get_data_p_c(pointee, bp, bp + nze - 1) END IF CASE (dbcsr_type_complex_8_2d) area%d%c2_dp => pointee%d%c2_dp(1:rsize, 1:csize) CASE (dbcsr_type_complex_8) IF (rmp) THEN c_dp => dbcsr_get_data_p_z(pointee, bp, bp + nze - 1) CALL pointer_rank_remap2(area%d%c2_dp, rsize, csize, & c_dp) ELSE area%d%c_dp => dbcsr_get_data_p_z(pointee, bp, bp + nze - 1) END IF CASE default DBCSR_ABORT("Invalid data type") END SELECT CALL dbcsr_data_set_size_referenced(area, rsize*csize) IF (debug_mod) THEN IF (dbcsr_data_get_size_referenced(area) /= dbcsr_data_get_size(area)) & DBCSR_ABORT("Size mismatch") END IF ! IF (area%d%memory_type%acc_devalloc .AND. pointee%d%memory_type%acc_devalloc) THEN IF (pointee_is_2d) & DBCSR_ABORT("Setting GPU pointers for 2D data is not available!") CALL acc_devmem_set_cptr(area%d%acc_devmem, & pointee%d%acc_devmem, & dbcsr_datatype_sizeof(area%d%data_type)*nze, & dbcsr_datatype_sizeof(area%d%data_type)*(bp - 1)) END IF END SUBROUTINE set_data_area_area FUNCTION dbcsr_data_get_size(area) RESULT(data_size) !! Returns the allocated data size TYPE(dbcsr_data_obj), INTENT(IN) :: area !! data area INTEGER :: data_size !! size of data data_size = 0 IF (ASSOCIATED(area%d)) THEN SELECT CASE (area%d%data_type) CASE (dbcsr_type_int_4) IF (ASSOCIATED(area%d%i4)) & data_size = SIZE(area%d%i4) CASE (dbcsr_type_int_8) IF (ASSOCIATED(area%d%i8)) & data_size = SIZE(area%d%i8) CASE (dbcsr_type_real_8) IF (ASSOCIATED(area%d%r_dp)) & data_size = SIZE(area%d%r_dp) CASE (dbcsr_type_real_4) IF (ASSOCIATED(area%d%r_sp)) & data_size = SIZE(area%d%r_sp) CASE (dbcsr_type_complex_8) IF (ASSOCIATED(area%d%c_dp)) & data_size = SIZE(area%d%c_dp) CASE (dbcsr_type_complex_4) IF (ASSOCIATED(area%d%c_sp)) & data_size = SIZE(area%d%c_sp) CASE (dbcsr_type_real_8_2d) IF (ASSOCIATED(area%d%r2_dp)) & data_size = SIZE(area%d%r2_dp) CASE (dbcsr_type_real_4_2d) IF (ASSOCIATED(area%d%r2_sp)) & data_size = SIZE(area%d%r2_sp) CASE (dbcsr_type_complex_8_2d) IF (ASSOCIATED(area%d%c2_dp)) & data_size = SIZE(area%d%c2_dp) CASE (dbcsr_type_complex_4_2d) IF (ASSOCIATED(area%d%c2_sp)) & data_size = SIZE(area%d%c2_sp) CASE default DBCSR_ABORT("Incorrect data type") END SELECT ELSE DBCSR_WARN("Uninitialized data area") data_size = 0 END IF END FUNCTION dbcsr_data_get_size SUBROUTINE dbcsr_data_verify_bounds(area, lb, ub) !! Verifies bounds of a data area TYPE(dbcsr_data_obj), INTENT(IN) :: area !! Data area INTEGER, DIMENSION(:), INTENT(IN) :: lb, ub !! lower bounds !! upper bounds CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_verify_bounds' INTEGER :: data_type, handle ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) data_type = dbcsr_data_get_type(area) IF (dbcsr_type_is_2d(data_type)) THEN IF (SIZE(lb) /= 2) & DBCSR_ABORT("size must be 2 for 2-d lb") IF (SIZE(ub) /= 2) & DBCSR_ABORT("size must be 2 for 2-d ub") ELSE IF (SIZE(lb) /= 1) & DBCSR_ABORT("size must be 1 for 1-d lb") IF (SIZE(ub) /= 1) & DBCSR_ABORT("size must be 1 for 1-d ub") END IF SELECT CASE (data_type) CASE (dbcsr_type_real_4) IF (lb(1) < LBOUND(area%d%r_sp, 1)) DBCSR_ABORT("lb r_sp") IF (ub(1) > UBOUND(area%d%r_sp, 1)) DBCSR_ABORT("ub r_sp") CASE (dbcsr_type_real_4_2d) IF (lb(1) < LBOUND(area%d%r2_sp, 1)) DBCSR_ABORT("lb r_sp 2d") IF (ub(1) > UBOUND(area%d%r2_sp, 1)) DBCSR_ABORT("ub r_sp 2d") IF (lb(2) < LBOUND(area%d%r2_sp, 2)) DBCSR_ABORT("lb r_sp 2d") IF (ub(2) > UBOUND(area%d%r2_sp, 2)) DBCSR_ABORT("ub r_sp 2d") CASE (dbcsr_type_real_8) IF (lb(1) < LBOUND(area%d%r_dp, 1)) DBCSR_ABORT("lb r_dp") IF (ub(1) > UBOUND(area%d%r_dp, 1)) DBCSR_ABORT("ub r_dp") CASE (dbcsr_type_real_8_2d) IF (lb(1) < LBOUND(area%d%r2_dp, 1)) DBCSR_ABORT("lb r_dp 2d") IF (ub(1) > UBOUND(area%d%r2_dp, 1)) DBCSR_ABORT("ub r_dp 2d") IF (lb(2) < LBOUND(area%d%r2_dp, 2)) DBCSR_ABORT("lb r_dp 2d") IF (ub(2) > UBOUND(area%d%r2_dp, 2)) DBCSR_ABORT("ub r_dp 2d") CASE (dbcsr_type_complex_4) IF (lb(1) < LBOUND(area%d%c_sp, 1)) DBCSR_ABORT("lb c_sp") IF (ub(1) > UBOUND(area%d%c_sp, 1)) DBCSR_ABORT("ub c_sp") CASE (dbcsr_type_complex_4_2d) IF (lb(1) < LBOUND(area%d%c2_sp, 1)) DBCSR_ABORT("lb c_sp 2d") IF (ub(1) > UBOUND(area%d%c2_sp, 1)) DBCSR_ABORT("ub c_sp 2d") IF (lb(2) < LBOUND(area%d%c2_sp, 2)) DBCSR_ABORT("lb c_sp 2d") IF (ub(2) > UBOUND(area%d%c2_sp, 2)) DBCSR_ABORT("ub c_sp 2d") CASE (dbcsr_type_complex_8) IF (lb(1) < LBOUND(area%d%c_dp, 1)) DBCSR_ABORT("lb c_dp") IF (ub(1) > UBOUND(area%d%c_dp, 1)) DBCSR_ABORT("ub c_dp") CASE (dbcsr_type_complex_8_2d) IF (lb(1) < LBOUND(area%d%c2_dp, 1)) DBCSR_ABORT("lb c_dp 2d") IF (ub(1) > UBOUND(area%d%c2_dp, 1)) DBCSR_ABORT("ub c_dp 2d") IF (lb(2) < LBOUND(area%d%c2_dp, 2)) DBCSR_ABORT("lb c_dp 2d") IF (ub(2) > UBOUND(area%d%c2_dp, 2)) DBCSR_ABORT("ub c_dp 2d") CASE default DBCSR_ABORT("Invalid data type") END SELECT CALL timestop(handle) END SUBROUTINE dbcsr_data_verify_bounds SUBROUTINE dbcsr_data_zero(area, lb, ub) !! Clears a part of the data area !! @note !! Optimized for clearing big 1-D data areas from all data types. !! @endnote TYPE(dbcsr_data_obj), INTENT(INOUT) :: area !! data area INTEGER, DIMENSION(:), INTENT(in) :: lb, ub CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_zero' INTEGER :: error_handle REAL(KIND=real_4), DIMENSION(:), POINTER, CONTIGUOUS :: r_sp REAL(KIND=real_8), DIMENSION(:), POINTER, CONTIGUOUS :: r_dp COMPLEX(KIND=real_4), DIMENSION(:), POINTER, CONTIGUOUS :: c_sp COMPLEX(KIND=real_8), DIMENSION(:), POINTER, CONTIGUOUS :: c_dp ! --------------------------------------------------------------------------- IF (careful_mod) THEN CALL timeset(routineN, error_handle) END IF SELECT CASE (area%d%data_type) CASE (dbcsr_type_real_4) r_sp => area%d%r_sp(lb(1):ub(1)) CALL memory_zero(r_sp, SIZE(r_sp)) CASE (dbcsr_type_real_8) r_dp => area%d%r_dp(lb(1):ub(1)) CALL memory_zero(r_dp, SIZE(r_dp)) CASE (dbcsr_type_complex_4) c_sp => area%d%c_sp(lb(1):ub(1)) CALL memory_zero(c_sp, SIZE(c_sp)) CASE (dbcsr_type_complex_8) c_dp => area%d%c_dp(lb(1):ub(1)) CALL memory_zero(c_dp, SIZE(c_dp)) CASE (dbcsr_type_real_4_2d) area%d%r2_sp(lb(1):ub(1), lb(2):ub(2)) = 0.0_real_4 CASE (dbcsr_type_real_8_2d) area%d%r2_dp(lb(1):ub(1), lb(2):ub(2)) = 0.0_real_8 CASE (dbcsr_type_complex_4_2d) area%d%c2_sp(lb(1):ub(1), lb(2):ub(2)) = 0.0_real_4 CASE (dbcsr_type_complex_8_2d) area%d%c2_dp(lb(1):ub(1), lb(2):ub(2)) = 0.0_real_8 CASE default DBCSR_ABORT("Invalid data type.") END SELECT IF (area%d%memory_type%acc_devalloc) & DBCSR_ABORT("not yet supported for acc devmem") IF (careful_mod) THEN CALL timestop(error_handle) END IF END SUBROUTINE dbcsr_data_zero SUBROUTINE dbcsr_data_get_sizes_any(area, sizes, valid) !! Returns the allocated data size TYPE(dbcsr_data_obj), INTENT(IN) :: area !! data area to query for size INTEGER, DIMENSION(:), INTENT(OUT) :: sizes !! array with the data sizes LOGICAL, INTENT(OUT) :: valid !! whether the data is actually allocated CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_get_sizes_any' INTEGER :: handle ! --------------------------------------------------------------------------- IF (careful_mod) & CALL timeset(routineN, handle) valid = .FALSE. sizes(:) = 0 IF (ASSOCIATED(area%d)) THEN IF (careful_mod) THEN IF (dbcsr_type_is_2d(area%d%data_type)) THEN IF (SIZE(sizes) /= 2) & DBCSR_ABORT("Sizes must have 2 elements for 2-D data") ELSE IF (SIZE(sizes) /= 1) & DBCSR_ABORT("Sizes must have 1 elements for 1-D data") END IF END IF valid = dbcsr_data_exists(area) IF (valid) THEN SELECT CASE (area%d%data_type) CASE (dbcsr_type_real_8) sizes(1) = SIZE(area%d%r_dp) CASE (dbcsr_type_real_4) sizes(1) = SIZE(area%d%r_sp) CASE (dbcsr_type_complex_8) sizes(1) = SIZE(area%d%c_dp) CASE (dbcsr_type_complex_4) sizes(1) = SIZE(area%d%c_sp) CASE (dbcsr_type_real_8_2d) sizes(1) = SIZE(area%d%r2_dp, 1) sizes(2) = SIZE(area%d%r2_dp, 2) CASE (dbcsr_type_real_4_2d) sizes(1) = SIZE(area%d%r2_sp, 1) sizes(2) = SIZE(area%d%r2_sp, 2) CASE (dbcsr_type_complex_8_2d) sizes(1) = SIZE(area%d%c2_dp, 1) sizes(2) = SIZE(area%d%c2_dp, 2) CASE (dbcsr_type_complex_4_2d) sizes(1) = SIZE(area%d%c2_sp, 1) sizes(2) = SIZE(area%d%c2_sp, 2) CASE default DBCSR_ABORT("Incorrect data type") END SELECT END IF END IF IF (careful_mod) & CALL timestop(handle) END SUBROUTINE dbcsr_data_get_sizes_any SUBROUTINE dbcsr_data_get_sizes_2(area, row_size, col_size, valid) !! Returns the allocated data size TYPE(dbcsr_data_obj), INTENT(IN) :: area !! data area to query for size, should be 2-D INTEGER, INTENT(OUT) :: row_size, col_size !! row size !! column size LOGICAL, INTENT(OUT) :: valid !! whether the data is actually allocated CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_get_sizes_2' INTEGER :: handle INTEGER, DIMENSION(2) :: s ! --------------------------------------------------------------------------- IF (careful_mod) & CALL timeset(routineN, handle) IF (ASSOCIATED(area%d)) THEN IF (careful_mod .AND. .NOT. dbcsr_type_is_2d(area%d%data_type)) & DBCSR_ABORT("1-D data can not have column size") CALL dbcsr_data_get_sizes_any(area, s, valid) row_size = s(1) col_size = s(2) ELSE valid = .FALSE. row_size = 0 col_size = 0 END IF IF (careful_mod) & CALL timestop(handle) END SUBROUTINE dbcsr_data_get_sizes_2 SUBROUTINE dbcsr_data_get_sizes_1(area, total_size, valid) !! Returns the allocated data size TYPE(dbcsr_data_obj), INTENT(IN) :: area !! data area to query for size INTEGER, INTENT(OUT) :: total_size !! size of array LOGICAL, INTENT(OUT) :: valid !! whether the data is actually allocated CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_get_sizes_1' INTEGER :: handle INTEGER, DIMENSION(1) :: s ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (ASSOCIATED(area%d)) THEN IF (careful_mod .AND. dbcsr_type_is_2d(area%d%data_type)) & DBCSR_ABORT("Should not use 2-D data") CALL dbcsr_data_get_sizes_any(area, s, valid) total_size = s(1) ELSE valid = .FALSE. total_size = 0 END IF CALL timestop(handle) END SUBROUTINE dbcsr_data_get_sizes_1 ELEMENTAL FUNCTION dbcsr_scalar_one(data_type) RESULT(one) !! Returns an encapsulated scalar "1" INTEGER, INTENT(IN) :: data_type !! use the data type TYPE(dbcsr_scalar_type) :: one !! encapsulated value of one one = dbcsr_scalar_zero(data_type) SELECT CASE (data_type) CASE (dbcsr_type_real_4) one%r_sp = 1.0_real_4 CASE (dbcsr_type_real_8) one%r_dp = 1.0_real_8 CASE (dbcsr_type_complex_4) one%c_sp = CMPLX(1.0, 0.0, real_4) CASE (dbcsr_type_complex_8) one%c_dp = CMPLX(1.0, 0.0, real_8) END SELECT END FUNCTION dbcsr_scalar_one ELEMENTAL FUNCTION dbcsr_scalar_zero(data_type) RESULT(zero) !! Returns an encapsulated scalar "0" INTEGER, INTENT(IN) :: data_type !! use the data type TYPE(dbcsr_scalar_type) :: zero !! encapsulated value of zero zero%data_type = data_type zero%r_sp = 0.0_real_4 zero%r_dp = 0.0_real_8 zero%c_sp = CMPLX(0.0, 0.0, real_4) zero%c_dp = CMPLX(0.0, 0.0, real_8) END FUNCTION dbcsr_scalar_zero ELEMENTAL FUNCTION dbcsr_scalar_are_equal(s1, s2) RESULT(are_equal) !! Returns whether an encapsulated scalar is equal to another value TYPE(dbcsr_scalar_type), INTENT(IN) :: s1, s2 !! one value !! another value LOGICAL :: are_equal !! whether values are equal IF (s1%data_type .NE. s2%data_type) THEN are_equal = .FALSE. ELSE SELECT CASE (s1%data_type) CASE (dbcsr_type_real_4) are_equal = s1%r_sp .EQ. s2%r_sp CASE (dbcsr_type_real_8) are_equal = s1%r_dp .EQ. s2%r_dp CASE (dbcsr_type_complex_4) are_equal = s1%c_sp .EQ. s2%c_sp CASE (dbcsr_type_complex_8) are_equal = s1%c_dp .EQ. s2%c_dp CASE default are_equal = .FALSE. END SELECT END IF END FUNCTION dbcsr_scalar_are_equal ELEMENTAL FUNCTION dbcsr_scalar_negative(s) RESULT(negated) !! Returns an encapsulated scalar as a negation of the given TYPE(dbcsr_scalar_type), INTENT(IN) :: s !! given value TYPE(dbcsr_scalar_type) :: negated !! negated value negated = dbcsr_scalar_zero(s%data_type) SELECT CASE (s%data_type) CASE (dbcsr_type_real_4) negated%r_sp = -s%r_sp CASE (dbcsr_type_real_8) negated%r_dp = -s%r_dp CASE (dbcsr_type_complex_4) negated%c_sp = -s%c_sp CASE (dbcsr_type_complex_8) negated%c_dp = -s%c_dp CASE default negated = dbcsr_scalar_zero(s%data_type) END SELECT END FUNCTION dbcsr_scalar_negative ELEMENTAL FUNCTION dbcsr_scalar_multiply(s1, s2) RESULT(s_product) TYPE(dbcsr_scalar_type), INTENT(IN) :: s1, s2 TYPE(dbcsr_scalar_type) :: s_product s_product = dbcsr_scalar_zero(s1%data_type) SELECT CASE (s1%data_type) CASE (dbcsr_type_real_4) s_product%r_sp = s1%r_sp*s2%r_sp CASE (dbcsr_type_real_8) s_product%r_dp = s1%r_dp*s2%r_dp CASE (dbcsr_type_complex_4) s_product%c_sp = s1%c_sp*s2%c_sp CASE (dbcsr_type_complex_8) s_product%c_dp = s1%c_dp*s2%c_dp CASE default s_product = dbcsr_scalar_zero(s1%data_type) END SELECT END FUNCTION dbcsr_scalar_multiply ELEMENTAL FUNCTION dbcsr_scalar_get_type(scalar) RESULT(data_type) !! Returns data type of a scalar TYPE(dbcsr_scalar_type), INTENT(IN) :: scalar !! scalar INTEGER :: data_type !! data type of the scalar data_type = scalar%data_type END FUNCTION dbcsr_scalar_get_type ELEMENTAL SUBROUTINE dbcsr_scalar_set_type(scalar, data_type) !! Sets data type of a scalar TYPE(dbcsr_scalar_type), INTENT(INOUT) :: scalar !! scalar INTEGER, INTENT(IN) :: data_type scalar%data_type = data_type END SUBROUTINE dbcsr_scalar_set_type ELEMENTAL SUBROUTINE dbcsr_scalar_fill_all(scalar) !! Fills all data and precision types from the set one TYPE(dbcsr_scalar_type), INTENT(INOUT) :: scalar !! data area SELECT CASE (scalar%data_type) CASE (dbcsr_type_real_4) !scalar%r_sp = 0 scalar%r_dp = REAL(scalar%r_sp, KIND=real_8) scalar%c_sp = CMPLX(scalar%r_sp, 0, KIND=real_4) scalar%c_dp = CMPLX(scalar%r_sp, 0, KIND=real_8) CASE (dbcsr_type_real_8) scalar%r_sp = REAL(scalar%r_dp, KIND=real_4) !scalar%r_dp = REAL(scalar%r_dp, KIND=real_8) scalar%c_sp = CMPLX(scalar%r_dp, 0, KIND=real_4) scalar%c_dp = CMPLX(scalar%r_dp, 0, KIND=real_8) CASE (dbcsr_type_complex_4) scalar%r_sp = REAL(scalar%c_sp, KIND=real_4) scalar%r_dp = REAL(scalar%c_sp, KIND=real_8) !scalar%c_sp = CMPLX(scalar%c_sp, KIND=real_4) scalar%c_dp = CMPLX(scalar%c_sp, KIND=real_8) CASE (dbcsr_type_complex_8) scalar%r_sp = REAL(scalar%c_dp, KIND=real_4) scalar%r_dp = REAL(scalar%c_dp, KIND=real_8) scalar%c_sp = CMPLX(scalar%c_dp, KIND=real_4) !scalar%c_dp = CMPLX(scalar%r_dp, KIND=real_8) END SELECT END SUBROUTINE dbcsr_scalar_fill_all PURE FUNCTION dbcsr_type_is_2d(data_type) !! Checks whether the data type is 2-D. !! \return Data type is 2-D. INTEGER, INTENT(IN) :: data_type LOGICAL :: dbcsr_type_is_2d dbcsr_type_is_2d = data_type .EQ. dbcsr_type_real_4_2d .OR. & data_type .EQ. dbcsr_type_real_8_2d .OR. & data_type .EQ. dbcsr_type_complex_4_2d .OR. & data_type .EQ. dbcsr_type_complex_8_2d END FUNCTION dbcsr_type_is_2d PURE FUNCTION dbcsr_type_2d_to_1d(data_type) !! Returns 1-d data type corresponding to the given 2-D one. !! \return 1-D data type INTEGER, INTENT(IN) :: data_type INTEGER :: dbcsr_type_2d_to_1d SELECT CASE (data_type) CASE (dbcsr_type_real_4_2d) dbcsr_type_2d_to_1d = dbcsr_type_real_4 CASE (dbcsr_type_real_8_2d) dbcsr_type_2d_to_1d = dbcsr_type_real_8 CASE (dbcsr_type_complex_4_2d) dbcsr_type_2d_to_1d = dbcsr_type_complex_4 CASE (dbcsr_type_complex_8_2d) dbcsr_type_2d_to_1d = dbcsr_type_complex_8 CASE (dbcsr_type_real_4) dbcsr_type_2d_to_1d = dbcsr_type_real_4 CASE (dbcsr_type_real_8) dbcsr_type_2d_to_1d = dbcsr_type_real_8 CASE (dbcsr_type_complex_4) dbcsr_type_2d_to_1d = dbcsr_type_complex_4 CASE (dbcsr_type_complex_8) dbcsr_type_2d_to_1d = dbcsr_type_complex_8 CASE default dbcsr_type_2d_to_1d = -1 END SELECT END FUNCTION dbcsr_type_2d_to_1d PURE FUNCTION dbcsr_type_1d_to_2d(data_type) !! Returns 2-D data type corresponding to the given 1-D one. !! \return 2-D data type INTEGER, INTENT(IN) :: data_type INTEGER :: dbcsr_type_1d_to_2d SELECT CASE (data_type) CASE (dbcsr_type_real_4) dbcsr_type_1d_to_2d = dbcsr_type_real_4_2d CASE (dbcsr_type_real_8) dbcsr_type_1d_to_2d = dbcsr_type_real_8_2d CASE (dbcsr_type_complex_4) dbcsr_type_1d_to_2d = dbcsr_type_complex_4_2d CASE (dbcsr_type_complex_8) dbcsr_type_1d_to_2d = dbcsr_type_complex_8_2d CASE (dbcsr_type_real_4_2d) dbcsr_type_1d_to_2d = dbcsr_type_real_4_2d CASE (dbcsr_type_real_8_2d) dbcsr_type_1d_to_2d = dbcsr_type_real_8_2d CASE (dbcsr_type_complex_4_2d) dbcsr_type_1d_to_2d = dbcsr_type_complex_4_2d CASE (dbcsr_type_complex_8_2d) dbcsr_type_1d_to_2d = dbcsr_type_complex_8_2d CASE default dbcsr_type_1d_to_2d = -1 END SELECT END FUNCTION dbcsr_type_1d_to_2d PURE FUNCTION dbcsr_data_get_size_referenced(area) RESULT(data_size_referenced) !! Get actual data storage used for matrix TYPE(dbcsr_data_obj), INTENT(IN) :: area !! Count data of this matrix INTEGER :: data_size_referenced !! Data size used by matrix IF (ASSOCIATED(area%d)) THEN data_size_referenced = area%d%ref_size ELSE data_size_referenced = 0 END IF END FUNCTION dbcsr_data_get_size_referenced PURE SUBROUTINE dbcsr_data_set_size_referenced(data_area, referenced_size) !! Sets the referenced size of the data area TYPE(dbcsr_data_obj), INTENT(INOUT) :: data_area !! area for which to set referenced data size INTEGER, INTENT(IN) :: referenced_size !! set referenced data size to this value data_area%d%ref_size = referenced_size END SUBROUTINE dbcsr_data_set_size_referenced ! ************************************************************************************************** #:include 'dbcsr.fypp' #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float SUBROUTINE set_data_p_${nametype1}$ (area, p) !! Sets a data pointer. !! !! Assumptions !! Assumes that no memory will be lost when repointing the !! pointer in the data area and that the area is initialized. TYPE(dbcsr_data_obj), INTENT(INOUT) :: area !! target data area ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: p !! source data pointer IF (area%d%data_type /= ${dkind1}$) & DBCSR_ABORT("set_data_p_${nametype1}$: data-area has wrong type") area%d%${base1}$_${prec1}$ => p END SUBROUTINE set_data_p_${nametype1}$ SUBROUTINE set_data_p_2d_${nametype1}$ (area, p) !! Sets a data pointer. !! !! Assumptions !! Assumes that no memory will be lost when repointing the !! pointer in the data area and that the area is initialized. TYPE(dbcsr_data_obj), INTENT(INOUT) :: area !! target data area ${type1}$, DIMENSION(:, :), POINTER :: p !! source data pointer IF (area%d%data_type /= ${dkind1}$_2d) & DBCSR_ABORT("set_data_p_2d_${nametype1}$: data-area has wrong type") area%d%${base1}$2_${prec1}$ => p END SUBROUTINE set_data_p_2d_${nametype1}$ FUNCTION dbcsr_get_data_c_${nametype1}$ (area, select_data_type, lb, ub) RESULT(DATA) !! Returns the single/double precision real/complex data !! !! Calling !! This routine is hidden behind the dbcsr_get_data interface, hence the !! need for the select_data_type argument. !! see dbcsr_get_data_p_${nametype1}$ TYPE(dbcsr_data_obj), INTENT(IN) :: area !! data area ${type1}$, INTENT(IN) :: select_data_type !! force datatype INTEGER, INTENT(IN), OPTIONAL :: lb, ub !! lower bound for pointer !! upper bound for pointer ${type1}$, DIMENSION(:), POINTER :: DATA !! pointer to data INTEGER :: l, u ! --------------------------------------------------------------------------- ! The select_data_type argument is needed to make this function unique ! enough to use in the interface. IF (KIND(select_data_type) .NE. KIND(DATA)) & DBCSR_ABORT("compiler borken") IF (ASSOCIATED(area%d)) THEN IF (area%d%data_type /= ${dkind1}$) & DBCSR_ABORT("dbcsr_get_data_c_${nametype1}$: data-area has wrong type") IF (PRESENT(lb) .OR. PRESENT(ub)) THEN l = LBOUND(area%d%${base1}$_${prec1}$, 1) IF (PRESENT(lb)) l = lb u = UBOUND(area%d%${base1}$_${prec1}$, 1) IF (PRESENT(ub)) u = ub IF (debug_mod) THEN IF (l .LT. LBOUND(area%d%${base1}$_${prec1}$, 1)) & DBCSR_ABORT("Out of bounds") IF (u .GT. UBOUND(area%d%${base1}$_${prec1}$, 1)) & DBCSR_ABORT("Out of bounds") END IF DATA => area%d%${base1}$_${prec1}$ (l:u) ELSE DATA => area%d%${base1}$_${prec1}$ END IF ELSE NULLIFY (DATA) END IF END FUNCTION dbcsr_get_data_c_${nametype1}$ FUNCTION dbcsr_get_data_p_${nametype1}$ (area, lb, ub) RESULT(DATA) !! Returns the single/double precision real/complex data !! \brief dbcsr_get_data_c_${nametype1}$ !! !! Calling !! This routine can be called explicitly. TYPE(dbcsr_data_obj), INTENT(IN) :: area !! data area ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: DATA !! pointer to data INTEGER, INTENT(IN), OPTIONAL :: lb, ub !! lower bound for pointer !! upper bound for pointer INTEGER :: l, u ! --------------------------------------------------------------------------- IF (ASSOCIATED(area%d)) THEN IF (area%d%data_type /= ${dkind1}$) & DBCSR_ABORT("dbcsr_get_data_p_${nametype1}$: data-area has wrong type") IF (PRESENT(lb) .OR. PRESENT(ub)) THEN l = LBOUND(area%d%${base1}$_${prec1}$, 1) IF (PRESENT(lb)) l = lb u = UBOUND(area%d%${base1}$_${prec1}$, 1) IF (PRESENT(ub)) u = ub IF (debug_mod) THEN IF (l .LT. LBOUND(area%d%${base1}$_${prec1}$, 1)) & DBCSR_ABORT("Out of bounds") IF (u .GT. UBOUND(area%d%${base1}$_${prec1}$, 1)) & DBCSR_ABORT("Out of bounds") END IF DATA => area%d%${base1}$_${prec1}$ (l:u) ELSE DATA => area%d%${base1}$_${prec1}$ END IF ELSE NULLIFY (DATA) END IF END FUNCTION dbcsr_get_data_p_${nametype1}$ FUNCTION dbcsr_get_data_p_2d_${nametype1}$ (area, lb, ub) RESULT(DATA) !! Returns the single/double precision real/complex data !! \brief dbcsr_get_data_c_${nametype1}$ !! !! Calling !! This routine can be called explicitly. TYPE(dbcsr_data_obj), INTENT(IN) :: area !! data area ${type1}$, DIMENSION(:, :), POINTER :: DATA !! pointer to data INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL :: lb, ub !! lower bound for pointer !! upper bound for pointer INTEGER, DIMENSION(2) :: l, u ! --------------------------------------------------------------------------- IF (ASSOCIATED(area%d)) THEN IF (area%d%data_type /= ${dkind1}$_2d) & DBCSR_ABORT("dbcsr_get_data_p_2d_${nametype1}$: data-area has wrong type") IF (PRESENT(lb) .OR. PRESENT(ub)) THEN l = LBOUND(area%d%${base1}$2_${prec1}$) IF (PRESENT(lb)) l = lb u = UBOUND(area%d%${base1}$2_${prec1}$) IF (PRESENT(ub)) u = ub IF (debug_mod) THEN IF (l(1) .LT. LBOUND(area%d%${base1}$2_${prec1}$, 1)) & DBCSR_ABORT("Out of bounds") IF (l(2) .LT. LBOUND(area%d%${base1}$2_${prec1}$, 2)) & DBCSR_ABORT("Out of bounds") IF (u(1) .GT. UBOUND(area%d%${base1}$2_${prec1}$, 1)) & DBCSR_ABORT("Out of bounds") IF (u(2) .GT. UBOUND(area%d%${base1}$2_${prec1}$, 2)) & DBCSR_ABORT("Out of bounds") END IF DATA => area%d%${base1}$2_${prec1}$ (l(1):u(1), l(2):u(2)) ELSE DATA => area%d%${base1}$2_${prec1}$ END IF ELSE NULLIFY (DATA) END IF END FUNCTION dbcsr_get_data_p_2d_${nametype1}$ SUBROUTINE get_data_${nametype1}$ (area, DATA, lb, ub) !! Returns the single/double precision real/complex data TYPE(dbcsr_data_obj), INTENT(IN) :: area !! data area ${type1}$, DIMENSION(:), POINTER :: DATA !! pointer to data INTEGER, INTENT(IN), OPTIONAL :: lb, ub !! lower bound for pointer !! upper bound for pointer INTEGER :: l, u ! --------------------------------------------------------------------------- IF (ASSOCIATED(area%d)) THEN IF (area%d%data_type /= ${dkind1}$) & DBCSR_ABORT("get_data_${nametype1}$: data-area has wrong type") IF (PRESENT(lb) .OR. PRESENT(ub)) THEN l = LBOUND(area%d%${base1}$_${prec1}$, 1) IF (PRESENT(lb)) l = lb u = UBOUND(area%d%${base1}$_${prec1}$, 1) IF (PRESENT(ub)) u = ub IF (debug_mod) THEN IF (l < LBOUND(area%d%${base1}$_${prec1}$, 1)) & DBCSR_ABORT("Out of bounds") IF (u > UBOUND(area%d%${base1}$_${prec1}$, 1)) & DBCSR_ABORT("Out of bounds") END IF DATA => area%d%${base1}$_${prec1}$ (l:u) ELSE DATA => area%d%${base1}$_${prec1}$ END IF ELSE NULLIFY (DATA) END IF END SUBROUTINE get_data_${nametype1}$ SUBROUTINE get_data_2d_${nametype1}$ (area, DATA, lb, ub) !! Returns the single/double precision real/complex data TYPE(dbcsr_data_obj), INTENT(IN) :: area !! data area ${type1}$, DIMENSION(:, :), POINTER :: DATA !! pointer to data INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL :: lb, ub !! lower bound for pointer !! upper bound for pointer INTEGER, DIMENSION(2) :: l, u ! --------------------------------------------------------------------------- IF (ASSOCIATED(area%d)) THEN IF (area%d%data_type /= ${dkind1}$_2d) & DBCSR_ABORT("get_data_2d_${nametype1}$: data-area has wrong type") IF (PRESENT(lb) .OR. PRESENT(ub)) THEN l = LBOUND(area%d%${base1}$2_${prec1}$) IF (PRESENT(lb)) l = lb u = UBOUND(area%d%${base1}$2_${prec1}$) IF (PRESENT(ub)) u = ub IF (debug_mod) THEN IF (l(1) < LBOUND(area%d%${base1}$2_${prec1}$, 1)) & DBCSR_ABORT("Out of bounds") IF (l(2) < LBOUND(area%d%${base1}$2_${prec1}$, 2)) & DBCSR_ABORT("Out of bounds") IF (u(1) > UBOUND(area%d%${base1}$2_${prec1}$, 1)) & DBCSR_ABORT("Out of bounds") IF (u(2) > UBOUND(area%d%${base1}$2_${prec1}$, 2)) & DBCSR_ABORT("Out of bounds") END IF DATA => area%d%${base1}$2_${prec1}$ (l(1):u(1), l(2):u(2)) ELSE DATA => area%d%${base1}$2_${prec1}$ END IF ELSE NULLIFY (DATA) END IF END SUBROUTINE get_data_2d_${nametype1}$ ELEMENTAL FUNCTION dbcsr_scalar_${nametype1}$ (scalar) RESULT(encapsulated_scalar) !! Sets a scalar in an encapsulated data structure ${type1}$, INTENT(IN) :: scalar !! scalar to encapsulate TYPE(dbcsr_scalar_type) :: encapsulated_scalar !! encapsulated scalar encapsulated_scalar = dbcsr_scalar_zero(${dkind1}$) encapsulated_scalar%${base1}$_${prec1}$ = scalar END FUNCTION dbcsr_scalar_${nametype1}$ ELEMENTAL SUBROUTINE dbcsr_scalar_get_value_${nametype1}$ (encapsulated_scalar, value) !! Sets a scalar in an encapsulated data structure TYPE(dbcsr_scalar_type), INTENT(IN) :: encapsulated_scalar !! encapsulated scalar ${type1}$, INTENT(OUT) :: value !! value of the scalar value = encapsulated_scalar%${base1}$_${prec1}$ END SUBROUTINE dbcsr_scalar_get_value_${nametype1}$ #:endfor END MODULE dbcsr_data_methods_low ================================================ FILE: src/data/dbcsr_data_operations.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_data_operations !! DBCSR data operations USE dbcsr_block_operations, ONLY: dbcsr_block_transpose, & dbcsr_data_copy, & dbcsr_data_set USE dbcsr_data_methods, ONLY: dbcsr_data_get_size, & dbcsr_data_get_size_referenced, & dbcsr_data_hold, & dbcsr_data_release, & dbcsr_data_set_size_referenced, & dbcsr_get_data USE dbcsr_dist_util, ONLY: sgn USE dbcsr_kinds, ONLY: real_4, & real_8 USE dbcsr_types, ONLY: dbcsr_data_obj, & dbcsr_type, & dbcsr_type_complex_4, & dbcsr_type_complex_8, & dbcsr_type_real_4, & dbcsr_type_real_8 #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_data_operations' PUBLIC :: dbcsr_data_copyall, dbcsr_data_convert, & dbcsr_copy_sort_data, & dbcsr_sort_data PUBLIC :: dbcsr_switch_data_area CONTAINS SUBROUTINE dbcsr_switch_data_area(matrix, data_area, previous_data_area) !! Sets the data area of a matrix TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! matrix for which to set the data area TYPE(dbcsr_data_obj), INTENT(IN) :: data_area !! data area to set TYPE(dbcsr_data_obj), INTENT(OUT), OPTIONAL :: previous_data_area !! previous data area CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_switch_data_area' INTEGER :: handle ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (PRESENT(previous_data_area)) THEN previous_data_area = matrix%data_area ELSE CALL dbcsr_data_release(matrix%data_area) END IF matrix%data_area = data_area CALL dbcsr_data_hold(matrix%data_area) CALL timestop(handle) END SUBROUTINE dbcsr_switch_data_area SUBROUTINE dbcsr_data_copyall(target_area, source_area, shallow) !! Copies a data area, deep by default. TYPE(dbcsr_data_obj), INTENT(INOUT) :: target_area !! target data area TYPE(dbcsr_data_obj), INTENT(IN) :: source_area !! source data area LOGICAL, INTENT(IN), OPTIONAL :: shallow !! shallow copy (default is deep) INTEGER :: i, n LOGICAL :: shallow_copy ! --------------------------------------------------------------------------- IF (.NOT. ASSOCIATED(source_area%d)) & DBCSR_ABORT("Attempt to copy unassigned data") IF (source_area%d%refcount .LE. 0) & DBCSR_WARN("Attempt to copy unheld data") shallow_copy = .FALSE. IF (PRESENT(shallow)) shallow_copy = shallow IF (shallow_copy) THEN target_area = source_area CALL dbcsr_data_hold(target_area) ELSE IF (.NOT. ASSOCIATED(target_area%d)) & DBCSR_ABORT("Target area does not exist.") CALL dbcsr_data_set_size_referenced(target_area, & dbcsr_data_get_size_referenced(source_area)) n = dbcsr_data_get_size_referenced(source_area) SELECT CASE (target_area%d%data_type) CASE (dbcsr_type_real_4) !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(I) SHARED(target_area,source_area,n) DO i = 1, n target_area%d%r_sp(i) = source_area%d%r_sp(i) END DO CASE (dbcsr_type_real_8) !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(I) SHARED(target_area,source_area,n) DO i = 1, n target_area%d%r_dp(i) = source_area%d%r_dp(i) END DO CASE (dbcsr_type_complex_4) !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(I) SHARED(target_area,source_area,n) DO i = 1, n target_area%d%c_sp(i) = source_area%d%c_sp(i) END DO CASE (dbcsr_type_complex_8) !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(I) SHARED(target_area,source_area,n) DO i = 1, n target_area%d%c_dp(i) = source_area%d%c_dp(i) END DO CASE default DBCSR_ABORT("Invalid data type") END SELECT END IF ! CALL timestop(error_handle) END SUBROUTINE dbcsr_data_copyall SUBROUTINE dbcsr_data_convert(target_area, source_area, drop_real, & multiply_by_i) !! Copies a data area, converting data type TYPE(dbcsr_data_obj), INTENT(INOUT) :: target_area !! target data area TYPE(dbcsr_data_obj), INTENT(IN) :: source_area !! source data area LOGICAL, INTENT(IN), OPTIONAL :: drop_real, multiply_by_i !! drops real part of complex numbers instead of the imaginary part; default is false !! converts real to complex by placing into imaginary instead of real part COMPLEX(KIND=real_4), DIMENSION(:), POINTER, CONTIGUOUS :: s_data_c, t_data_c COMPLEX(KIND=real_8), DIMENSION(:), POINTER, CONTIGUOUS :: s_data_z, t_data_z INTEGER :: n, ns, nt LOGICAL :: keep_real, noimult REAL(KIND=real_4), DIMENSION(:), POINTER, CONTIGUOUS :: s_data_r, t_data_r REAL(KIND=real_8), DIMENSION(:), POINTER, CONTIGUOUS :: s_data_d, t_data_d ! --------------------------------------------------------------------------- IF (.NOT. ASSOCIATED(source_area%d)) & DBCSR_WARN("Attempt to copy unassigned data") IF (source_area%d%refcount .LE. 0) & DBCSR_WARN("Attempt to copy unheld data") IF (.NOT. ASSOCIATED(source_area%d)) THEN RETURN END IF keep_real = .TRUE. IF (PRESENT(drop_real)) keep_real = .NOT. drop_real noimult = .TRUE. IF (PRESENT(multiply_by_i)) noimult = .NOT. multiply_by_i ns = dbcsr_data_get_size_referenced(source_area) nt = dbcsr_data_get_size_referenced(target_area) n = MIN(ns, nt) IF (n .GT. 0) THEN SELECT CASE (source_area%d%data_type) CASE (dbcsr_type_real_8) CALL dbcsr_get_data(source_area, s_data_d) SELECT CASE (target_area%d%data_type) CASE (dbcsr_type_real_8) CALL dbcsr_get_data(target_area, t_data_d) t_data_d(1:n) = s_data_d(1:n) CASE (dbcsr_type_real_4) CALL dbcsr_get_data(target_area, t_data_r) t_data_r(1:n) = REAL(s_data_d(1:n), KIND=real_4) CASE (dbcsr_type_complex_8) CALL dbcsr_get_data(target_area, t_data_z) IF (noimult) THEN t_data_z(1:n) = CMPLX(s_data_d(1:n), KIND=real_8) ELSE t_data_z(1:n) = CMPLX(0.0, s_data_d(1:n), KIND=real_8) END IF CASE (dbcsr_type_complex_4) CALL dbcsr_get_data(target_area, t_data_c) IF (noimult) THEN t_data_c(1:n) = CMPLX(s_data_d(1:n), KIND=real_4) ELSE t_data_c(1:n) = CMPLX(0.0, s_data_d(1:n), KIND=real_4) END IF CASE default DBCSR_ABORT("Invalid data type") END SELECT CASE (dbcsr_type_real_4) CALL dbcsr_get_data(source_area, s_data_r) SELECT CASE (target_area%d%data_type) CASE (dbcsr_type_real_8) CALL dbcsr_get_data(target_area, t_data_d) t_data_d(1:n) = REAL(s_data_r(1:n), KIND=real_8) CASE (dbcsr_type_real_4) CALL dbcsr_get_data(target_area, t_data_r) t_data_r(1:n) = s_data_r(1:n) CASE (dbcsr_type_complex_8) CALL dbcsr_get_data(target_area, t_data_z) IF (noimult) THEN t_data_z(1:n) = CMPLX(s_data_r(1:n), KIND=real_8) ELSE t_data_z(1:n) = CMPLX(0.0, s_data_r(1:n), KIND=real_8) END IF CASE (dbcsr_type_complex_4) CALL dbcsr_get_data(target_area, t_data_c) IF (noimult) THEN t_data_c(1:n) = CMPLX(s_data_r(1:n), KIND=real_4) ELSE t_data_c(1:n) = CMPLX(0.0, s_data_r(1:n), KIND=real_4) END IF CASE default DBCSR_ABORT("Invalid data type") END SELECT CASE (dbcsr_type_complex_8) CALL dbcsr_get_data(source_area, s_data_z) SELECT CASE (target_area%d%data_type) CASE (dbcsr_type_real_8) CALL dbcsr_get_data(target_area, t_data_d) IF (keep_real) THEN t_data_d(1:n) = REAL(s_data_z(1:n), KIND=real_8) ELSE t_data_d(1:n) = AIMAG(s_data_z(1:n)) END IF CASE (dbcsr_type_real_4) CALL dbcsr_get_data(target_area, t_data_r) IF (keep_real) THEN t_data_r(1:n) = REAL(s_data_z(1:n), KIND=real_4) ELSE t_data_r(1:n) = REAL(AIMAG(s_data_z(1:n)), KIND=real_4) END IF CASE (dbcsr_type_complex_8) CALL dbcsr_get_data(target_area, t_data_z) t_data_z(1:n) = s_data_z(1:n) CASE (dbcsr_type_complex_4) CALL dbcsr_get_data(target_area, t_data_c) t_data_c(1:n) = CMPLX(s_data_z(1:n), KIND=real_4) CASE default DBCSR_ABORT("Invalid data type") END SELECT CASE (dbcsr_type_complex_4) CALL dbcsr_get_data(source_area, s_data_c) SELECT CASE (target_area%d%data_type) CASE (dbcsr_type_real_8) CALL dbcsr_get_data(target_area, t_data_d) IF (keep_real) THEN t_data_d(1:n) = REAL(s_data_c(1:n), KIND=real_8) ELSE t_data_d(1:n) = REAL(AIMAG(s_data_c(1:n)), KIND=real_8) END IF CASE (dbcsr_type_real_4) CALL dbcsr_get_data(target_area, t_data_r) IF (keep_real) THEN t_data_r(1:n) = REAL(s_data_c(1:n), KIND=real_4) ELSE t_data_r(1:n) = AIMAG(s_data_c(1:n)) END IF CASE (dbcsr_type_complex_8) CALL dbcsr_get_data(target_area, t_data_z) t_data_z(1:n) = CMPLX(s_data_c(1:n), KIND=real_8) CASE (dbcsr_type_complex_4) CALL dbcsr_get_data(target_area, t_data_c) t_data_c(1:n) = s_data_c(1:n) CASE default DBCSR_ABORT("Invalid data type") END SELECT CASE default DBCSR_ABORT("Invalid data type") END SELECT END IF END SUBROUTINE dbcsr_data_convert SUBROUTINE dbcsr_copy_sort_data(blk_p, old_blk_p, row_p, col_i, rbs, cbs, & dst, src, mark_transposed, transpose_blocks) !! Sorts the data in a matrix so that the data blocks follow !! sequentially and does various transposing options. !! As opposed to dbcsr_sort_data, this routine calculates block sizes INTEGER, DIMENSION(:), INTENT(INOUT) :: blk_p !! re-arranged block pointers reflecting the new data order INTEGER, DIMENSION(:), INTENT(IN) :: old_blk_p, row_p, col_i, rbs, cbs !! current block pointers !! index !! index !! sizes of the blocked rows !! sizes of the blocked columns TYPE(dbcsr_data_obj), INTENT(INOUT) :: dst !! sorted data TYPE(dbcsr_data_obj), INTENT(IN) :: src !! existing unordered data LOGICAL, INTENT(IN), OPTIONAL :: mark_transposed, transpose_blocks !! mark data as transposed by negating the blk_p index entries !! transpose data blocks INTEGER :: blk, col_size, nblks, nrows, nze, & nze_prev, row, row_size LOGICAL :: mark, trb ! --------------------------------------------------------------------------- ! Analyze parameters mark = .FALSE. IF (PRESENT(mark_transposed)) mark = mark_transposed trb = .FALSE. IF (PRESENT(transpose_blocks)) trb = transpose_blocks ! nblks = SIZE(old_blk_p) nrows = SIZE(row_p) - 1 IF (SIZE(blk_p) < nblks) & DBCSR_ABORT('Destination blk_p too small.') IF (nblks .GE. 1) & blk_p(1) = SGN(1, old_blk_p(1), mark) nze_prev = 0 DO row = 1, nrows row_size = rbs(row) DO blk = row_p(row) + 1, row_p(row + 1) IF (old_blk_p(blk) .NE. 0) THEN col_size = cbs(col_i(blk)) nze = row_size*col_size IF (blk .GT. 1) THEN blk_p(blk) = SGN(ABS(blk_p(blk - 1)) + nze_prev, old_blk_p(blk), & mark) END IF IF (ABS(blk_p(blk)) + nze - 1 > dbcsr_data_get_size(dst)) & DBCSR_ABORT('Destination data space is too small.') IF (.NOT. trb) THEN CALL dbcsr_data_copy(dst=dst, dst_lb=(/ABS(blk_p(blk))/), & dst_sizes=(/nze/), & src=src, src_lb=(/ABS(old_blk_p(blk))/), & src_sizes=(/nze/)) !CALL dbcsr_data_set (dst, ABS(blk_p(blk)), nze,& ! src, source_lb=ABS(old_blk_p(blk))) ELSE CALL dbcsr_block_transpose(dst, src, & col_size, row_size, & lb=ABS(blk_p(blk)), source_lb=ABS(old_blk_p(blk))) END IF nze_prev = nze END IF ! blk exists END DO ! blk END DO ! row END SUBROUTINE dbcsr_copy_sort_data SUBROUTINE dbcsr_sort_data(blk_p, old_blk_p, sizes, dsts, src, & srcs, old_blk_d) !! Sorts the data in a matrix so that the data blocks follow !! sequentially. INTEGER, DIMENSION(:), INTENT(INOUT) :: blk_p !! re-arranged block pointers reflecting the new data order INTEGER, DIMENSION(:), INTENT(IN) :: old_blk_p, sizes !! current block pointers !! sizes of the data blocks TYPE(dbcsr_data_obj), INTENT(INOUT) :: dsts !! sorted data TYPE(dbcsr_data_obj), INTENT(IN) :: src !! existing unordered data TYPE(dbcsr_data_obj), DIMENSION(:), INTENT(IN), & OPTIONAL :: srcs !! multiple source areas INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: old_blk_d CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_sort_data' INTEGER :: handle, i, nblks LOGICAL :: multidata ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) multidata = PRESENT(srcs) .AND. PRESENT(old_blk_d) nblks = SIZE(old_blk_p) IF (nblks .GT. 0) THEN !$OMP BARRIER !$OMP MASTER blk_p(1) = SIGN(1, old_blk_p(1)) DO i = 2, nblks blk_p(i) = SIGN(ABS(blk_p(i - 1)) + sizes(i - 1), old_blk_p(i)) END DO CALL dbcsr_data_set_size_referenced(dsts, & ABS(blk_p(nblks)) + sizes(nblks) - 1) !$OMP END MASTER !$OMP BARRIER !$OMP DO DO i = 1, nblks IF (old_blk_p(i) .NE. 0) THEN IF (.NOT. multidata) THEN CALL dbcsr_data_set(dsts, & ABS(blk_p(i)), sizes(i), & src, source_lb=ABS(old_blk_p(i))) !dst(ABS(blk_p(i)):ABS(blk_p(i))+sizes(i)-1) =& ! src(ABS(old_blk_p(i)):ABS(old_blk_p(i))+sizes(i)-1) ELSE CALL dbcsr_data_set(dsts, & ABS(blk_p(i)), sizes(i), & srcs(old_blk_d(i)), source_lb=ABS(old_blk_p(i))) !dst(ABS(blk_p(i)):ABS(blk_p(i))+sizes(i)-1) =& ! srcs(old_blk_d(i))%d& ! %r_dp(ABS(old_blk_p(i)):ABS(old_blk_p(i))+sizes(i)-1) END IF END IF END DO !$OMP END DO NOWAIT END IF CALL timestop(handle) END SUBROUTINE dbcsr_sort_data END MODULE dbcsr_data_operations ================================================ FILE: src/data/dbcsr_data_types.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_data_types !! Types related to DBCSR data area USE dbcsr_acc_devmem, ONLY: acc_devmem_type USE dbcsr_acc_event, ONLY: acc_event_type USE dbcsr_acc_stream, ONLY: acc_stream_type USE dbcsr_kinds, ONLY: & dp, int_4, int_4_size, int_8, int_8_size, real_4, real_4_size, real_8, real_8_size !$ USE OMP_LIB, ONLY: omp_lock_kind #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_data_types' PUBLIC :: dbcsr_data_obj, dbcsr_data_area_type, dbcsr_scalar_type PUBLIC :: dbcsr_datatype_sizeof PUBLIC :: dbcsr_mempool_type, & dbcsr_mempool_entry_type, & dbcsr_memtype_type, & dbcsr_memtype_default PUBLIC :: dbcsr_type_real_4, dbcsr_type_real_8, & dbcsr_type_complex_4, dbcsr_type_complex_8, & dbcsr_type_real_default, dbcsr_type_complex_default, & dbcsr_type_real_4_2d, dbcsr_type_real_8_2d, & dbcsr_type_complex_4_2d, dbcsr_type_complex_8_2d, & dbcsr_type_int_4, dbcsr_type_int_8 TYPE dbcsr_scalar_type !! Stores a scalar in any of the supported data types. !! !! Reasoning !! Easier routine interfaces REAL(KIND=real_4) :: r_sp = -1.0_real_4 !! stores real values in single precision REAL(KIND=real_8) :: r_dp = -1.0_real_8 !! stores real values in double precision COMPLEX(KIND=real_4) :: c_sp = (-1.0_real_4, -1.0_real_4) !! stores complex values in single precision COMPLEX(KIND=real_8) :: c_dp = (-1.0_real_8, -1.0_real_8) !! stores complex values in double precision INTEGER :: data_type = -1 !! which of the data types is actually used END TYPE dbcsr_scalar_type TYPE dbcsr_data_obj TYPE(dbcsr_data_area_type), POINTER :: d => Null() END TYPE dbcsr_data_obj TYPE dbcsr_mempool_type !! Memory related types TYPE(dbcsr_mempool_entry_type), POINTER :: root => Null() INTEGER :: capacity = 1 !$ INTEGER(KIND=omp_lock_kind) :: lock = -1_omp_lock_kind END TYPE dbcsr_mempool_type TYPE dbcsr_mempool_entry_type TYPE(dbcsr_data_obj) :: area = dbcsr_data_obj() TYPE(dbcsr_mempool_entry_type), POINTER :: next => Null() END TYPE dbcsr_mempool_entry_type TYPE dbcsr_memtype_type LOGICAL :: mpi = .FALSE. LOGICAL :: acc_hostalloc = .FALSE. LOGICAL :: acc_devalloc = .FALSE. TYPE(acc_stream_type) :: acc_stream = acc_stream_type() TYPE(dbcsr_mempool_type), POINTER :: pool => Null() REAL(KIND=dp) :: oversize_factor = 1.0 END TYPE dbcsr_memtype_type !providing pool=Null() explicitly to circumvent bug in ifort 12.1 TYPE(dbcsr_memtype_type), PARAMETER :: dbcsr_memtype_default = dbcsr_memtype_type(pool=Null()) TYPE dbcsr_data_area_type !! Stores actual data INTEGER(KIND=int_4), DIMENSION(:), POINTER, CONTIGUOUS :: i4 => Null() INTEGER(KIND=int_8), DIMENSION(:), POINTER, CONTIGUOUS :: i8 => Null() REAL(KIND=real_4), DIMENSION(:), POINTER, CONTIGUOUS :: r_sp => Null() !! stores real values in single precision REAL(KIND=real_8), DIMENSION(:), POINTER, CONTIGUOUS :: r_dp => Null() !! stores real values in double precision COMPLEX(KIND=real_4), DIMENSION(:), POINTER, CONTIGUOUS :: c_sp => Null() !! stores complex values in single precision COMPLEX(KIND=real_8), DIMENSION(:), POINTER, CONTIGUOUS :: c_dp => Null() !! stores complex values in double precision REAL(KIND=real_4), DIMENSION(:, :), POINTER :: r2_sp => Null() REAL(KIND=real_8), DIMENSION(:, :), POINTER :: r2_dp => Null() COMPLEX(KIND=real_4), DIMENSION(:, :), POINTER :: c2_sp => Null() COMPLEX(KIND=real_8), DIMENSION(:, :), POINTER :: c2_dp => Null() INTEGER :: ref_size = -1 !! last data element in array actually referenced INTEGER :: refcount = -1 !! reference counter for current structure INTEGER :: id = -1 TYPE(dbcsr_memtype_type) :: memory_type = dbcsr_memtype_default !! type of memory where data lives INTEGER :: data_type = -1 !! which of the data types is actually used TYPE(acc_devmem_type) :: acc_devmem = acc_devmem_type() TYPE(acc_event_type) :: acc_ready = acc_event_type() END TYPE dbcsr_data_area_type ! Type definitions: ! * bit 0: always 1 ! * bit 1: single (0: 4) vs. double (1: 1) ! * bit 2: real (0) vs. complex (1) ! * bit 3: dimension (0: 1, 1: 2) ! * bit 4: floating point (0) or integer type (1) INTEGER, PARAMETER :: dbcsr_type_real_4 = 1 !001 INTEGER, PARAMETER :: dbcsr_type_real_8 = 3 !011 INTEGER, PARAMETER :: dbcsr_type_complex_4 = 5 !101 INTEGER, PARAMETER :: dbcsr_type_complex_8 = 7 !111 INTEGER, PARAMETER :: dbcsr_type_real_4_2d = 9 !1001 INTEGER, PARAMETER :: dbcsr_type_real_8_2d = 11 !1011 INTEGER, PARAMETER :: dbcsr_type_complex_4_2d = 13 !1101 INTEGER, PARAMETER :: dbcsr_type_complex_8_2d = 15 !1111 INTEGER, PARAMETER :: dbcsr_type_int_4 = 17 !10001 INTEGER, PARAMETER :: dbcsr_type_int_8 = 19 !10011 INTEGER, PARAMETER :: dbcsr_type_real_default = dbcsr_type_real_8 INTEGER, PARAMETER :: dbcsr_type_complex_default = dbcsr_type_complex_8 CONTAINS FUNCTION dbcsr_datatype_sizeof(datatype) RESULT(size) !! Helper-routine, returns size of given datatype in terms of bytes. INTEGER, INTENT(IN) :: datatype INTEGER :: size size = 0 SELECT CASE (datatype) CASE (dbcsr_type_int_4) size = int_4_size CASE (dbcsr_type_int_8) size = int_8_size CASE (dbcsr_type_real_4) size = real_4_size CASE (dbcsr_type_real_8) size = real_8_size CASE (dbcsr_type_complex_4) size = (2*real_4_size) CASE (dbcsr_type_complex_8) size = (2*real_8_size) CASE default DBCSR_ABORT("Invalid data type") END SELECT END FUNCTION dbcsr_datatype_sizeof END MODULE dbcsr_data_types ================================================ FILE: src/data/dbcsr_mem_methods.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_mem_methods !! DBCSR Memory Pool to avoid slow allocations of accelerator memory USE dbcsr_acc_stream, ONLY: acc_stream_associated, & acc_stream_equal, & acc_stream_type USE dbcsr_data_methods_low, ONLY: dbcsr_data_exists, & dbcsr_data_get_size, & internal_data_deallocate USE dbcsr_data_types, ONLY: dbcsr_data_obj, & dbcsr_mempool_entry_type, & dbcsr_mempool_type, & dbcsr_memtype_type USE dbcsr_kinds, ONLY: dp !$ USE OMP_LIB, ONLY: omp_set_lock, omp_unset_lock, omp_init_lock, omp_destroy_lock #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mem_methods' PUBLIC :: dbcsr_mempool_get, dbcsr_mempool_add, dbcsr_mempool_limit_capacity PUBLIC :: dbcsr_mempool_destruct, dbcsr_mempool_clear PUBLIC :: dbcsr_memtype_setup, dbcsr_memtype_equal CONTAINS SUBROUTINE dbcsr_mempool_create(pool) !! Creates a memory pool. TYPE(dbcsr_mempool_type), POINTER :: pool IF (ASSOCIATED(pool)) DBCSR_ABORT("pool already allocated") ALLOCATE (pool) !$ CALL OMP_INIT_LOCK(pool%lock) ALLOCATE (pool%root) !root always allocated, but unused. Simplifies looping. END SUBROUTINE dbcsr_mempool_create SUBROUTINE dbcsr_mempool_limit_capacity(pool, capacity) !! Ensures that mempool has at least the given capacity. TYPE(dbcsr_mempool_type), POINTER :: pool INTEGER, INTENT(IN) :: capacity IF (.NOT. ASSOCIATED(pool)) RETURN !$ CALL OMP_SET_LOCK(pool%lock) pool%capacity = MAX(pool%capacity, capacity) !$ CALL OMP_UNSET_LOCK(pool%lock) END SUBROUTINE dbcsr_mempool_limit_capacity FUNCTION dbcsr_mempool_get(memtype, datatype, datasize) RESULT(res) !! Picks a suitable data_area from mempool, returns Null() if none found. TYPE(dbcsr_memtype_type) :: memtype INTEGER, INTENT(IN) :: datatype, datasize TYPE(dbcsr_data_obj) :: res INTEGER :: best_size, s TYPE(dbcsr_mempool_entry_type), POINTER :: best_cur, best_prev, cur, prev TYPE(dbcsr_mempool_type), POINTER :: pool pool => memtype%pool IF (.NOT. ASSOCIATED(pool)) DBCSR_ABORT("pool not allocated") !$ CALL OMP_SET_LOCK(pool%lock) res%d => Null() best_cur => Null() best_prev => Null() best_size = HUGE(1) prev => Null() cur => pool%root DO WHILE (ASSOCIATED(cur%next)) prev => cur cur => cur%next s = dbcsr_data_get_size(cur%area) IF (s < datasize) CYCLE IF (.NOT. dbcsr_memtype_equal(cur%area%d%memory_type, memtype)) CYCLE IF (cur%area%d%data_type /= datatype) CYCLE !we found a match IF (s < best_size) THEN best_cur => cur best_prev => prev best_size = s END IF END DO IF (ASSOCIATED(best_cur)) THEN IF (best_cur%area%d%refcount /= 0) DBCSR_ABORT("refcount /= 0") best_cur%area%d%refcount = 1 best_prev%next => best_cur%next res = best_cur%area DEALLOCATE (best_cur) END IF !$ CALL OMP_UNSET_LOCK(pool%lock) IF (.NOT. ASSOCIATED(res%d)) & CALL mempool_collect_garbage(pool) END FUNCTION dbcsr_mempool_get SUBROUTINE dbcsr_mempool_add(area) !! Adds an unused (refcount==0) data_area to the pool. TYPE(dbcsr_data_obj) :: area TYPE(dbcsr_mempool_entry_type), POINTER :: new_entry TYPE(dbcsr_mempool_type), POINTER :: pool pool => area%d%memory_type%pool IF (.NOT. ASSOCIATED(pool)) DBCSR_ABORT("pool not allocated") IF (.NOT. dbcsr_data_exists(area)) DBCSR_ABORT("area not allocated") IF (area%d%refcount /= 0) DBCSR_ABORT("refcount /= 0") CALL mempool_collect_garbage(pool) !$ CALL OMP_SET_LOCK(pool%lock) ALLOCATE (new_entry) new_entry%area = area new_entry%next => pool%root%next pool%root%next => new_entry !$ CALL OMP_UNSET_LOCK(pool%lock) END SUBROUTINE dbcsr_mempool_add SUBROUTINE mempool_collect_garbage(pool) !! Ensures that pool_size < max_size, e.g. that there is a free slot. TYPE(dbcsr_mempool_type), POINTER :: pool INTEGER :: n TYPE(dbcsr_mempool_entry_type), POINTER :: cur, prev IF (.NOT. ASSOCIATED(pool)) DBCSR_ABORT("pool not allocated") !$ CALL OMP_SET_LOCK(pool%lock) prev => pool%root cur => pool%root%next n = 0 DO WHILE (ASSOCIATED(cur)) n = n + 1 IF (n >= pool%capacity) THEN CALL internal_data_deallocate(cur%area%d) DEALLOCATE (cur%area%d) prev%next => cur%next DEALLOCATE (cur) cur => prev%next ELSE prev => cur cur => cur%next END IF END DO !$ CALL OMP_UNSET_LOCK(pool%lock) END SUBROUTINE mempool_collect_garbage SUBROUTINE dbcsr_mempool_destruct(pool) !! Finalizes mempool, includes deallocation of all contained data_areas. TYPE(dbcsr_mempool_type), POINTER :: pool IF (.NOT. ASSOCIATED(pool)) DBCSR_ABORT("pool not allocated") CALL dbcsr_mempool_clear(pool) !$ CALL OMP_DESTROY_LOCK(pool%lock) DEALLOCATE (pool%root) DEALLOCATE (pool) END SUBROUTINE dbcsr_mempool_destruct SUBROUTINE dbcsr_mempool_clear(pool) !! Deallocates all data_areas contained in given mempool. TYPE(dbcsr_mempool_type), POINTER :: pool CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_mempool_clear' INTEGER :: handle TYPE(dbcsr_mempool_entry_type), POINTER :: cur, prev IF (.NOT. ASSOCIATED(pool)) DBCSR_ABORT("pool not allocated") CALL timeset(routineN, handle) !$ CALL OMP_SET_LOCK(pool%lock) cur => pool%root%next DO WHILE (ASSOCIATED(cur)) CALL internal_data_deallocate(cur%area%d) DEALLOCATE (cur%area%d) prev => cur cur => cur%next DEALLOCATE (prev) END DO NULLIFY (pool%root%next) !$ CALL OMP_UNSET_LOCK(pool%lock) CALL timestop(handle) END SUBROUTINE dbcsr_mempool_clear SUBROUTINE dbcsr_memtype_setup(memtype, acc_hostalloc, acc_devalloc, mpi, & !! Ensures that given memtype has requested settings. acc_stream, oversize_factor, has_pool) TYPE(dbcsr_memtype_type), INTENT(INOUT) :: memtype LOGICAL, INTENT(IN), OPTIONAL :: acc_hostalloc, acc_devalloc, mpi TYPE(acc_stream_type), OPTIONAL :: acc_stream REAL(KIND=dp), OPTIONAL :: oversize_factor LOGICAL, INTENT(IN), OPTIONAL :: has_pool LOGICAL :: is_ok, my_has_pool TYPE(dbcsr_memtype_type) :: aim ! variable aim is initialized with default values from type definition my_has_pool = .FALSE. IF (PRESENT(has_pool)) my_has_pool = has_pool IF (PRESENT(acc_hostalloc)) aim%acc_hostalloc = acc_hostalloc IF (PRESENT(acc_devalloc)) aim%acc_devalloc = acc_devalloc IF (PRESENT(mpi)) aim%mpi = mpi IF (PRESENT(acc_stream)) aim%acc_stream = acc_stream IF (PRESENT(oversize_factor)) aim%oversize_factor = oversize_factor IF (.NOT. aim%acc_devalloc .EQV. acc_stream_associated(aim%acc_stream)) & DBCSR_ABORT("acc_stream missing") is_ok = .TRUE. is_ok = is_ok .AND. (memtype%acc_hostalloc .EQV. aim%acc_hostalloc) is_ok = is_ok .AND. (memtype%acc_devalloc .EQV. aim%acc_devalloc) is_ok = is_ok .AND. (memtype%mpi .EQV. aim%mpi) is_ok = is_ok .AND. acc_stream_equal(memtype%acc_stream, aim%acc_stream) is_ok = is_ok .AND. (memtype%oversize_factor == aim%oversize_factor) is_ok = is_ok .AND. (ASSOCIATED(memtype%pool) .EQV. my_has_pool) IF (.NOT. is_ok) THEN IF (ASSOCIATED(memtype%pool)) & CALL dbcsr_mempool_destruct(memtype%pool) memtype%acc_hostalloc = aim%acc_hostalloc memtype%acc_devalloc = aim%acc_devalloc memtype%mpi = aim%mpi memtype%acc_stream = aim%acc_stream memtype%oversize_factor = aim%oversize_factor IF (my_has_pool) & CALL dbcsr_mempool_create(memtype%pool) END IF END SUBROUTINE dbcsr_memtype_setup FUNCTION dbcsr_memtype_equal(mt1, mt2) RESULT(res) !! Test if two memtypes are equal TYPE(dbcsr_memtype_type), INTENT(in) :: mt1, mt2 LOGICAL :: res res = (mt1%mpi .EQV. mt2%mpi) .AND. & (mt1%acc_hostalloc .EQV. mt2%acc_hostalloc) .AND. & (mt1%acc_devalloc .EQV. mt2%acc_devalloc) .AND. & (ASSOCIATED(mt1%pool) .EQV. ASSOCIATED(mt2%pool)) .AND. & (.NOT. ASSOCIATED(mt1%pool) .OR. ASSOCIATED(mt1%pool, mt2%pool)) END FUNCTION dbcsr_memtype_equal END MODULE dbcsr_mem_methods ================================================ FILE: src/data/dbcsr_ptr_util.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_ptr_util !! DBCSR pointer and unmanaged array utilities USE dbcsr_acc_hostmem, ONLY: acc_hostmem_allocate, & acc_hostmem_deallocate USE dbcsr_config, ONLY: dbcsr_cfg USE dbcsr_data_types, ONLY: dbcsr_data_obj, & dbcsr_memtype_default, & dbcsr_memtype_type, & dbcsr_type_complex_4, & dbcsr_type_complex_8, & dbcsr_type_real_4, & dbcsr_type_real_8 USE dbcsr_kinds, ONLY: dp, & int_4, & int_8, & real_4, & real_8 USE dbcsr_mpiwrap, ONLY: mp_allocate, & mp_deallocate #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_ptr_util' LOGICAL, PARAMETER :: careful_mod = .FALSE. PUBLIC :: ensure_array_size PUBLIC :: memory_allocate, memory_deallocate PUBLIC :: memory_zero PUBLIC :: pointer_view PUBLIC :: pointer_rank_remap2 PUBLIC :: memory_copy INTERFACE ensure_array_size MODULE PROCEDURE ensure_array_size_i, ensure_array_size_l MODULE PROCEDURE ensure_array_size_s, ensure_array_size_d, & ensure_array_size_c, ensure_array_size_z END INTERFACE INTERFACE pointer_view MODULE PROCEDURE pointer_view_s, pointer_view_d, & pointer_view_c, pointer_view_z MODULE PROCEDURE pointer_view_i, pointer_view_l MODULE PROCEDURE pointer_view_a END INTERFACE INTERFACE pointer_rank_remap2 MODULE PROCEDURE pointer_s_rank_remap2, pointer_d_rank_remap2, & pointer_c_rank_remap2, pointer_z_rank_remap2, & pointer_l_rank_remap2, pointer_i_rank_remap2 END INTERFACE INTERFACE memory_copy MODULE PROCEDURE mem_copy_i, mem_copy_l, & mem_copy_s, mem_copy_d, & mem_copy_c, mem_copy_z END INTERFACE INTERFACE memory_zero MODULE PROCEDURE mem_zero_i, mem_zero_l MODULE PROCEDURE mem_zero_s, mem_zero_d, mem_zero_c, mem_zero_z END INTERFACE INTERFACE memory_allocate MODULE PROCEDURE mem_alloc_i, mem_alloc_l, mem_alloc_s, mem_alloc_d, mem_alloc_c, mem_alloc_z MODULE PROCEDURE mem_alloc_i_2d, mem_alloc_l_2d, mem_alloc_s_2d, mem_alloc_d_2d, mem_alloc_c_2d, mem_alloc_z_2d END INTERFACE INTERFACE memory_deallocate MODULE PROCEDURE mem_dealloc_i, mem_dealloc_l, mem_dealloc_s, mem_dealloc_d, mem_dealloc_c, mem_dealloc_z MODULE PROCEDURE mem_dealloc_i_2d, mem_dealloc_l_2d, mem_dealloc_s_2d, mem_dealloc_d_2d, mem_dealloc_c_2d, mem_dealloc_z_2d END INTERFACE CONTAINS FUNCTION pointer_view_a(new_area, area, offset, len) RESULT(narea2) !! Repoints a pointer into a part of a data area TYPE(dbcsr_data_obj), INTENT(INOUT) :: new_area !! repoints this encapsulated pointer TYPE(dbcsr_data_obj), INTENT(IN) :: area !! area to point into INTEGER, INTENT(IN) :: offset !! point to this offset in area INTEGER, INTENT(IN), OPTIONAL :: len !! length of data area to point to TYPE(dbcsr_data_obj) :: narea2 !! copy of new_area IF (area%d%data_type /= new_area%d%data_type) & DBCSR_ABORT("Incompatible data types.") IF (PRESENT(len)) THEN SELECT CASE (area%d%data_type) CASE (dbcsr_type_real_4) new_area%d%r_sp => area%d%r_sp(offset:offset + len - 1) CASE (dbcsr_type_real_8) new_area%d%r_dp => area%d%r_dp(offset:offset + len - 1) CASE (dbcsr_type_complex_4) new_area%d%c_sp => area%d%c_sp(offset:offset + len - 1) CASE (dbcsr_type_complex_8) new_area%d%c_dp => area%d%c_dp(offset:offset + len - 1) CASE default DBCSR_ABORT("Invalid data type.") END SELECT ELSE SELECT CASE (area%d%data_type) CASE (dbcsr_type_real_4) new_area%d%r_sp => area%d%r_sp(offset:) CASE (dbcsr_type_real_8) new_area%d%r_dp => area%d%r_dp(offset:) CASE (dbcsr_type_complex_4) new_area%d%c_sp => area%d%c_sp(offset:) CASE (dbcsr_type_complex_8) new_area%d%c_dp => area%d%c_dp(offset:) CASE default DBCSR_ABORT("Invalid data type.") END SELECT END IF narea2 = new_area END FUNCTION pointer_view_a #:include 'dbcsr.fypp' #:for nametype1, type1, zero1 in inst_params_all FUNCTION pointer_view_${nametype1}$ (original, lb, ub) RESULT(view) !! Returns a pointer with different bounds. ${type1}$, DIMENSION(:), POINTER :: original, view !! original data pointer !! new pointer INTEGER, INTENT(IN) :: lb, ub !! lower and upper bound for the new pointer view !! lower and upper bound for the new pointer view view => original(lb:ub) END FUNCTION pointer_view_${nametype1}$ SUBROUTINE ensure_array_size_${nametype1}$ (array, array_resize, lb, ub, factor, & nocopy, memory_type, zero_pad) !! Ensures that an array is appropriately large. ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: array !! array to verify and possibly resize ${type1}$, DIMENSION(:), POINTER, OPTIONAL :: array_resize INTEGER, INTENT(IN), OPTIONAL :: lb !! desired array lower bound INTEGER, INTENT(IN) :: ub !! desired array upper bound REAL(KIND=dp), INTENT(IN), OPTIONAL :: factor !! factor by which to exaggerate enlargements LOGICAL, INTENT(IN), OPTIONAL :: nocopy, zero_pad !! copy array on enlargement; default is to copy !! zero new allocations; default is to write nothing TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL :: memory_type !! use special memory CHARACTER(len=*), PARAMETER :: routineN = 'ensure_array_size_${nametype1}$', & routineP = moduleN//':'//routineN INTEGER :: lb_new, lb_orig, & ub_new, ub_orig, old_size, & size_increase TYPE(dbcsr_memtype_type) :: mem_type LOGICAL :: dbg, docopy, & pad ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: newarray ! --------------------------------------------------------------------------- !CALL timeset(routineN, error_handler) dbg = .FALSE. IF (PRESENT(array_resize)) NULLIFY (array_resize) IF (PRESENT(nocopy)) THEN docopy = .NOT. nocopy ELSE docopy = .TRUE. END IF IF (PRESENT(memory_type)) THEN mem_type = memory_type ELSE mem_type = dbcsr_memtype_default END IF lb_new = 1 IF (PRESENT(lb)) lb_new = lb pad = .FALSE. IF (PRESENT(zero_pad)) pad = zero_pad ! Creates a new array if it doesn't yet exist. IF (.NOT. ASSOCIATED(array)) THEN IF (lb_new /= 1) & DBCSR_ABORT("Arrays must start at 1") CALL mem_alloc_${nametype1}$ (array, ub, mem_type=mem_type) IF (pad .AND. ub .GT. 0) CALL mem_zero_${nametype1}$ (array, ub) !CALL timestop(error_handler) RETURN END IF lb_orig = LBOUND(array, 1) ub_orig = UBOUND(array, 1) old_size = ub_orig - lb_orig + 1 ! The existing array is big enough. IF (lb_orig .LE. lb_new .AND. ub_orig .GE. ub) THEN !CALL timestop(error_handler) RETURN END IF ! A reallocation must be performed IF (dbg) WRITE (*, *) routineP//' Current bounds are', lb_orig, ':', ub_orig, & '; special?' !,mem_type !CALL timeset(routineN,timing_handle) IF (lb_orig .GT. lb_new) THEN IF (PRESENT(factor)) THEN size_increase = lb_orig - lb_new size_increase = MAX(NINT(size_increase*factor), & NINT(old_size*(factor - 1)), 0) lb_new = MIN(lb_orig, lb_new - size_increase) ELSE lb_new = lb_orig END IF END IF IF (ub_orig .LT. ub) THEN IF (PRESENT(factor)) THEN size_increase = ub - ub_orig size_increase = MAX(NINT(size_increase*factor), & NINT(old_size*(factor - 1)), 0) ub_new = MAX(ub_orig, ub + size_increase) ELSE ub_new = ub END IF ELSE ub_new = ub END IF IF (dbg) WRITE (*, *) routineP//' Resizing to bounds', lb_new, ':', ub_new ! ! Deallocates the old array if it's not needed to copy the old data. IF (.NOT. docopy) THEN IF (PRESENT(array_resize)) THEN array_resize => array NULLIFY (array) ELSE CALL mem_dealloc_${nametype1}$ (array, mem_type=mem_type) END IF END IF ! ! Allocates the new array IF (lb_new /= 1) & DBCSR_ABORT("Arrays must start at 1") CALL mem_alloc_${nametype1}$ (newarray, ub_new - lb_new + 1, mem_type) ! ! Now copy and/or zero pad. IF (docopy) THEN IF (dbg .AND. (lb_new .GT. lb_orig .OR. ub_new .LT. ub_orig)) & DBCSR_ABORT("Old extent exceeds the new one.") IF (ub_orig - lb_orig + 1 .gt. 0) THEN !newarray(lb_orig:ub_orig) = array(lb_orig:ub_orig) CALL mem_copy_${nametype1}$ (newarray(lb_orig:ub_orig), & array(lb_orig:ub_orig), ub_orig - lb_orig + 1) END IF IF (pad) THEN !newarray(lb_new:lb_orig-1) = 0 CALL mem_zero_${nametype1}$ (newarray(lb_new:lb_orig - 1), (lb_orig - 1) - lb_new + 1) !newarray(ub_orig+1:ub_new) = 0 CALL mem_zero_${nametype1}$ (newarray(ub_orig + 1:ub_new), ub_new - (ub_orig + 1) + 1) END IF IF (PRESENT(array_resize)) THEN array_resize => array NULLIFY (array) ELSE CALL mem_dealloc_${nametype1}$ (array, mem_type=mem_type) END IF ELSEIF (pad) THEN !newarray(:) = ${zero1}$ CALL mem_zero_${nametype1}$ (newarray, SIZE(newarray)) END IF array => newarray IF (dbg) WRITE (*, *) routineP//' New array size', SIZE(array) !CALL timestop(error_handler) END SUBROUTINE ensure_array_size_${nametype1}$ SUBROUTINE mem_copy_${nametype1}$ (dst, src, n) !! Copies memory area INTEGER, INTENT(IN) :: n !! length of copy ${type1}$, DIMENSION(1:n), INTENT(OUT) :: dst !! destination memory ${type1}$, DIMENSION(1:n), INTENT(IN) :: src !! source memory dst(:) = src(:) END SUBROUTINE mem_copy_${nametype1}$ SUBROUTINE mem_zero_${nametype1}$ (dst, n) !! Zeros memory area INTEGER, INTENT(IN) :: n !! length of elements to zero ${type1}$, DIMENSION(1:n), INTENT(OUT) :: dst !! destination memory dst(:) = ${zero1}$ END SUBROUTINE mem_zero_${nametype1}$ SUBROUTINE mem_alloc_${nametype1}$ (mem, n, mem_type) !! Allocates memory ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: mem !! memory to allocate INTEGER, INTENT(IN) :: n !! length of elements to allocate TYPE(dbcsr_memtype_type), INTENT(IN) :: mem_type !! memory type CHARACTER(len=*), PARAMETER :: routineN = 'mem_alloc_${nametype1}$' INTEGER :: error_handle ! --------------------------------------------------------------------------- IF (careful_mod) & CALL timeset(routineN, error_handle) IF (mem_type%acc_hostalloc .AND. n > 1) THEN CALL acc_hostmem_allocate(mem, n, mem_type%acc_stream) ELSE IF (mem_type%mpi .AND. dbcsr_cfg%use_mpi_allocator%val) THEN CALL mp_allocate(mem, n) ELSE ALLOCATE (mem(n)) END IF IF (careful_mod) & CALL timestop(error_handle) END SUBROUTINE mem_alloc_${nametype1}$ SUBROUTINE mem_alloc_${nametype1}$_2d(mem, sizes, mem_type) !! Allocates memory ${type1}$, DIMENSION(:, :), POINTER :: mem !! memory to allocate INTEGER, DIMENSION(2), INTENT(IN) :: sizes !! length of elements to allocate TYPE(dbcsr_memtype_type), INTENT(IN) :: mem_type !! memory type CHARACTER(len=*), PARAMETER :: routineN = 'mem_alloc_${nametype1}$_2d' INTEGER :: error_handle ! --------------------------------------------------------------------------- IF (careful_mod) & CALL timeset(routineN, error_handle) IF (mem_type%acc_hostalloc) THEN DBCSR_ABORT("Accelerator hostalloc not supported for 2D arrays.") !CALL acc_hostmem_allocate(mem, n, mem_type%acc_stream) ELSE IF (mem_type%mpi) THEN DBCSR_ABORT("MPI allocate not supported for 2D arrays.") !CALL mp_allocate(mem, n) ELSE ALLOCATE (mem(sizes(1), sizes(2))) END IF IF (careful_mod) & CALL timestop(error_handle) END SUBROUTINE mem_alloc_${nametype1}$_2d SUBROUTINE mem_dealloc_${nametype1}$ (mem, mem_type) !! Deallocates memory ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: mem !! memory to allocate TYPE(dbcsr_memtype_type), INTENT(IN) :: mem_type !! memory type CHARACTER(len=*), PARAMETER :: routineN = 'mem_dealloc_${nametype1}$' INTEGER :: error_handle ! --------------------------------------------------------------------------- IF (careful_mod) & CALL timeset(routineN, error_handle) IF (mem_type%acc_hostalloc .AND. SIZE(mem) > 1) THEN CALL acc_hostmem_deallocate(mem, mem_type%acc_stream) ELSE IF (mem_type%mpi .AND. dbcsr_cfg%use_mpi_allocator%val) THEN CALL mp_deallocate(mem) ELSE DEALLOCATE (mem) END IF IF (careful_mod) & CALL timestop(error_handle) END SUBROUTINE mem_dealloc_${nametype1}$ SUBROUTINE mem_dealloc_${nametype1}$_2d(mem, mem_type) !! Deallocates memory ${type1}$, DIMENSION(:, :), POINTER :: mem !! memory to allocate TYPE(dbcsr_memtype_type), INTENT(IN) :: mem_type !! memory type CHARACTER(len=*), PARAMETER :: routineN = 'mem_dealloc_${nametype1}$' INTEGER :: error_handle ! --------------------------------------------------------------------------- IF (careful_mod) & CALL timeset(routineN, error_handle) IF (mem_type%acc_hostalloc) THEN DBCSR_ABORT("Accelerator host deallocate not supported for 2D arrays.") !CALL acc_hostmem_deallocate(mem, mem_type%acc_stream) ELSE IF (mem_type%mpi) THEN DBCSR_ABORT("MPI deallocate not supported for 2D arrays.") !CALL mp_deallocate(mem) ELSE DEALLOCATE (mem) END IF IF (careful_mod) & CALL timestop(error_handle) END SUBROUTINE mem_dealloc_${nametype1}$_2d SUBROUTINE pointer_${nametype1}$_rank_remap2(r2p, d1, d2, r1p) !! Sets a rank-2 pointer to rank-1 data using Fortran 2003 pointer !! rank remapping. INTEGER, INTENT(IN) :: d1, d2 ${type1}$, DIMENSION(:, :), & POINTER :: r2p ${type1}$, DIMENSION(:), & POINTER :: r1p r2p(1:d1, 1:d2) => r1p(1:d1*d2) END SUBROUTINE pointer_${nametype1}$_rank_remap2 #:endfor END MODULE dbcsr_ptr_util ================================================ FILE: src/dbcsr.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #ifndef DBCSR_H #define DBCSR_H #include #include /* we need bool from C99 */ #:include 'data/dbcsr.fypp' static const int dbcsr_type_real_4 = 1; static const int dbcsr_type_real_8 = 3; static const int dbcsr_type_complex_4 = 5; static const int dbcsr_type_complex_8 = 7; static const int dbcsr_filter_frobenius = 1; static const int dbcsr_norm_frobenius = 1; static const int dbcsr_norm_maxabsnorm = 2; static const int dbcsr_norm_gershgorin = 3; static const int dbcsr_norm_column = 4; static const int dbcsr_func_inverse = 0; static const int dbcsr_func_tanh = 1; static const int dbcsr_func_dtanh = 2; static const int dbcsr_func_ddtanh = 3; static const int dbcsr_func_artanh = 4; static const int dbcsr_func_inverse_special = 5; static const int dbcsr_func_spread_from_zero = 6; static const int dbcsr_func_sin = 7; static const int dbcsr_func_dsin = 8; static const int dbcsr_func_ddsin = 9; static const int dbcsr_func_asin = 10; static const int dbcsr_func_cos = 11; static const int dbcsr_func_truncate = 12; static const char dbcsr_type_invalid = '0'; static const char dbcsr_type_no_symmetry = 'N'; static const char dbcsr_type_symmetric = 'S'; static const char dbcsr_type_antisymmetric = 'A'; static const char dbcsr_type_hermitian = 'H'; static const char dbcsr_type_antihermitian = 'K'; static const char dbcsr_no_transpose = 'N'; static const char dbcsr_transpose = 'T'; static const char dbcsr_conjugate_transpose = 'C'; static const char dbcsr_repl_none = 'N'; static const char dbcsr_repl_row = 'R'; static const char dbcsr_repl_col = 'C'; static const char dbcsr_repl_full = 'A'; typedef void* dbcsr_matrix; typedef void* dbcsr_distribution; typedef void* dbcsr_iterator; #if defined(__cplusplus) extern "C" { #endif //----------------------------------------------------! // lib init/finalize ! //----------------------------------------------------! void c_dbcsr_clear_mempools(); void c_dbcsr_mp_grid_setup(void* c_dist); void c_dbcsr_init_lib_internal(MPI_Fint* fcomm, int* io_unit); inline void c_dbcsr_init_lib(MPI_Comm comm, int* io_unit) { MPI_Fint fcomm = MPI_Comm_c2f(comm); c_dbcsr_init_lib_internal(&fcomm, io_unit); } void c_dbcsr_print_statistics(const bool* c_print_timers, const char* c_callgraph_filename); void c_dbcsr_finalize_lib(void); //-------------------------------------------------------! // create/release ! //-------------------------------------------------------! void c_dbcsr_distribution_hold(const dbcsr_distribution c_dist); void c_dbcsr_distribution_new_aux( dbcsr_distribution* dist, MPI_Fint* fcomm, int* row_dist, int row_dist_size, int* col_dist, int col_dist_size); inline void c_dbcsr_distribution_new( dbcsr_distribution* dist, MPI_Comm comm, int* row_dist, int row_dist_size, int* col_dist, int col_dist_size) { MPI_Fint fcomm = MPI_Comm_c2f(comm); c_dbcsr_distribution_new_aux(dist, &fcomm, row_dist, row_dist_size, col_dist, col_dist_size); } void c_dbcsr_distribution_release(dbcsr_distribution* dist); void c_dbcsr_create_new(dbcsr_matrix* c_matrix, const char* c_name, const dbcsr_distribution, const char c_matrix_type, const int* c_row_blk_size, const int c_row_size, const int* c_col_blk_size, const int c_col_size, const int* c_nze, const int* c_data_type, const bool* c_reuse, const bool* c_reuse_arrays, const bool* c_mutable_work, const char* c_replication_type); void c_dbcsr_create_template(dbcsr_matrix* c_matrix, const char* c_name, const dbcsr_matrix c_template, const dbcsr_distribution c_dist, const char* c_matrix_type, const int* c_row_blk_size, const int c_row_size, const int* c_col_blk_size, const int c_col_size, const int* c_nze, const int* c_data_type, const bool* c_reuse_arrays, const bool* c_mutable_work, const char* c_replication_type); void c_dbcsr_finalize(const dbcsr_matrix matrix); void c_dbcsr_release(dbcsr_matrix* matrix); //----------------------------------------------------------! // primitive matrix operations ! //----------------------------------------------------------! #:for n_inst, nametype, base, prec, ctype, extype in c_exparams void c_dbcsr_set_${nametype}$(dbcsr_matrix c_matrix, const ${extype}$ c_alpha); void c_dbcsr_add_${nametype}$( dbcsr_matrix c_matrix_a, const dbcsr_matrix c_matrix_b, const ${extype}$ c_alpha_scalar, const ${extype}$ c_beta_scalar); void c_dbcsr_scale_${nametype}$(dbcsr_matrix c_matrix_a, const ${extype}$ c_alpha_scalar, const int* c_last_column); void c_dbcsr_scale_by_vector_${nametype}$( const dbcsr_matrix c_matrix_a, const ${extype}$* c_alpha, const int c_alpha_size, const char* c_side); void c_dbcsr_multiply_${nametype}$(char c_transa, char c_transb, const ${extype}$ c_alpha, const dbcsr_matrix c_matrix_a, const dbcsr_matrix c_matrix_b, const ${extype}$ c_beta, dbcsr_matrix c_matrix_c, const int* c_first_row, const int* c_last_row, const int* c_first_column, const int* c_last_column, const int* c_first_k, const int* c_last_k, const bool* c_retain_sparsity, const double* c_filter_eps, long long int* c_flop); void c_dbcsr_add_on_diag_${nametype}$(dbcsr_matrix c_matrix, const ${extype}$ c_alpha_scalar); void c_dbcsr_set_diag_${nametype}$(dbcsr_matrix c_matrix, const ${extype}$* c_diag, const int c_diag_size); void c_dbcsr_get_diag_${nametype}$(const dbcsr_matrix c_matrix, ${extype}$* c_diag, const int c_diag_size); void c_dbcsr_trace_${nametype}$(const dbcsr_matrix c_matrix_a, ${extype}$* c_trace); void c_dbcsr_dot_${nametype}$(const dbcsr_matrix c_matrix_a, const dbcsr_matrix c_matrix_b, ${extype}$* c_result); void c_dbcsr_get_block_p_${nametype}$(const dbcsr_matrix c_matrix, const int c_row, const int c_col, ${extype}$** c_block, bool* c_tr, bool* c_found, int* c_row_size, int* c_col_size); void c_dbcsr_get_block_notrans_p_${nametype}$(const dbcsr_matrix c_matrix, const int c_row, const int c_col, ${extype}$** c_block, bool* c_found, int* c_row_size, int* c_col_size); #:endfor void c_dbcsr_complete_redistribute( const dbcsr_matrix c_matrix, dbcsr_matrix c_redist, const bool* c_keep_sparsity, const bool* c_summation); void c_dbcsr_filter( dbcsr_matrix c_matrix, const double* c_eps, const int* c_method, const bool* c_use_absolute, const bool* c_filter_diag); void c_dbcsr_get_block_diag(const dbcsr_matrix c_matrix, void** c_diag); void c_dbcsr_transposed(dbcsr_matrix* c_transposed, dbcsr_matrix c_normal, const bool* c_shallow_data_copy, const bool* c_transpose_data, const bool* c_transpose_distribution, const bool* c_use_distribution); void c_dbcsr_copy(dbcsr_matrix* c_matrix_b, const dbcsr_matrix c_matrix_a, const char* c_name, const bool* c_keep_sparsity, const bool* c_shallow_data, const bool* c_keep_imaginary, const char* c_matrix_type); void c_dbcsr_copy_into_existing(dbcsr_matrix c_matrix_b, const dbcsr_matrix c_matrix_a); void c_dbcsr_desymmetrize(const dbcsr_matrix c_matrix_a, dbcsr_matrix* c_matrix_b); void c_dbcsr_clear(dbcsr_matrix* c_dbcsr_mat); //-----------------------------------------------------------------! // block_reservations ! //-----------------------------------------------------------------! void c_dbcsr_reserve_diag_blocks(dbcsr_matrix c_matrix); void c_dbcsr_reserve_blocks(dbcsr_matrix c_matrix, const int* c_rows, const int* c_cols, const int c_size); void c_dbcsr_reserve_all_blocks(dbcsr_matrix c_matrix); #:for n_inst, nametype, base, prec, ctype, extype in c_exparams void c_dbcsr_reserve_block2d_${nametype}$(dbcsr_matrix c_matrix, const int c_row, const int c_col, const ${extype}$* c_block, const int c_row_size, const int c_col_size, const bool* c_transposed, bool* c_existed); #:endfor //-------------------------------! // iterator ! //-------------------------------! void c_dbcsr_iterator_stop(dbcsr_iterator* c_iterator); void c_dbcsr_iterator_start(dbcsr_iterator* c_iterator, const dbcsr_matrix c_matrix, const bool* c_shared, const bool* c_dynamic, const bool* c_dynamic_byrows, const bool* c_contiguous_pointers, const bool* c_read_only); bool c_dbcsr_iterator_blocks_left(const dbcsr_iterator c_iterator); void c_dbcsr_iterator_next_block_index(const dbcsr_iterator c_iterator, int* c_row, int* c_column, int* c_blk, int* c_blk_p); #:for n_inst, nametype, base, prec, ctype, extype in c_exparams void c_dbcsr_iterator_next_2d_block_${nametype}$(const dbcsr_iterator c_iterator, int* c_row, int* c_column, ${extype}$** c_block, bool* c_transposed, int* c_block_number, int* c_row_size, int* c_col_size, int* c_row_offset, int* c_col_offset); #:endfor //--------------------------------------------------------! // work operations ! //--------------------------------------------------------! #:for n_inst, nametype, base, prec, ctype, extype in c_exparams void c_dbcsr_put_block2d_${nametype}$(dbcsr_matrix c_matrix, const int c_row, const int c_col, const ${extype}$* c_block, const int c_row_size, const int c_col_size, const bool* c_summation, const ${extype}$* c_scale); void c_dbcsr_get_data_${nametype}$(const dbcsr_matrix c_matrix, ${extype}$** c_data, long long int* c_data_size, ${extype}$* c_select_data_type, int* c_lb, int* c_ub); #:endfor //------------------------------------------------------------! // replication ! //------------------------------------------------------------! void c_dbcsr_replicate_all(dbcsr_matrix c_matrix); void c_dbcsr_distribute(dbcsr_matrix c_matrix, bool* c_fast); void c_dbcsr_sum_replicated(dbcsr_matrix c_matrix); //-----------------------------------------! // high level matrix functions ! //-----------------------------------------! void c_dbcsr_hadamard_product( const dbcsr_matrix c_matrix_a, const dbcsr_matrix c_matrix_b, dbcsr_matrix c_matrix_c, const double* c_b_assume_value); void c_dbcsr_print(const dbcsr_matrix matrix); void c_dbcsr_print_block_sum(const dbcsr_matrix c_matrix, const int* c_unit_nr); double c_dbcsr_checksum(const dbcsr_matrix c_matrix, const bool* c_local, const bool* c_pos); double c_dbcsr_maxabs(const dbcsr_matrix c_matrix); double c_dbcsr_gershgorin_norm(const dbcsr_matrix c_matrix); double c_dbcsr_frobenius_norm(const dbcsr_matrix c_matrix, const bool* c_local); void c_dbcsr_norm_scalar(const dbcsr_matrix c_matrix, const int c_which_norm, double* c_norm_scalar); void c_dbcsr_triu(const dbcsr_matrix c_matrix); void c_dbcsr_init_random(dbcsr_matrix c_matrix, const bool* c_keep_sparsity); void c_dbcsr_function_of_elements( dbcsr_matrix c_matrix, const int c_func, const double* c_a0, const double* c_a1, const double* c_a2); //--------------------------------------------------! // setters/getters ! //--------------------------------------------------! int c_dbcsr_nblkrows_total(const dbcsr_matrix c_matrix); int c_dbcsr_nblkcols_total(const dbcsr_matrix c_matrix); int c_dbcsr_nblkrows_local(const dbcsr_matrix c_matrix); int c_dbcsr_nblkcols_local(const dbcsr_matrix c_matrix); void c_dbcsr_get_info(const dbcsr_matrix c_matrix, int* c_nblkrows_total, int* c_nblkcols_total, int* c_nfullrows_total, int* c_nfullcols_total, int* c_nblkrows_local, int* c_nblkcols_local, int* c_nfullrows_local, int* c_nfullcols_local, int* c_my_prow, int* c_my_pcol, int* c_local_rows, int* c_local_cols, int* c_proc_row_dist, int* c_proc_col_dist, int* c_row_blk_size, int* c_col_blk_size, int* c_row_blk_offset, int* c_col_blk_offset, dbcsr_distribution* c_distribution, char** c_name, char* c_matrix_type, int* c_data_type, int* c_group); #:set infovars =['local_rows', 'local_cols', 'proc_row_dist', 'proc_col_dist', & 'row_blk_size', 'col_blk_size', 'row_blk_offset', 'col_blk_offset'] #:for var in infovars void c_dbcsr_get_${var}$ (dbcsr_matrix c_matrix, int* c_${var}$, int c_size); #:endfor void c_dbcsr_get_name(dbcsr_matrix c_matrix, char** c_name); void c_dbcsr_get_group_aux(dbcsr_matrix c_matrix, MPI_Fint* fgroup); inline void c_dbcsr_get_group(dbcsr_matrix c_matrix, MPI_Comm* c_group) { MPI_Fint fgroup; c_dbcsr_get_group_aux(c_matrix, &fgroup); *c_group = MPI_Comm_f2c(fgroup); }; void c_dbcsr_get_distribution(dbcsr_matrix c_matrix, dbcsr_distribution* c_dist); void c_dbcsr_distribution_get_aux(const dbcsr_distribution c_dist, int** c_row_dist, int** c_col_dist, int* c_nrows, int* c_ncols, bool* c_has_threads, MPI_Fint* c_group, int* c_mynode, int* c_numnodes, int* c_nprows, int* c_npcols, int* c_myprow, int* c_mypcol, int** c_pgrid, bool* c_subgroups_defined, int* c_prow_group, int* c_pcol_group); inline void c_dbcsr_distribution_get(const dbcsr_distribution c_dist, int** c_row_dist, int** c_col_dist, int* c_nrows, int* c_ncols, bool* c_has_threads, MPI_Comm* c_group, int* c_mynode, int* c_numnodes, int* c_nprows, int* c_npcols, int* c_myprow, int* c_mypcol, int** c_pgrid, bool* c_subgroups_defined, int* c_prow_group, int* c_pcol_group) { MPI_Fint fgroup; c_dbcsr_distribution_get_aux(c_dist, c_row_dist, c_col_dist, c_nrows, c_ncols, c_has_threads, &fgroup, c_mynode, c_numnodes, c_nprows, c_npcols, c_myprow, c_mypcol, c_pgrid, c_subgroups_defined, c_prow_group, c_pcol_group); if (c_group != nullptr) *c_group = MPI_Comm_f2c(fgroup); } void c_dbcsr_get_stored_coordinates(const dbcsr_matrix matrix, const int row, const int col, int* processor); void c_dbcsr_setname(const dbcsr_matrix c_matrix, const char* c_newname); char c_dbcsr_get_matrix_type(const dbcsr_matrix c_matrix); double c_dbcsr_get_occupation(const dbcsr_matrix c_matrix); int c_dbcsr_get_num_blocks(const dbcsr_matrix c_matrix); int c_dbcsr_get_data_size(const dbcsr_matrix c_matrix); bool c_dbcsr_has_symmetry(const dbcsr_matrix c_matrix); int c_dbcsr_nfullrows_total(const dbcsr_matrix c_matrix); int c_dbcsr_nfullcols_total(const dbcsr_matrix c_matrix); bool c_dbcsr_valid_index(const dbcsr_matrix c_matrix); int c_dbcsr_get_data_type(const dbcsr_matrix c_matrix); //-----------------------------------------------! // other ! //-----------------------------------------------! void c_dbcsr_binary_write(const dbcsr_matrix c_matrix, const char* c_filepath); void c_dbcsr_binary_read(const char* c_filepath, dbcsr_distribution c_distribution, dbcsr_matrix* c_matrix_new); void c_free_string(char** c_string); #if defined(__cplusplus) } #endif #if defined(__cplusplus) // --------------------------------------------------- // // overloaded functions (cpp only) // // --------------------------------------------------- // #:for n_inst, nametype, base, prec, ctype, extype in c_exparams inline void c_dbcsr_set(dbcsr_matrix c_matrix, const ${extype}$ c_alpha) { c_dbcsr_set_${nametype}$(c_matrix, c_alpha); } inline void c_dbcsr_add(dbcsr_matrix c_matrix_a, const dbcsr_matrix c_matrix_b, const ${extype}$ c_alpha_scalar, const ${extype}$ c_beta_scalar) { c_dbcsr_add_${nametype}$(c_matrix_a, c_matrix_b, c_alpha_scalar, c_beta_scalar); } inline void c_dbcsr_scale(dbcsr_matrix c_matrix_a, const ${extype}$ c_alpha_scalar, const int* c_last_column) { c_dbcsr_scale_${nametype}$(c_matrix_a, c_alpha_scalar, c_last_column); } inline void c_dbcsr_scale_by_vector( const dbcsr_matrix c_matrix_a, const ${extype}$* c_alpha, const int c_alpha_size, const char* c_side) { c_dbcsr_scale_by_vector_${nametype}$(c_matrix_a, c_alpha, c_alpha_size, c_side); } inline void c_dbcsr_multiply(char c_transa, char c_transb, const ${extype}$ c_alpha, const dbcsr_matrix c_matrix_a, const dbcsr_matrix c_matrix_b, const ${extype}$ c_beta, dbcsr_matrix c_matrix_c, const int* c_first_row, const int* c_last_row, const int* c_first_column, const int* c_last_column, const int* c_first_k, const int* c_last_k, const bool* c_retain_sparsity, const double* c_filter_eps, long long int* c_flop) { c_dbcsr_multiply_${nametype}$(c_transa, c_transb, c_alpha, c_matrix_a, c_matrix_b, c_beta, c_matrix_c, c_first_row, c_last_row, c_first_column, c_last_column, c_first_k, c_last_k, c_retain_sparsity, c_filter_eps, c_flop); } inline void c_dbcsr_add_on_diag(dbcsr_matrix c_matrix, const ${extype}$ c_alpha_scalar) { c_dbcsr_add_on_diag_${nametype}$(c_matrix, c_alpha_scalar); } inline void c_dbcsr_set_diag(dbcsr_matrix c_matrix, const ${extype}$* c_diag, const int c_diag_size) { c_dbcsr_set_diag_${nametype}$(c_matrix, c_diag, c_diag_size); } inline void c_dbcsr_get_diag(const dbcsr_matrix c_matrix, ${extype}$* c_diag, const int c_diag_size) { c_dbcsr_get_diag_${nametype}$(c_matrix, c_diag, c_diag_size); } inline void c_dbcsr_trace(const dbcsr_matrix c_matrix_a, ${extype}$* c_trace) { c_dbcsr_trace_${nametype}$(c_matrix_a, c_trace); } inline void c_dbcsr_dot(const dbcsr_matrix c_matrix_a, const dbcsr_matrix c_matrix_b, ${extype}$* c_result) { c_dbcsr_dot_${nametype}$(c_matrix_a, c_matrix_b, c_result); } inline void c_dbcsr_get_block_p(const dbcsr_matrix c_matrix, const int c_row, const int c_col, ${extype}$** c_block, bool* c_tr, bool* c_found, int* c_row_size, int* c_col_size) { c_dbcsr_get_block_p_${nametype}$(c_matrix, c_row, c_col, c_block, c_tr, c_found, c_row_size, c_col_size); } inline void c_dbcsr_get_block_p(const dbcsr_matrix c_matrix, const int c_row, const int c_col, ${extype}$** c_block, bool* c_found, int* c_row_size, int* c_col_size) { c_dbcsr_get_block_notrans_p_${nametype}$(c_matrix, c_row, c_col, c_block, c_found, c_row_size, c_col_size); } inline void c_dbcsr_reserve_block2d(dbcsr_matrix c_matrix, const int c_row, const int c_col, const ${extype}$* c_block, const int c_row_size, const int c_col_size, const bool* c_transposed, bool* c_existed) { c_dbcsr_reserve_block2d_${nametype}$( c_matrix, c_row, c_col, c_block, c_row_size, c_col_size, c_transposed, c_existed); } inline void c_dbcsr_iterator_next_2d_block(const dbcsr_iterator c_iterator, int* c_row, int* c_column, ${extype}$** c_block, bool* c_transposed, int* c_block_number, int* c_row_size, int* c_col_size, int* c_row_offset, int* c_col_offset) { c_dbcsr_iterator_next_2d_block_${nametype}$(c_iterator, c_row, c_column, c_block, c_transposed, c_block_number, c_row_size, c_col_size, c_row_offset, c_col_offset); } inline void c_dbcsr_put_block2d(dbcsr_matrix c_matrix, const int c_row, const int c_col, const ${extype}$* c_block, const int c_row_size, const int c_col_size, const bool* c_summation, const ${extype}$* c_scale) { c_dbcsr_put_block2d_${nametype}$(c_matrix, c_row, c_col, c_block, c_row_size, c_col_size, c_summation, c_scale); } inline void c_dbcsr_get_data(const dbcsr_matrix c_matrix, ${extype}$** c_data, long long int* c_data_size, ${extype}$* c_select_data_type, int* c_lb, int* c_ub) { c_dbcsr_get_data_${nametype}$(c_matrix, c_data, c_data_size, c_select_data_type, c_lb, c_ub); } #:endfor #endif #endif ================================================ FILE: src/dbcsr_api.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_api !! This is the start of a dbcsr_api, all publicly needed functions !! are exported here. The others remain private to the library. !! Currently, this is the CP2K used set. !! Ultimately, a reduced subset and well defined api will remain, !! possibly grouped in to standard and expert api. !! Currently, this is work in progress. USE dbcsr_array_types, ONLY: array_data, & array_exists, & array_size USE dbcsr_block_access, ONLY: dbcsr_get_block_p_prv => dbcsr_get_block_p, & dbcsr_put_block_prv => dbcsr_put_block, & dbcsr_reserve_all_blocks_prv => dbcsr_reserve_all_blocks, & dbcsr_reserve_block2d_prv => dbcsr_reserve_block2d, & dbcsr_reserve_blocks_prv => dbcsr_reserve_blocks, & dbcsr_reserve_diag_blocks_prv => dbcsr_reserve_diag_blocks USE dbcsr_config, ONLY: dbcsr_get_default_config, & dbcsr_print_config, & dbcsr_set_config USE dbcsr_csr_conversions, ONLY: & convert_csr_to_dbcsr_prv => convert_csr_to_dbcsr, & convert_dbcsr_to_csr_prv => convert_dbcsr_to_csr, & csr_create_from_dbcsr_prv => csr_create_from_dbcsr, csr_create_new_prv => csr_create_new, & csr_create_template, dbcsr_csr_dbcsr_blkrow_dist => csr_dbcsr_blkrow_dist, & dbcsr_csr_destroy => csr_destroy, dbcsr_csr_eqrow_ceil_dist => csr_eqrow_ceil_dist, & dbcsr_csr_eqrow_floor_dist => csr_eqrow_floor_dist, dbcsr_csr_p_type => csr_p_type, & dbcsr_csr_print_sparsity => csr_print_sparsity, dbcsr_csr_type => csr_type, & dbcsr_csr_write => csr_write, & dbcsr_to_csr_filter_prv => dbcsr_to_csr_filter, csr_type USE dbcsr_data_methods, ONLY: dbcsr_get_data_p_prv => dbcsr_get_data_p, & dbcsr_scalar, & dbcsr_scalar_fill_all, & dbcsr_scalar_get_type, & dbcsr_scalar_get_value, & dbcsr_scalar_set_type, & dbcsr_scalar_zero USE dbcsr_dist_methods, ONLY: dbcsr_distribution_get_num_images => dbcsr_distribution_get_num_images_1d, & dbcsr_distribution_hold_prv => dbcsr_distribution_hold, & dbcsr_distribution_new_prv => dbcsr_distribution_new, & dbcsr_distribution_release_prv => dbcsr_distribution_release, & dbcsr_distribution_get_prv => dbcsr_distribution_get USE dbcsr_dist_operations, ONLY: dbcsr_get_stored_coordinates_prv => dbcsr_get_stored_coordinates USE dbcsr_io, ONLY: dbcsr_binary_read_prv => dbcsr_binary_read, & dbcsr_binary_write_prv => dbcsr_binary_write, & dbcsr_print_block_sum_prv => dbcsr_print_block_sum, & dbcsr_print_prv => dbcsr_print USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left_prv => dbcsr_iterator_blocks_left, & dbcsr_iterator_next_block_prv => dbcsr_iterator_next_block, & dbcsr_iterator_start_prv => dbcsr_iterator_start, & dbcsr_iterator_stop_prv => dbcsr_iterator_stop USE dbcsr_lib, ONLY: dbcsr_clear_mempools, & dbcsr_finalize_lib, & dbcsr_init_lib, dbcsr_print_statistics_prv => dbcsr_print_statistics USE dbcsr_methods, ONLY: & dbcsr_get_data_size_prv => dbcsr_get_data_size, & dbcsr_get_data_type_prv => dbcsr_get_data_type, & dbcsr_get_matrix_type_prv => dbcsr_get_matrix_type, & dbcsr_get_num_blocks_prv => dbcsr_get_num_blocks, & dbcsr_has_symmetry_prv => dbcsr_has_symmetry, & dbcsr_nblkcols_total_prv => dbcsr_nblkcols_total, & dbcsr_nblkrows_total_prv => dbcsr_nblkrows_total, & dbcsr_nblkcols_local_prv => dbcsr_nblkcols_local, & dbcsr_nblkrows_local_prv => dbcsr_nblkrows_local, & dbcsr_nfullcols_total_prv => dbcsr_nfullcols_total, & dbcsr_nfullrows_total_prv => dbcsr_nfullrows_total, & dbcsr_release_prv => dbcsr_release, & dbcsr_setname_prv => dbcsr_setname, & dbcsr_valid_index_prv => dbcsr_valid_index, dbcsr_wm_use_mutable USE dbcsr_mpiwrap, ONLY: mp_comm_type USE dbcsr_mp_methods, ONLY: dbcsr_mp_grid_setup_prv => dbcsr_mp_grid_setup USE dbcsr_multiply_api, ONLY: dbcsr_multiply_prv => dbcsr_multiply USE dbcsr_operations, ONLY: & dbcsr_add_on_diag_prv => dbcsr_add_on_diag, & dbcsr_add_prv => dbcsr_add, & dbcsr_copy_into_existing_prv => dbcsr_copy_into_existing, & dbcsr_copy_prv => dbcsr_copy, & dbcsr_filter_anytype, & dbcsr_frobenius_norm_prv => dbcsr_frobenius_norm, & dbcsr_function_of_elements_prv => dbcsr_function_of_elements, & dbcsr_gershgorin_norm_prv => dbcsr_gershgorin_norm, & dbcsr_get_block_diag_prv => dbcsr_get_block_diag, & dbcsr_get_diag_prv => dbcsr_get_diag, & dbcsr_get_info_prv => dbcsr_get_info, & dbcsr_get_occupation_prv => dbcsr_get_occupation, & dbcsr_hadamard_product_prv => dbcsr_hadamard_product, & dbcsr_init_random_prv => dbcsr_init_random, & dbcsr_maxabs_prv => dbcsr_maxabs, & dbcsr_norm_scalar_prv => dbcsr_norm_scalar, & dbcsr_norm_r8_vec_prv => dbcsr_norm_r8_vec, & dbcsr_scale_by_vector_prv => dbcsr_scale_by_vector, & dbcsr_scale_prv => dbcsr_scale, & dbcsr_set_diag_prv => dbcsr_set_diag, & dbcsr_set_prv => dbcsr_set, & dbcsr_sum_replicated_prv => dbcsr_sum_replicated, & dbcsr_trace_prv => dbcsr_trace, & dbcsr_dot_prv => dbcsr_dot, & dbcsr_triu_prv => dbcsr_triu, & dbcsr_clear_prv => dbcsr_clear, & dbcsr_add_block_node_prv => dbcsr_add_block_node, & dbcsr_conform_scalar_prv => dbcsr_conform_scalar USE dbcsr_test_methods, ONLY: dbcsr_reset_randmat_seed USE dbcsr_tests, ONLY: dbcsr_run_tests_prv => dbcsr_run_tests, & dbcsr_test_binary_io, & dbcsr_test_mm USE dbcsr_string_utilities, ONLY: uppercase USE dbcsr_transformations, ONLY: dbcsr_complete_redistribute_prv => dbcsr_complete_redistribute, & dbcsr_desymmetrize_deep_prv => dbcsr_desymmetrize_deep, & dbcsr_distribute_prv => dbcsr_distribute, & dbcsr_replicate_all_prv => dbcsr_replicate_all, & dbcsr_transposed_prv => dbcsr_transposed USE dbcsr_types, ONLY: & dbcsr_dist_prv_obj => dbcsr_distribution_obj, dbcsr_func_artanh, dbcsr_func_dtanh, & dbcsr_func_inverse, dbcsr_func_tanh, dbcsr_iterator_prv => dbcsr_iterator, dbcsr_mp_obj, & dbcsr_no_transpose, dbcsr_norm_column, dbcsr_norm_frobenius, dbcsr_norm_maxabsnorm, & dbcsr_prv_type => dbcsr_type, dbcsr_scalar_type, dbcsr_transpose, & dbcsr_type_antisymmetric, dbcsr_type_complex_4, dbcsr_type_complex_8, & dbcsr_type_complex_default, dbcsr_type_no_symmetry, dbcsr_type_real_4, dbcsr_type_real_8, & dbcsr_type_real_default, dbcsr_type_symmetric USE dbcsr_dist_util, ONLY: dbcsr_convert_offsets_to_sizes => convert_offsets_to_sizes, & dbcsr_convert_sizes_to_offsets => convert_sizes_to_offsets, & dbcsr_checksum_prv => dbcsr_checksum, & dbcsr_verify_matrix_prv => dbcsr_verify_matrix USE dbcsr_work_operations, ONLY: add_work_coordinate_prv => add_work_coordinate, & dbcsr_create_prv => dbcsr_create, & dbcsr_finalize_prv => dbcsr_finalize, & dbcsr_work_create_prv => dbcsr_work_create USE dbcsr_kinds, ONLY: default_string_length, & dp, & int_8, & real_4, & real_8 #include "base/dbcsr_base_uses.f90" IMPLICIT NONE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_api' ! constants PUBLIC :: dbcsr_type_no_symmetry PUBLIC :: dbcsr_type_symmetric PUBLIC :: dbcsr_type_antisymmetric PUBLIC :: dbcsr_transpose PUBLIC :: dbcsr_no_transpose PUBLIC :: dbcsr_type_complex_8 PUBLIC :: dbcsr_type_real_4 PUBLIC :: dbcsr_type_real_8 PUBLIC :: dbcsr_type_complex_4 PUBLIC :: dbcsr_type_complex_default PUBLIC :: dbcsr_type_real_default ! types PUBLIC :: dbcsr_type PUBLIC :: dbcsr_p_type PUBLIC :: dbcsr_distribution_type PUBLIC :: dbcsr_iterator_type PUBLIC :: dbcsr_scalar_type ! lib init/finalize PUBLIC :: dbcsr_clear_mempools PUBLIC :: dbcsr_init_lib PUBLIC :: dbcsr_finalize_lib PUBLIC :: dbcsr_set_config PUBLIC :: dbcsr_get_default_config PUBLIC :: dbcsr_print_config PUBLIC :: dbcsr_reset_randmat_seed PUBLIC :: dbcsr_mp_grid_setup PUBLIC :: dbcsr_print_statistics ! create / release PUBLIC :: dbcsr_distribution_hold PUBLIC :: dbcsr_distribution_release PUBLIC :: dbcsr_distribution_new PUBLIC :: dbcsr_create PUBLIC :: dbcsr_init_p PUBLIC :: dbcsr_release PUBLIC :: dbcsr_release_p PUBLIC :: dbcsr_deallocate_matrix ! primitive matrix operations PUBLIC :: dbcsr_set PUBLIC :: dbcsr_add PUBLIC :: dbcsr_scale PUBLIC :: dbcsr_scale_by_vector PUBLIC :: dbcsr_transposed PUBLIC :: dbcsr_multiply PUBLIC :: dbcsr_copy PUBLIC :: dbcsr_copy_into_existing PUBLIC :: dbcsr_desymmetrize PUBLIC :: dbcsr_add_on_diag PUBLIC :: dbcsr_get_block_diag PUBLIC :: dbcsr_set_diag PUBLIC :: dbcsr_get_diag PUBLIC :: dbcsr_filter PUBLIC :: dbcsr_trace PUBLIC :: dbcsr_dot PUBLIC :: dbcsr_complete_redistribute PUBLIC :: dbcsr_get_block_p PUBLIC :: dbcsr_clear ! block reservation PUBLIC :: dbcsr_reserve_diag_blocks PUBLIC :: dbcsr_reserve_block2d PUBLIC :: dbcsr_reserve_blocks PUBLIC :: dbcsr_reserve_all_blocks ! iterator PUBLIC :: dbcsr_iterator_start PUBLIC :: dbcsr_iterator_stop PUBLIC :: dbcsr_iterator_blocks_left PUBLIC :: dbcsr_iterator_next_block ! getters / setters PUBLIC :: dbcsr_get_info PUBLIC :: dbcsr_distribution_get PUBLIC :: dbcsr_setname PUBLIC :: dbcsr_get_matrix_type PUBLIC :: dbcsr_get_occupation PUBLIC :: dbcsr_nblkrows_total PUBLIC :: dbcsr_nblkcols_total PUBLIC :: dbcsr_nblkrows_local PUBLIC :: dbcsr_nblkcols_local PUBLIC :: dbcsr_get_num_blocks PUBLIC :: dbcsr_get_data_size PUBLIC :: dbcsr_has_symmetry PUBLIC :: dbcsr_nfullrows_total PUBLIC :: dbcsr_nfullcols_total PUBLIC :: dbcsr_get_stored_coordinates PUBLIC :: dbcsr_valid_index PUBLIC :: dbcsr_get_data_type ! work operations PUBLIC :: dbcsr_add_block_node PUBLIC :: dbcsr_put_block PUBLIC :: dbcsr_work_create PUBLIC :: dbcsr_verify_matrix PUBLIC :: dbcsr_add_work_coordinate PUBLIC :: dbcsr_get_wms_data_p PUBLIC :: dbcsr_get_data_p PUBLIC :: dbcsr_set_work_size PUBLIC :: dbcsr_finalize ! replication PUBLIC :: dbcsr_replicate_all PUBLIC :: dbcsr_sum_replicated PUBLIC :: dbcsr_distribute ! misc PUBLIC :: dbcsr_distribution_get_num_images PUBLIC :: dbcsr_convert_offsets_to_sizes PUBLIC :: dbcsr_convert_sizes_to_offsets PUBLIC :: dbcsr_run_tests PUBLIC :: dbcsr_test_mm PUBLIC :: dbcsr_scalar ! high level matrix functions PUBLIC :: dbcsr_norm_frobenius PUBLIC :: dbcsr_norm_maxabsnorm PUBLIC :: dbcsr_norm_column PUBLIC :: dbcsr_hadamard_product PUBLIC :: dbcsr_func_artanh PUBLIC :: dbcsr_func_dtanh PUBLIC :: dbcsr_func_inverse PUBLIC :: dbcsr_func_tanh PUBLIC :: dbcsr_print PUBLIC :: dbcsr_print_block_sum PUBLIC :: dbcsr_checksum PUBLIC :: dbcsr_maxabs PUBLIC :: dbcsr_norm PUBLIC :: dbcsr_gershgorin_norm PUBLIC :: dbcsr_frobenius_norm PUBLIC :: dbcsr_init_random PUBLIC :: dbcsr_function_of_elements PUBLIC :: dbcsr_triu ! csr conversion PUBLIC :: dbcsr_csr_type PUBLIC :: dbcsr_csr_p_type PUBLIC :: dbcsr_convert_csr_to_dbcsr PUBLIC :: dbcsr_convert_dbcsr_to_csr PUBLIC :: dbcsr_csr_create_from_dbcsr PUBLIC :: dbcsr_csr_destroy PUBLIC :: dbcsr_csr_create PUBLIC :: dbcsr_csr_eqrow_floor_dist PUBLIC :: dbcsr_csr_eqrow_ceil_dist PUBLIC :: dbcsr_csr_dbcsr_blkrow_dist PUBLIC :: dbcsr_csr_print_sparsity PUBLIC :: dbcsr_to_csr_filter PUBLIC :: dbcsr_csr_write ! binary io PUBLIC :: dbcsr_binary_write PUBLIC :: dbcsr_binary_read PUBLIC :: dbcsr_test_binary_io ! ----------------------------------------------------------------------------------------------- TYPE dbcsr_type TYPE(dbcsr_prv_type), PRIVATE :: prv = dbcsr_prv_type() END TYPE dbcsr_type TYPE dbcsr_p_type TYPE(dbcsr_type), POINTER :: matrix => Null() END TYPE dbcsr_p_type ! the components of this type must remain private to encapsulate better the internals ! of the dbcsr library. TYPE dbcsr_distribution_type TYPE(dbcsr_dist_prv_obj), PRIVATE :: prv = dbcsr_dist_prv_obj() END TYPE dbcsr_distribution_type TYPE dbcsr_iterator_type TYPE(dbcsr_iterator_prv), PRIVATE :: prv = dbcsr_iterator_prv() END TYPE dbcsr_iterator_type INTERFACE dbcsr_create MODULE PROCEDURE dbcsr_create_new, dbcsr_create_template END INTERFACE INTERFACE dbcsr_trace MODULE PROCEDURE dbcsr_trace_d, dbcsr_trace_s MODULE PROCEDURE dbcsr_trace_z, dbcsr_trace_c END INTERFACE INTERFACE dbcsr_dot MODULE PROCEDURE dbcsr_dot_d, dbcsr_dot_s MODULE PROCEDURE dbcsr_dot_z, dbcsr_dot_c END INTERFACE INTERFACE dbcsr_set MODULE PROCEDURE dbcsr_set_d, dbcsr_set_s, dbcsr_set_c, dbcsr_set_z END INTERFACE INTERFACE dbcsr_add MODULE PROCEDURE dbcsr_add_d, dbcsr_add_s, dbcsr_add_c, dbcsr_add_z END INTERFACE INTERFACE dbcsr_add_on_diag MODULE PROCEDURE dbcsr_add_on_diag_d, dbcsr_add_on_diag_s MODULE PROCEDURE dbcsr_add_on_diag_c, dbcsr_add_on_diag_z END INTERFACE INTERFACE dbcsr_get_diag MODULE PROCEDURE dbcsr_get_diag_d, dbcsr_get_diag_s MODULE PROCEDURE dbcsr_get_diag_c, dbcsr_get_diag_z END INTERFACE INTERFACE dbcsr_set_diag MODULE PROCEDURE dbcsr_set_diag_d, dbcsr_set_diag_s MODULE PROCEDURE dbcsr_set_diag_c, dbcsr_set_diag_z END INTERFACE INTERFACE dbcsr_scale MODULE PROCEDURE dbcsr_scale_d, dbcsr_scale_s, dbcsr_scale_c, dbcsr_scale_z END INTERFACE INTERFACE dbcsr_scale_by_vector MODULE PROCEDURE dbcsr_scale_by_vector_d, dbcsr_scale_by_vector_s MODULE PROCEDURE dbcsr_scale_by_vector_c, dbcsr_scale_by_vector_z END INTERFACE INTERFACE dbcsr_multiply MODULE PROCEDURE dbcsr_multiply_d, dbcsr_multiply_s, dbcsr_multiply_c, dbcsr_multiply_z END INTERFACE INTERFACE dbcsr_get_block_p MODULE PROCEDURE dbcsr_get_block_p_d, dbcsr_get_block_p_s MODULE PROCEDURE dbcsr_get_block_p_z, dbcsr_get_block_p_c MODULE PROCEDURE dbcsr_get_2d_block_p_d, dbcsr_get_2d_block_p_s MODULE PROCEDURE dbcsr_get_2d_block_p_z, dbcsr_get_2d_block_p_c MODULE PROCEDURE dbcsr_get_block_notrans_p_d, dbcsr_get_block_notrans_p_s MODULE PROCEDURE dbcsr_get_block_notrans_p_z, dbcsr_get_block_notrans_p_c MODULE PROCEDURE dbcsr_get_2d_block_notrans_p_d, dbcsr_get_2d_block_notrans_p_s MODULE PROCEDURE dbcsr_get_2d_block_notrans_p_z, dbcsr_get_2d_block_notrans_p_c END INTERFACE INTERFACE dbcsr_put_block MODULE PROCEDURE dbcsr_put_block_d, dbcsr_put_block_s, dbcsr_put_block_z, dbcsr_put_block_c MODULE PROCEDURE dbcsr_put_block2d_d, dbcsr_put_block2d_s, dbcsr_put_block2d_z, dbcsr_put_block2d_c END INTERFACE INTERFACE dbcsr_iterator_next_block MODULE PROCEDURE dbcsr_iterator_next_block_index MODULE PROCEDURE dbcsr_iterator_next_2d_block_d, dbcsr_iterator_next_2d_block_s MODULE PROCEDURE dbcsr_iterator_next_2d_block_c, dbcsr_iterator_next_2d_block_z MODULE PROCEDURE dbcsr_iterator_next_1d_block_d, dbcsr_iterator_next_1d_block_s MODULE PROCEDURE dbcsr_iterator_next_1d_block_c, dbcsr_iterator_next_1d_block_z MODULE PROCEDURE dbcsr_iterator_next_2d_block_notrans_d, dbcsr_iterator_next_2d_block_notrans_s MODULE PROCEDURE dbcsr_iterator_next_2d_block_notrans_c, dbcsr_iterator_next_2d_block_notrans_z MODULE PROCEDURE dbcsr_iterator_next_1d_block_notrans_d, dbcsr_iterator_next_1d_block_notrans_s MODULE PROCEDURE dbcsr_iterator_next_1d_block_notrans_c, dbcsr_iterator_next_1d_block_notrans_z END INTERFACE INTERFACE dbcsr_reserve_block2d MODULE PROCEDURE dbcsr_reserve_block2d_d, dbcsr_reserve_block2d_s MODULE PROCEDURE dbcsr_reserve_block2d_c, dbcsr_reserve_block2d_z END INTERFACE INTERFACE dbcsr_csr_create MODULE PROCEDURE csr_create_new, csr_create_template END INTERFACE INTERFACE dbcsr_get_wms_data_p MODULE PROCEDURE dbcsr_get_wms_data_s, dbcsr_get_wms_data_c MODULE PROCEDURE dbcsr_get_wms_data_d, dbcsr_get_wms_data_z END INTERFACE INTERFACE dbcsr_get_data_p MODULE PROCEDURE dbcsr_get_data_s, dbcsr_get_data_c, dbcsr_get_data_d, dbcsr_get_data_z END INTERFACE INTERFACE dbcsr_norm MODULE PROCEDURE dbcsr_norm_scalar MODULE PROCEDURE dbcsr_norm_r8_vec END INTERFACE dbcsr_norm PRIVATE CONTAINS SUBROUTINE dbcsr_mp_grid_setup(dist) TYPE(dbcsr_distribution_type), INTENT(INOUT) :: dist CALL dbcsr_mp_grid_setup_prv(dist%prv%d%mp_env) END SUBROUTINE dbcsr_mp_grid_setup SUBROUTINE dbcsr_setname(matrix, newname) TYPE(dbcsr_type), INTENT(INOUT) :: matrix CHARACTER(len=*), INTENT(IN) :: newname CALL dbcsr_setname_prv(matrix%prv, newname) END SUBROUTINE dbcsr_setname FUNCTION dbcsr_gershgorin_norm(matrix) RESULT(norm) TYPE(dbcsr_type), INTENT(INOUT) :: matrix REAL(KIND=real_8) :: norm norm = dbcsr_gershgorin_norm_prv(matrix%prv) END FUNCTION dbcsr_gershgorin_norm FUNCTION dbcsr_frobenius_norm(matrix, local) RESULT(norm) TYPE(dbcsr_type), INTENT(INOUT) :: matrix LOGICAL, INTENT(in), OPTIONAL :: local REAL(KIND=real_8) :: norm norm = dbcsr_frobenius_norm_prv(matrix%prv, local) END FUNCTION dbcsr_frobenius_norm FUNCTION dbcsr_maxabs(matrix) RESULT(norm) TYPE(dbcsr_type), INTENT(INOUT) :: matrix REAL(KIND=real_8) :: norm norm = dbcsr_maxabs_prv(matrix%prv) END FUNCTION dbcsr_maxabs SUBROUTINE dbcsr_complete_redistribute(matrix, redist, keep_sparsity, summation) TYPE(dbcsr_type), INTENT(IN) :: matrix TYPE(dbcsr_type), INTENT(INOUT) :: redist LOGICAL, INTENT(IN), OPTIONAL :: keep_sparsity, summation CALL dbcsr_complete_redistribute_prv(matrix%prv, redist%prv, keep_sparsity, summation) END SUBROUTINE dbcsr_complete_redistribute SUBROUTINE dbcsr_reserve_blocks(matrix, rows, cols, blk_pointers) TYPE(dbcsr_type), INTENT(INOUT) :: matrix INTEGER, DIMENSION(:), INTENT(IN) :: rows, cols INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: blk_pointers CALL dbcsr_reserve_blocks_prv(matrix%prv, rows, cols, blk_pointers) END SUBROUTINE dbcsr_reserve_blocks SUBROUTINE dbcsr_reserve_all_blocks(matrix) TYPE(dbcsr_type), INTENT(INOUT) :: matrix CALL dbcsr_reserve_all_blocks_prv(matrix%prv) END SUBROUTINE dbcsr_reserve_all_blocks SUBROUTINE dbcsr_reserve_diag_blocks(matrix) TYPE(dbcsr_type), INTENT(INOUT) :: matrix CALL dbcsr_reserve_diag_blocks_prv(matrix%prv) END SUBROUTINE dbcsr_reserve_diag_blocks SUBROUTINE dbcsr_add_work_coordinate(matrix, index_matrix, row, col, blk, index) TYPE(dbcsr_type), INTENT(INOUT) :: matrix INTEGER, INTENT(IN) :: index_matrix, row, col INTEGER, INTENT(IN), OPTIONAL :: blk INTEGER, INTENT(OUT), OPTIONAL :: index CALL add_work_coordinate_prv(matrix%prv%wms(index_matrix), row, col, blk, index) END SUBROUTINE dbcsr_add_work_coordinate SUBROUTINE dbcsr_set_work_size(matrix, index_matrix, newvalue) TYPE(dbcsr_type), INTENT(INOUT) :: matrix INTEGER, INTENT(IN) :: index_matrix, newvalue matrix%prv%wms(index_matrix)%datasize = newvalue END SUBROUTINE dbcsr_set_work_size SUBROUTINE dbcsr_init_random(matrix, keep_sparsity, mini_seed) TYPE(dbcsr_type), INTENT(INOUT) :: matrix LOGICAL, OPTIONAL :: keep_sparsity INTEGER, INTENT(IN), OPTIONAL :: mini_seed CALL dbcsr_init_random_prv(matrix%prv, keep_sparsity=keep_sparsity, mini_seed=mini_seed) END SUBROUTINE dbcsr_init_random PURE FUNCTION dbcsr_get_data_type(matrix) RESULT(data_type) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: data_type data_type = dbcsr_get_data_type_prv(matrix%prv) END FUNCTION dbcsr_get_data_type PURE FUNCTION dbcsr_valid_index(matrix) RESULT(valid_index) TYPE(dbcsr_type), INTENT(IN) :: matrix LOGICAL :: valid_index valid_index = dbcsr_valid_index_prv(matrix%prv) END FUNCTION dbcsr_valid_index SUBROUTINE dbcsr_get_stored_coordinates(matrix, row, column, processor) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: row, column INTEGER, INTENT(OUT), OPTIONAL :: processor CALL dbcsr_get_stored_coordinates_prv(matrix%prv, row, column, processor) END SUBROUTINE dbcsr_get_stored_coordinates PURE FUNCTION dbcsr_get_num_blocks(matrix) RESULT(num_blocks) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: num_blocks num_blocks = dbcsr_get_num_blocks_prv(matrix%prv) END FUNCTION dbcsr_get_num_blocks FUNCTION dbcsr_get_data_size(matrix) RESULT(data_size) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: data_size data_size = dbcsr_get_data_size_prv(matrix%prv) END FUNCTION dbcsr_get_data_size PURE FUNCTION dbcsr_get_matrix_type(matrix) RESULT(matrix_type) TYPE(dbcsr_type), INTENT(IN) :: matrix CHARACTER :: matrix_type matrix_type = dbcsr_get_matrix_type_prv(matrix%prv) END FUNCTION dbcsr_get_matrix_type FUNCTION dbcsr_get_occupation(matrix) RESULT(occupation) TYPE(dbcsr_type), INTENT(IN) :: matrix REAL(KIND=real_8) :: occupation occupation = dbcsr_get_occupation_prv(matrix%prv) END FUNCTION dbcsr_get_occupation FUNCTION dbcsr_nblkrows_total(matrix) RESULT(nblkrows_total) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: nblkrows_total nblkrows_total = dbcsr_nblkrows_total_prv(matrix%prv) END FUNCTION dbcsr_nblkrows_total FUNCTION dbcsr_nblkcols_total(matrix) RESULT(nblkcols_total) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: nblkcols_total nblkcols_total = dbcsr_nblkcols_total_prv(matrix%prv) END FUNCTION dbcsr_nblkcols_total FUNCTION dbcsr_nblkrows_local(matrix) RESULT(nblkrows_local) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: nblkrows_local nblkrows_local = dbcsr_nblkrows_local_prv(matrix%prv) END FUNCTION dbcsr_nblkrows_local FUNCTION dbcsr_nblkcols_local(matrix) RESULT(nblkcols_local) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: nblkcols_local nblkcols_local = dbcsr_nblkcols_local_prv(matrix%prv) END FUNCTION dbcsr_nblkcols_local FUNCTION dbcsr_nfullrows_total(matrix) RESULT(nfullrows_total) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: nfullrows_total nfullrows_total = dbcsr_nfullrows_total_prv(matrix%prv) END FUNCTION dbcsr_nfullrows_total FUNCTION dbcsr_nfullcols_total(matrix) RESULT(nfullcols_total) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: nfullcols_total nfullcols_total = dbcsr_nfullcols_total_prv(matrix%prv) END FUNCTION dbcsr_nfullcols_total PURE FUNCTION dbcsr_iterator_blocks_left(iterator) RESULT(blocks_left) TYPE(dbcsr_iterator_type), INTENT(IN) :: iterator LOGICAL :: blocks_left blocks_left = dbcsr_iterator_blocks_left_prv(iterator%prv) END FUNCTION dbcsr_iterator_blocks_left SUBROUTINE dbcsr_iterator_stop(iterator) TYPE(dbcsr_iterator_type), INTENT(INOUT) :: iterator CALL dbcsr_iterator_stop_prv(iterator%prv) END SUBROUTINE dbcsr_iterator_stop SUBROUTINE dbcsr_iterator_start(iterator, matrix, shared, dynamic, & dynamic_byrows, contiguous_pointers, read_only) TYPE(dbcsr_iterator_type), INTENT(OUT) :: iterator TYPE(dbcsr_type), INTENT(IN) :: matrix LOGICAL, INTENT(IN), OPTIONAL :: shared, dynamic, dynamic_byrows, & contiguous_pointers, read_only CALL dbcsr_iterator_start_prv(iterator%prv, matrix%prv, shared, dynamic, & dynamic_byrows, contiguous_pointers, read_only) END SUBROUTINE dbcsr_iterator_start SUBROUTINE dbcsr_iterator_next_block_index(iterator, row, column, blk, blk_p) !! Gets the index information of the next block, no data. TYPE(dbcsr_iterator_type), INTENT(INOUT) :: iterator !! the iterator INTEGER, INTENT(OUT) :: row, column, blk !! row of the data block !! column of the data block !! block number INTEGER, INTENT(OUT), OPTIONAL :: blk_p !! index into block data array CALL dbcsr_iterator_next_block_prv(iterator%prv, row=row, column=column, blk=blk, blk_p=blk_p) END SUBROUTINE dbcsr_iterator_next_block_index SUBROUTINE dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, & nfullrows_total, nfullcols_total, & nblkrows_local, nblkcols_local, & nfullrows_local, nfullcols_local, & my_prow, my_pcol, & local_rows, local_cols, proc_row_dist, proc_col_dist, & row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, & distribution, name, matrix_type, data_type, & group) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER, INTENT(OUT), OPTIONAL :: nblkrows_total, nblkcols_total, nfullrows_total, & nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, & my_prow, my_pcol INTEGER, DIMENSION(:), OPTIONAL, POINTER :: local_rows, local_cols, proc_row_dist, & proc_col_dist, & row_blk_size, col_blk_size, & row_blk_offset, col_blk_offset TYPE(dbcsr_distribution_type), INTENT(OUT), & OPTIONAL :: distribution CHARACTER(len=*), INTENT(OUT), OPTIONAL :: name CHARACTER, INTENT(OUT), OPTIONAL :: matrix_type INTEGER, INTENT(OUT), OPTIONAL :: data_type, group TYPE(dbcsr_dist_prv_obj) :: dist TYPE(mp_comm_type) :: my_group CALL dbcsr_get_info_prv(matrix=matrix%prv, & nblkrows_total=nblkrows_total, & nblkcols_total=nblkcols_total, & nfullrows_total=nfullrows_total, & nfullcols_total=nfullcols_total, & nblkrows_local=nblkrows_local, & nblkcols_local=nblkcols_local, & nfullrows_local=nfullrows_local, & nfullcols_local=nfullcols_local, & my_prow=my_prow, & my_pcol=my_pcol, & local_rows=local_rows, & local_cols=local_cols, & proc_row_dist=proc_row_dist, & proc_col_dist=proc_col_dist, & row_blk_size=row_blk_size, & col_blk_size=col_blk_size, & row_blk_offset=row_blk_offset, & col_blk_offset=col_blk_offset, & distribution=dist, & name=name, & matrix_type=matrix_type, & data_type=data_type, & group=my_group) IF (PRESENT(distribution)) THEN distribution%prv = dist END IF IF (PRESENT(group)) group = my_group%get_handle() END SUBROUTINE dbcsr_get_info SUBROUTINE dbcsr_distribution_get(dist, row_dist, col_dist, & nrows, ncols, has_threads, & group, mynode, numnodes, nprows, npcols, myprow, mypcol, pgrid, & subgroups_defined, prow_group, pcol_group) TYPE(dbcsr_distribution_type), INTENT(IN) :: dist INTEGER, DIMENSION(:), OPTIONAL, POINTER :: row_dist, col_dist INTEGER, INTENT(OUT), OPTIONAL :: nrows, ncols LOGICAL, INTENT(OUT), OPTIONAL :: has_threads INTEGER, INTENT(OUT), OPTIONAL :: group, mynode, numnodes, nprows, npcols, & myprow, mypcol INTEGER, DIMENSION(:, :), OPTIONAL, POINTER :: pgrid LOGICAL, INTENT(OUT), OPTIONAL :: subgroups_defined INTEGER, INTENT(OUT), OPTIONAL :: prow_group, pcol_group TYPE(mp_comm_type) :: my_group, my_prow_group, my_pcol_group call dbcsr_distribution_get_prv(dist%prv, row_dist, col_dist, & nrows, ncols, has_threads, & my_group, mynode, numnodes, nprows, npcols, myprow, mypcol, pgrid, & subgroups_defined, my_prow_group, my_pcol_group) IF (PRESENT(group)) group = my_group%get_handle() IF (PRESENT(prow_group)) prow_group = my_prow_group%get_handle() IF (PRESENT(pcol_group)) pcol_group = my_pcol_group%get_handle() END SUBROUTINE dbcsr_distribution_get SUBROUTINE dbcsr_distribution_hold(dist) TYPE(dbcsr_distribution_type) :: dist CALL dbcsr_distribution_hold_prv(dist%prv) END SUBROUTINE dbcsr_distribution_hold SUBROUTINE dbcsr_distribution_release(dist) TYPE(dbcsr_distribution_type) :: dist CALL dbcsr_distribution_release_prv(dist%prv) END SUBROUTINE dbcsr_distribution_release SUBROUTINE dbcsr_norm_scalar(matrix, which_norm, norm_scalar) TYPE(dbcsr_type), INTENT(INOUT), TARGET :: matrix INTEGER, INTENT(IN) :: which_norm REAL(dp), INTENT(OUT) :: norm_scalar CALL dbcsr_norm_scalar_prv(matrix%prv, which_norm, norm_scalar) END SUBROUTINE dbcsr_norm_scalar SUBROUTINE dbcsr_norm_r8_vec(matrix, which_norm, norm_vector) TYPE(dbcsr_type), INTENT(INOUT), TARGET :: matrix INTEGER, INTENT(IN) :: which_norm REAL(dp), DIMENSION(:), INTENT(OUT) :: norm_vector CALL dbcsr_norm_r8_vec_prv(matrix%prv, which_norm, norm_vector) END SUBROUTINE dbcsr_norm_r8_vec SUBROUTINE dbcsr_replicate_all(matrix) TYPE(dbcsr_type), INTENT(INOUT) :: matrix CALL dbcsr_replicate_all_prv(matrix%prv) END SUBROUTINE dbcsr_replicate_all SUBROUTINE dbcsr_distribute(matrix, fast) TYPE(dbcsr_type), INTENT(INOUT) :: matrix LOGICAL, INTENT(in), OPTIONAL :: fast CALL dbcsr_distribute_prv(matrix%prv, fast) END SUBROUTINE dbcsr_distribute SUBROUTINE dbcsr_release_p(matrix) TYPE(dbcsr_type), POINTER :: matrix IF (ASSOCIATED(matrix)) THEN CALL dbcsr_release(matrix) DEALLOCATE (matrix) END IF END SUBROUTINE dbcsr_release_p SUBROUTINE dbcsr_release(matrix) TYPE(dbcsr_type), INTENT(INOUT) :: matrix CALL dbcsr_release_prv(matrix%prv) END SUBROUTINE dbcsr_release SUBROUTINE dbcsr_init_p(matrix) TYPE(dbcsr_type), POINTER :: matrix IF (ASSOCIATED(matrix)) THEN CALL dbcsr_release(matrix) DEALLOCATE (matrix) END IF ALLOCATE (matrix) END SUBROUTINE dbcsr_init_p SUBROUTINE dbcsr_print(matrix, nodata, matlab_format, variable_name, unit_nr) TYPE(dbcsr_type), INTENT(IN) :: matrix LOGICAL, INTENT(IN), OPTIONAL :: nodata, matlab_format CHARACTER(*), INTENT(in), OPTIONAL :: variable_name INTEGER, OPTIONAL :: unit_nr CALL dbcsr_print_prv(matrix%prv, nodata, matlab_format, variable_name, unit_nr) END SUBROUTINE dbcsr_print SUBROUTINE dbcsr_print_block_sum(matrix, unit_nr) !! Prints the sum of the elements in each block TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER, OPTIONAL :: unit_nr CALL dbcsr_print_block_sum_prv(matrix%prv, unit_nr) END SUBROUTINE dbcsr_print_block_sum FUNCTION dbcsr_checksum(matrix, local, pos) RESULT(checksum) TYPE(dbcsr_type), INTENT(IN) :: matrix LOGICAL, INTENT(IN), OPTIONAL :: local, pos REAL(KIND=dp) :: checksum checksum = dbcsr_checksum_prv(matrix%prv, local=local, pos=pos) END FUNCTION dbcsr_checksum SUBROUTINE dbcsr_sum_replicated(matrix) TYPE(dbcsr_type), INTENT(inout) :: matrix CALL dbcsr_sum_replicated_prv(matrix%prv) END SUBROUTINE dbcsr_sum_replicated SUBROUTINE dbcsr_triu(matrix) TYPE(dbcsr_type), INTENT(INOUT) :: matrix CALL dbcsr_triu_prv(matrix%prv) END SUBROUTINE dbcsr_triu SUBROUTINE dbcsr_verify_matrix(matrix, verbosity, local) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER, INTENT(IN), OPTIONAL :: verbosity LOGICAL, INTENT(IN), OPTIONAL :: local CALL dbcsr_verify_matrix_prv(matrix%prv, verbosity, local) END SUBROUTINE dbcsr_verify_matrix SUBROUTINE dbcsr_distribution_new(dist, template, group, pgrid, row_dist, col_dist, & reuse_arrays) !! Creates new distribution from blockr distributions TYPE(dbcsr_distribution_type), INTENT(OUT) :: dist !! distribution TYPE(dbcsr_distribution_type), INTENT(IN), & OPTIONAL :: template INTEGER, INTENT(IN), OPTIONAL :: group INTEGER, DIMENSION(:, :), OPTIONAL, POINTER :: pgrid INTEGER, DIMENSION(:), INTENT(INOUT), POINTER :: row_dist, col_dist LOGICAL, INTENT(IN), OPTIONAL :: reuse_arrays INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: cont_row_dist, cont_col_dist TYPE(mp_comm_type) :: my_mp_group ! Make the arrays contiguous, avoid change in the API ALLOCATE (cont_row_dist(SIZE(row_dist)), cont_col_dist(SIZE(col_dist))) cont_row_dist(:) = row_dist(:) cont_col_dist(:) = col_dist(:) IF (PRESENT(reuse_arrays)) THEN IF (reuse_arrays) THEN DEALLOCATE (row_dist, col_dist) NULLIFY (row_dist, col_dist) END IF END IF IF (PRESENT(group)) THEN CALL my_mp_group%set_handle(group) IF (PRESENT(template)) THEN call dbcsr_distribution_new_prv(dist%prv, template%prv, my_mp_group, pgrid, cont_row_dist, cont_col_dist, & reuse_arrays=.TRUE.) ELSE call dbcsr_distribution_new_prv(dist%prv, group=my_mp_group, pgrid=pgrid, & row_dist=cont_row_dist, col_dist=cont_col_dist, & reuse_arrays=.TRUE.) END IF ELSE IF (PRESENT(template)) THEN call dbcsr_distribution_new_prv(dist%prv, template%prv, pgrid=pgrid, row_dist=cont_row_dist, col_dist=cont_col_dist, & reuse_arrays=.TRUE.) ELSE call dbcsr_distribution_new_prv(dist%prv, pgrid=pgrid, & row_dist=cont_row_dist, col_dist=cont_col_dist, & reuse_arrays=.TRUE.) END IF END IF END SUBROUTINE dbcsr_distribution_new SUBROUTINE dbcsr_print_statistics(print_timers, callgraph_filename) !! Print statistics LOGICAL, INTENT(IN), OPTIONAL :: print_timers CHARACTER(len=*), INTENT(IN), OPTIONAL :: callgraph_filename CALL dbcsr_print_statistics_prv(print_timers, callgraph_filename) END SUBROUTINE dbcsr_print_statistics SUBROUTINE dbcsr_finalize(matrix, reshuffle) TYPE(dbcsr_type), INTENT(INOUT) :: matrix LOGICAL, INTENT(IN), OPTIONAL :: reshuffle CALL dbcsr_finalize_prv(matrix%prv, reshuffle) END SUBROUTINE dbcsr_finalize SUBROUTINE dbcsr_work_create(matrix, nblks_guess, sizedata_guess, n, work_mutable) TYPE(dbcsr_type), INTENT(INOUT) :: matrix INTEGER, INTENT(IN), OPTIONAL :: nblks_guess, sizedata_guess, n LOGICAL, INTENT(in), OPTIONAL :: work_mutable CALL dbcsr_work_create_prv(matrix%prv, nblks_guess, sizedata_guess, n, work_mutable) END SUBROUTINE dbcsr_work_create SUBROUTINE dbcsr_create_new(matrix, name, dist, matrix_type, & row_blk_size, col_blk_size, nze, data_type, reuse, & reuse_arrays, mutable_work, replication_type) TYPE(dbcsr_type), INTENT(INOUT) :: matrix CHARACTER(len=*), INTENT(IN) :: name TYPE(dbcsr_distribution_type), INTENT(IN) :: dist CHARACTER, INTENT(IN) :: matrix_type INTEGER, DIMENSION(:), INTENT(INOUT), POINTER :: row_blk_size, col_blk_size INTEGER, INTENT(IN), OPTIONAL :: nze, data_type LOGICAL, INTENT(IN), OPTIONAL :: reuse, reuse_arrays, mutable_work CHARACTER, INTENT(IN), OPTIONAL :: replication_type INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: cont_row_blk_size, cont_col_blk_size ! Make the array contiguous, avoid to change API ALLOCATE (cont_row_blk_size(SIZE(row_blk_size)), cont_col_blk_size(SIZE(col_blk_size))) cont_row_blk_size(:) = row_blk_size(:) cont_col_blk_size(:) = col_blk_size(:) IF (PRESENT(reuse_arrays)) THEN IF (reuse_arrays) THEN DEALLOCATE (row_blk_size, col_blk_size) NULLIFY (row_blk_size, col_blk_size) END IF END IF CALL dbcsr_create_prv(matrix%prv, name, dist%prv, & matrix_type, & cont_row_blk_size, cont_col_blk_size, nze=nze, & data_type=data_type, reuse=reuse, & reuse_arrays=.TRUE., & mutable_work=mutable_work, replication_type=replication_type) END SUBROUTINE dbcsr_create_new SUBROUTINE dbcsr_create_template(matrix, name, template, & dist, matrix_type, & row_blk_size, col_blk_size, nze, data_type, & reuse_arrays, mutable_work, replication_type) TYPE(dbcsr_type), INTENT(INOUT) :: matrix CHARACTER(len=*), INTENT(IN), OPTIONAL :: name TYPE(dbcsr_type), INTENT(IN) :: template TYPE(dbcsr_distribution_type), INTENT(IN), & OPTIONAL :: dist CHARACTER, INTENT(IN), OPTIONAL :: matrix_type INTEGER, DIMENSION(:), INTENT(INOUT), OPTIONAL, & POINTER :: row_blk_size, col_blk_size INTEGER, INTENT(IN), OPTIONAL :: nze, data_type LOGICAL, INTENT(IN), OPTIONAL :: reuse_arrays, mutable_work CHARACTER, INTENT(IN), OPTIONAL :: replication_type INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: cont_row_blk_size, cont_col_blk_size IF (PRESENT(row_blk_size) .NEQV. PRESENT(col_blk_size)) THEN DBCSR_ABORT("Both row_blk_size and col_blk_size must be provided!") END IF ! Make the array contiguous, avoid to change API IF (PRESENT(row_blk_size)) THEN ! Avoid to change API ALLOCATE (cont_row_blk_size(SIZE(row_blk_size)), cont_col_blk_size(SIZE(col_blk_size))) cont_row_blk_size(:) = row_blk_size(:) cont_col_blk_size(:) = col_blk_size(:) IF (PRESENT(reuse_arrays)) THEN IF (reuse_arrays) THEN DEALLOCATE (row_blk_size, col_blk_size) NULLIFY (row_blk_size, col_blk_size) END IF END IF END IF IF (PRESENT(dist)) THEN IF (PRESENT(row_blk_size)) THEN CALL dbcsr_create_prv(matrix%prv, template%prv, name, & dist%prv, matrix_type, & row_blk_size=cont_row_blk_size, col_blk_size=cont_col_blk_size, & nze=nze, data_type=data_type, & reuse_arrays=.TRUE., mutable_work=mutable_work, & replication_type=replication_type) ELSE CALL dbcsr_create_prv(matrix%prv, template%prv, name, & dist%prv, matrix_type, & nze=nze, data_type=data_type, & reuse_arrays=reuse_arrays, mutable_work=mutable_work, & replication_type=replication_type) END IF ELSE IF (PRESENT(row_blk_size)) THEN CALL dbcsr_create_prv(matrix%prv, template%prv, name, & matrix_type=matrix_type, & row_blk_size=cont_row_blk_size, col_blk_size=cont_col_blk_size, & nze=nze, data_type=data_type, & reuse_arrays=.TRUE., mutable_work=mutable_work, & replication_type=replication_type) ELSE CALL dbcsr_create_prv(matrix%prv, template%prv, name, & matrix_type=matrix_type, & nze=nze, data_type=data_type, & reuse_arrays=reuse_arrays, mutable_work=mutable_work, & replication_type=replication_type) END IF END IF END SUBROUTINE dbcsr_create_template SUBROUTINE dbcsr_filter(matrix, eps, method, use_absolute, filter_diag) TYPE(dbcsr_type), INTENT(INOUT) :: matrix REAL(dp), INTENT(IN) :: eps INTEGER, INTENT(IN), OPTIONAL :: method LOGICAL, INTENT(in), OPTIONAL :: use_absolute, filter_diag CALL dbcsr_filter_anytype(matrix%prv, dbcsr_conform_scalar_prv(eps, matrix%prv), & method, use_absolute, filter_diag) END SUBROUTINE dbcsr_filter SUBROUTINE dbcsr_get_block_diag(matrix, diag) TYPE(dbcsr_type), INTENT(IN) :: matrix TYPE(dbcsr_type), INTENT(INOUT) :: diag CALL dbcsr_get_block_diag_prv(matrix%prv, diag%prv) END SUBROUTINE dbcsr_get_block_diag SUBROUTINE dbcsr_binary_write(matrix, filepath) TYPE(dbcsr_type), INTENT(INOUT) :: matrix CHARACTER(LEN=*), INTENT(IN) :: filepath CALL dbcsr_binary_write_prv(matrix%prv, filepath) END SUBROUTINE dbcsr_binary_write SUBROUTINE dbcsr_binary_read(filepath, distribution, matrix_new) CHARACTER(len=*), INTENT(IN) :: filepath TYPE(dbcsr_distribution_type), INTENT(IN) :: distribution TYPE(dbcsr_type), INTENT(INOUT) :: matrix_new CALL dbcsr_binary_read_prv(filepath, distribution%prv, matrix_new%prv) END SUBROUTINE dbcsr_binary_read SUBROUTINE dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, & shallow_data, keep_imaginary, matrix_type) TYPE(dbcsr_type), INTENT(INOUT) :: matrix_b TYPE(dbcsr_type), INTENT(IN) :: matrix_a CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: name LOGICAL, INTENT(IN), OPTIONAL :: keep_sparsity, shallow_data, & keep_imaginary CHARACTER, INTENT(IN), OPTIONAL :: matrix_type CALL dbcsr_copy_prv(matrix_b%prv, matrix_a%prv, name, keep_sparsity, & shallow_data, keep_imaginary, matrix_type) END SUBROUTINE dbcsr_copy SUBROUTINE dbcsr_copy_into_existing(matrix_b, matrix_a) TYPE(dbcsr_type), INTENT(INOUT) :: matrix_b TYPE(dbcsr_type), INTENT(IN) :: matrix_a CALL dbcsr_copy_into_existing_prv(matrix_b%prv, matrix_a%prv) END SUBROUTINE dbcsr_copy_into_existing SUBROUTINE dbcsr_desymmetrize(matrix_a, matrix_b) TYPE(dbcsr_type), INTENT(IN) :: matrix_a TYPE(dbcsr_type), INTENT(INOUT) :: matrix_b CALL dbcsr_desymmetrize_deep_prv(matrix_a%prv, matrix_b%prv, untransposed_data=.TRUE.) END SUBROUTINE dbcsr_desymmetrize SUBROUTINE dbcsr_transposed(transposed, normal, shallow_data_copy, & transpose_data, transpose_distribution, use_distribution) TYPE(dbcsr_type), INTENT(INOUT) :: transposed TYPE(dbcsr_type), INTENT(IN) :: normal LOGICAL, INTENT(IN), OPTIONAL :: shallow_data_copy, transpose_data, & transpose_distribution TYPE(dbcsr_distribution_type), INTENT(IN), & OPTIONAL :: use_distribution IF (PRESENT(use_distribution)) THEN CALL dbcsr_transposed_prv(transposed%prv, normal%prv, shallow_data_copy, & transpose_data, transpose_distribution, & use_distribution%prv) ELSE CALL dbcsr_transposed_prv(transposed%prv, normal%prv, shallow_data_copy, & transpose_data, transpose_distribution) END IF END SUBROUTINE dbcsr_transposed SUBROUTINE dbcsr_function_of_elements(matrix_a, func, a0, a1, a2) TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a INTEGER, INTENT(IN) :: func REAL(kind=dp), INTENT(IN), OPTIONAL :: a0, a1, a2 CALL dbcsr_function_of_elements_prv(matrix_a%prv, func, a0, a1, a2) END SUBROUTINE dbcsr_function_of_elements SUBROUTINE dbcsr_hadamard_product(matrix_a, matrix_b, matrix_c, b_assume_value) TYPE(dbcsr_type), INTENT(IN) :: matrix_a, matrix_b TYPE(dbcsr_type), INTENT(INOUT) :: matrix_c REAL(KIND=dp), INTENT(IN), OPTIONAL :: b_assume_value CALL dbcsr_hadamard_product_prv(matrix_a%prv, matrix_b%prv, matrix_c%prv, b_assume_value) END SUBROUTINE dbcsr_hadamard_product SUBROUTINE dbcsr_deallocate_matrix(matrix) !! Deallocates a DBCSR matrix for compatibility with CP2K TYPE(dbcsr_type), POINTER :: matrix !! DBCSR matrix CALL dbcsr_release(matrix) IF (dbcsr_valid_index(matrix)) & CALL dbcsr_abort(__LOCATION__, & 'You should not "deallocate" a referenced matrix. '// & 'Avoid pointers to DBCSR matrices.') DEALLOCATE (matrix) END SUBROUTINE dbcsr_deallocate_matrix PURE FUNCTION dbcsr_has_symmetry(matrix) RESULT(has_symmetry) TYPE(dbcsr_type), INTENT(IN) :: matrix LOGICAL :: has_symmetry has_symmetry = dbcsr_has_symmetry_prv(matrix%prv) END FUNCTION dbcsr_has_symmetry SUBROUTINE csr_create_new(csr_mat, nrows_total, ncols_total, nze_total, & nze_local, nrows_local, mp_group, data_type) TYPE(dbcsr_csr_type), INTENT(OUT) :: csr_mat INTEGER, INTENT(IN) :: nrows_total, ncols_total INTEGER(KIND=int_8) :: nze_total INTEGER, INTENT(IN) :: nze_local, nrows_local INTEGER, INTENT(IN) :: mp_group INTEGER, INTENT(IN), OPTIONAL :: data_type TYPE(mp_comm_type) :: my_mp_group CALL my_mp_group%set_handle(mp_group) CALL csr_create_new_prv(csr_mat, nrows_total, ncols_total, nze_total, & nze_local, nrows_local, my_mp_group, data_type) END SUBROUTINE csr_create_new SUBROUTINE dbcsr_csr_create_from_dbcsr(dbcsr_mat, csr_mat, dist_format, csr_sparsity, numnodes) TYPE(dbcsr_type), INTENT(IN) :: dbcsr_mat TYPE(dbcsr_csr_type), INTENT(OUT) :: csr_mat INTEGER :: dist_format TYPE(dbcsr_type), INTENT(IN), OPTIONAL :: csr_sparsity INTEGER, INTENT(IN), OPTIONAL :: numnodes IF (PRESENT(csr_sparsity)) THEN CALL csr_create_from_dbcsr_prv(dbcsr_mat%prv, csr_mat, dist_format, csr_sparsity%prv, numnodes) ELSE CALL csr_create_from_dbcsr_prv(dbcsr_mat%prv, csr_mat, dist_format, numnodes=numnodes) END IF END SUBROUTINE dbcsr_csr_create_from_dbcsr SUBROUTINE dbcsr_convert_csr_to_dbcsr(dbcsr_mat, csr_mat) TYPE(dbcsr_type), INTENT(INOUT) :: dbcsr_mat TYPE(dbcsr_csr_type), INTENT(INOUT) :: csr_mat CALL convert_csr_to_dbcsr_prv(dbcsr_mat%prv, csr_mat) END SUBROUTINE dbcsr_convert_csr_to_dbcsr SUBROUTINE dbcsr_convert_dbcsr_to_csr(dbcsr_mat, csr_mat) TYPE(dbcsr_type), INTENT(IN) :: dbcsr_mat TYPE(dbcsr_csr_type), INTENT(INOUT) :: csr_mat CALL convert_dbcsr_to_csr_prv(dbcsr_mat%prv, csr_mat) END SUBROUTINE dbcsr_convert_dbcsr_to_csr SUBROUTINE dbcsr_to_csr_filter(dbcsr_mat, csr_sparsity, eps) !! Apply filtering threshold eps to DBCSR blocks in order to improve !! CSR sparsity (currently only used for testing purposes) TYPE(dbcsr_type), INTENT(IN) :: dbcsr_mat TYPE(dbcsr_type), INTENT(OUT) :: csr_sparsity REAL(kind=real_8), INTENT(IN) :: eps CALL dbcsr_to_csr_filter_prv(dbcsr_mat%prv, csr_sparsity%prv, eps) END SUBROUTINE dbcsr_to_csr_filter SUBROUTINE dbcsr_clear(dbcsr_mat) !! Clear a matrix TYPE(dbcsr_type), INTENT(INOUT) :: dbcsr_mat CALL dbcsr_clear_prv(dbcsr_mat%prv) END SUBROUTINE SUBROUTINE dbcsr_add_block_node(matrix, block_row, block_col, block) !! Emulation of sparse_matrix_types/add_block_node mapped !! to add_real_matrix_block.... should not be used any longer !! It adds a block to the dbcsr matrix and returns a rank-2 pointer to the !! block. Currently it only and always uses the mutable data. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! DBCSR matrix INTEGER, INTENT(IN) :: block_row, block_col !! the row !! the column REAL(KIND=dp), DIMENSION(:, :), POINTER :: block !! the block to put call dbcsr_add_block_node_prv(matrix%prv, block_row, block_col, block) END SUBROUTINE dbcsr_add_block_node SUBROUTINE dbcsr_run_tests(mp_group, io_unit, nproc, matrix_sizes, trs, & bs_m, bs_n, bs_k, sparsities, alpha, beta, data_type, test_type, & n_loops, eps, retain_sparsity, always_checksum) INTEGER, INTENT(IN) :: mp_group, io_unit INTEGER, DIMENSION(:), POINTER :: nproc INTEGER, DIMENSION(:), INTENT(in) :: matrix_sizes LOGICAL, DIMENSION(2), INTENT(in) :: trs INTEGER, DIMENSION(:), POINTER :: bs_m, bs_n, bs_k REAL(kind=dp), DIMENSION(3), INTENT(in) :: sparsities REAL(kind=dp), INTENT(in) :: alpha, beta INTEGER, INTENT(IN) :: data_type, test_type, n_loops REAL(kind=dp), INTENT(in) :: eps LOGICAL, INTENT(in) :: retain_sparsity, always_checksum TYPE(mp_comm_type) :: my_mp_group CALL my_mp_group%set_handle(mp_group) CALL dbcsr_run_tests_prv(my_mp_group, io_unit, nproc, matrix_sizes, trs, & bs_m, bs_n, bs_k, sparsities, alpha, beta, data_type, test_type, & n_loops, eps, retain_sparsity, always_checksum) END SUBROUTINE dbcsr_run_tests #:include 'data/dbcsr.fypp' #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float SUBROUTINE dbcsr_reserve_block2d_${nametype1}$ (matrix, row, col, block, transposed, existed) TYPE(dbcsr_type), INTENT(INOUT) :: matrix INTEGER, INTENT(IN) :: row, col ${type1}$, DIMENSION(:, :), POINTER :: block LOGICAL, INTENT(IN), OPTIONAL :: transposed LOGICAL, INTENT(OUT), OPTIONAL :: existed CALL dbcsr_reserve_block2d_prv(matrix%prv, row, col, block, & transposed, existed) END SUBROUTINE dbcsr_reserve_block2d_${nametype1}$ SUBROUTINE dbcsr_iterator_next_2d_block_${nametype1}$ (iterator, row, column, block, & transposed, block_number, & row_size, col_size, row_offset, col_offset) TYPE(dbcsr_iterator_type), INTENT(INOUT) :: iterator INTEGER, INTENT(OUT) :: row, column ${type1}$, DIMENSION(:, :), POINTER :: block LOGICAL, INTENT(OUT) :: transposed INTEGER, INTENT(OUT), OPTIONAL :: block_number, row_size, & col_size, row_offset, & col_offset CALL dbcsr_iterator_next_block_prv(iterator%prv, row, column, block, transposed, & block_number, row_size, col_size, row_offset, col_offset) END SUBROUTINE dbcsr_iterator_next_2d_block_${nametype1}$ SUBROUTINE dbcsr_iterator_next_2d_block_notrans_${nametype1}$ (iterator, row, column, block, & block_number, & row_size, col_size, row_offset, col_offset) TYPE(dbcsr_iterator_type), INTENT(INOUT) :: iterator INTEGER, INTENT(OUT) :: row, column ${type1}$, DIMENSION(:, :), POINTER :: block INTEGER, INTENT(OUT), OPTIONAL :: block_number, row_size, & col_size, row_offset, & col_offset LOGICAL :: tr CALL dbcsr_iterator_next_block_prv(iterator%prv, row, column, block, tr, & block_number, row_size, col_size, row_offset, col_offset) IF (tr) DBCSR_ABORT("Block is transposed!") END SUBROUTINE dbcsr_iterator_next_2d_block_notrans_${nametype1}$ ! ************************************************************************************************** ! ************************************************************************************************* SUBROUTINE dbcsr_iterator_next_1d_block_${nametype1}$ (iterator, row, column, block, & transposed, block_number, & row_size, col_size, row_offset, col_offset) TYPE(dbcsr_iterator_type), INTENT(INOUT) :: iterator INTEGER, INTENT(OUT) :: row, column ${type1}$, DIMENSION(:), POINTER :: block LOGICAL, INTENT(OUT) :: transposed INTEGER, INTENT(OUT), OPTIONAL :: block_number, row_size, & col_size, row_offset, & col_offset CALL dbcsr_iterator_next_block_prv(iterator%prv, row, column, block, & transposed, block_number, row_size, col_size, row_offset, col_offset) END SUBROUTINE dbcsr_iterator_next_1d_block_${nametype1}$ ! ************************************************************************************************** ! ************************************************************************************************* SUBROUTINE dbcsr_iterator_next_1d_block_notrans_${nametype1}$ (iterator, row, column, block, & block_number, & row_size, col_size, row_offset, col_offset) TYPE(dbcsr_iterator_type), INTENT(INOUT) :: iterator INTEGER, INTENT(OUT) :: row, column ${type1}$, DIMENSION(:), POINTER :: block INTEGER, INTENT(OUT), OPTIONAL :: block_number, row_size, & col_size, row_offset, & col_offset LOGICAL :: tr CALL dbcsr_iterator_next_block_prv(iterator%prv, row, column, block, & tr, block_number, row_size, col_size, row_offset, col_offset) IF (tr) DBCSR_ABORT("Block is transposed!") END SUBROUTINE dbcsr_iterator_next_1d_block_notrans_${nametype1}$ SUBROUTINE dbcsr_put_block2d_${nametype1}$ (matrix, row, col, block, & summation, scale) TYPE(dbcsr_type), INTENT(INOUT) :: matrix INTEGER, INTENT(IN) :: row, col ${type1}$, DIMENSION(:, :), INTENT(IN) :: block LOGICAL, INTENT(IN), OPTIONAL :: summation ${type1}$, INTENT(IN), OPTIONAL :: scale CALL dbcsr_put_block_prv(matrix%prv, row, col, block, summation=summation, scale=scale) END SUBROUTINE dbcsr_put_block2d_${nametype1}$ SUBROUTINE dbcsr_put_block_${nametype1}$ (matrix, row, col, block, & summation, scale) TYPE(dbcsr_type), INTENT(INOUT) :: matrix INTEGER, INTENT(IN) :: row, col ${type1}$, DIMENSION(:), INTENT(IN) :: block LOGICAL, INTENT(IN), OPTIONAL :: summation ${type1}$, INTENT(IN), OPTIONAL :: scale CALL dbcsr_put_block_prv(matrix%prv, row, col, block, summation=summation, scale=scale) END SUBROUTINE dbcsr_put_block_${nametype1}$ SUBROUTINE dbcsr_get_2d_block_p_${nametype1}$ (matrix, row, col, block, tr, found, row_size, col_size) TYPE(dbcsr_type), INTENT(INOUT) :: matrix INTEGER, INTENT(IN) :: row, col ${type1}$, DIMENSION(:, :), POINTER :: block LOGICAL, INTENT(OUT) :: tr LOGICAL, INTENT(OUT) :: found INTEGER, INTENT(OUT), OPTIONAL :: row_size, col_size CALL dbcsr_get_block_p_prv(matrix%prv, row, col, block, tr, found, row_size, col_size) END SUBROUTINE dbcsr_get_2d_block_p_${nametype1}$ SUBROUTINE dbcsr_get_2d_block_notrans_p_${nametype1}$ (matrix, row, col, block, found, row_size, col_size) TYPE(dbcsr_type), INTENT(INOUT) :: matrix INTEGER, INTENT(IN) :: row, col ${type1}$, DIMENSION(:, :), POINTER :: block LOGICAL, INTENT(OUT) :: found INTEGER, INTENT(OUT), OPTIONAL :: row_size, col_size LOGICAL :: tr CALL dbcsr_get_block_p_prv(matrix%prv, row, col, block, tr, found, row_size, col_size) IF (tr) DBCSR_ABORT("Block is transposed!") END SUBROUTINE dbcsr_get_2d_block_notrans_p_${nametype1}$ SUBROUTINE dbcsr_get_block_p_${nametype1}$ (matrix, row, col, block, tr, found, row_size, col_size) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: row, col ${type1}$, DIMENSION(:), POINTER :: block LOGICAL, INTENT(OUT) :: tr LOGICAL, INTENT(OUT) :: found INTEGER, INTENT(OUT), OPTIONAL :: row_size, col_size CALL dbcsr_get_block_p_prv(matrix%prv, row, col, block, tr, found, row_size, col_size) END SUBROUTINE dbcsr_get_block_p_${nametype1}$ SUBROUTINE dbcsr_get_block_notrans_p_${nametype1}$ (matrix, row, col, block, found, row_size, col_size) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: row, col ${type1}$, DIMENSION(:), POINTER :: block LOGICAL, INTENT(OUT) :: found INTEGER, INTENT(OUT), OPTIONAL :: row_size, col_size LOGICAL :: tr CALL dbcsr_get_block_p_prv(matrix%prv, row, col, block, tr, found, row_size, col_size) IF (tr) DBCSR_ABORT("Block is transposed!") END SUBROUTINE dbcsr_get_block_notrans_p_${nametype1}$ SUBROUTINE dbcsr_trace_${nametype1}$ (matrix_a, trace) TYPE(dbcsr_type), INTENT(IN) :: matrix_a ${type1}$, INTENT(OUT) :: trace CALL dbcsr_trace_prv(matrix_a%prv, trace) END SUBROUTINE dbcsr_trace_${nametype1}$ SUBROUTINE dbcsr_dot_${nametype1}$ (matrix_a, matrix_b, result) TYPE(dbcsr_type), INTENT(IN) :: matrix_a, matrix_b ${type1}$, INTENT(INOUT) :: result CALL dbcsr_dot_prv(matrix_a%prv, matrix_b%prv, result) END SUBROUTINE dbcsr_dot_${nametype1}$ SUBROUTINE dbcsr_multiply_${nametype1}$ (transa, transb, & alpha, matrix_a, matrix_b, beta, matrix_c, & first_row, last_row, first_column, last_column, first_k, last_k, & retain_sparsity, filter_eps, flop) CHARACTER(LEN=1), INTENT(IN) :: transa, transb ${type1}$, INTENT(IN) :: alpha TYPE(dbcsr_type), INTENT(IN) :: matrix_a, matrix_b ${type1}$, INTENT(IN) :: beta TYPE(dbcsr_type), INTENT(INOUT) :: matrix_c INTEGER, INTENT(IN), OPTIONAL :: first_row, last_row, & first_column, last_column, & first_k, last_k LOGICAL, INTENT(IN), OPTIONAL :: retain_sparsity REAL(kind=${kind2[n]}$), INTENT(IN), OPTIONAL :: filter_eps INTEGER(int_8), INTENT(OUT), OPTIONAL :: flop CALL dbcsr_multiply_prv(transa, transb, & alpha, matrix_a%prv, matrix_b%prv, beta, matrix_c%prv, & first_row, last_row, first_column, last_column, first_k, last_k, & retain_sparsity, & filter_eps=filter_eps, & flop=flop) END SUBROUTINE dbcsr_multiply_${nametype1}$ SUBROUTINE dbcsr_scale_by_vector_${nametype1}$ (matrix_a, alpha, side) TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a ${type1}$, DIMENSION(:), INTENT(IN), TARGET :: alpha CHARACTER(LEN=*), INTENT(IN) :: side CALL dbcsr_scale_by_vector_prv(matrix_a%prv, alpha, side) END SUBROUTINE dbcsr_scale_by_vector_${nametype1}$ SUBROUTINE dbcsr_scale_${nametype1}$ (matrix_a, alpha_scalar, last_column) TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a ${type1}$, INTENT(IN) :: alpha_scalar INTEGER, INTENT(IN), OPTIONAL :: last_column CALL dbcsr_scale_prv(matrix_a%prv, alpha_scalar, last_column) END SUBROUTINE dbcsr_scale_${nametype1}$ SUBROUTINE dbcsr_set_${nametype1}$ (matrix, alpha) TYPE(dbcsr_type), INTENT(INOUT) :: matrix ${type1}$, INTENT(IN) :: alpha CALL dbcsr_set_prv(matrix%prv, alpha) END SUBROUTINE dbcsr_set_${nametype1}$ SUBROUTINE dbcsr_add_${nametype1}$ (matrix_a, matrix_b, alpha_scalar, beta_scalar) TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a TYPE(dbcsr_type), INTENT(IN) :: matrix_b ${type1}$, INTENT(IN) :: alpha_scalar, beta_scalar CALL dbcsr_add_prv(matrix_a%prv, matrix_b%prv, alpha_scalar, beta_scalar) END SUBROUTINE dbcsr_add_${nametype1}$ SUBROUTINE dbcsr_add_on_diag_${nametype1}$ (matrix, alpha_scalar) TYPE(dbcsr_type), INTENT(INOUT) :: matrix ${type1}$, INTENT(IN) :: alpha_scalar CALL dbcsr_add_on_diag_prv(matrix%prv, alpha_scalar) END SUBROUTINE dbcsr_add_on_diag_${nametype1}$ SUBROUTINE dbcsr_set_diag_${nametype1}$ (matrix, diag) TYPE(dbcsr_type), INTENT(INOUT) :: matrix ${type1}$, DIMENSION(:), INTENT(IN) :: diag CALL dbcsr_set_diag_prv(matrix%prv, diag) END SUBROUTINE dbcsr_set_diag_${nametype1}$ SUBROUTINE dbcsr_get_diag_${nametype1}$ (matrix, diag) TYPE(dbcsr_type), INTENT(IN) :: matrix ${type1}$, DIMENSION(:), INTENT(OUT) :: diag CALL dbcsr_get_diag_prv(matrix%prv, diag) END SUBROUTINE dbcsr_get_diag_${nametype1}$ FUNCTION dbcsr_get_wms_data_${nametype1}$ (matrix, index_matrix, select_data_type, lb, ub) RESULT(DATA) TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: index_matrix ${type1}$, INTENT(IN) :: select_data_type ${type1}$, DIMENSION(:), POINTER :: DATA INTEGER, INTENT(IN), OPTIONAL :: lb, ub DATA => dbcsr_get_data_p_prv(matrix%prv%wms(index_matrix)%data_area, select_data_type, lb, ub) END FUNCTION dbcsr_get_wms_data_${nametype1}$ FUNCTION dbcsr_get_data_${nametype1}$ (matrix, select_data_type, lb, ub) RESULT(DATA) TYPE(dbcsr_type), INTENT(IN) :: matrix ${type1}$, INTENT(IN) :: select_data_type ${type1}$, DIMENSION(:), POINTER :: DATA INTEGER, INTENT(IN), OPTIONAL :: lb, ub DATA => dbcsr_get_data_p_prv(matrix%prv%data_area, select_data_type, lb, ub) END FUNCTION dbcsr_get_data_${nametype1}$ #:endfor END MODULE dbcsr_api ================================================ FILE: src/dbcsr_api_c.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_api_c USE, INTRINSIC :: ISO_C_BINDING, ONLY: c_loc, c_ptr, c_double, c_sizeof, C_NULL_CHAR, & c_float, c_f_pointer, c_int, c_long_long, & c_char, c_null_ptr, c_bool, c_associated, & c_float_complex, c_double_complex USE dbcsr_api USE dbcsr_machine, ONLY: default_output_unit USE dbcsr_kinds, ONLY: default_string_length, & dp, & int_8, & real_4, & real_8 IMPLICIT NONE PRIVATE #:include 'data/dbcsr.fypp' CONTAINS SUBROUTINE c_f_string(c_str, str) USE, INTRINSIC :: iso_c_binding, ONLY: c_ptr, c_f_pointer, c_char TYPE(c_ptr), INTENT(in) :: c_str CHARACTER(kind=c_char), POINTER :: arr(:) CHARACTER(:, kind=c_char), ALLOCATABLE, INTENT(out) :: str INTEGER(8) :: n, i INTERFACE ! steal std c library function rather than writing our own. FUNCTION strlen(s) bind(c, name='strlen') USE, INTRINSIC :: iso_c_binding, ONLY: c_ptr, c_size_t IMPLICIT NONE !---- TYPE(c_ptr), INTENT(in), value :: s INTEGER(c_size_t) :: strlen END FUNCTION strlen END INTERFACE n = strlen(c_str) !**** CALL c_f_pointer(c_str, arr, [n]) ALLOCATE (CHARACTER(len=n) :: str) DO i = 1, n str(i:i) = arr(i) END DO END SUBROUTINE c_f_string !----------------------------------------------------! ! lib init/finalize ! !----------------------------------------------------! SUBROUTINE c_dbcsr_clear_mempools() BIND(C, name="c_dbcsr_clear_mempools") CALL dbcsr_clear_mempools() END SUBROUTINE SUBROUTINE c_dbcsr_init_lib(fcomm, io_unit) bind(C, name="c_dbcsr_init_lib_internal") INTEGER(kind=c_int), INTENT(in) :: fcomm INTEGER(kind=c_int), INTENT(in), optional :: io_unit CALL dbcsr_init_lib(fcomm, io_unit) END SUBROUTINE SUBROUTINE c_dbcsr_finalise_lib() bind(C, name="c_dbcsr_finalize_lib") CALL dbcsr_finalize_lib() END SUBROUTINE SUBROUTINE c_dbcsr_mp_grid_setup(c_dist) BIND(C, name="c_dbcsr_mp_grid_setup") TYPE(c_ptr), INTENT(IN), VALUE :: c_dist TYPE(dbcsr_distribution_type), POINTER :: dist CALL c_f_pointer(c_dist, dist) CALL dbcsr_mp_grid_setup(dist) END SUBROUTINE SUBROUTINE c_dbcsr_print_statistics(c_print_timers, c_callgraph_filename) & BIND(C, name="c_dbcsr_print_statistics") LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_print_timers TYPE(c_ptr), INTENT(IN), VALUE :: c_callgraph_filename LOGICAL :: print_timers CHARACTER(:, kind=c_char), ALLOCATABLE :: callgraph_filename IF (C_ASSOCIATED(c_callgraph_filename)) CALL c_f_string(c_callgraph_filename, callgraph_filename) IF (PRESENT(c_print_timers)) THEN print_timers = c_print_timers CALL dbcsr_print_statistics(print_timers=print_timers, & callgraph_filename=callgraph_filename) ELSE CALL dbcsr_print_statistics(callgraph_filename=callgraph_filename) END IF END SUBROUTINE ! create / release !PUBLIC :: dbcsr_distribution_hold !PUBLIC :: dbcsr_distribution_release !PUBLIC :: dbcsr_distribution_new !--- PUBLIC :: dbcsr_create ! SKIP PUBLIC :: dbcsr_init_p !PUBLIC :: dbcsr_release ! SKIP PUBLIC :: dbcsr_release_p ! SKIP PUBLIC :: dbcsr_deallocate_matrix !-------------------------------------------------------! ! create/release ! !-------------------------------------------------------! SUBROUTINE c_dbcsr_distribution_hold(c_dist) & BIND(C, name="c_dbcsr_distribution_hold") TYPE(c_ptr), INTENT(IN), VALUE :: c_dist TYPE(dbcsr_distribution_type), POINTER :: dist CALL c_f_pointer(c_dist, dist) CALL dbcsr_distribution_hold(dist) END SUBROUTINE SUBROUTINE c_dbcsr_distribution_new(c_dist, fcomm, c_row_dist, row_dist_size, & c_col_dist, col_dist_size) & bind(C, name="c_dbcsr_distribution_new_aux") TYPE(c_ptr), INTENT(out) :: c_dist INTEGER(kind=c_int), INTENT(in) :: fcomm INTEGER(kind=c_int), INTENT(in), value :: row_dist_size INTEGER(kind=c_int), INTENT(in), TARGET :: c_row_dist(row_dist_size) INTEGER(kind=c_int), INTENT(in), value :: col_dist_size INTEGER(kind=c_int), INTENT(in), TARGET :: c_col_dist(col_dist_size) INTEGER, POINTER :: col_dist(:), row_dist(:) TYPE(dbcsr_distribution_type), POINTER :: dist ALLOCATE (dist) row_dist => c_row_dist col_dist => c_col_dist CALL dbcsr_distribution_new(dist, group=fcomm, row_dist=row_dist, & col_dist=col_dist, reuse_arrays=.FALSE.) c_dist = c_loc(dist) END SUBROUTINE SUBROUTINE c_dbcsr_distribution_release(c_dist) bind(C, name="c_dbcsr_distribution_release") TYPE(c_ptr), INTENT(inout) :: c_dist TYPE(dbcsr_distribution_type), POINTER :: dist CALL c_f_pointer(c_dist, dist) CALL dbcsr_distribution_release(dist) DEALLOCATE (dist) c_dist = c_null_ptr END SUBROUTINE SUBROUTINE c_dbcsr_release(c_matrix) bind(C, name="c_dbcsr_release") TYPE(c_ptr), INTENT(inout) :: c_matrix TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_release(matrix) DEALLOCATE (matrix) c_matrix = c_null_ptr END SUBROUTINE SUBROUTINE c_dbcsr_create_new(c_matrix, c_name, c_dist, c_matrix_type, & c_row_blk_size, c_row_size, & c_col_blk_size, c_col_size, & c_nze, c_data_type, c_reuse, & c_reuse_arrays, c_mutable_work, c_replication_type) & BIND(C, name="c_dbcsr_create_new") TYPE(c_ptr), INTENT(INOUT) :: c_matrix TYPE(c_ptr), INTENT(IN), VALUE :: c_name TYPE(c_ptr), INTENT(IN), VALUE :: c_dist CHARACTER(kind=c_char), INTENT(IN), VALUE :: c_matrix_type INTEGER(kind=c_int), INTENT(IN), VALUE :: c_row_size, & c_col_size INTEGER(kind=c_int), INTENT(IN), TARGET :: c_row_blk_size(c_row_size), & c_col_blk_size(c_col_size) INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_nze, c_data_type LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_reuse, c_reuse_arrays, & c_mutable_work CHARACTER(kind=c_char), INTENT(IN), OPTIONAL :: c_replication_type TYPE(dbcsr_type), POINTER :: matrix CHARACTER(:, kind=c_char), ALLOCATABLE :: name TYPE(dbcsr_distribution_type), POINTER :: dist INTEGER, DIMENSION(:), POINTER :: row_blk_size, col_blk_size LOGICAL, POINTER :: reuse, reuse_arrays, mutable_work ALLOCATE (matrix) CALL c_f_pointer(c_dist, dist) CALL c_f_string(c_name, name) row_blk_size => c_row_blk_size col_blk_size => c_col_blk_size #:set list = ['reuse', 'reuse_arrays', 'mutable_work'] #:for var in list NULLIFY (${var}$) IF (PRESENT(c_${var}$)) THEN ALLOCATE (${var}$) ${var}$ = c_${var}$ END IF #:endfor CALL dbcsr_create(matrix, name, dist, c_matrix_type, & row_blk_size, col_blk_size, & c_nze, c_data_type, reuse, & reuse_arrays, mutable_work, c_replication_type) #:for var in list IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$) #:endfor c_matrix = c_loc(matrix) END SUBROUTINE SUBROUTINE c_dbcsr_create_template(c_matrix, c_name, c_template, & c_dist, c_matrix_type, & c_row_blk_size, c_row_size, & c_col_blk_size, c_col_size, & c_nze, c_data_type, & c_reuse_arrays, c_mutable_work, c_replication_type) & BIND(C, name="c_dbcsr_create_template") TYPE(c_ptr), INTENT(INOUT) :: c_matrix TYPE(c_ptr), INTENT(IN), VALUE :: c_name TYPE(c_ptr), INTENT(IN), VALUE :: c_template TYPE(c_ptr), INTENT(IN), VALUE :: c_dist CHARACTER(kind=c_char), INTENT(IN), OPTIONAL :: c_matrix_type INTEGER(kind=c_int), INTENT(IN), VALUE :: c_row_size, & c_col_size INTEGER(kind=c_int), INTENT(IN), OPTIONAL, TARGET :: c_row_blk_size(c_row_size), & C_col_blk_size(c_col_size) INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_nze, c_data_type LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_reuse_arrays, & c_mutable_work CHARACTER(kind=c_char), INTENT(IN), OPTIONAL :: c_replication_type TYPE(dbcsr_type), POINTER :: matrix, template CHARACTER(:, kind=c_char), ALLOCATABLE :: name INTEGER, DIMENSION(:), POINTER :: row_blk_size, col_blk_size TYPE(dbcsr_distribution_type), POINTER :: dist LOGICAL, POINTER :: reuse_arrays, mutable_work ALLOCATE (matrix) CALL c_f_pointer(c_template, template) CALL c_f_string(c_name, name) NULLIFY (row_blk_size) NULLIFY (col_blk_size) IF (PRESENT(c_row_blk_size)) row_blk_size => c_row_blk_size IF (PRESENT(c_col_blk_size)) col_blk_size => c_col_blk_size NULLIFY (dist) IF (C_ASSOCIATED(c_dist)) CALL c_f_pointer(c_dist, dist) #:set list = ['reuse_arrays', 'mutable_work'] #:for var in list NULLIFY (${var}$) IF (PRESENT(c_${var}$)) THEN ALLOCATE (${var}$) ${var}$ = c_${var}$ END IF #:endfor #:set optvars = [['row_blk_size'], ['col_blk_size']] #:set optgroups = [] ${gen_vargroups(optvars,optgroups)}$ #:for i in range(len(optgroups)) ${print_groupif(optgroups,optvars,i,'PRESENT','c_')}$ CALL dbcsr_create(matrix, name, template, dist, c_matrix_type & ${print_group(optgroups[i])}$, & nze=c_nze, data_type=c_data_type, & reuse_arrays=reuse_arrays, mutable_work=mutable_work, & replication_type=c_replication_type) #:endfor $:"ENDIF" #:for var in list IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$) #:endfor c_matrix = c_loc(matrix) END SUBROUTINE SUBROUTINE c_dbcsr_finalize(c_matrix) bind(C, name="c_dbcsr_finalize") TYPE(c_ptr), INTENT(in), value :: c_matrix TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_finalize(matrix) END SUBROUTINE !----------------------------------------------------------! ! primitive matrix operations ! !----------------------------------------------------------! #:for n, nametype, base, prec, kind, type, dkind, normname, ctype in c_inst_params_float SUBROUTINE c_dbcsr_set_${nametype}$ (c_matrix, c_alpha) & BIND(C, name="c_dbcsr_set_${nametype}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix ${ctype}$, INTENT(IN), VALUE :: c_alpha TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_set(matrix, c_alpha) END SUBROUTINE SUBROUTINE c_dbcsr_add_${nametype}$ (c_matrix_a, c_matrix_b, c_alpha_scalar, c_beta_scalar) & BIND(C, name="c_dbcsr_add_${nametype}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a, c_matrix_b ${ctype}$, INTENT(IN), VALUE :: c_alpha_scalar, c_beta_scalar TYPE(dbcsr_type), POINTER :: matrix_a, matrix_b CALL c_f_pointer(c_matrix_a, matrix_a) CALL c_f_pointer(c_matrix_b, matrix_b) CALL dbcsr_add(matrix_a, matrix_b, c_alpha_scalar, c_beta_scalar) END SUBROUTINE SUBROUTINE c_dbcsr_scale_${nametype}$ (c_matrix_a, c_alpha_scalar, c_last_column) & BIND(C, name="c_dbcsr_scale_${nametype}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a ${ctype}$, INTENT(IN), VALUE :: c_alpha_scalar INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_last_column TYPE(dbcsr_type), POINTER :: matrix_a CALL c_f_pointer(c_matrix_a, matrix_a) CALL dbcsr_scale(matrix_a, c_alpha_scalar, c_last_column) END SUBROUTINE SUBROUTINE c_dbcsr_scale_by_vector_${nametype}$ (c_matrix_a, c_alpha, c_alpha_size, c_side) & BIND(C, name="c_dbcsr_scale_by_vector_${nametype}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a INTEGER(kind=c_int), INTENT(IN), VALUE :: c_alpha_size ${ctype}$, INTENT(IN) :: c_alpha(c_alpha_size) TYPE(c_ptr), INTENT(IN), VALUE :: c_side TYPE(dbcsr_type), POINTER :: matrix_a CHARACTER(:, kind=c_char), ALLOCATABLE :: side CALL c_f_pointer(c_matrix_a, matrix_a) CALL c_f_string(c_side, side) CALL dbcsr_scale_by_vector(matrix_a, c_alpha, side) END SUBROUTINE SUBROUTINE c_dbcsr_multiply_${nametype}$ (c_transa, c_transb, & c_alpha, c_matrix_a, c_matrix_b, c_beta, c_matrix_c, & c_first_row, c_last_row, c_first_column, c_last_column, & c_first_k, c_last_k, & c_retain_sparsity, c_filter_eps, c_flop) & BIND(C, name="c_dbcsr_multiply_${nametype}$") CHARACTER(kind=c_char), INTENT(in), value :: c_transa, c_transb ${ctype}$, INTENT(in), value :: c_alpha, c_beta TYPE(c_ptr), INTENT(in), VALUE :: c_matrix_a, c_matrix_b, c_matrix_c INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_first_row, c_last_row, & c_first_column, c_last_column, & c_first_k, c_last_k LOGICAL(c_bool), INTENT(in), OPTIONAL :: c_retain_sparsity REAL(kind=c_double), OPTIONAL :: c_filter_eps INTEGER(kind=c_long_long), OPTIONAL :: c_flop LOGICAL :: ret_sp TYPE(dbcsr_type), POINTER :: matrix_a, matrix_b, matrix_c INTEGER, POINTER :: first_row, last_row, first_column, last_column, first_k, last_k #:set vars = ['first_row', 'last_row', 'first_column', 'last_column', 'first_k', 'last_k'] #:for var in vars NULLIFY (${var}$) IF (PRESENT(c_${var}$)) THEN ALLOCATE (${var}$) ${var}$ = c_${var}$+1 END IF #:endfor CALL c_f_pointer(c_matrix_a, matrix_a) CALL c_f_pointer(c_matrix_b, matrix_b) CALL c_f_pointer(c_matrix_c, matrix_c) IF (PRESENT(c_retain_sparsity)) THEN ret_sp = c_retain_sparsity CALL dbcsr_multiply(c_transa, c_transb, & c_alpha, matrix_a, matrix_b, c_beta, matrix_c, & first_row, last_row, first_column, last_column, & first_k, last_k, & ret_sp, c_filter_eps, c_flop) ELSE CALL dbcsr_multiply(c_transa, c_transb, & c_alpha, matrix_a, matrix_b, c_beta, matrix_c, & first_row, last_row, first_column, last_column, & first_k, last_k, & filter_eps=c_filter_eps, flop=c_flop) END IF #:for var in vars IF (PRESENT(c_${var}$)) DEALLOCATE (${var}$) #:endfor END SUBROUTINE SUBROUTINE c_dbcsr_add_on_diag_${nametype}$ (c_matrix, c_alpha_scalar) & BIND(C, name="c_dbcsr_add_on_diag_${nametype}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix ${ctype}$, INTENT(IN) :: c_alpha_scalar TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_add_on_diag(matrix, c_alpha_scalar) END SUBROUTINE SUBROUTINE c_dbcsr_set_diag_${nametype}$ (c_matrix, c_diag, c_diag_size) & BIND(C, name="c_dbcsr_set_diag_${nametype}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix INTEGER(kind=c_int), INTENT(IN), VALUE :: c_diag_size ${ctype}$, INTENT(IN) :: c_diag(c_diag_size) TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_set_diag(matrix, c_diag) END SUBROUTINE SUBROUTINE c_dbcsr_get_diag_${nametype}$ (c_matrix, c_diag, c_diag_size) & BIND(C, name="c_dbcsr_get_diag_${nametype}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix INTEGER(kind=c_int), INTENT(IN), VALUE :: c_diag_size ${ctype}$, INTENT(INOUT) :: c_diag(c_diag_size) TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_get_diag(matrix, c_diag) END SUBROUTINE SUBROUTINE c_dbcsr_trace_${nametype}$ (c_matrix_a, c_trace) & BIND(C, name="c_dbcsr_trace_${nametype}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a ${ctype}$, INTENT(OUT) :: c_trace TYPE(dbcsr_type), POINTER :: matrix_a CALL c_f_pointer(c_matrix_a, matrix_a) CALL dbcsr_trace(matrix_a, c_trace) END SUBROUTINE SUBROUTINE c_dbcsr_dot_${nametype}$ (c_matrix_a, c_matrix_b, c_result) & BIND(C, name="c_dbcsr_dot_${nametype}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a, c_matrix_b ${ctype}$, INTENT(INOUT) :: c_result TYPE(dbcsr_type), POINTER :: matrix_a, matrix_b CALL c_f_pointer(c_matrix_a, matrix_a) CALL c_f_pointer(c_matrix_b, matrix_b) CALL dbcsr_dot(matrix_a, matrix_b, c_result) END SUBROUTINE SUBROUTINE c_dbcsr_get_block_p_${nametype}$ (c_matrix, c_row, c_col, c_block, & c_tr, c_found, c_row_size, c_col_size) & BIND(C, name="c_dbcsr_get_block_p_${nametype}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix INTEGER(kind=c_int), INTENT(IN), VALUE :: c_row, c_col TYPE(c_ptr), INTENT(INOUT) :: c_block LOGICAL(kind=c_bool), INTENT(OUT) :: c_tr, c_found INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_row_size, c_col_size TYPE(dbcsr_type), POINTER :: matrix ${ctype}$, DIMENSION(:), POINTER :: block LOGICAL :: tr, found CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_get_block_p(matrix, c_row + 1, c_col + 1, block, tr, & found, c_row_size, c_col_size) c_tr = tr c_found = found c_block = c_loc(block) END SUBROUTINE SUBROUTINE c_dbcsr_get_block_notrans_p_${nametype}$ (c_matrix, c_row, c_col, & c_block, c_found, c_row_size, c_col_size) & BIND(C, name="c_dbcsr_get_block_notrans_p_${nametype}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix INTEGER(kind=c_int), INTENT(IN), VALUE :: c_row, c_col TYPE(c_ptr), INTENT(INOUT) :: c_block LOGICAL(kind=c_bool), INTENT(OUT) :: c_found INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_row_size, c_col_size TYPE(dbcsr_type), POINTER :: matrix ${ctype}$, DIMENSION(:), POINTER :: block LOGICAL :: found CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_get_block_p(matrix, c_row + 1, c_col + 1, block, found, & c_row_size, c_col_size) c_block = c_loc(block) c_found = found END SUBROUTINE #:endfor SUBROUTINE c_dbcsr_complete_redistribute(c_matrix, c_redist, c_keep_sparsity, c_summation) & BIND(C, name="c_dbcsr_complete_redistribute") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(c_ptr), INTENT(IN), VALUE :: c_redist LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_keep_sparsity, c_summation TYPE(dbcsr_type), POINTER :: matrix, redist LOGICAL, POINTER :: keep_sparsity, summation CALL c_f_pointer(c_matrix, matrix) CALL c_f_pointer(c_redist, redist) #:set vars = ['keep_sparsity', 'summation'] #:for var in vars NULLIFY (${var}$) IF (PRESENT(c_${var}$)) THEN ALLOCATE (${var}$) ${var}$ = c_${var}$ END IF #:endfor CALL dbcsr_complete_redistribute(matrix, redist, keep_sparsity, summation) END SUBROUTINE SUBROUTINE c_dbcsr_filter(c_matrix, c_eps, c_method, c_use_absolute, c_filter_diag) & BIND(C, name="c_dbcsr_filter") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix REAL(kind=c_double), INTENT(IN) :: c_eps INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_method LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_use_absolute, c_filter_diag TYPE(dbcsr_type), POINTER :: matrix LOGICAL, POINTER :: use_absolute, filter_diag CALL c_f_pointer(c_matrix, matrix) #:set vars = ['use_absolute', 'filter_diag'] #:for var in vars NULLIFY (${var}$) IF (PRESENT(c_${var}$)) THEN ALLOCATE (${var}$) ${var}$ = c_${var}$ END IF #:endfor CALL dbcsr_filter(matrix, c_eps, c_method, use_absolute, filter_diag) #:for var in vars IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$) #:endfor END SUBROUTINE SUBROUTINE c_dbcsr_get_block_diag(c_matrix, c_diag) & BIND(C, name="c_dbcsr_get_block_diag") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(c_ptr), INTENT(INOUT) :: c_diag TYPE(dbcsr_type), POINTER :: matrix, diag CALL c_f_pointer(c_matrix, matrix) IF (C_ASSOCIATED(c_diag)) THEN CALL c_f_pointer(c_diag, diag) ELSE ALLOCATE (diag) END IF CALL dbcsr_get_block_diag(matrix, diag) IF (.NOT. C_ASSOCIATED(c_diag)) c_diag = c_loc(diag) END SUBROUTINE SUBROUTINE c_dbcsr_transposed(c_transposed, c_normal, c_shallow_data_copy, & c_transpose_data, c_transpose_distribution, c_use_distribution) & BIND(C, name="c_dbcsr_transposed") TYPE(c_ptr), INTENT(INOUT) :: c_transposed TYPE(c_ptr), INTENT(IN), VALUE :: c_normal, c_use_distribution LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_shallow_data_copy, c_transpose_data, & c_transpose_distribution TYPE(dbcsr_type), POINTER :: transposed, normal LOGICAL, POINTER :: shallow_data_copy, transpose_data, & transpose_distribution TYPE(dbcsr_distribution_type), POINTER :: use_distribution ALLOCATE (transposed) CALL c_f_pointer(c_normal, normal) IF (C_ASSOCIATED(c_use_distribution)) & CALL c_f_pointer(c_use_distribution, use_distribution) #:set vars = ['shallow_data_copy', 'transpose_data', 'transpose_distribution'] #:for var in vars NULLIFY (${var}$) IF (PRESENT(c_${var}$)) THEN ALLOCATE (${var}$) ${var}$ = c_${var}$ END IF #:endfor CALL dbcsr_transposed(transposed, normal, shallow_data_copy, & transpose_data, transpose_distribution, use_distribution) c_transposed = c_loc(transposed) #:for var in vars IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$) #:endfor END SUBROUTINE SUBROUTINE c_dbcsr_copy(c_matrix_b, c_matrix_a, c_name, c_keep_sparsity, & c_shallow_data, c_keep_imaginary, c_matrix_type) & BIND(C, name="c_dbcsr_copy") TYPE(c_ptr), INTENT(INOUT) :: c_matrix_b TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a, c_name LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_keep_sparsity, c_shallow_data, & c_keep_imaginary CHARACTER(kind=c_char), INTENT(IN), OPTIONAL :: c_matrix_type TYPE(dbcsr_type), POINTER :: matrix_b, matrix_a CHARACTER(:, kind=c_char), ALLOCATABLE :: name LOGICAL, POINTER :: keep_sparsity, shallow_data, & keep_imaginary IF (C_ASSOCIATED(c_matrix_b)) THEN CALL c_f_pointer(c_matrix_b, matrix_b) ELSE ALLOCATE (matrix_b) END IF IF (C_ASSOCIATED(c_name)) CALL c_f_string(c_name, name) CALL c_f_pointer(c_matrix_a, matrix_a) #:set vars = ['keep_sparsity', 'shallow_data', 'keep_imaginary'] #:for var in vars NULLIFY (${var}$) IF (PRESENT(c_${var}$)) THEN ALLOCATE (${var}$) ${var}$ = c_${var}$ END IF #:endfor CALL dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, & shallow_data, keep_imaginary, c_matrix_type) #:for var in vars IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$) #:endfor IF (.NOT. C_ASSOCIATED(c_matrix_b)) c_matrix_b = c_loc(matrix_b) END SUBROUTINE SUBROUTINE c_dbcsr_copy_into_existing(c_matrix_b, c_matrix_a) & BIND(C, name="c_dbcsr_copy_into_existing") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a, c_matrix_b TYPE(dbcsr_type), POINTER :: matrix_b, matrix_a CALL c_f_pointer(c_matrix_a, matrix_a) CALL c_f_pointer(c_matrix_b, matrix_b) CALL dbcsr_copy_into_existing(matrix_b, matrix_a) END SUBROUTINE SUBROUTINE c_dbcsr_desymmetrize(c_matrix_a, c_matrix_b) & BIND(C, name="c_dbcsr_desymmetrize") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a TYPE(c_ptr), INTENT(INOUT) :: c_matrix_b TYPE(dbcsr_type), POINTER :: matrix_a, matrix_b CALL c_f_pointer(c_matrix_a, matrix_a) IF (C_ASSOCIATED(c_matrix_b)) THEN CALL c_f_pointer(c_matrix_b, matrix_b) ELSE ALLOCATE (matrix_b) END IF CALL dbcsr_desymmetrize(matrix_a, matrix_b) IF (.NOT. C_ASSOCIATED(c_matrix_b)) c_matrix_b = c_loc(matrix_b) END SUBROUTINE SUBROUTINE c_dbcsr_clear(c_dbcsr_mat) BIND(C, name="c_dbcsr_clear") TYPE(c_ptr), INTENT(INOUT) :: c_dbcsr_mat TYPE(dbcsr_type), POINTER :: dbcsr_mat CALL c_f_pointer(c_dbcsr_mat, dbcsr_mat) CALL dbcsr_clear(dbcsr_mat) c_dbcsr_mat = c_loc(dbcsr_mat) END SUBROUTINE ! block reservation !PUBLIC :: dbcsr_reserve_diag_blocks !PUBLIC :: dbcsr_reserve_block2d ! MODIFIED !!! PUBLIC :: dbcsr_reserve_blocks !PUBLIC :: dbcsr_reserve_all_blocks !-----------------------------------------------------------------! ! block_reservations ! !-----------------------------------------------------------------! SUBROUTINE c_dbcsr_reserve_diag_blocks(c_matrix) & BIND(C, name="c_dbcsr_reserve_diag_blocks") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_reserve_diag_blocks(matrix) END SUBROUTINE SUBROUTINE c_dbcsr_reserve_blocks(c_matrix, c_rows, c_cols, c_size) & BIND(C, name="c_dbcsr_reserve_blocks") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix INTEGER(kind=c_int), INTENT(IN), VALUE :: c_size INTEGER(kind=c_int), INTENT(IN) :: c_rows(c_size), c_cols(c_size) TYPE(dbcsr_type), POINTER:: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_reserve_blocks(matrix, c_rows + 1, c_cols + 1) END SUBROUTINE SUBROUTINE c_dbcsr_reserve_all_blocks(c_matrix) & BIND(C, name="c_dbcsr_reserve_all_blocks") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_reserve_all_blocks(matrix) END SUBROUTINE #:for n, nametype, base, prec, kind, type, dkind, normname, ctype in c_inst_params_float SUBROUTINE c_dbcsr_reserve_block2d_${nametype}$ (c_matrix, c_row, c_col, & c_block, c_row_size, c_col_size, c_transposed, c_existed) & BIND(C, name="c_dbcsr_reserve_block2d_${nametype}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix INTEGER(kind=c_int), INTENT(IN) :: c_row, c_col, c_row_size, c_col_size ${ctype}$, INTENT(IN), DIMENSION(c_row_size, c_col_size), TARGET :: c_block LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_transposed LOGICAL(kind=c_bool), INTENT(OUT), OPTIONAL :: c_existed TYPE(dbcsr_type), POINTER :: matrix ${type}$, DIMENSION(:, :), POINTER :: block LOGICAL, POINTER :: transposed LOGICAL, POINTER :: existed CALL c_f_pointer(c_matrix, matrix) block => c_block NULLIFY (transposed) NULLIFY (existed) IF (PRESENT(c_transposed)) THEN ALLOCATE (transposed) transposed = c_transposed END IF IF (PRESENT(c_existed)) ALLOCATE (existed) CALL dbcsr_reserve_block2d(matrix, c_row + 1, c_col + 1, block, transposed, existed) IF (PRESENT(c_existed)) c_existed = existed END SUBROUTINE #:endfor ! iterator !PUBLIC :: dbcsr_iterator_start !PUBLIC :: dbcsr_iterator_stop !PUBLIC :: dbcsr_iterator_blocks_left ! SOME MODS NEEDED PUBLIC :: dbcsr_iterator_next_block !-------------------------------! ! iterator ! !-------------------------------! SUBROUTINE c_dbcsr_iterator_stop(c_iterator) & BIND(C, name="c_dbcsr_iterator_stop") TYPE(c_ptr), INTENT(INOUT) :: c_iterator TYPE(dbcsr_iterator_type), POINTER :: iterator CALL c_f_pointer(c_iterator, iterator) CALL dbcsr_iterator_stop(iterator) IF (ASSOCIATED(iterator)) DEALLOCATE (iterator) c_iterator = c_null_ptr END SUBROUTINE SUBROUTINE c_dbcsr_iterator_start(c_iterator, c_matrix, c_shared, c_dynamic, & c_dynamic_byrows, c_contiguous_pointers, c_read_only) & BIND(C, name="c_dbcsr_iterator_start") TYPE(c_ptr), INTENT(INOUT) :: c_iterator TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_shared, c_dynamic, c_dynamic_byrows, & c_contiguous_pointers, c_read_only TYPE(dbcsr_iterator_type), POINTER :: iterator TYPE(dbcsr_type), POINTER :: matrix LOGICAL, POINTER :: shared, dynamic, dynamic_byrows, & contiguous_pointers, read_only ALLOCATE (iterator) CALL c_f_pointer(c_matrix, matrix) #:set vars = ['shared', 'dynamic', 'dynamic_byrows', 'contiguous_pointers', 'read_only'] #:for var in vars NULLIFY (${var}$) IF (PRESENT(c_${var}$)) THEN ALLOCATE (${var}$) ${var}$ = c_${var}$ END IF #:endfor CALL dbcsr_iterator_start(iterator, matrix, shared, dynamic, & dynamic_byrows, contiguous_pointers, read_only) c_iterator = c_loc(iterator) #:for var in vars IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$) #:endfor END SUBROUTINE FUNCTION c_dbcsr_iterator_blocks_left(c_iterator) RESULT(c_blocks_left) & BIND(C, name="c_dbcsr_iterator_blocks_left") TYPE(c_ptr), INTENT(IN), VALUE :: c_iterator TYPE(dbcsr_iterator_type), POINTER :: iterator LOGICAL(kind=c_bool) :: c_blocks_left CALL c_f_pointer(c_iterator, iterator) c_blocks_left = dbcsr_iterator_blocks_left(iterator) END FUNCTION SUBROUTINE c_dbcsr_iterator_next_block_index(c_iterator, c_row, c_column, c_blk, c_blk_p) & BIND(C, name="c_dbcsr_iterator_next_block_index") TYPE(c_ptr), INTENT(IN), VALUE :: c_iterator INTEGER(kind=c_int), INTENT(OUT) :: c_row, c_column, c_blk INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_blk_p TYPE(dbcsr_iterator_type), POINTER :: iterator CALL c_f_pointer(c_iterator, iterator) CALL dbcsr_iterator_next_block(iterator, c_row, c_column, c_blk, c_blk_p) c_row = c_row - 1 c_column = c_column - 1 c_blk = c_blk - 1 END SUBROUTINE #:for n, nametype, base, prec, kind, type, dkind, normname, ctype in c_inst_params_float SUBROUTINE c_dbcsr_iterator_next_2d_block_${nametype}$ (c_iterator, c_row, c_column, c_block, & c_transposed, c_block_number, & c_row_size, c_col_size, c_row_offset, c_col_offset) & BIND(C, name="c_dbcsr_iterator_next_2d_block_${nametype}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_iterator INTEGER(kind=c_int), INTENT(OUT) :: c_row, c_column TYPE(c_ptr), INTENT(INOUT) :: c_block LOGICAL(kind=c_bool), INTENT(OUT) :: c_transposed INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_block_number, c_row_size, & c_col_size, c_row_offset, & c_col_offset TYPE(dbcsr_iterator_type), POINTER :: iterator ${ctype}$, DIMENSION(:, :), POINTER :: block LOGICAL :: transposed CALL c_f_pointer(c_iterator, iterator) CALL dbcsr_iterator_next_block(iterator, c_row, c_column, block, & transposed, c_block_number, & c_row_size, c_col_size, c_row_offset, c_col_offset) c_row = c_row - 1 c_column = c_column - 1 IF (PRESENT(c_block_number)) c_block_number = c_block_number - 1 IF (PRESENT(c_row_offset)) c_row_offset = c_row_offset - 1 IF (PRESENT(c_col_offset)) c_col_offset = c_col_offset - 1 c_transposed = transposed c_block = c_loc(block) END SUBROUTINE #:endfor !--------------------------------------------------------! ! work operations ! !--------------------------------------------------------! ! SKIP PUBLIC :: dbcsr_add_block_node !PUBLIC :: dbcsr_put_block ! SKIP PUBLIC :: dbcsr_work_create ! SKIP PUBLIC :: dbcsr_verify_matrix ! SKIP PUBLIC :: dbcsr_add_work_coordinate ! SKIP PUBLIC :: dbcsr_get_wms_data_p ! MODIFIED PUBLIC :: dbcsr_get_data_p ! SKIP PUBLIC :: dbcsr_set_work_size ! SKIP PUBLIC :: dbcsr_finalize #:for n, nametype, base, prec, kind, type, dkind, normname, ctype in c_inst_params_float SUBROUTINE c_dbcsr_put_block2d_${nametype}$ (c_matrix, c_row, c_col, c_block, & c_row_size, c_col_size, c_summation, c_scale) & BIND(C, name="c_dbcsr_put_block2d_${nametype}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix INTEGER(kind=c_int), INTENT(IN), VALUE :: c_row, c_col, c_row_size, c_col_size ${ctype}$, INTENT(IN) :: c_block(c_row_size, c_col_size) LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_summation ${ctype}$, INTENT(IN), OPTIONAL :: c_scale TYPE(dbcsr_type), POINTER :: matrix LOGICAL :: summation CALL c_f_pointer(c_matrix, matrix) IF (PRESENT(c_summation)) THEN summation = c_summation CALL dbcsr_put_block(matrix, c_row + 1, c_col + 1, c_block, summation, c_scale) ELSE CALL dbcsr_put_block(matrix, c_row + 1, c_col + 1, c_block, scale=c_scale) END IF END SUBROUTINE SUBROUTINE c_dbcsr_get_data_${nametype}$ (c_matrix, c_data, c_data_size, c_select_data_type, c_lb, c_ub) & BIND(C, name="c_dbcsr_get_data_${nametype}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(c_ptr), INTENT(OUT) :: c_data INTEGER(kind=c_long_long), INTENT(OUT) :: c_data_size ${ctype}$, INTENT(IN) :: c_select_data_type INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_lb, c_ub INTEGER(kind=c_int), POINTER :: lb, ub TYPE(dbcsr_type), POINTER :: matrix ${ctype}$, DIMENSION(:), POINTER :: data CALL c_f_pointer(c_matrix, matrix) #:set vars = ['lb', 'ub'] #:for var in vars NULLIFY (${var}$) IF (PRESENT(c_${var}$)) THEN ALLOCATE (${var}$) ${var}$ = c_${var}$+1 END IF #:endfor data => dbcsr_get_data_p(matrix, c_select_data_type, lb, ub) c_data = c_loc(data) c_data_size = SIZE(data) END SUBROUTINE #:endfor !------------------------------------------------------------! ! replication ! !------------------------------------------------------------! !PUBLIC :: dbcsr_replicate_all !PUBLIC :: dbcsr_sum_replicated !PUBLIC :: dbcsr_distribute SUBROUTINE c_dbcsr_replicate_all(c_matrix) & BIND(C, name="c_dbcsr_replicate_all") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_replicate_all(matrix) END SUBROUTINE SUBROUTINE c_dbcsr_distribute(c_matrix, c_fast) & BIND(C, name="c_dbcsr_distribute") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_fast TYPE(dbcsr_type), POINTER :: matrix LOGICAL :: fast CALL c_f_pointer(c_matrix, matrix) IF (PRESENT(c_fast)) THEN fast = c_fast CALL dbcsr_distribute(matrix, fast) ELSE CALL dbcsr_distribute(matrix) END IF END SUBROUTINE SUBROUTINE c_dbcsr_sum_replicated(c_matrix) & BIND(C, name="c_dbcsr_sum_replicated") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_sum_replicated(matrix) END SUBROUTINE !PUBLIC :: dbcsr_norm_frobenius !PUBLIC :: dbcsr_norm_maxabsnorm !PUBLIC :: dbcsr_norm_column !PUBLIC :: dbcsr_hadamard_product !PUBLIC :: dbcsr_func_artanh !PUBLIC :: dbcsr_func_dtanh !PUBLIC :: dbcsr_func_inverse !PUBLIC :: dbcsr_func_tanh !PUBLIC :: dbcsr_print !PUBLIC :: dbcsr_print_block_sum !PUBLIC :: dbcsr_checksum !PUBLIC :: dbcsr_maxabs ! VECTOR? PUBLIC :: dbcsr_norm !PUBLIC :: dbcsr_gershgorin_norm !PUBLIC :: dbcsr_frobenius_norm !PUBLIC :: dbcsr_init_random !PUBLIC :: dbcsr_function_of_elements !PUBLIC :: dbcsr_triu !-----------------------------------------! ! high level matrix functions ! !-----------------------------------------! SUBROUTINE c_dbcsr_hadamard_product(c_matrix_a, c_matrix_b, c_matrix_c, c_b_assume_value) & BIND(C, name="c_dbcsr_hadamard_product") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a, c_matrix_b, c_matrix_c REAL(kind=c_double), INTENT(IN), OPTIONAL :: c_b_assume_value TYPE(dbcsr_type), POINTER :: matrix_a, matrix_b, matrix_c CALL c_f_pointer(c_matrix_a, matrix_a) CALL c_f_pointer(c_matrix_b, matrix_b) CALL c_f_pointer(c_matrix_c, matrix_c) CALL dbcsr_hadamard_product(matrix_a, matrix_b, matrix_c, c_b_assume_value) END SUBROUTINE SUBROUTINE c_dbcsr_print(c_matrix) bind(C, name="c_dbcsr_print") TYPE(c_ptr), INTENT(in), value :: c_matrix TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_print(matrix) ! Fortran and C may use different buffers for I/O, make sure we flush before returning: flush (default_output_unit) END SUBROUTINE SUBROUTINE c_dbcsr_print_block_sum(c_matrix, c_unit_nr) & BIND(C, name="c_dbcsr_print_block_sum") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_unit_nr TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_print_block_sum(matrix, c_unit_nr) FLUSH (default_output_unit) END SUBROUTINE FUNCTION c_dbcsr_checksum(c_matrix, c_local, c_pos) RESULT(c_checksum) & BIND(C, name="c_dbcsr_checksum") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_local, c_pos TYPE(dbcsr_type), POINTER :: matrix LOGICAL, POINTER :: local, pos REAL(kind=c_double) :: c_checksum CALL c_f_pointer(c_matrix, matrix) #:set vars = ['local','pos'] #:for var in vars NULLIFY (${var}$) IF (PRESENT(c_${var}$)) THEN ALLOCATE (${var}$) ${var}$ = c_${var}$ END IF #:endfor c_checksum = dbcsr_checksum(matrix, local, pos) #:for var in vars IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$) #:endfor END FUNCTION FUNCTION c_dbcsr_maxabs(c_matrix) RESULT(c_norm) & BIND(C, name="c_dbcsr_maxabs") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix REAL(kind=c_double) :: c_norm CALL c_f_pointer(c_matrix, matrix) c_norm = dbcsr_maxabs(matrix) END FUNCTION FUNCTION c_dbcsr_gershgorin_norm(c_matrix) RESULT(c_norm) & BIND(C, name="c_dbcsr_gershgorin_norm") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix REAL(kind=c_double) :: c_norm CALL c_f_pointer(c_matrix, matrix) c_norm = dbcsr_gershgorin_norm(matrix) END FUNCTION FUNCTION c_dbcsr_frobenius_norm(c_matrix, c_local) RESULT(c_norm) & BIND(C, name="c_dbcsr_frobenius_norm") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_local TYPE(dbcsr_type), POINTER :: matrix LOGICAL :: local REAL(kind=c_double) :: c_norm CALL c_f_pointer(c_matrix, matrix) IF (PRESENT(c_local)) THEN local = c_local c_norm = dbcsr_frobenius_norm(matrix, local) ELSE c_norm = dbcsr_frobenius_norm(matrix) END IF END FUNCTION SUBROUTINE c_dbcsr_norm_scalar(c_matrix, c_which_norm, c_norm_scalar) & BIND(C, name="c_dbcsr_norm_scalar") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix INTEGER(kind=c_int), INTENT(IN), VALUE :: c_which_norm REAL(kind=c_double), INTENT(OUT) :: c_norm_scalar TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_norm(matrix, c_which_norm, c_norm_scalar) END SUBROUTINE SUBROUTINE c_dbcsr_triu(c_matrix) BIND(C, name="c_dbcsr_triu") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_triu(matrix) END SUBROUTINE SUBROUTINE c_dbcsr_init_random(c_matrix, c_keep_sparsity) & BIND(C, name="c_dbcsr_init_random") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_keep_sparsity TYPE(dbcsr_type), POINTER :: matrix LOGICAL :: keep_sparsity CALL c_f_pointer(c_matrix, matrix) IF (PRESENT(c_keep_sparsity)) THEN keep_sparsity = c_keep_sparsity CALL dbcsr_init_random(matrix, keep_sparsity) ELSE CALL dbcsr_init_random(matrix) END IF END SUBROUTINE SUBROUTINE c_dbcsr_function_of_elements(c_matrix, c_func, c_a0, c_a1, c_a2) & BIND(C, name="c_dbcsr_function_of_elements") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix INTEGER(kind=c_int), INTENT(IN), VALUE :: c_func REAL(kind=c_double), INTENT(IN), OPTIONAL :: c_a0, c_a1, c_a2 TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_function_of_elements(matrix, c_func, c_a0, c_a1, c_a2) END SUBROUTINE ! ---------------------------------------------------- ! ! getters / setters ! ! ---------------------------------------------------- ! ! getters / setters !!PUBLIC :: dbcsr_get_info !!PUBLIC :: dbcsr_distribution_get !!PUBLIC :: dbcsr_setname !!PUBLIC :: dbcsr_get_matrix_type !!PUBLIC :: dbcsr_get_occupation !!PUBLIC :: dbcsr_nblkrows_total !!PUBLIC :: dbcsr_nblkcols_total ! ADDED LOCAL TOO !!PUBLIC :: dbcsr_get_num_blocks !!PUBLIC :: dbcsr_get_data_size !!PUBLIC :: dbcsr_has_symmetry !!PUBLIC :: dbcsr_nfullrows_total !!PUBLIC :: dbcsr_nfullcols_total !!PUBLIC :: dbcsr_get_stored_coordinates !!PUBLIC :: dbcsr_valid_index !!PUBLIC :: dbcsr_get_data_type FUNCTION c_dbcsr_nblkrows_total(c_matrix) RESULT(c_nblkrows_tot) & BIND(C, name="c_dbcsr_nblkrows_total") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix INTEGER(kind=c_int) :: c_nblkrows_tot CALL c_f_pointer(c_matrix, matrix) c_nblkrows_tot = dbcsr_nblkrows_total(matrix) END FUNCTION FUNCTION c_dbcsr_nblkcols_total(c_matrix) RESULT(c_nblkcols_tot) & BIND(C, name="c_dbcsr_nblkcols_total") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix INTEGER(kind=c_int) :: c_nblkcols_tot CALL c_f_pointer(c_matrix, matrix) c_nblkcols_tot = dbcsr_nblkcols_total(matrix) END FUNCTION FUNCTION c_dbcsr_nblkrows_local(c_matrix) RESULT(c_nblkrows_loc) & BIND(C, name="c_dbcsr_nblkrows_local") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix INTEGER(kind=c_int) :: c_nblkrows_loc CALL c_f_pointer(c_matrix, matrix) c_nblkrows_loc = dbcsr_nblkrows_local(matrix) END FUNCTION FUNCTION c_dbcsr_nblkcols_local(c_matrix) RESULT(c_nblkcols_loc) & BIND(C, name="c_dbcsr_nblkcols_local") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix INTEGER(kind=c_int) :: c_nblkcols_loc CALL c_f_pointer(c_matrix, matrix) c_nblkcols_loc = dbcsr_nblkcols_local(matrix) END FUNCTION SUBROUTINE c_dbcsr_get_info(c_matrix, c_nblkrows_total, c_nblkcols_total, & c_nfullrows_total, c_nfullcols_total, & c_nblkrows_local, c_nblkcols_local, & c_nfullrows_local, c_nfullcols_local, & c_my_prow, c_my_pcol, & c_local_rows, c_local_cols, c_proc_row_dist, c_proc_col_dist, & c_row_blk_size, c_col_blk_size, c_row_blk_offset, c_col_blk_offset, & c_distribution, c_name, c_matrix_type, c_data_type, & c_group) BIND(C, name="c_dbcsr_get_info") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_nblkrows_total, c_nblkcols_total, c_nfullrows_total, & c_nfullcols_total, c_nblkrows_local, c_nblkcols_local, c_nfullrows_local, & c_nfullcols_local, c_my_prow, c_my_pcol TYPE(c_ptr), INTENT(IN), VALUE :: c_local_rows, c_local_cols, c_proc_row_dist, & c_proc_col_dist, c_row_blk_size, c_col_blk_size, & c_row_blk_offset, c_col_blk_offset TYPE(c_ptr), INTENT(OUT), OPTIONAL :: c_distribution TYPE(c_ptr), INTENT(OUT), OPTIONAL :: c_name CHARACTER(kind=c_char), INTENT(OUT), OPTIONAL :: c_matrix_type INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_data_type, c_group TYPE(dbcsr_type), POINTER :: matrix INTEGER(kind=c_int), DIMENSION(:), POINTER :: f_local_rows, f_local_cols, f_proc_row_dist, & f_proc_col_dist, & f_row_blk_size, f_col_blk_size, & f_row_blk_offset, f_col_blk_offset ! copies for the following arrays INTEGER(kind=c_int), DIMENSION(:), POINTER :: local_rows, local_cols, proc_row_dist, & proc_col_dist, & row_blk_size, col_blk_size, & row_blk_offset, col_blk_offset TYPE(dbcsr_distribution_type), POINTER :: distribution CHARACTER(kind=c_char, len=:), POINTER :: name CALL c_f_pointer(c_matrix, matrix) ! Because the pointers passed are always null at the beginning, we cannot just pass them in this case ! we use if/else branches, but reduce their number by grouping some variables together ! and splitting the function into several calls #:set optvars = [['local_rows', 'local_cols'], & ['proc_row_dist', 'proc_col_dist'], & ['row_blk_size', 'col_blk_size'], & ['row_blk_offset', 'col_blk_offset']] #:set optgroups = [] ${gen_vargroups(optvars,optgroups)}$ #:set vars = ['local_rows', 'local_cols',& 'proc_row_dist', 'proc_col_dist',& 'row_blk_size', 'col_blk_size',& 'row_blk_offset', 'col_blk_offset'] ! This will generate 16 branches #:for i in range(len(optgroups)) ${print_groupif(optgroups,optvars,i,'C_ASSOCIATED','c_')}$ CALL dbcsr_get_info(matrix, c_nblkrows_total, c_nblkcols_total, & c_nfullrows_total, c_nfullcols_total, & c_nblkrows_local, c_nblkcols_local, & c_nfullrows_local, c_nfullcols_local, & c_my_prow, c_my_pcol & ${print_group(optgroups[i])}$, & matrix_type=c_matrix_type, data_type=c_data_type, & group=c_group) #:endfor $:"ENDIF" ! now take care of name and dist IF (PRESENT(c_name)) THEN ALLOCATE (CHARACTER(len=default_string_length) :: name) CALL dbcsr_get_info(matrix, name=name) name = TRIM(name)//char(0) c_name = c_loc(name) END IF IF (PRESENT(c_distribution)) THEN ALLOCATE (distribution) CALL dbcsr_get_info(matrix, distribution=distribution) c_distribution = c_loc(distribution) END IF #:set vars = ['local_rows', 'local_cols', 'proc_row_dist', 'proc_col_dist', & 'row_blk_size', 'col_blk_size', 'row_blk_offset', 'col_blk_offset'] #:for var in vars IF (C_ASSOCIATED(c_${var}$)) THEN CALL c_f_pointer(c_${var}$, f_${var}$, SHAPE(${var}$)) #:if var in ['local_rows', 'local_cols', 'row_blk_offset', 'col_blk_offset'] f_${var}$ = ${var}$-1 #:else f_${var}$ = ${var}$ #:endif NULLIFY (${var}$) END IF #:endfor END SUBROUTINE #:set infovars = ['local_rows', 'local_cols', 'proc_row_dist', 'proc_col_dist', & 'row_blk_size', 'col_blk_size', 'row_blk_offset', 'col_blk_offset'] #:for var in infovars SUBROUTINE c_dbcsr_get_${var}$ (c_matrix, c_${var}$, c_size) BIND(C, name="c_dbcsr_get_${var}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix INTEGER(kind=c_int), INTENT(IN), VALUE :: c_size INTEGER(kind=c_int), INTENT(INOUT), DIMENSION(c_size) :: c_${var}$ TYPE(dbcsr_type), POINTER :: matrix INTEGER(kind=c_int), DIMENSION(:), POINTER :: ${var}$ INTEGER :: i CALL c_f_pointer(c_matrix, matrix) NULLIFY (${var}$) CALL dbcsr_get_info(matrix=matrix, ${var}$=${var}$) #:if var in ['local_rows', 'local_cols', 'row_blk_offset', 'col_blk_offset'] DO i = 1, c_size c_${var}$ (i) = ${var}$ (i) - 1 END DO #:else DO i = 1, c_size c_${var}$ (i) = ${var}$ (i) END DO #:endif NULLIFY (${var}$) END SUBROUTINE #:endfor ! name, group SUBROUTINE c_dbcsr_get_name(c_matrix, c_name) BIND(C, name="c_dbcsr_get_name") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(c_ptr), INTENT(OUT) :: c_name TYPE(dbcsr_type), POINTER :: matrix CHARACTER(kind=c_char, len=:), POINTER :: name CALL c_f_pointer(c_matrix, matrix) NULLIFY (name) ALLOCATE (CHARACTER(len=default_string_length) :: name) CALL dbcsr_get_info(matrix=matrix, name=name) name = TRIM(name)//char(0) c_name = c_loc(name) END SUBROUTINE SUBROUTINE c_dbcsr_get_group(c_matrix, c_group) BIND(C, name="c_dbcsr_get_group_aux") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix INTEGER(kind=c_int), INTENT(OUT) :: c_group TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_get_info(matrix=matrix, group=c_group) END SUBROUTINE SUBROUTINE c_dbcsr_get_distribution(c_matrix, c_dist) & BIND(C, name="c_dbcsr_get_distribution") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(c_ptr), INTENT(OUT) :: c_dist TYPE(dbcsr_type), POINTER :: matrix TYPE(dbcsr_distribution_type), POINTER :: dist ALLOCATE (dist) CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_get_info(matrix=matrix, distribution=dist) c_dist = c_loc(dist) END SUBROUTINE SUBROUTINE c_dbcsr_distribution_get(c_dist, c_row_dist, c_col_dist, & c_nrows, c_ncols, c_has_threads, & c_group, c_mynode, c_numnodes, c_nprows, & c_npcols, c_myprow, c_mypcol, c_pgrid, & c_subgroups_defined, c_prow_group, c_pcol_group) & BIND(C, name="c_dbcsr_distribution_get_aux") TYPE(c_ptr), INTENT(IN), VALUE :: c_dist TYPE(c_ptr), INTENT(OUT), OPTIONAL :: c_row_dist, c_col_dist INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_nrows, c_ncols LOGICAL(kind=c_bool), INTENT(OUT), OPTIONAL :: c_has_threads INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_group, c_mynode, c_numnodes, c_nprows, c_npcols, & c_myprow, c_mypcol TYPE(c_ptr), INTENT(OUT), OPTIONAL :: c_pgrid LOGICAL(kind=c_bool), INTENT(OUT), OPTIONAL :: c_subgroups_defined INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_prow_group, c_pcol_group TYPE(dbcsr_distribution_type), POINTER :: dist INTEGER, DIMENSION(:), POINTER :: row_dist, col_dist LOGICAL, POINTER :: has_threads INTEGER, DIMENSION(:, :), POINTER :: pgrid LOGICAL, POINTER :: subgroups_defined CALL c_f_pointer(c_dist, dist) #:set bools = ['has_threads', 'subgroups_defined'] #:for var in bools NULLIFY (${var}$) IF (PRESENT(c_${var}$)) THEN ALLOCATE (${var}$) END IF #:endfor #:set optvars = [['row_dist'], ['col_dist'], ['pgrid']] #:set optgroups = [] ${gen_vargroups(optvars,optgroups)}$ #:for i in range(len(optgroups)) ${print_groupif(optgroups,optvars,i,'PRESENT','c_')}$ CALL dbcsr_distribution_get(dist=dist, nrows=c_nrows, ncols=c_ncols, & has_threads=has_threads, & group=c_group, mynode=c_mynode, numnodes=c_numnodes, & nprows=c_nprows, npcols=c_npcols, myprow=c_myprow, mypcol=c_mypcol, & subgroups_defined=subgroups_defined, & prow_group=c_prow_group, pcol_group=c_pcol_group & ${print_group(optgroups[i])}$) #:endfor $:"ENDIF" #:for var in bools IF (PRESENT(c_${var}$)) THEN c_${var}$ = ${var}$ DEALLOCATE (${var}$) END IF #:endfor #:set list = ['row_dist', 'col_dist', 'pgrid'] #:for var in list IF (PRESENT(c_${var}$)) THEN c_${var}$ = c_loc(${var}$) END IF #:endfor END SUBROUTINE SUBROUTINE c_dbcsr_get_stored_coordinates(c_matrix, row, col, processor) & bind(C, name="c_dbcsr_get_stored_coordinates") TYPE(c_ptr), INTENT(in), value :: c_matrix INTEGER(kind=c_int), INTENT(in), value :: row, col INTEGER(kind=c_int), INTENT(out) :: processor TYPE(dbcsr_type), POINTER :: matrix CALL c_f_pointer(c_matrix, matrix) CALL dbcsr_get_stored_coordinates(matrix, row + 1, col + 1, processor) END SUBROUTINE SUBROUTINE c_dbcsr_setname(c_matrix, c_newname) & BIND(C, name="c_dbcsr_setname") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix, c_newname TYPE(dbcsr_type), POINTER :: matrix CHARACTER(:, kind=c_char), ALLOCATABLE :: newname CALL c_f_pointer(c_matrix, matrix) CALL c_f_string(c_newname, newname) CALL dbcsr_setname(matrix, newname) END SUBROUTINE FUNCTION c_dbcsr_get_matrix_type(c_matrix) RESULT(c_matrix_type) & BIND(C, name="c_dbcsr_get_matrix_type") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix CHARACTER(kind=c_char) :: c_matrix_type CALL c_f_pointer(c_matrix, matrix) c_matrix_type = dbcsr_get_matrix_type(matrix) END FUNCTION FUNCTION c_dbcsr_get_occupation(c_matrix) RESULT(c_occupation) & BIND(C, name="c_dbcsr_get_occupation") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix REAL(KIND=c_double) :: c_occupation CALL c_f_pointer(c_matrix, matrix) c_occupation = dbcsr_get_occupation(matrix) END FUNCTION FUNCTION c_dbcsr_get_num_blocks(c_matrix) RESULT(c_num_blocks) & BIND(C, name="c_dbcsr_get_num_blocks") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix INTEGER(kind=c_int) :: c_num_blocks CALL c_f_pointer(c_matrix, matrix) c_num_blocks = dbcsr_get_num_blocks(matrix) END FUNCTION FUNCTION c_dbcsr_get_data_size(c_matrix) RESULT(c_data_size) & BIND(C, name="c_dbcsr_get_data_size") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix INTEGER(kind=c_int) :: c_data_size CALL c_f_pointer(c_matrix, matrix) c_data_size = dbcsr_get_data_size(matrix) END FUNCTION FUNCTION c_dbcsr_has_symmetry(c_matrix) RESULT(c_has_symmetry) & BIND(C, name="c_dbcsr_has_symmetry") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix LOGICAL(kind=c_bool) :: c_has_symmetry CALL c_f_pointer(c_matrix, matrix) c_has_symmetry = dbcsr_has_symmetry(matrix) END FUNCTION FUNCTION c_dbcsr_nfullrows_total(c_matrix) RESULT(c_nfullrows_total) & BIND(C, name="c_dbcsr_nfullrows_total") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix INTEGER(kind=c_int) :: c_nfullrows_total CALL c_f_pointer(c_matrix, matrix) c_nfullrows_total = dbcsr_nfullrows_total(matrix) END FUNCTION FUNCTION c_dbcsr_nfullcols_total(c_matrix) RESULT(c_nfullcols_total) & BIND(C, name="c_dbcsr_nfullcols_total") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix INTEGER(kind=c_int) :: c_nfullcols_total CALL c_f_pointer(c_matrix, matrix) c_nfullcols_total = dbcsr_nfullcols_total(matrix) END FUNCTION FUNCTION c_dbcsr_valid_index(c_matrix) RESULT(c_valid_index) & BIND(C, name="c_dbcsr_valid_index") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix LOGICAL(kind=c_bool) :: c_valid_index CALL c_f_pointer(c_matrix, matrix) c_valid_index = dbcsr_valid_index(matrix) END FUNCTION FUNCTION c_dbcsr_get_data_type(c_matrix) RESULT(c_data_type) & BIND(C, name="c_dbcsr_get_data_type") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix TYPE(dbcsr_type), POINTER :: matrix INTEGER(kind=c_int) :: c_data_type CALL c_f_pointer(c_matrix, matrix) c_data_type = dbcsr_get_data_type(matrix) END FUNCTION ! ---------------------------------------- ! ! other ! ! ---------------------------------------- ! SUBROUTINE c_dbcsr_binary_write(c_matrix, c_filepath) & BIND(C, name="c_dbcsr_binary_write") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix, c_filepath TYPE(dbcsr_type), POINTER :: matrix CHARACTER(:, kind=c_char), ALLOCATABLE :: filepath CALL c_f_pointer(c_matrix, matrix) CALL c_f_string(c_filepath, filepath) CALL dbcsr_binary_write(matrix, filepath) END SUBROUTINE SUBROUTINE c_dbcsr_binary_read(c_filepath, c_distribution, c_matrix_new) & BIND(C, name="c_dbcsr_binary_read") TYPE(c_ptr), INTENT(IN), VALUE :: c_filepath, c_distribution TYPE(c_ptr), INTENT(INOUT) :: c_matrix_new CHARACTER(:, kind=c_char), ALLOCATABLE :: filepath TYPE(dbcsr_distribution_type), POINTER :: distribution TYPE(dbcsr_type), POINTER :: matrix_new CALL c_f_string(c_filepath, filepath) CALL c_f_pointer(c_distribution, distribution) ALLOCATE (matrix_new) CALL dbcsr_binary_read(filepath, distribution, matrix_new) c_matrix_new = c_loc(matrix_new) END SUBROUTINE SUBROUTINE c_free_string(c_string) BIND(C, name="c_free_string") TYPE(c_ptr), INTENT(INOUT) :: c_string CHARACTER(:, kind=c_char), POINTER :: string CALL c_f_pointer(c_string, string) DEALLOCATE (string) c_string = c_null_ptr END SUBROUTINE c_free_string END MODULE ================================================ FILE: src/mm/PACKAGE ================================================ { "description": "Matrix matrix multiplication", "archive": "libdbcsr", "requires": ["../mpi", "../base", "../core", "../acc", "../data", "../dist", "../block", "../ops", "../acc/libsmm_acc", "../utils", "../work"], "implicit": "SMM_.*" } ================================================ FILE: src/mm/dbcsr_acc_operations.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_acc_operations !! Accelerator support for DBCSR USE ISO_C_BINDING, ONLY: C_INT, & C_PTR, & C_CHAR, & C_LOC USE dbcsr_acc_devmem, ONLY: acc_devmem_cptr, & acc_devmem_type USE dbcsr_acc_stream, ONLY: acc_stream_cptr, & acc_stream_type, & acc_stream_synchronize USE dbcsr_config, ONLY: max_kernel_dim USE dbcsr_mm_types, ONLY: dbcsr_ps_width USE dbcsr_kinds, ONLY: real_8, dp USE dbcsr_types, ONLY: dbcsr_type_real_8 #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE LOGICAL, PARAMETER :: careful_mod = .FALSE. PUBLIC :: dbcsr_acc_do_mm_stack, dbcsr_acc_transpose #if defined (__DBCSR_ACC) INTERFACE FUNCTION libsmm_acc_process_cu(param_stack_host, param_stack_dev, stack_size, & data_type, a_data, b_data, c_data, m_max, & n_max, k_max, max_kernel_dim, def_mnk, & stack_stream_ptr, c_stream_ptr) & RESULT(istat) & BIND(C, name="libsmm_acc_process") IMPORT TYPE(C_PTR), INTENT(IN), VALUE :: param_stack_host TYPE(C_PTR), INTENT(IN), VALUE :: param_stack_dev INTEGER(KIND=C_INT), INTENT(IN), VALUE :: stack_size, data_type TYPE(C_PTR), INTENT(IN), VALUE :: a_data, b_data, c_data INTEGER(KIND=C_INT), INTENT(IN), VALUE :: m_max, n_max, k_max INTEGER(KIND=C_INT), INTENT(IN), VALUE :: max_kernel_dim, def_mnk TYPE(C_PTR), VALUE :: stack_stream_ptr, c_stream_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION libsmm_acc_process_cu FUNCTION libsmm_acc_transpose_cu(trs_stack, offset, nblks, buffer, & data_type, m, n, max_kernel_dim, stream_ptr) & RESULT(istat) & BIND(C, name="libsmm_acc_transpose") IMPORT TYPE(C_PTR), INTENT(IN), VALUE :: trs_stack INTEGER(KIND=C_INT), INTENT(IN), VALUE :: offset, nblks TYPE(C_PTR), INTENT(IN), VALUE :: buffer INTEGER(KIND=C_INT), INTENT(IN), VALUE :: data_type, m, n INTEGER(KIND=C_INT), INTENT(IN), VALUE :: max_kernel_dim TYPE(C_PTR), VALUE :: stream_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION libsmm_acc_transpose_cu END INTERFACE #endif CONTAINS SUBROUTINE dbcsr_acc_do_mm_stack(param_stack_host, param_stack_dev, stack_size, data_type, & a_data, b_data, c_data, m_max, n_max, k_max, def_mnk, & stack_stream, c_stream, success, generated_acc_untuned) !! Launch an accelerated kernel for processing a stack. INTEGER, DIMENSION(:, :), TARGET, INTENT(IN) :: param_stack_host TYPE(acc_devmem_type), INTENT(IN) :: param_stack_dev INTEGER, INTENT(IN) :: stack_size INTEGER, INTENT(IN) :: data_type TYPE(acc_devmem_type), INTENT(IN) :: a_data, b_data TYPE(acc_devmem_type), INTENT(INOUT) :: c_data INTEGER, INTENT(IN) :: m_max, n_max, k_max LOGICAL, INTENT(IN) :: def_mnk TYPE(acc_stream_type), INTENT(IN) :: stack_stream, c_stream LOGICAL, INTENT(INOUT) :: success, generated_acc_untuned #if ! defined (__DBCSR_ACC) MARK_USED(param_stack_host) MARK_USED(param_stack_dev) MARK_USED(stack_size) MARK_USED(data_type) MARK_USED(a_data) MARK_USED(b_data) MARK_USED(c_data) MARK_USED(m_max) MARK_USED(n_max) MARK_USED(k_max) MARK_USED(def_mnk) MARK_USED(stack_stream) MARK_USED(c_stream) MARK_USED(success) MARK_USED(generated_acc_untuned) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_acc_do_mm_stack' INTEGER :: error_handle, istat INTEGER(KIND=C_INT) :: mnk INTEGER, DIMENSION(:, :), POINTER :: param_stack_host_ptr param_stack_host_ptr => param_stack_host(:, :) IF (careful_mod) CALL timeset(routineN, error_handle) mnk = 0 IF (def_mnk) mnk = 1 ! Call batched matrix-matrix multiplication in libsmm_acc istat = libsmm_acc_process_cu(C_LOC(param_stack_host_ptr), & acc_devmem_cptr(param_stack_dev), & INT(stack_size, KIND=C_INT), & INT(data_type, KIND=C_INT), & acc_devmem_cptr(a_data), & acc_devmem_cptr(b_data), & acc_devmem_cptr(c_data), & INT(m_max, KIND=C_INT), & INT(n_max, KIND=C_INT), & INT(k_max, KIND=C_INT), & INT(max_kernel_dim, KIND=C_INT), & mnk, acc_stream_cptr(stack_stream), acc_stream_cptr(c_stream)) ! IF (istat == -10) DBCSR_ABORT("Data type not supported with GPU backend.") ! IF (istat == -20) DBCSR_ABORT("GPU kernel not JIT-ed.") success = (istat .GE. 0) ! false if no suitable kernel was found generated_acc_untuned = (istat == 10) ! Generated default untuned kernel IF (careful_mod) CALL timestop(error_handle) #endif END SUBROUTINE dbcsr_acc_do_mm_stack SUBROUTINE dbcsr_acc_transpose(trs_stack, offset, nblks, data_type, buffer, m, n, stream) !! Launch an accelerated transpose kernel TYPE(acc_devmem_type), INTENT(IN) :: trs_stack INTEGER, INTENT(IN) :: offset INTEGER, INTENT(IN) :: nblks INTEGER, INTENT(IN) :: data_type TYPE(acc_devmem_type), INTENT(IN) :: buffer INTEGER, INTENT(IN) :: m, n TYPE(acc_stream_type), INTENT(IN) :: stream #if ! defined (__DBCSR_ACC) MARK_USED(trs_stack) MARK_USED(offset) MARK_USED(nblks) MARK_USED(data_type) MARK_USED(buffer) MARK_USED(m) MARK_USED(n) MARK_USED(stream) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_acc_transpose' INTEGER :: error_handle, istat IF (careful_mod) CALL timeset(routineN, error_handle) istat = 0 ! Call batched in-place transpose in libsmm_acc IF (m .LE. max_kernel_dim .AND. & n .LE. max_kernel_dim) THEN istat = libsmm_acc_transpose_cu(acc_devmem_cptr(trs_stack), & INT(offset, KIND=C_INT), & INT(nblks, KIND=C_INT), & acc_devmem_cptr(buffer), & INT(data_type, KIND=C_INT), & INT(m, KIND=C_INT), & INT(n, KIND=C_INT), & INT(max_kernel_dim, KIND=C_INT), & acc_stream_cptr(stream)) END IF IF (istat /= 0) DBCSR_ABORT("something went wrong.") IF (careful_mod) CALL timestop(error_handle) #endif END SUBROUTINE dbcsr_acc_transpose END MODULE dbcsr_acc_operations ================================================ FILE: src/mm/dbcsr_mm.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_mm !! Entry point of the dbcsr matrix-matrix multiplication. !! Modification history: !! - 2016-08 Code organization (Alfio Lazzaro). USE dbcsr_acc_device, ONLY: dbcsr_acc_clear_errors USE dbcsr_acc_stream, ONLY: acc_stream_associated, & acc_stream_create, & acc_stream_destroy USE dbcsr_array_types, ONLY: array_data, & array_equality, & array_hold, & array_i1d_obj, & array_nullify, & array_release USE dbcsr_config, ONLY: dbcsr_cfg, & dbcsr_set_config, & default_resize_factor, & use_acc USE dbcsr_data_methods, ONLY: dbcsr_data_set_size_referenced, & dbcsr_scalar_are_equal, & dbcsr_scalar_one, & dbcsr_scalar_zero USE dbcsr_dist_methods, ONLY: & dbcsr_distribution_col_dist, dbcsr_distribution_get_num_images_1d, & dbcsr_distribution_has_threads, dbcsr_distribution_hold, dbcsr_distribution_make_threads, & dbcsr_distribution_mp, dbcsr_distribution_ncols, dbcsr_distribution_no_threads, & dbcsr_distribution_nrows, dbcsr_distribution_release, dbcsr_distribution_row_dist USE dbcsr_dist_util, ONLY: dbcsr_checksum, & dbcsr_verify_matrix USE dbcsr_index_operations, ONLY: dbcsr_make_index_canonical USE dbcsr_io, ONLY: dbcsr_print USE dbcsr_kinds, ONLY: dp, & int_8, & real_8 USE dbcsr_machine, ONLY: default_output_unit USE dbcsr_mem_methods, ONLY: dbcsr_mempool_clear, & dbcsr_mempool_destruct, & dbcsr_mempool_limit_capacity, & dbcsr_memtype_setup USE dbcsr_methods, ONLY: & dbcsr_col_block_offsets, dbcsr_col_block_sizes, dbcsr_destroy_array, dbcsr_distribution, & dbcsr_get_matrix_type, dbcsr_has_symmetry, dbcsr_image_dist_release, dbcsr_nblkcols_total, & dbcsr_nfullcols_total, dbcsr_nfullrows_total, dbcsr_release, dbcsr_release_locals, & dbcsr_row_block_offsets, dbcsr_get_data_type USE dbcsr_mm_3D, ONLY: buffers_release, & dbcsr_make_buffers, & get_max_layers_3D, & make_layers_3D_C_reduction, & multiply_3D, & release_layers_3D_C_reduction, & request_sync_mult USE dbcsr_mm_cannon, ONLY: make_m2s, & multiply_cannon, & multiply_cannon_g2g USE dbcsr_mm_common, ONLY: & dbcsr_mpi_statistics, max_memory, memtype_abpanel_1, memtype_abpanel_2, & memtype_mpi_buffer, memtype_mpi_product, memtype_product_wm, memtype_trsbuffer_1, & memtype_normsbuf, memtype_offsetsbuf, memtype_nelemsbuf, & memtype_trsbuffer_2, num_multiplications, stream_1, stream_2 USE dbcsr_mm_dist_operations, ONLY: dbcsr_create_image_dist, & dbcsr_make_dists_dense, & dbcsr_reset_locals, & make_sizes_dense USE dbcsr_mm_multrec, ONLY: dbcsr_mm_multrec_lib_finalize, & dbcsr_mm_multrec_lib_init USE dbcsr_mp_methods, ONLY: dbcsr_mp_group, & dbcsr_mp_npcols, & dbcsr_mp_nprows, & dbcsr_mp_numnodes USE dbcsr_mpiwrap, ONLY: mp_get_library_version, & mp_isync, & mp_max, & mp_max_library_version_string, & mp_min, & mp_request_null, & mp_sum, & mp_wait, mp_comm_type USE dbcsr_operations, ONLY: dbcsr_conjg, & dbcsr_copy, & dbcsr_get_occupation, & dbcsr_may_be_dense, & dbcsr_scale USE dbcsr_string_utilities, ONLY: uppercase USE dbcsr_transformations, ONLY: dbcsr_make_dense, & dbcsr_make_undense, & dbcsr_make_untransposed_blocks, & dbcsr_new_transposed USE dbcsr_types, ONLY: & dbcsr_2d_array_type, dbcsr_conjugate_transpose, dbcsr_distribution_obj, & dbcsr_imagedistribution_obj, dbcsr_mp_obj, dbcsr_mpi_size_limits, dbcsr_no_transpose, & dbcsr_scalar_type, dbcsr_transpose, dbcsr_type, dbcsr_type_antisymmetric, & dbcsr_type_real_8 USE dbcsr_work_operations, ONLY: dbcsr_add_wm_from_matrix, & dbcsr_finalize, & dbcsr_work_create USE dbcsr_mm_sched, ONLY: dbcsr_mm_sched_print_statistics #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm' LOGICAL, PARAMETER :: debug_mod = .FALSE. LOGICAL, PARAMETER :: careful_mod = .FALSE. REAL, PRIVATE, SAVE :: marketing_flops = 0 PUBLIC :: dbcsr_multiply_lib_init, dbcsr_multiply_lib_finalize PUBLIC :: dbcsr_multiply_print_statistics PUBLIC :: dbcsr_multiply_clear_mempools PUBLIC :: dbcsr_multiply_generic CONTAINS SUBROUTINE dbcsr_multiply_lib_init() !! Initialize the library INTEGER :: ithread, nthreads nthreads = 1; ithread = 0 !$ nthreads = OMP_GET_NUM_THREADS(); ithread = OMP_GET_THREAD_NUM() CALL dbcsr_mm_multrec_lib_init() !$OMP MASTER dbcsr_mpi_statistics%last_mpi_ranks_used = 0 dbcsr_mpi_statistics%nimages = -1 dbcsr_mpi_statistics%nexchanged = 0 dbcsr_mpi_statistics%data_size = 0 dbcsr_mpi_statistics%data_size(:, 2) = HUGE(dbcsr_mpi_statistics%data_size(1, 2)) dbcsr_mpi_statistics%data_size_breakdown = 0 marketing_flops = 0 max_memory = 0 ALLOCATE (memtype_product_wm(0:nthreads - 1)) !$OMP END MASTER !$OMP BARRIER ! Each thread has its own working-matrix and its own mempool ALLOCATE (memtype_product_wm(ithread)%p) CALL dbcsr_memtype_setup(memtype_product_wm(ithread)%p, has_pool=dbcsr_cfg%use_mempools_cpu%val .OR. use_acc()) CALL dbcsr_mempool_limit_capacity(memtype_product_wm(ithread)%p%pool, capacity=MAX(1, dbcsr_cfg%num_layers_3D%val)) END SUBROUTINE dbcsr_multiply_lib_init SUBROUTINE dbcsr_multiply_lib_finalize() !! Finalize the library CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_multiply_lib_finalize' INTEGER :: error_handle, ithread CALL timeset(routineN, error_handle) CALL dbcsr_mm_multrec_lib_finalize() ithread = 0 !$ ithread = omp_get_thread_num() ! Each thread has its own working-matrix and its own mempool IF (ASSOCIATED(memtype_product_wm(ithread)%p%pool)) & CALL dbcsr_mempool_destruct(memtype_product_wm(ithread)%p%pool) DEALLOCATE (memtype_product_wm(ithread)%p) !$OMP BARRIER !$OMP MASTER DEALLOCATE (memtype_product_wm) ! Deallocate buffers CALL buffers_release() ! Release 3D communicators CALL release_layers_3D_C_reduction(release_buffers=.TRUE.) IF (ASSOCIATED(memtype_trsbuffer_1%pool)) & CALL dbcsr_mempool_destruct(memtype_trsbuffer_1%pool) IF (ASSOCIATED(memtype_trsbuffer_2%pool)) & CALL dbcsr_mempool_destruct(memtype_trsbuffer_2%pool) IF (ASSOCIATED(memtype_normsbuf%pool)) & CALL dbcsr_mempool_destruct(memtype_normsbuf%pool) IF (ASSOCIATED(memtype_offsetsbuf%pool)) & CALL dbcsr_mempool_destruct(memtype_offsetsbuf%pool) IF (ASSOCIATED(memtype_nelemsbuf%pool)) & CALL dbcsr_mempool_destruct(memtype_nelemsbuf%pool) IF (ASSOCIATED(memtype_abpanel_1%pool)) & CALL dbcsr_mempool_destruct(memtype_abpanel_1%pool) IF (ASSOCIATED(memtype_abpanel_2%pool)) & CALL dbcsr_mempool_destruct(memtype_abpanel_2%pool) IF (ASSOCIATED(memtype_mpi_product%pool)) & CALL dbcsr_mempool_destruct(memtype_mpi_product%pool) IF (acc_stream_associated(stream_1)) & CALL acc_stream_destroy(stream_1) IF (acc_stream_associated(stream_2)) & CALL acc_stream_destroy(stream_2) !$OMP END MASTER CALL timestop(error_handle) END SUBROUTINE dbcsr_multiply_lib_finalize SUBROUTINE dbcsr_multiply_print_statistics(group, output_unit) !! Print statistics TYPE(mp_comm_type), INTENT(IN) :: group INTEGER, INTENT(IN) :: output_unit INTEGER(KIND=int_8) :: total_nexchanged INTEGER(KIND=int_8), & DIMENSION(SIZE(dbcsr_mpi_size_limits) + 1, 2, 2) :: total_recv_breakdown REAL :: average, total_marketing_flops, & total_max_memory REAL, DIMENSION(2) :: max_recv_data, min_recv_data, & total_recv_data INTEGER :: ilimit, isqrt, isqrt2 CHARACTER(len=1000) :: msg call dbcsr_mm_sched_print_statistics(group, output_unit) total_max_memory = max_memory CALL mp_max(total_max_memory, group) total_marketing_flops = marketing_flops CALL mp_sum(total_marketing_flops, group) total_nexchanged = dbcsr_mpi_statistics%nexchanged CALL mp_sum(total_nexchanged, group) total_recv_data(:) = dbcsr_mpi_statistics%data_size(:, 1) CALL mp_sum(total_recv_data, group) min_recv_data(:) = dbcsr_mpi_statistics%data_size(:, 2) CALL mp_min(min_recv_data, group) max_recv_data(:) = dbcsr_mpi_statistics%data_size(:, 3) CALL mp_max(max_recv_data, group) IF (dbcsr_mpi_statistics%nexchanged .GT. 0) THEN average = SUM(total_recv_data(:))/REAL(total_nexchanged) ELSE average = 0 min_recv_data = 0 END IF total_recv_breakdown(:, :, :) = dbcsr_mpi_statistics%data_size_breakdown(:, :, :) CALL mp_sum(total_recv_breakdown, group) IF (output_unit > 0) THEN WRITE (output_unit, '(A,T30,EN20.6)') " marketing flops", total_marketing_flops IF (dbcsr_mpi_statistics%nimages .GT. 0) THEN WRITE (UNIT=output_unit, FMT="(T2,A)") REPEAT("-", 79) WRITE (output_unit, '(A,T30,I20)') " # multiplications", num_multiplications WRITE (output_unit, '(A,T30,EN20.6)') " max memory usage/rank", total_max_memory WRITE (output_unit, '(A,T30,I20)') " # max total images/rank", dbcsr_mpi_statistics%nimages WRITE (output_unit, '(A,T30,I20)') " # max 3D layers", get_max_layers_3D() WRITE (output_unit, '(A,T30,I20)') " # MPI messages exchanged", total_nexchanged IF (total_nexchanged > 0) THEN ! omit noisy output in single-node case WRITE (output_unit, '(A)') " MPI messages size (bytes):" WRITE (output_unit, '(A,T30,EN20.6)') " total size", & SUM(total_recv_data(:)) WRITE (output_unit, '(A,T30,EN20.6)') " min size", & MINVAL(min_recv_data(:)) WRITE (output_unit, '(A,T30,EN20.6)') " max size", & MAXVAL(max_recv_data(:)) WRITE (output_unit, '(A,T30,EN20.6)') " average size", average WRITE (output_unit, '(A)') " MPI breakdown and total messages size (bytes):" WRITE (output_unit, '(A,I8,T40,I10,T55,I20)') " size <= ", dbcsr_mpi_size_limits(1), & SUM(total_recv_breakdown(1, 1, :)), SUM(total_recv_breakdown(1, 2, :)) DO ilimit = 2, SIZE(dbcsr_mpi_size_limits) WRITE (output_unit, '(A,I8,A,I8,T40,I10,T55,I20)') " ", dbcsr_mpi_size_limits(ilimit - 1), & " < size <= ", dbcsr_mpi_size_limits(ilimit), & SUM(total_recv_breakdown(ilimit, 1, :)), SUM(total_recv_breakdown(ilimit, 2, :)) END DO ilimit = SIZE(dbcsr_mpi_size_limits) WRITE (output_unit, '(A,I8,A,T40,I10,T55,I20)') " ", dbcsr_mpi_size_limits(ilimit), & " < size ", SUM(total_recv_breakdown(ilimit + 1, 1, :)), SUM(total_recv_breakdown(ilimit + 1, 2, :)) END IF END IF isqrt = NINT(SQRT(REAL(dbcsr_mpi_statistics%last_mpi_ranks_used, KIND=real_8))) isqrt2 = NINT(SQRT(REAL(dbcsr_mpi_statistics%last_mpi_ranks_used*2, KIND=real_8))) IF (isqrt*isqrt .NE. dbcsr_mpi_statistics%last_mpi_ranks_used) THEN WRITE (UNIT=output_unit, FMT="(T2,A)") REPEAT("-", 79) WRITE (UNIT=msg, FMT="(A,I0,A,2(I0,1X))") & "Using a non-square number of MPI ranks might lead to poor performance."// & " Used ranks: ", dbcsr_mpi_statistics%last_mpi_ranks_used, & " Suggested: ", isqrt**2, isqrt2**2 DBCSR_WARN(msg) END IF END IF END SUBROUTINE dbcsr_multiply_print_statistics SUBROUTINE dbcsr_multiply_clear_mempools() !! Deallocate memory contained in mempools INTEGER :: ithread ithread = 0 !$ ithread = omp_get_thread_num() ! Each thread has its own working-matrix and its own mempool IF (ASSOCIATED(memtype_product_wm(ithread)%p%pool)) & CALL dbcsr_mempool_clear(memtype_product_wm(ithread)%p%pool) !$OMP MASTER IF (ASSOCIATED(memtype_trsbuffer_1%pool)) & CALL dbcsr_mempool_clear(memtype_trsbuffer_1%pool) IF (ASSOCIATED(memtype_trsbuffer_2%pool)) & CALL dbcsr_mempool_clear(memtype_trsbuffer_2%pool) IF (ASSOCIATED(memtype_normsbuf%pool)) & CALL dbcsr_mempool_clear(memtype_normsbuf%pool) IF (ASSOCIATED(memtype_offsetsbuf%pool)) & CALL dbcsr_mempool_clear(memtype_offsetsbuf%pool) IF (ASSOCIATED(memtype_nelemsbuf%pool)) & CALL dbcsr_mempool_clear(memtype_nelemsbuf%pool) IF (ASSOCIATED(memtype_abpanel_1%pool)) & CALL dbcsr_mempool_clear(memtype_abpanel_1%pool) IF (ASSOCIATED(memtype_abpanel_2%pool)) & CALL dbcsr_mempool_clear(memtype_abpanel_2%pool) !$OMP END MASTER END SUBROUTINE dbcsr_multiply_clear_mempools SUBROUTINE dbcsr_multiply_generic(transa, transb, & alpha, matrix_a, matrix_b, beta, matrix_c, & first_row, last_row, first_column, last_column, first_k, last_k, & retain_sparsity, filter_eps, & flop) !! Performs a multiplication of two dbcsr_type matrices, !! as C := alpha * op( A ) * op( B ) + beta * C. !! !! Matrices m_a and m_b are multiplied into the m_c product matrix. If the !! dist2d parameter is not specified, then a new distribution_2d is !! determined for it. !! !! Non-equal column dimensions of the right and product matrices !! The right and product matrix are allowed to have different !! (full) column dimensions. If they differ, there are certain !! peculiar behaviors, then the last_column is effectively set to !! the minimal of the two. !! !! Beta scaling of the right product matrix !! If the effective last_column is less than the full column !! dimension of the product matrix, then the scaling of the !! product matrix with beta is limited to the submatrix specified !! by last_column. !! !! Filtering !! The filter_eps parameter, if present, is used to filter the !! resulting matrix. The filtering criterion is whether the !! block-frobenius norm is less than the specified epsilon. !! One-the-fly filtering is done such that individual !! multiplications are skipped if the product of the frobenius !! norms of the left- and right-matrix blocks are less than the !! specified epsilon divided by the maximum number of possible !! multiplies in each row. In addition a final filtering is done !! as well with the same epsilon value. CHARACTER(LEN=1), INTENT(IN) :: transa, transb !! specifies the form of op( A ) to be used in the matrix multiplication transa = 'N' or 'n', op( A ) = A. transa = 'T' or !! 't', op( A ) = transpose(A). transa = 'C' or 'c', op( A ) = transpose(conjg(A)). !! specifies the form of op( B ) to be used in the matrix multiplication transb = 'N' or 'n', op( B ) = B. transb = 'T' or !! 't', op( B ) = transpose(B). transb = 'C' or 'c', op( B ) = transpose(conjg(B)). TYPE(dbcsr_scalar_type), INTENT(IN) :: alpha !! scaling of product TYPE(dbcsr_type), INTENT(IN) :: matrix_a, matrix_b !! left BCSR matrix !! right BCSR matrix TYPE(dbcsr_scalar_type), INTENT(IN) :: beta !! scaling of existing data TYPE(dbcsr_type), INTENT(INOUT) :: matrix_c !! resulting BCSR product matrix. INTEGER, INTENT(IN), OPTIONAL :: first_row, last_row, first_column, & last_column, first_k, last_k !! first full row of limiting submatrix !! last full row of limiting submatrix !! first full column of limiting submatrix !! last full column of limiting submatrix !! first full column of limiting inner product !! last full column of limiting inner product LOGICAL, INTENT(IN), OPTIONAL :: retain_sparsity !! enforce the sparsity pattern of the existing product matrix; default is no REAL(KIND=real_8), INTENT(IN), OPTIONAL :: filter_eps !! Filtering of the matrix INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL :: flop !! effective flop CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_multiply_generic' LOGICAL, PARAMETER :: dbg = .FALSE. REAL(real_8), PARAMETER :: make_dense_occ_thresh = 1.0_dp CHARACTER :: transa_l, transb_l INTEGER :: f_col, f_k, f_row, handle, handle2, ithread, l_col, l_k, l_row, & nimages_left_rows, nimages_match, nimages_right_cols, npcols, nprows, numnodes, & data_type, output_unit INTEGER(KIND=int_8) :: my_flop LOGICAL :: ab_dense, keep_product_data, keep_sparsity, product_reindex, release_tdist, & transpose_left, transpose_right, use_dense_mult, use_mempools, thread_dist_force REAL(KIND=dp) :: cs TYPE(array_i1d_obj) :: dense_col_sizes, dense_k_sizes, dense_row_sizes, k_vmap, m_map, & n_map, old_product_col_blk_offsets, old_product_col_blk_sizes, & old_product_row_blk_offsets, old_product_row_blk_sizes, & matrix_c_thread_dist TYPE(dbcsr_2d_array_type), POINTER :: m2s_left, m2s_right TYPE(dbcsr_distribution_obj) :: dense_product_distribution, & old_product_distribution TYPE(dbcsr_imagedistribution_obj) :: dense_rdist_left, dense_rdist_right, & rdist_left, rdist_right TYPE(dbcsr_mp_obj) :: mp_obj TYPE(dbcsr_type) :: matrix_left, matrix_right, product_matrix TYPE(mp_comm_type) :: comm CALL timeset(routineN, handle) IF (dbcsr_get_occupation(matrix_a) .GT. 1) & DBCSR_ABORT("Matrix A occupation > 1") IF (dbcsr_get_occupation(matrix_b) .GT. 1) & DBCSR_ABORT("Matrix B occupation > 1") IF (dbcsr_get_occupation(matrix_c) .GT. 1) & DBCSR_ABORT("Matrix C occupation > 1") CALL array_nullify(dense_k_sizes) CALL array_nullify(dense_col_sizes) CALL array_nullify(dense_row_sizes) ! Reset GPU errors IF (use_acc()) THEN CALL dbcsr_acc_clear_errors() END IF ! Check if RMA is used with OpenMPI, if so disabled it ! (OpenMPI has several bugs with RMA and it does not ! give any performance benefit) CALL check_openmpi_rma() use_mempools = dbcsr_cfg%use_mempools_cpu%val .OR. use_acc() ! setup driver-dependent memory-types and their memory-pools --------------- ! the ab_buffers are shared by all threads IF (use_acc()) THEN IF (.NOT. acc_stream_associated(stream_1)) THEN CALL acc_stream_create(stream_1, "MemCpy (odd ticks)") CALL acc_stream_create(stream_2, "MemCpy (even ticks)") END IF CALL dbcsr_memtype_setup(memtype_abpanel_1, has_pool=.TRUE., & acc_hostalloc=.TRUE., acc_devalloc=.TRUE., acc_stream=stream_1, & mpi=.TRUE., oversize_factor=default_resize_factor) CALL dbcsr_memtype_setup(memtype_abpanel_2, has_pool=.TRUE., & acc_hostalloc=.TRUE., acc_devalloc=.TRUE., acc_stream=stream_2, & mpi=.TRUE., oversize_factor=default_resize_factor) !TODO: ensure capacity 2/3? CALL dbcsr_memtype_setup(memtype_trsbuffer_1, has_pool=.TRUE., & acc_hostalloc=.TRUE., acc_devalloc=.TRUE., acc_stream=stream_1) CALL dbcsr_memtype_setup(memtype_trsbuffer_2, has_pool=.TRUE., & acc_hostalloc=.TRUE., acc_devalloc=.TRUE., acc_stream=stream_2) CALL dbcsr_memtype_setup(memtype_normsbuf, has_pool=.TRUE., & acc_hostalloc=.TRUE., acc_devalloc=.TRUE., acc_stream=stream_1) CALL dbcsr_memtype_setup(memtype_offsetsbuf, has_pool=.TRUE., & acc_hostalloc=.TRUE., acc_devalloc=.TRUE., acc_stream=stream_1) CALL dbcsr_memtype_setup(memtype_nelemsbuf, has_pool=.TRUE., & acc_hostalloc=.TRUE., acc_devalloc=.TRUE., acc_stream=stream_1) CALL dbcsr_mempool_limit_capacity(memtype_trsbuffer_1%pool, capacity=1) CALL dbcsr_mempool_limit_capacity(memtype_trsbuffer_2%pool, capacity=1) CALL dbcsr_mempool_limit_capacity(memtype_normsbuf%pool, capacity=1) CALL dbcsr_mempool_limit_capacity(memtype_offsetsbuf%pool, capacity=1) CALL dbcsr_mempool_limit_capacity(memtype_nelemsbuf%pool, capacity=1) END IF CALL dbcsr_memtype_setup(memtype_mpi_buffer, mpi=.TRUE.) CALL dbcsr_memtype_setup(memtype_mpi_product, mpi=.TRUE., has_pool=use_mempools) ! check parameters --------------------------------------------------------- transa_l = transa transb_l = transb CALL uppercase(transa_l) CALL uppercase(transb_l) IF (transa_l .NE. dbcsr_no_transpose .AND. & transa_l .NE. dbcsr_transpose .AND. & transa_l .NE. dbcsr_conjugate_transpose) & DBCSR_ABORT("Invalid transa_l = "//transa_l) IF (transb_l .NE. dbcsr_no_transpose .AND. & transb_l .NE. dbcsr_transpose .AND. & transb_l .NE. dbcsr_conjugate_transpose) & DBCSR_ABORT("Invalid transb_l = "//transb_l) IF (dbg) THEN WRITE (*, *) '========== MULTIPLICATION ========================' CALL dbcsr_verify_matrix(matrix_a) CALL dbcsr_verify_matrix(matrix_b) CALL dbcsr_verify_matrix(matrix_c) WRITE (*, *) routineN//" ABC checksums", & dbcsr_checksum(matrix_a), & dbcsr_checksum(matrix_b), & dbcsr_checksum(matrix_c) IF (dbg) THEN CALL dbcsr_print(matrix_a, nodata=.TRUE.) CALL dbcsr_print(matrix_b, nodata=.TRUE.) CALL dbcsr_print(matrix_c, nodata=.TRUE.) END IF END IF ! transpose/conjg left and/or right matrices if needed transpose_left = .FALSE. SELECT CASE (transa_l) CASE (dbcsr_no_transpose) matrix_left = matrix_a transpose_left = .FALSE. CASE (dbcsr_transpose) matrix_left = dbcsr_type() IF (dbcsr_get_matrix_type(matrix_a) .EQ. dbcsr_type_antisymmetric) THEN ! ! For antisymmetric matrix, we need to do a hard copy ! shallow_data_copy=.TRUE. does not handle properly antisymm matrices CALL dbcsr_new_transposed(matrix_left, matrix_a, & shallow_data_copy=.FALSE., redistribute=.FALSE., & transpose_distribution=.FALSE.) ELSE CALL dbcsr_new_transposed(matrix_left, matrix_a, & shallow_data_copy=.TRUE., redistribute=.FALSE., & transpose_distribution=.FALSE.) END IF transpose_left = .TRUE. CASE (dbcsr_conjugate_transpose) matrix_left = dbcsr_type() CALL dbcsr_new_transposed(matrix_left, matrix_a, & shallow_data_copy=.FALSE., redistribute=.FALSE., & transpose_distribution=.FALSE.) CALL dbcsr_conjg(matrix_left) transpose_left = .TRUE. CASE DEFAULT DBCSR_ABORT("wrong transa_l = "//transa_l) END SELECT transpose_right = .FALSE. SELECT CASE (transb_l) CASE (dbcsr_no_transpose) matrix_right = matrix_b transpose_right = .FALSE. CASE (dbcsr_transpose) matrix_right = dbcsr_type() IF (dbcsr_get_matrix_type(matrix_b) .EQ. dbcsr_type_antisymmetric) THEN ! ! For antisymmetric matrix, we need to do a hard copy ! shallow_data_copy=.TRUE. does not handle properly antisymm matrices CALL dbcsr_new_transposed(matrix_right, matrix_b, & shallow_data_copy=.FALSE., redistribute=.FALSE., & transpose_distribution=.FALSE.) ELSE CALL dbcsr_new_transposed(matrix_right, matrix_b, & shallow_data_copy=.TRUE., redistribute=.FALSE., & transpose_distribution=.FALSE.) END IF transpose_right = .TRUE. CASE (dbcsr_conjugate_transpose) matrix_right = dbcsr_type() CALL dbcsr_new_transposed(matrix_right, matrix_b, & shallow_data_copy=.FALSE., redistribute=.FALSE., & transpose_distribution=.FALSE.) CALL dbcsr_conjg(matrix_right) transpose_right = .TRUE. CASE DEFAULT DBCSR_ABORT("wrong transb_l = "//transb_l) END SELECT ! ! Ensure matrix compatibility. IF (.NOT. array_equality(matrix_c%row_blk_offset, matrix_left%row_blk_offset)) & DBCSR_ABORT("C/A rows not equal") IF (.NOT. array_equality(matrix_c%col_blk_offset, matrix_right%col_blk_offset)) & DBCSR_ABORT("C/B columns not equal") IF (.NOT. array_equality(matrix_left%col_blk_offset, matrix_right%row_blk_offset)) & DBCSR_ABORT("A cols/B rows not equal") ! ! No dense multiplication when filtering is used. use_dense_mult = dbcsr_cfg%mm_dense%val .AND. (.NOT. PRESENT(filter_eps)) ! mp_obj = dbcsr_distribution_mp(matrix_c%dist) numnodes = dbcsr_mp_numnodes(mp_obj) nprows = dbcsr_mp_nprows(mp_obj) npcols = dbcsr_mp_npcols(mp_obj) ! ! 3D layers CALL make_layers_3D_C_reduction(dbcsr_cfg%num_layers_3D%val, mp_obj) ! ! No dense multiplication when RMA is used. IF (dbcsr_cfg%use_mpi_rma%val) THEN use_dense_mult = .FALSE. END IF ! we skip dense multiply for (anti)symmetric matrices (slowdown for S/H * C) IF (use_dense_mult) THEN IF (dbcsr_has_symmetry(matrix_left) .OR. & dbcsr_has_symmetry(matrix_right)) THEN use_dense_mult = .FALSE. ELSE use_dense_mult = dbcsr_may_be_dense(matrix_left, make_dense_occ_thresh) & .AND. dbcsr_may_be_dense(matrix_right, make_dense_occ_thresh) END IF END IF ab_dense = use_dense_mult ! Use memory pools when no dense IF (.NOT. use_acc()) THEN CALL dbcsr_memtype_setup(memtype_abpanel_1, has_pool=.NOT. ab_dense .AND. use_mempools, mpi=.TRUE.) CALL dbcsr_memtype_setup(memtype_abpanel_2, has_pool=.NOT. ab_dense .AND. use_mempools, mpi=.TRUE.) END IF ! ! Submatrix selection f_row = 1 l_row = dbcsr_nfullrows_total(matrix_c) f_col = 1 l_col = dbcsr_nfullcols_total(matrix_c) f_k = 1 l_k = dbcsr_nfullcols_total(matrix_left) IF (PRESENT(first_row)) THEN IF (first_row .LT. 1 .OR. first_row .GT. dbcsr_nfullrows_total(matrix_c)) & DBCSR_ABORT("Invalid first row specified") f_row = first_row END IF IF (PRESENT(last_row)) THEN IF (last_row .GT. dbcsr_nfullrows_total(matrix_c)) & DBCSR_ABORT("Invalid last row specified") l_row = last_row END IF IF (PRESENT(first_column)) THEN IF (first_column .LT. 1 .OR. first_column .GT. dbcsr_nfullcols_total(matrix_c)) & DBCSR_ABORT("Invalid first col specified") f_col = first_column END IF IF (PRESENT(last_column)) THEN IF (last_column .GT. dbcsr_nfullcols_total(matrix_c)) & DBCSR_ABORT("Invalid last column specified (C)") IF (last_column .GT. dbcsr_nfullcols_total(matrix_right)) & DBCSR_ABORT("Invalid last column specified (B)") l_col = last_column END IF IF (PRESENT(first_k)) THEN IF (first_k .LT. 1 .OR. first_k .GT. dbcsr_nfullcols_total(matrix_left)) & DBCSR_ABORT("Invalid first k specified (A)") f_k = first_k END IF IF (PRESENT(last_k)) THEN IF (last_k .GT. dbcsr_nfullcols_total(matrix_left)) & DBCSR_ABORT("Invalid last k specified (A)") l_k = last_k END IF ! ! update statistics (we count marketing flops per MPI rank) dbcsr_mpi_statistics%last_mpi_ranks_used = numnodes marketing_flops = marketing_flops + & (2.0*(l_row - f_row + 1.0)*(l_col - f_col + 1.0)/numnodes)*(l_k - f_k + 1.0) ! ! Now optimize the default submatrix selection values away IF (f_row .EQ. 1) f_row = 0 IF (l_row .EQ. dbcsr_nfullrows_total(matrix_left)) l_row = 0 IF (f_col .EQ. 1) f_col = 0 ! The last column must be set if the right and product matrices ! differ. l_col = MIN(l_col, dbcsr_nfullcols_total(matrix_right)) l_col = MIN(l_col, dbcsr_nfullcols_total(matrix_c)) IF (f_col .LE. 1 .AND. & l_col .EQ. dbcsr_nfullcols_total(matrix_right) .AND. & dbcsr_nfullcols_total(matrix_right) .EQ. & dbcsr_nfullcols_total(matrix_c)) l_col = 0 IF (f_k .EQ. 1) f_k = 0 IF (l_k .EQ. dbcsr_nfullcols_total(matrix_left)) l_k = 0 IF (.NOT. PRESENT(last_column) .AND. & .NOT. array_equality(matrix_right%col_blk_size, & matrix_c%col_blk_size)) THEN l_col = MIN(dbcsr_nfullcols_total(matrix_right), & dbcsr_nfullcols_total(matrix_c)) END IF IF (f_row .GT. l_row .AND. l_row .GT. 0) & DBCSR_ABORT("Last row smaller than first row") IF (f_col .GT. l_col .AND. l_col .GT. 0) & DBCSR_ABORT("Last col smaller than first col") ! ! Product data needs to be retained when ! * beta != 0; or ! * there is column limiting (l_col > 0) and the limiting column ! is less than the number of full columns in the product matrix keep_sparsity = .FALSE. IF (PRESENT(retain_sparsity)) keep_sparsity = retain_sparsity ! keep_product_data = keep_sparsity & .OR. .NOT. dbcsr_scalar_are_equal(beta, dbcsr_scalar_zero(beta%data_type)) & .OR. (l_col .GT. 0 .AND. l_col .LT. dbcsr_nfullcols_total(matrix_c)) & .OR. (l_row .GT. 0 .AND. l_row .LT. dbcsr_nfullrows_total(matrix_c)) ! IF (.NOT. dbcsr_scalar_are_equal(beta, dbcsr_scalar_one(beta%data_type)) .AND. keep_product_data) THEN CALL dbcsr_scale(matrix_c, alpha_scalar=beta, & limits=(/f_row, l_row, f_col, l_col/)) END IF ! ! The index of the product matrix is twiddled into canonical form ! if it is (anti)symmetric (i.e., rows and columns are where the ! row/column distributions say they are). Doing this in advance ! makes the local multiply more efficient. IF (dbcsr_has_symmetry(matrix_c)) THEN product_reindex = .TRUE. ELSE product_reindex = .FALSE. END IF ! Product can not be made dense; however, A & B may still be made ! dense unless previously determined otherwise. IF (product_reindex .OR. keep_sparsity) THEN use_dense_mult = .FALSE. END IF ! ! The thread distribution must reflect the current (possibly ! dense) distribution thread_dist_force = .FALSE. IF (.NOT. dbcsr_distribution_has_threads(matrix_c%dist)) THEN release_tdist = .TRUE. CALL dbcsr_distribution_make_threads(matrix_c%dist) ELSE release_tdist = .FALSE. ! Make sure matrix_c thread dist == matrix_left thread dist ! This is currently a workaround IF (dbcsr_distribution_has_threads(matrix_left%dist)) THEN matrix_c_thread_dist = matrix_c%dist%d%thread_dist matrix_c%dist%d%thread_dist = matrix_left%dist%d%thread_dist CALL array_hold(matrix_left%dist%d%thread_dist) thread_dist_force = .TRUE. END IF END IF ! ! Compute number of images (rows and columns) nimages_left_rows = dbcsr_mp_nprows(dbcsr_distribution_mp(matrix_left%dist)) nimages_match = dbcsr_distribution_get_num_images_1d( & dbcsr_nfullcols_total(matrix_left), & dbcsr_nblkcols_total(matrix_left), & dbcsr_mp_nprows(dbcsr_distribution_mp(matrix_left%dist)), & dbcsr_mp_npcols(dbcsr_distribution_mp(matrix_left%dist))) nimages_right_cols = dbcsr_mp_npcols(dbcsr_distribution_mp(matrix_right%dist)) ! ! Create imaged distributions for the multiply. CALL dbcsr_create_image_dist(rdist_right, matrix_right%dist, & match_row_nbins=dbcsr_mp_npcols(dbcsr_distribution_mp(matrix_left%dist)), & match_col_nbins=npcols, & match_col_pdist=dbcsr_distribution_col_dist(matrix_c%dist), & nimages_rows=nimages_match, & nimages_cols=nimages_right_cols) ! CALL dbcsr_create_image_dist(rdist_left, matrix_left%dist, & match_row_pdist=dbcsr_distribution_row_dist(matrix_c%dist), & match_row_nbins=nprows, & match_col_pdist=dbcsr_distribution_row_dist(rdist_right%i%main), & match_col_idist=array_data(rdist_right%i%row_image), & match_col_nbins=dbcsr_mp_nprows(dbcsr_distribution_mp(matrix_right%dist)), & nimages_rows=nimages_left_rows, & nimages_cols=nimages_match) ! IF (ab_dense) THEN CALL dbcsr_make_dists_dense(dbcsr_distribution(matrix_c), & rdist_left, rdist_right, dense_product_distribution, & dense_rdist_left, dense_rdist_right,.NOT. use_dense_mult, & m_map, k_vmap, n_map, matrix_c%row_blk_size) CALL make_sizes_dense(matrix_c%row_blk_size, m_map, & dbcsr_distribution_nrows(dense_product_distribution), & dense_row_sizes) CALL make_sizes_dense(matrix_c%col_blk_size, n_map, & dbcsr_distribution_ncols(dense_product_distribution), & dense_col_sizes) CALL make_sizes_dense(matrix_right%row_blk_size, k_vmap, & dbcsr_distribution_nrows(dense_rdist_right%i%main), & dense_k_sizes) END IF ! IF (use_dense_mult .AND. .NOT. ab_dense) & DBCSR_ABORT("Wrong logic when making dense matrices.") IF (use_dense_mult) THEN old_product_row_blk_offsets = matrix_c%row_blk_offset old_product_col_blk_offsets = matrix_c%col_blk_offset old_product_row_blk_sizes = matrix_c%row_blk_size old_product_col_blk_sizes = matrix_c%col_blk_size CALL array_hold(old_product_row_blk_offsets) CALL array_hold(old_product_col_blk_offsets) CALL array_hold(old_product_row_blk_sizes) CALL array_hold(old_product_col_blk_sizes) old_product_distribution = dbcsr_distribution(matrix_c) CALL dbcsr_distribution_hold(old_product_distribution) product_matrix = dbcsr_type() CALL dbcsr_make_dense(matrix_c, product_matrix, & dense_product_distribution, & dense_row_sizes, dense_col_sizes, & m_map, n_map) ELSE product_matrix = dbcsr_type() CALL dbcsr_copy(product_matrix, matrix_c, shallow_data=.TRUE.) END IF IF (ab_dense) THEN CALL dbcsr_distribution_release(dense_product_distribution) END IF ! ! This is needed to build the hash tables because they are ! locally indexed. CALL dbcsr_reset_locals(product_matrix) ! IF (debug_mod) THEN WRITE (*, *) routineN//" Matrices ", dbcsr_get_matrix_type(matrix_a), & dbcsr_get_matrix_type(matrix_b), dbcsr_get_matrix_type(matrix_c) WRITE (*, *) routineN//" Matrices ", transa_l, transb_l, "keep", keep_product_data END IF IF (keep_product_data) THEN IF (product_reindex) THEN IF (debug_mod) WRITE (*, *) routineN//" Making canonical index" CALL dbcsr_make_index_canonical(product_matrix) END IF IF (ASSOCIATED(product_matrix%wms)) & DBCSR_ABORT("Product matrix should be finalized!") CALL dbcsr_make_untransposed_blocks(product_matrix) !$OMP PARALLEL & !$OMP DEFAULT (NONE) SHARED (product_matrix) ! For the multiply logic to work correctly, existing data must ! be added only after the index has been transformed into the ! canonical form. CALL dbcsr_add_wm_from_matrix(product_matrix) !$OMP END PARALLEL ELSE !$OMP PARALLEL DEFAULT(NONE) PRIVATE(ithread) & !$OMP SHARED(product_matrix, memtype_product_wm) ithread = 0 !$ ithread = OMP_GET_THREAD_NUM() CALL dbcsr_work_create(product_matrix, work_mutable=.FALSE., & memory_type=memtype_product_wm(ithread)%p) !$OMP END PARALLEL END IF ! IF (dbcsr_cfg%use_mpi_rma%val) THEN ! Check for previous multiplication completeness IF (request_sync_mult .NE. mp_request_null) THEN CALL timeset(routineN//"_sync_mult", handle2) CALL mp_wait(request_sync_mult) CALL timestop(handle2) request_sync_mult = mp_request_null END IF ! ! Left buffer images CALL dbcsr_make_buffers(matrix_left, rdist_left, .TRUE., & f_row, l_row, f_k, l_k, & PRESENT(filter_eps)) ! ! Right buffer images CALL dbcsr_make_buffers(matrix_right, rdist_right, .FALSE., & f_k, l_k, f_col, l_col, & PRESENT(filter_eps), & alpha) ELSE product_matrix%nblks = 0 product_matrix%nze = 0 product_matrix%row_p(:) = 0 CALL dbcsr_data_set_size_referenced(product_matrix%data_area, 0) product_matrix%valid = .FALSE. ! ! Right images CALL make_m2s(matrix_right, m2s_right, rdist_right, dense_rdist_right, & use_dense_mult, ab_dense, "R", & f_k, l_k, f_row, l_row, f_col, l_col, & dense_k_sizes, dense_col_sizes, & k_vmap, m_map, n_map, & alpha) ! ! Left images CALL make_m2s(matrix_left, m2s_left, rdist_left, dense_rdist_left, & use_dense_mult, ab_dense, "L", & f_k, l_k, f_row, l_row, f_col, l_col, & dense_row_sizes, dense_k_sizes, & k_vmap, m_map, n_map) END IF ! IF (ab_dense) THEN CALL array_release(k_vmap) CALL array_release(dense_row_sizes) CALL array_release(dense_col_sizes) CALL array_release(dense_k_sizes) END IF ! ! The limits were already used. Reset them. f_row = 0; l_row = 0 f_col = 0; l_col = 0 f_k = 0; l_k = 0 ! my_flop = 0 IF (dbcsr_cfg%use_mpi_rma%val) THEN CALL multiply_3D(rdist_left, rdist_right, & matrix_left, matrix_right, product_matrix, & retain_sparsity=retain_sparsity, & filter_eps=filter_eps, & flop=my_flop, keep_product_data=keep_product_data) ELSE data_type = dbcsr_get_data_type(product_matrix) IF (data_type .NE. dbcsr_type_real_8 .OR. (.NOT. dbcsr_cfg%use_acc_g2g%val)) THEN ! If G2G is enabled, norms have to be calculated on the GPU. ! Since the norms kernel expects only real_8 type data, we ! avoid using G2G for all other data types CALL multiply_cannon(m2s_left, m2s_right, product_matrix, & retain_sparsity=retain_sparsity, & filter_eps=filter_eps, & flop=my_flop, keep_product_data=keep_product_data) ELSE CALL multiply_cannon_g2g(m2s_left, m2s_right, product_matrix, & retain_sparsity=retain_sparsity, & filter_eps=filter_eps, & flop=my_flop, keep_product_data=keep_product_data) END IF CALL dbcsr_finalize(product_matrix, reshuffle=PRESENT(filter_eps) .AND. .NOT. keep_sparsity) END IF ! ! RMA implementation algorithm has to synchronize at the end of each multiplication comm = dbcsr_mp_group(dbcsr_distribution_mp(dbcsr_distribution(matrix_c))) IF (PRESENT(flop)) THEN ! return the average number of flops per MPI rank. ! Variance (which is fairly large) could be computed as well. CALL timeset(routineN//"_mpsum_flop", handle2) numnodes = dbcsr_mp_numnodes(dbcsr_distribution_mp(dbcsr_distribution(matrix_c))) CALL mp_sum(my_flop, comm) IF (PRESENT(flop)) THEN flop = (my_flop + numnodes - 1)/numnodes END IF CALL timestop(handle2) ELSEIF (dbcsr_cfg%use_mpi_rma%val) THEN CALL mp_isync(comm, request_sync_mult) END IF ! IF (release_tdist) THEN CALL dbcsr_distribution_no_threads(product_matrix%dist) ELSEIF (thread_dist_force) THEN ! Restore matrix_c thread-dist matrix_c%dist%d%thread_dist = matrix_c_thread_dist CALL array_release(matrix_left%dist%d%thread_dist) END IF IF (transpose_left) CALL dbcsr_release(matrix_left) IF (transpose_right) CALL dbcsr_release(matrix_right) ! CALL dbcsr_release_locals(product_matrix) ! The index of the product matrix is reset to the CP2K form if it ! was previously set to the canonical form. IF (product_reindex) THEN IF (debug_mod) WRITE (*, *) routineN//" Making CP2K index" CALL dbcsr_make_index_canonical(product_matrix, cp2k=.TRUE.) END IF IF (use_dense_mult) THEN CALL dbcsr_release(matrix_c) matrix_c = dbcsr_type() CALL dbcsr_make_undense(product_matrix, matrix_c, & old_product_distribution, & old_product_row_blk_offsets, old_product_col_blk_offsets, & old_product_row_blk_sizes, old_product_col_blk_sizes, & m_map, n_map) CALL dbcsr_release(product_matrix) CALL array_release(old_product_row_blk_offsets) CALL array_release(old_product_col_blk_offsets) CALL array_release(old_product_row_blk_sizes) CALL array_release(old_product_col_blk_sizes) CALL dbcsr_distribution_release(old_product_distribution) ELSE CALL dbcsr_release(matrix_c) matrix_c = dbcsr_type() CALL dbcsr_copy(matrix_c, product_matrix, shallow_data=.TRUE.) CALL dbcsr_release(product_matrix) END IF ! IF (.NOT. dbcsr_cfg%use_mpi_rma%val) THEN CALL dbcsr_destroy_array(m2s_left) DEALLOCATE (m2s_left) CALL dbcsr_destroy_array(m2s_right) DEALLOCATE (m2s_right) END IF ! CALL dbcsr_image_dist_release(rdist_left) CALL dbcsr_image_dist_release(rdist_right) IF (ab_dense) THEN CALL array_release(m_map) CALL array_release(n_map) END IF ! ! To support the canonical multiply (all non-transposed blocks), ! blocks may have to be transposed according to the CP2K ! triangular index. CALL dbcsr_make_untransposed_blocks(matrix_c) ! IF (debug_mod .OR. careful_mod) THEN IF (debug_mod) & WRITE (*, *) routineN//" Use dense mult, symm", & use_dense_mult, ab_dense, dbcsr_has_symmetry(matrix_c) CALL dbcsr_verify_matrix(matrix_c) IF (debug_mod) THEN cs = dbcsr_checksum(matrix_c) WRITE (*, *) routineN//" Multiplication", & num_multiplications, " Product checksum", cs END IF END IF ! This tends to trigger only when all of these conditions are fulfilled: ! - transa=="T" ! - matrix_c contains already blocks and beta is not zero ! - GPU-acceleration is enabled ! - multiple OpenMP threads are used IF (INT(matrix_c%nblks, KIND=int_8) > & INT(SIZE(array_data(matrix_c%row_blk_size)), KIND=int_8)* & INT(SIZE(array_data(matrix_c%col_blk_size)), KIND=int_8)) & DBCSR_ABORT("Bug: Matrix contains too many blocks") output_unit = default_output_unit num_multiplications = num_multiplications + 1 CALL timestop(handle) END SUBROUTINE dbcsr_multiply_generic SUBROUTINE check_openmpi_rma() ! Check if RMA is used with OpenMPI, if so disabled it ! (OpenMPI has several bugs with RMA and it does not ! give any performance benefit) CHARACTER(LEN=mp_max_library_version_string) :: mpi_library_version INTEGER :: ipos, resultlen IF (.NOT. dbcsr_cfg%use_mpi_rma%val) & RETURN #if defined(__DBCSR_OPENMPI_RMA) RETURN #endif CALL mp_get_library_version(mpi_library_version, resultlen) ! ignore failure to obtain the library version string IF (resultlen .EQ. 0) & RETURN ! check if Open MPI ipos = INDEX(mpi_library_version(1:resultlen), "Open MPI v") IF (ipos .EQ. 0) & RETURN CALL dbcsr_warn(__LOCATION__, "You are using OpenMPI: --- "// & mpi_library_version(1:resultlen)// & " --- We disable RMA to prevent errors. "// & "Please install MPICH version or use __DBCSR_OPENMPI_RMA to force the "// & "execution. ") CALL dbcsr_set_config(use_mpi_rma=.FALSE.) END SUBROUTINE check_openmpi_rma END MODULE dbcsr_mm ================================================ FILE: src/mm/dbcsr_mm_3d.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_mm_3d !! 3D matrix-matrix multiplication. !! Modification history: !! - 2016-08 Code organization (Alfio Lazzaro). !! - 2017-02 Remove clusters (Alfio Lazzaro). USE dbcsr_acc_event, ONLY: acc_event_create, & acc_event_destroy, & acc_event_synchronize USE dbcsr_acc_device, ONLY: acc_device_synchronize USE dbcsr_array_types, ONLY: array_data, & array_get, & array_size USE dbcsr_block_operations, ONLY: dbcsr_block_conjg, & dbcsr_block_copy_aa, & dbcsr_block_real_neg, & dbcsr_block_scale, & dbcsr_block_transpose_aa, & dbcsr_data_clear, & dbcsr_data_set USE dbcsr_config, ONLY: dbcsr_cfg, & use_acc USE dbcsr_data_methods, ONLY: & dbcsr_data_clear_pointer, dbcsr_data_ensure_size, dbcsr_data_exists, & dbcsr_data_get_memory_type, dbcsr_data_get_size, dbcsr_data_get_size_referenced, & dbcsr_data_get_type, dbcsr_data_host2dev, dbcsr_data_init, dbcsr_data_new, & dbcsr_data_release, dbcsr_data_set_pointer, dbcsr_data_set_size_referenced, & dbcsr_data_valid, dbcsr_scalar_are_equal, dbcsr_scalar_negative, dbcsr_scalar_one, & dbcsr_type_1d_to_2d USE dbcsr_data_types, ONLY: dbcsr_datatype_sizeof USE dbcsr_dist_methods, ONLY: & dbcsr_distribution_col_dist, dbcsr_distribution_has_threads, & dbcsr_distribution_local_cols, dbcsr_distribution_local_rows, & dbcsr_distribution_max_col_dist, dbcsr_distribution_max_row_dist, dbcsr_distribution_mp, & dbcsr_distribution_row_dist, dbcsr_distribution_thread_dist USE dbcsr_dist_util, ONLY: find_block_of_element USE dbcsr_index_operations, ONLY: dbcsr_repoint_index USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left, & dbcsr_iterator_next_block, & dbcsr_iterator_start, & dbcsr_iterator_stop USE dbcsr_kinds, ONLY: int_8, & real_8, & sp USE dbcsr_machine, ONLY: m_memory USE dbcsr_mem_methods, ONLY: dbcsr_mempool_limit_capacity USE dbcsr_methods, ONLY: & dbcsr_col_block_offsets, dbcsr_col_block_sizes, dbcsr_distribution, dbcsr_get_data_type, & dbcsr_has_symmetry, dbcsr_max_col_size, dbcsr_max_row_size, dbcsr_nblkcols_local, & dbcsr_nblkcols_total, dbcsr_nblkrows_local, dbcsr_nblkrows_total, dbcsr_nfullcols_local, & dbcsr_nfullcols_total, dbcsr_nfullrows_local, dbcsr_nfullrows_total, dbcsr_release, & dbcsr_row_block_offsets, dbcsr_row_block_sizes, dbcsr_valid_index USE dbcsr_mm_common, ONLY: & acc_transpose_blocks, calculate_norms, count_mpi_statistics, dbcsr_mm_multrec_type_p, & dbcsr_mpi_statistics, enumerate_blk_sizes, local_filter, max_memory, memtype_abpanel_1, & memtype_abpanel_2, memtype_mpi_buffer, memtype_mpi_product, memtype_product_wm, & memtype_trsbuffer_1, memtype_trsbuffer_2, product_matrix_size_guess, rec_sort_index, & setup_buffer_matrix USE dbcsr_mm_dist_operations, ONLY: dbcsr_reset_locals, & dbcsr_reset_vlocals, & image_calculator USE dbcsr_mm_multrec, ONLY: dbcsr_mm_multrec_dev2host_init, & dbcsr_mm_multrec_finalize, & dbcsr_mm_multrec_get_nblks, & dbcsr_mm_multrec_get_nze, & dbcsr_mm_multrec_init, & dbcsr_mm_multrec_multiply, & dbcsr_mm_multrec_red3D USE dbcsr_mp_methods, ONLY: & dbcsr_mp_grid_setup, dbcsr_mp_group, dbcsr_mp_has_subgroups, dbcsr_mp_my_col_group, & dbcsr_mp_my_row_group, dbcsr_mp_mynode, dbcsr_mp_mypcol, dbcsr_mp_myprow, dbcsr_mp_npcols, & dbcsr_mp_nprows, dbcsr_mp_numnodes, dbcsr_mp_pgrid USE dbcsr_mp_operations, ONLY: dbcsr_isendrecv_any, & dbcsr_rget_any, & dbcsr_win_create_any, & hybrid_alltoall_any, & hybrid_alltoall_i1 USE dbcsr_mpiwrap, ONLY: & mp_allgather, mp_alltoall, mp_comm_free, mp_comm_null, mp_comm_split_direct, & mp_iallgather, mp_isendrecv, mp_isum, mp_request_null, mp_rget, mp_wait, mp_waitall, & mp_win_create, mp_win_free, mp_win_lock_all, mp_win_unlock_all, mp_environ, & mp_comm_type, mp_request_type, mp_win_type USE dbcsr_ptr_util, ONLY: ensure_array_size, & memory_deallocate USE dbcsr_types, ONLY: & dbcsr_2d_array_obj, dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_imagedistribution_obj, & dbcsr_iterator, dbcsr_memtype_type, dbcsr_mp_obj, dbcsr_num_slots, dbcsr_scalar_type, & dbcsr_slot_blk_p, dbcsr_slot_col_i, dbcsr_slot_coo_l, dbcsr_slot_dense, & dbcsr_slot_home_pcol, dbcsr_slot_home_prow, dbcsr_slot_home_vpcol, dbcsr_slot_home_vprow, & dbcsr_slot_nblkrows_total, dbcsr_slot_nblks, dbcsr_slot_nfullcols_local, dbcsr_slot_nze, & dbcsr_slot_row_p, dbcsr_slot_size, dbcsr_slot_thr_c, dbcsr_slot_type, dbcsr_type, & dbcsr_type_complex_4, dbcsr_type_complex_8, dbcsr_type_int_4, dbcsr_type_no_symmetry, & dbcsr_type_real_4, dbcsr_type_real_8 USE dbcsr_work_operations, ONLY: dbcsr_add_wm_from_matrix, & dbcsr_create, & dbcsr_finalize, & dbcsr_work_create, & dbcsr_work_destroy #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads, & !$ omp_set_lock, omp_unset_lock, omp_init_lock, & !$ omp_lock_kind, omp_destroy_lock IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_3d' LOGICAL, PARAMETER :: debug_mod = .FALSE. LOGICAL, PARAMETER :: careful_mod = .FALSE. TYPE dbcsr_buffer TYPE(dbcsr_data_obj) :: DATA = dbcsr_data_obj(), & data_before_resize = dbcsr_data_obj(), & trs_stackbuf = dbcsr_data_obj() INTEGER :: vprow = -1, vpcol = -1 INTEGER :: myproc = -1 TYPE(mp_comm_type) :: grp = mp_comm_null, & ! Global communicator subgrp = mp_comm_null ! Communicator for A and B TYPE(mp_win_type) :: data_win = mp_win_type(), meta_win = mp_win_type() INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: meta => Null(), & meta_before_resize => Null(), & meta_red3D => Null() TYPE(mp_request_type), DIMENSION(2) :: get_requests = mp_request_null INTEGER :: meta_size = -1 INTEGER :: num_layers_3D = 1 INTEGER :: coord3D = 1 TYPE(dbcsr_type) :: matrix = dbcsr_type() LOGICAL :: is_valid = .FALSE., & is_comm = .FALSE., & has_rma_win = .FALSE. END TYPE dbcsr_buffer TYPE dbcsr_buffers TYPE(dbcsr_buffer) :: left = dbcsr_buffer(), right = dbcsr_buffer() END TYPE dbcsr_buffers TYPE mn_local_sizes INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: sizes => Null() END TYPE mn_local_sizes TYPE dbcsr_layers_3D_C_reduction TYPE(mp_comm_type) :: grp = mp_comm_null, & grp3D = mp_comm_null, & rowgrp3D = mp_comm_null INTEGER :: num_layers_3D = 1, & max_num_layers_3D = 1, & side3D = HUGE(1) ! Use a buffer per each thread TYPE(dbcsr_data_obj), & DIMENSION(:), ALLOCATABLE :: data_red3D INTEGER :: data_type = -1 END TYPE dbcsr_layers_3D_C_reduction ! Buffers TYPE(dbcsr_buffers), TARGET, SAVE :: buffers_win, & buffers_1, buffers_2 INTEGER, PARAMETER, PRIVATE :: idata = 1, & imeta = 2, & ilocal_proc = 1 TYPE(dbcsr_layers_3D_C_reduction), SAVE :: layers_3D_C_reduction LOGICAL, DIMENSION(2), TARGET, SAVE, PRIVATE :: do_win_create_left, & do_win_create_right INTEGER, ALLOCATABLE, DIMENSION(:), PRIVATE :: left_total_row_counts INTEGER, ALLOCATABLE, DIMENSION(:, :), TARGET, PRIVATE :: left_local_images_size, & right_local_images_size INTEGER, DIMENSION(:, :, :, :), POINTER, CONTIGUOUS, PRIVATE :: left_images_size => Null(), & right_images_size => Null() INTEGER, ALLOCATABLE, DIMENSION(:), TARGET, PRIVATE :: g2l_map_cols, g2l_map_rows TYPE(mp_request_type), PRIVATE :: request_count_rows TYPE(mp_request_type), DIMENSION(2), PRIVATE :: requests TYPE(mp_request_type), DIMENSION(2), PRIVATE :: requests_win_create TYPE(mp_request_type) :: request_sync_mult = mp_request_null ! Buffers used in make_buffers TYPE(dbcsr_data_obj), TARGET, SAVE :: make_buffers_data_recv, make_buffers_data_send INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: make_buffers_meta_recv => Null(), & make_buffers_meta_send => Null() PUBLIC :: multiply_3D PUBLIC :: release_layers_3d_C_reduction, buffers_release PUBLIC :: dbcsr_make_buffers, make_layers_3d_C_reduction PUBLIC :: request_sync_mult PUBLIC :: get_max_layers_3D CONTAINS SUBROUTINE dbcsr_make_buffers(matrix, imgdist, is_left, & !! Prepare orig images for MPI windows f_row, l_row, f_col, l_col, & otf_filtering, alpha) TYPE(dbcsr_type), INTENT(IN) :: matrix TYPE(dbcsr_imagedistribution_obj), INTENT(IN) :: imgdist LOGICAL, INTENT(IN) :: is_left INTEGER, INTENT(IN) :: f_row, l_row, f_col, l_col LOGICAL, INTENT(IN) :: otf_filtering TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: alpha LOGICAL :: do_scale do_scale = .FALSE. IF (PRESENT(alpha)) THEN IF (.NOT. dbcsr_scalar_are_equal(alpha, dbcsr_scalar_one(alpha%data_type))) THEN do_scale = .TRUE. END IF END IF ! IF (do_scale) THEN CALL make_buffers(matrix, imgdist, is_left, & f_row, l_row, f_col, l_col, & otf_filtering, alpha) ELSE CALL make_buffers(matrix, imgdist, is_left, & f_row, l_row, f_col, l_col, & otf_filtering) END IF END SUBROUTINE dbcsr_make_buffers SUBROUTINE make_buffers(matrix, imgdist, is_left, & !! Prepare orig images for MPI windows f_row, l_row, f_col, l_col, & otf_filtering, scale_value) TYPE(dbcsr_type), INTENT(IN) :: matrix TYPE(dbcsr_imagedistribution_obj), INTENT(IN) :: imgdist LOGICAL, INTENT(IN) :: is_left INTEGER, INTENT(IN) :: f_row, l_row, f_col, l_col LOGICAL, INTENT(IN) :: otf_filtering TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: scale_value CHARACTER(len=*), PARAMETER :: routineN = 'make_buffers' INTEGER :: blk, blk_p, bp, col, col_img, col_size, data_type, dst_proc, f_col_f, f_row_f, & handle, handle2, irequests, it, ithread, l_col_l, l_row_l, mynode, myt, & nblkcols_local, nblkrows_local, ncols_images, nimages, nprocs, nprocs_total, & nrows_images, nsymmetries, nthreads, nze, pcol, prow, row, row_img, row_size, size_index, & stored_col, stored_row, symmetry_i, tr_col_size, tr_row_size INTEGER, ALLOCATABLE, DIMENSION(:) :: img_nblks_cols, img_nblks_rows INTEGER, ALLOCATABLE, DIMENSION(:, :) :: local_images_displ, recv_displ_proc, & recv_size_proc, send_displ_proc, & send_size_proc INTEGER, ALLOCATABLE, DIMENSION(:, :, :) :: offset_data, offset_threads INTEGER, ALLOCATABLE, DIMENSION(:, :, :, :) :: recv_displs, recv_sizes, send_displs, & send_sizes INTEGER, DIMENSION(2) :: block_col_bounds, block_row_bounds INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_dist, col_img_dist, local_cols, local_g2l_map_cols, & local_g2l_map_rows, local_rows, meta_buffer_p, & row_dist, row_img_dist, threads_dist INTEGER, DIMENSION(:, :), POINTER, CONTIGUOUS :: blacs2mpi, local_images_size INTEGER, DIMENSION(idata:imeta) :: my_size_recv, my_size_send INTEGER, POINTER :: coli, rowi INTEGER, TARGET :: mi, ui LOGICAL :: do_crop, do_part_crop_col, do_part_crop_f_col, do_part_crop_f_row, & do_part_crop_l_col, do_part_crop_l_row, do_part_crop_row, do_symmetry, tr LOGICAL, DIMENSION(:), POINTER, CONTIGUOUS :: do_win_create TYPE(dbcsr_buffer), POINTER :: buffer TYPE(dbcsr_data_obj) :: data_block TYPE(dbcsr_data_obj), POINTER :: data_buffer_p TYPE(dbcsr_distribution_obj) :: set_dist TYPE(dbcsr_iterator) :: iter TYPE(dbcsr_mp_obj) :: mp_obj TYPE(dbcsr_scalar_type) :: scale_neg_one TYPE(dbcsr_type) :: sm TYPE(mp_comm_type) :: grp !$ INTEGER(kind=omp_lock_kind), ALLOCATABLE, DIMENSION(:) :: locks CALL timeset(routineN, handle) ! Sync with previous multiplication IF (request_sync_mult .NE. mp_request_null) & DBCSR_ABORT("Multiplications are not in sync!") ! ! Take input values and check validity IF (.NOT. dbcsr_valid_index(matrix)) & DBCSR_ABORT("Matrix not initialized.") sm = matrix data_type = sm%data_type IF (data_type .NE. dbcsr_type_real_8 .AND. & data_type .NE. dbcsr_type_real_4 .AND. & data_type .NE. dbcsr_type_complex_8 .AND. & data_type .NE. dbcsr_type_complex_4) & DBCSR_ABORT("Invalid data type.") scale_neg_one = dbcsr_scalar_negative(dbcsr_scalar_one(data_type)) set_dist = imgdist%i%main row_dist => dbcsr_distribution_row_dist(set_dist) col_dist => dbcsr_distribution_col_dist(set_dist) local_rows => dbcsr_distribution_local_rows(set_dist) local_cols => dbcsr_distribution_local_cols(set_dist) nblkrows_local = SIZE(local_rows) nblkcols_local = SIZE(local_cols) IF (sm%symmetry) THEN IF (SIZE(row_dist) .NE. SIZE(col_dist)) & DBCSR_WARN('Unequal row and column distributions for symmetric matrix.') END IF nrows_images = imgdist%i%row_decimation row_img_dist => array_data(imgdist%i%row_image) ncols_images = imgdist%i%col_decimation col_img_dist => array_data(imgdist%i%col_image) mp_obj = dbcsr_distribution_mp(imgdist%i%main) CALL dbcsr_mp_grid_setup(mp_obj) nprocs_total = dbcsr_mp_numnodes(mp_obj) mynode = dbcsr_mp_mynode(mp_obj) grp = dbcsr_mp_group(mp_obj) blacs2mpi => dbcsr_mp_pgrid(mp_obj) IF (dbcsr_distribution_max_row_dist(set_dist) .GT. UBOUND(blacs2mpi, 1)) & DBCSR_ABORT("Row distribution references unexistent processor rows") IF (dbcsr_distribution_max_col_dist(set_dist) .GT. UBOUND(blacs2mpi, 2)) & DBCSR_ABORT("Col distribution references unexistent processor cols") ! Check threads configuration NULLIFY (threads_dist) !$ IF (.NOT. dbcsr_distribution_has_threads(dbcsr_distribution(matrix))) & !$ DBCSR_ABORT("Thread distribution not defined") !$ threads_dist => array_data(dbcsr_distribution_thread_dist(dbcsr_distribution(matrix))) IF (is_left) THEN IF (nrows_images .GT. 1) & DBCSR_ABORT("Row nimages for left matrix is not 1!") ELSE IF (ncols_images .GT. 1) & DBCSR_ABORT("Col nimages for right matrix is not 1!") END IF ! ! Crop matrix do_crop = .FALSE. do_part_crop_row = .FALSE. do_part_crop_col = .FALSE. do_part_crop_f_row = .FALSE. do_part_crop_l_row = .FALSE. do_part_crop_f_col = .FALSE. do_part_crop_l_col = .FALSE. ! Set no limits IF (ANY((/f_row, l_row, f_col, l_col/) .NE. 0)) THEN IF (f_row .LT. 0) & DBCSR_ABORT("Invalid first row bound.") IF (l_row .GT. dbcsr_nfullrows_total(matrix)) & DBCSR_ABORT("Invalid last row bound.") IF (f_col .LT. 0) & DBCSR_ABORT("Invalid first column bound.") IF (l_col .GT. dbcsr_nfullcols_total(matrix)) & DBCSR_ABORT("Invalid last column bound.") ! do_crop = .TRUE. ! ! Convert bounds to block addressing IF (f_row .EQ. 0) THEN block_row_bounds(1) = 1 ELSE CALL find_block_of_element(f_row, block_row_bounds(1), & dbcsr_nblkrows_total(matrix), & dbcsr_row_block_offsets(matrix), & hint=0) do_part_crop_f_row = array_get(dbcsr_row_block_offsets(matrix), block_row_bounds(1)) .NE. f_row IF (do_part_crop_f_row) THEN ! Block offset of last cleared row f_row_f = f_row - array_get(dbcsr_row_block_offsets(matrix), block_row_bounds(1)) END IF END IF ! IF (l_row .EQ. 0) THEN block_row_bounds(2) = dbcsr_nblkrows_total(matrix) ELSE CALL find_block_of_element(l_row, block_row_bounds(2), & dbcsr_nblkrows_total(matrix), & dbcsr_row_block_offsets(matrix), & hint=0) do_part_crop_l_row = (array_get(dbcsr_row_block_offsets(matrix), block_row_bounds(2) + 1) - 1) .NE. l_row IF (do_part_crop_l_row) THEN ! Block offset of first cleared row l_row_l = 2 + l_row - array_get(dbcsr_row_block_offsets(matrix), block_row_bounds(2)) END IF END IF do_part_crop_row = do_part_crop_f_row .OR. do_part_crop_l_row ! IF (f_col .EQ. 0) THEN block_col_bounds(1) = 1 ELSE CALL find_block_of_element(f_col, block_col_bounds(1), & dbcsr_nblkcols_total(matrix), & dbcsr_col_block_offsets(matrix), & hint=0) do_part_crop_f_col = array_get(dbcsr_col_block_offsets(matrix), block_col_bounds(1)) .NE. f_col IF (do_part_crop_f_col) THEN ! Block offset of last cleared col f_col_f = f_col - array_get(dbcsr_col_block_offsets(matrix), block_col_bounds(1)) END IF END IF ! IF (l_col .EQ. 0) THEN block_col_bounds(2) = dbcsr_nblkcols_total(matrix) ELSE CALL find_block_of_element(l_col, block_col_bounds(2), & dbcsr_nblkcols_total(matrix), & dbcsr_col_block_offsets(matrix), & hint=0) do_part_crop_l_col = (array_get(dbcsr_col_block_offsets(matrix), block_col_bounds(2) + 1) - 1) .NE. l_col IF (do_part_crop_l_col) THEN ! Block offset of first cleared col l_col_l = 2 + l_col - array_get(dbcsr_col_block_offsets(matrix), block_col_bounds(2)) END IF END IF do_part_crop_col = do_part_crop_f_col .OR. do_part_crop_l_col END IF ! IF (dbcsr_has_symmetry(matrix)) THEN nsymmetries = 2 do_symmetry = .TRUE. ELSE nsymmetries = 1 do_symmetry = .FALSE. END IF ! IF (is_left) THEN nimages = ncols_images buffer => buffers_win%left nprocs = dbcsr_mp_npcols(mp_obj) ALLOCATE (left_images_size(idata:imeta, & nimages, & MAX(1, dbcsr_mp_nprows(mp_obj)/layers_3D_C_reduction%side3D), & 0:nprocs - 1)) ALLOCATE (left_local_images_size(idata:imeta, nimages)) local_images_size => left_local_images_size irequests = 1 ! ! Count the maximum possible multiplies per row for on-the-fly filtering IF (otf_filtering) THEN ALLOCATE (left_total_row_counts(nblkrows_local)) left_total_row_counts = 0 END IF do_win_create => do_win_create_left ELSE nimages = nrows_images buffer => buffers_win%right nprocs = dbcsr_mp_nprows(mp_obj) ALLOCATE (right_images_size(idata:imeta, & nimages, & MAX(1, dbcsr_mp_npcols(mp_obj)/layers_3D_C_reduction%side3D), & 0:nprocs - 1)) ALLOCATE (right_local_images_size(idata:imeta, nimages)) local_images_size => right_local_images_size irequests = 2 do_win_create => do_win_create_right END IF ! ! 3D communicator CALL make_layers_3D_AB(layers_3D_C_reduction%num_layers_3D, & layers_3D_C_reduction%side3D, & mp_obj, is_left, buffer) ! ! Evaluate maps for global -> local indexing (g2l_map_rows, g2l_map_cols) ! Count the number of blocks per row/column (img_nblks_rows, img_nblks_cols) IF (is_left) THEN ALLOCATE (g2l_map_rows(sm%nblkrows_total)) local_g2l_map_rows => g2l_map_rows ALLOCATE (local_g2l_map_cols(sm%nblkcols_total)) ALLOCATE (img_nblks_rows(1), img_nblks_cols(nimages)) ELSE ALLOCATE (g2l_map_cols(sm%nblkcols_total)) local_g2l_map_cols => g2l_map_cols ALLOCATE (local_g2l_map_rows(sm%nblkrows_total)) ALLOCATE (img_nblks_rows(nimages), img_nblks_cols(1)) END IF ! local_g2l_map_rows(:) = 0 IF (nrows_images .EQ. 1) THEN img_nblks_rows(1) = nblkrows_local DO row = 1, nblkrows_local local_g2l_map_rows(local_rows(row)) = row END DO ELSE img_nblks_rows(:) = 0 DO row = 1, nblkrows_local row_img = row_img_dist(local_rows(row)) ui = MOD(row_img - 1, nrows_images) + 1 img_nblks_rows(ui) = img_nblks_rows(ui) + 1 local_g2l_map_rows(local_rows(row)) = img_nblks_rows(ui) END DO END IF ! local_g2l_map_cols(:) = 0 IF (ncols_images .EQ. 1) THEN img_nblks_cols(1) = nblkcols_local DO col = 1, nblkcols_local local_g2l_map_cols(local_cols(col)) = col END DO ELSE img_nblks_cols(:) = 0 DO col = 1, nblkcols_local col_img = col_img_dist(local_cols(col)) ui = MOD(col_img - 1, ncols_images) + 1 img_nblks_cols(ui) = img_nblks_cols(ui) + 1 local_g2l_map_cols(local_cols(col)) = img_nblks_cols(ui) END DO END IF ! !$OMP PARALLEL DEFAULT (NONE) & !$OMP PRIVATE (ithread,myt,iter,row,col,blk,row_size,col_size,& !$OMP stored_row,stored_col,blk_p,bp,tr,& !$OMP nze,symmetry_i,row_img,col_img,rowi,coli,& !$OMP tr_row_size,tr_col_size,prow,pcol,dst_proc,& !$OMP data_buffer_p,meta_buffer_p,& !$OMP mi,ui,it,data_block) & !$OMP SHARED (nthreads,send_sizes,offset_data,matrix,nsymmetries,do_symmetry,& !$OMP row_img_dist,col_img_dist,imgdist,row_dist,col_dist,& !$OMP is_left,my_size_send,my_size_recv,nimages,& !$OMP local_images_size,data_type,memtype_mpi_buffer,sm,& !$OMP img_nblks_cols,img_nblks_rows,mynode,offset_threads,& !$OMP local_g2l_map_cols,local_g2l_map_rows,recv_sizes,grp,make_buffers_meta_send,& !$OMP scale_value,scale_neg_one,make_buffers_data_send,make_buffers_data_recv,& !$OMP size_index,recv_displ_proc,recv_size_proc,send_size_proc,& !$OMP mp_obj,threads_dist,make_buffers_meta_recv,nrows_images,ncols_images,& !$OMP locks,blacs2mpi,send_displ_proc,recv_displs,send_displs,& !$OMP left_images_size,right_images_size,local_images_displ,requests,& !$OMP buffer,left_total_row_counts,otf_filtering,& !$OMP irequests,do_win_create,handle2,nprocs_total,& !$OMP do_crop,do_part_crop_row,do_part_crop_col,block_row_bounds,block_col_bounds,& !$OMP do_part_crop_f_row,do_part_crop_l_row,do_part_crop_f_col,do_part_crop_l_col,& !$OMP f_row_f,l_row_l,f_col_f,l_col_l,requests_win_create) ithread = 0 !$ ithread = omp_get_thread_num() myt = ithread IF (is_left) THEN rowi => mi coli => ui ELSE rowi => ui coli => mi END IF !$OMP MASTER nthreads = 1 !$ nthreads = omp_get_num_threads() ALLOCATE (send_sizes(idata:imeta, 0:nthreads - 1, & nimages, 0:nprocs_total - 1)) send_sizes(:, :, :, :) = 0 ! size_index = 0 !$ IF (is_left) THEN !$ size_index = nthreads + 1 !$ END IF !$ IF (is_left .AND. do_symmetry) THEN !$ ALLOCATE (locks(0:nthreads - 1)) !$ END IF !$OMP END MASTER !$OMP BARRIER !$ IF (is_left .AND. do_symmetry) THEN !$ call omp_init_lock(locks(ithread)) !$ END IF ! ! Take data and meta dimensions per each thread, image, proc CALL dbcsr_iterator_start(iter, matrix, shared=.TRUE.) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, blk, & row_size=row_size, col_size=col_size) nze = row_size*col_size IF (nze .EQ. 0) CYCLE DO symmetry_i = 1, nsymmetries IF (symmetry_i .EQ. 1) THEN stored_row = row; stored_col = col ELSE IF (row .EQ. col) CYCLE stored_row = col; stored_col = row END IF ! Apply cropping IF (do_crop) THEN IF (stored_row .LT. block_row_bounds(1)) CYCLE IF (stored_row .GT. block_row_bounds(2)) CYCLE IF (stored_col .LT. block_col_bounds(1)) CYCLE IF (stored_col .GT. block_col_bounds(2)) CYCLE END IF row_img = row_img_dist(stored_row) col_img = col_img_dist(stored_col) CALL image_calculator(imgdist, & prow=prow, pcol=pcol, & rowi=rowi, coli=coli, & myprow=row_dist(stored_row), myrowi=row_img, & mypcol=col_dist(stored_col), mycoli=col_img, & shifting='0') dst_proc = blacs2mpi(prow, pcol) !$ IF (is_left .AND. do_symmetry) THEN !$ myt = threads_dist(stored_row) !$ END IF !$OMP ATOMIC send_sizes(imeta, myt, ui, dst_proc) = & send_sizes(imeta, myt, ui, dst_proc) + 3 !$OMP ATOMIC send_sizes(idata, myt, ui, dst_proc) = & send_sizes(idata, myt, ui, dst_proc) + nze END DO ! symmetry_i END DO CALL dbcsr_iterator_stop(iter) !$OMP BARRIER !$OMP MASTER ! Exchange refs ALLOCATE (recv_sizes(idata:imeta, 0:nthreads - 1, & nimages, 0:nprocs_total - 1)) CALL timeset(routineN//"_sizes", handle2) CALL mp_alltoall(send_sizes(:, :, :, :), & recv_sizes(:, :, :, :), & 2*nimages*nthreads, grp) CALL timestop(handle2) ! ! Evaluate the local size for each image, accumulating over threads and procs. ! Take the local displacement for each image. ! Note that displacement starts at zero. my_size_recv(:) = 0 local_images_size(:, :) = 0 ALLOCATE (local_images_displ(idata:imeta, nimages)) DO ui = 1, nimages local_images_displ(:, ui) = my_size_recv(:) DO dst_proc = 0, nprocs_total - 1 DO it = 0, nthreads - 1 local_images_size(:, ui) = local_images_size(:, ui) + & recv_sizes(:, it, ui, dst_proc) END DO END DO IF (local_images_size(imeta, ui) .EQ. 0) CYCLE ! Include stats slots for threads indices local_images_size(imeta, ui) = local_images_size(imeta, ui) + size_index my_size_recv(:) = my_size_recv(:) + local_images_size(:, ui) END DO ! ! Exchange sizes IF (is_left) THEN CALL mp_iallgather(local_images_size, left_images_size, buffer%subgrp, requests(irequests)) ELSE CALL mp_iallgather(local_images_size, right_images_size, buffer%subgrp, requests(irequests)) END IF ! ! Allocate data and meta buffers do_win_create(:) = .NOT. buffer%has_rma_win IF (buffer%has_rma_win) THEN IF (buffer%grp .NE. grp .OR. dbcsr_data_get_type(buffer%data) .NE. data_type) THEN do_win_create(:) = .TRUE. END IF END IF CALL buffer_init(buffer, data_type, & my_size_recv(idata), my_size_recv(imeta), & data_memory_type=memtype_mpi_buffer) buffer%grp = grp ! ! Set send and recv buffers sizes and displacements for each proc. ! Accumulate over images and threads. ! Here displacement starts at one. ALLOCATE (send_displs(idata:imeta, 0:nthreads - 1, & nimages, 0:nprocs_total - 1)) ! Displs for local data arrangement, starting at one. ALLOCATE (recv_displs(idata:imeta, 0:nthreads - 1, & nimages, 0:nprocs_total - 1)) ! Here displacement starts at zero. ALLOCATE (send_size_proc(idata:imeta, 0:nprocs_total - 1)) ALLOCATE (recv_size_proc(idata:imeta, 0:nprocs_total - 1)) ALLOCATE (send_displ_proc(idata:imeta, 0:nprocs_total - 1)) ALLOCATE (recv_displ_proc(idata:imeta, 0:nprocs_total - 1)) my_size_send(:) = 1 my_size_recv(:) = 1 DO dst_proc = 0, nprocs_total - 1 send_displ_proc(:, dst_proc) = my_size_send(:) - 1 recv_displ_proc(:, dst_proc) = my_size_recv(:) - 1 ! Avoid communication of local data IF (dst_proc .NE. mynode) THEN DO ui = 1, nimages DO it = 0, nthreads - 1 send_displs(:, it, ui, dst_proc) = my_size_send(:) recv_displs(:, it, ui, dst_proc) = my_size_recv(:) my_size_send(:) = my_size_send(:) + send_sizes(:, it, ui, dst_proc) my_size_recv(:) = my_size_recv(:) + recv_sizes(:, it, ui, dst_proc) END DO END DO ELSE ! Reset all send_displs(:, :, :, dst_proc) = 0 recv_displs(:, :, :, dst_proc) = 0 END IF send_size_proc(:, dst_proc) = my_size_send(:) - send_displ_proc(:, dst_proc) - 1 recv_size_proc(:, dst_proc) = my_size_recv(:) - recv_displ_proc(:, dst_proc) - 1 END DO ! ! Allocate data/meta to send IF (dbcsr_data_valid(make_buffers_data_send)) THEN IF (dbcsr_data_get_type(make_buffers_data_send) .NE. data_type) THEN CALL dbcsr_data_release(make_buffers_data_send) END IF END IF IF (dbcsr_data_valid(make_buffers_data_send)) THEN CALL dbcsr_data_ensure_size(make_buffers_data_send, my_size_send(idata) - 1, nocopy=.TRUE.) ELSE CALL dbcsr_data_init(make_buffers_data_send) CALL dbcsr_data_new(make_buffers_data_send, data_type, my_size_send(idata) - 1, & memory_type=memtype_mpi_buffer) END IF CALL ensure_array_size(make_buffers_meta_send, ub=my_size_send(imeta) - 1, & nocopy=.TRUE., memory_type=memtype_mpi_buffer) ! Displs for data offset ALLOCATE (offset_threads(idata:imeta, 0:nthreads - 1, nimages)) offset_threads(:, :, :) = 0 ! Set offset for local data ALLOCATE (offset_data(0:nthreads - 1, nimages, 0:nprocs_total - 1)) offset_data(:, :, :) = 1 ! Evaluate local displs DO ui = 1, nimages IF (local_images_size(imeta, ui) .EQ. 0) CYCLE offset_threads(:, 0, ui) = 0 DO it = 1, nthreads - 1 offset_threads(:, it, ui) = offset_threads(:, it - 1, ui) DO dst_proc = 0, nprocs_total - 1 offset_threads(:, it, ui) = offset_threads(:, it, ui) + & recv_sizes(:, it - 1, ui, dst_proc) END DO END DO ! Fill meta indices for threads !$ IF (is_left) THEN !$ buffer%meta(local_images_displ(imeta, ui) + 1:local_images_displ(imeta, ui) + nthreads) = & !$ offset_threads(imeta, :, ui)/3 !$ buffer%meta(local_images_displ(imeta, ui) + size_index) = & !$ (local_images_size(imeta, ui) - size_index)/3 !$ END IF offset_threads(imeta, :, ui) = offset_threads(imeta, :, ui) + local_images_displ(imeta, ui) + size_index + 1 send_displs(:, :, ui, mynode) = offset_threads(:, :, ui) ! ! Allow ordering by proc for insertion DO dst_proc = 0, mynode - 1 DO it = 0, nthreads - 1 send_displs(:, it, ui, mynode) = send_displs(:, it, ui, mynode) + & recv_sizes(:, it, ui, dst_proc) END DO END DO offset_data(:, ui, mynode) = send_displs(idata, :, ui, mynode) + 1 send_displs(idata, :, ui, mynode) = send_displs(idata, :, ui, mynode) + local_images_displ(idata, ui) + 1 END DO !$OMP END MASTER !$OMP BARRIER ! IF (do_part_crop_row .OR. do_part_crop_col) THEN CALL dbcsr_data_init(data_block) CALL dbcsr_data_new(data_block, dbcsr_type_1d_to_2d(data_type)) END IF ! ! Copy data and meta in the buffers CALL timeset(routineN//"_pack", handle2) CALL dbcsr_iterator_start(iter, matrix, shared=.TRUE.) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, blk, blk_p=blk_p, & row_size=row_size, col_size=col_size) nze = row_size*col_size IF (nze .EQ. 0) CYCLE bp = ABS(blk_p) DO symmetry_i = 1, nsymmetries IF (symmetry_i .EQ. 1) THEN stored_row = row; stored_col = col; tr = blk_p .LT. 0 tr_row_size = col_size; tr_col_size = row_size ELSE IF (row .EQ. col) CYCLE stored_row = col; stored_col = row; tr = blk_p .GT. 0 tr_row_size = row_size; tr_col_size = col_size END IF ! Apply cropping IF (do_crop) THEN IF (stored_row .LT. block_row_bounds(1)) CYCLE IF (stored_row .GT. block_row_bounds(2)) CYCLE IF (stored_col .LT. block_col_bounds(1)) CYCLE IF (stored_col .GT. block_col_bounds(2)) CYCLE END IF row_img = row_img_dist(stored_row) col_img = col_img_dist(stored_col) CALL image_calculator(imgdist, & prow=prow, pcol=pcol, & rowi=rowi, coli=coli, & myprow=row_dist(stored_row), myrowi=row_img, & mypcol=col_dist(stored_col), mycoli=col_img, & shifting='0') dst_proc = blacs2mpi(prow, pcol) IF (dst_proc .EQ. mynode) THEN data_buffer_p => buffer%data meta_buffer_p => buffer%meta ELSE data_buffer_p => make_buffers_data_send meta_buffer_p => make_buffers_meta_send END IF !$ IF (is_left .AND. do_symmetry) THEN !$ myt = threads_dist(stored_row) !$ call omp_set_lock(locks(myt)) !$ END IF IF (tr) THEN CALL dbcsr_block_transpose_aa(data_buffer_p, sm%data_area, tr_row_size, tr_col_size, & send_displs(idata, myt, ui, dst_proc), bp, & scale_value) IF (sm%negate_real .AND. sm%negate_imaginary) THEN CALL dbcsr_block_scale(data_buffer_p, scale=scale_neg_one, & row_size=nze, col_size=1, & lb=send_displs(idata, myt, ui, dst_proc)) ELSEIF (sm%negate_real) THEN CALL dbcsr_block_real_neg(data_buffer_p, row_size=nze, col_size=1, & lb=send_displs(idata, myt, ui, dst_proc)) ELSEIF (sm%negate_imaginary) THEN CALL dbcsr_block_conjg(data_buffer_p, row_size=nze, col_size=1, & lb=send_displs(idata, myt, ui, dst_proc)) END IF ELSE CALL dbcsr_block_copy_aa(data_buffer_p, sm%data_area, row_size, col_size, & send_displs(idata, myt, ui, dst_proc), bp, & scale_value) END IF ! ! Apply cropping for partial blocks IF (do_part_crop_row .OR. do_part_crop_col) THEN CALL dbcsr_data_set_pointer( & area=data_block, & rsize=row_size, & csize=col_size, & pointee=data_buffer_p, & source_lb=send_displs(idata, myt, ui, dst_proc)) IF (do_part_crop_row) THEN IF (do_part_crop_f_row .AND. stored_row .EQ. block_row_bounds(1)) THEN CALL dbcsr_data_clear(data_block, ub=f_row_f) END IF IF (do_part_crop_l_row .AND. stored_row .EQ. block_row_bounds(2)) THEN CALL dbcsr_data_clear(data_block, lb=l_row_l) END IF END IF IF (do_part_crop_col) THEN IF (do_part_crop_f_col .AND. stored_col .EQ. block_col_bounds(1)) THEN CALL dbcsr_data_clear(data_block, ub2=f_col_f) END IF IF (do_part_crop_l_col .AND. stored_col .EQ. block_col_bounds(2)) THEN CALL dbcsr_data_clear(data_block, lb2=l_col_l) END IF END IF END IF ! ! Set meta data (global or local indexing) IF (dst_proc .EQ. mynode) THEN stored_row = local_g2l_map_rows(stored_row) stored_col = local_g2l_map_cols(stored_col) ! Count the maximum possible multiplies per row for on-the-fly filtering IF (is_left .AND. otf_filtering) THEN left_total_row_counts(stored_row) = & left_total_row_counts(stored_row) + 1 END IF END IF meta_buffer_p(send_displs(imeta, myt, ui, dst_proc)) = stored_row meta_buffer_p(send_displs(imeta, myt, ui, dst_proc) + 1) = stored_col meta_buffer_p(send_displs(imeta, myt, ui, dst_proc) + 2) = offset_data(myt, ui, dst_proc) ! send_displs(imeta, myt, ui, dst_proc) = send_displs(imeta, myt, ui, dst_proc) + 3 send_displs(idata, myt, ui, dst_proc) = send_displs(idata, myt, ui, dst_proc) + nze offset_data(myt, ui, dst_proc) = offset_data(myt, ui, dst_proc) + nze !$ IF (is_left .AND. do_symmetry) THEN !$ call omp_unset_lock(locks(myt)) !$ END IF END DO END DO CALL dbcsr_iterator_stop(iter) CALL timestop(handle2) ! IF (do_part_crop_row .OR. do_part_crop_col) THEN CALL dbcsr_data_clear_pointer(data_block) CALL dbcsr_data_release(data_block) END IF ! !$OMP BARRIER !$OMP MASTER ! ! Allocate data/meta to recv IF (dbcsr_data_valid(make_buffers_data_recv)) THEN IF (dbcsr_data_get_type(make_buffers_data_recv) .NE. data_type) THEN CALL dbcsr_data_release(make_buffers_data_recv) END IF END IF IF (dbcsr_data_valid(make_buffers_data_recv)) THEN CALL dbcsr_data_ensure_size(make_buffers_data_recv, my_size_recv(idata) - 1, nocopy=.TRUE.) ELSE CALL dbcsr_data_init(make_buffers_data_recv) CALL dbcsr_data_new(make_buffers_data_recv, data_type, my_size_recv(idata) - 1, & memory_type=memtype_mpi_buffer) END IF CALL ensure_array_size(make_buffers_meta_recv, ub=my_size_recv(imeta) - 1, & nocopy=.TRUE., memory_type=memtype_mpi_buffer) ! Exchange data CALL timeset(routineN//"_data", handle2) CALL hybrid_alltoall_any(make_buffers_data_send, send_size_proc(idata, :), send_displ_proc(idata, :), & make_buffers_data_recv, recv_size_proc(idata, :), recv_displ_proc(idata, :), & mp_obj, & most_ptp=.TRUE., remainder_ptp=.TRUE., no_hybrid=.FALSE.) CALL hybrid_alltoall_i1(make_buffers_meta_send, send_size_proc(imeta, :), send_displ_proc(imeta, :), & make_buffers_meta_recv, recv_size_proc(imeta, :), recv_displ_proc(imeta, :), & mp_obj, & most_ptp=.TRUE., remainder_ptp=.TRUE., no_hybrid=.FALSE.) CALL timestop(handle2) !$OMP END MASTER !$OMP BARRIER !$ IF (is_left .AND. do_symmetry) THEN !$ call omp_destroy_lock(locks(ithread)) !$ END IF ! ! Arrange data in the local buffers in images data_buffer_p => buffer%data meta_buffer_p => buffer%meta DO ui = 1, nimages ! Check for empty images IF (local_images_size(imeta, ui) .EQ. 0) CYCLE DO dst_proc = 0, nprocs_total - 1 IF (recv_sizes(imeta, ithread, ui, dst_proc) .EQ. 0) CYCLE ! Skip local data IF (dst_proc .EQ. mynode) THEN offset_threads(:, ithread, ui) = offset_threads(:, ithread, ui) + & recv_sizes(:, ithread, ui, dst_proc) ELSE ! Copy meta, block by block DO blk = recv_displs(imeta, ithread, ui, dst_proc), & recv_displs(imeta, ithread, ui, dst_proc) + recv_sizes(imeta, ithread, ui, dst_proc) - 1, 3 stored_row = local_g2l_map_rows(make_buffers_meta_recv(blk)) stored_col = local_g2l_map_cols(make_buffers_meta_recv(blk + 1)) meta_buffer_p(offset_threads(imeta, ithread, ui)) = stored_row meta_buffer_p(offset_threads(imeta, ithread, ui) + 1) = stored_col meta_buffer_p(offset_threads(imeta, ithread, ui) + 2) = make_buffers_meta_recv(blk + 2) + & offset_threads(idata, ithread, ui) offset_threads(imeta, ithread, ui) = offset_threads(imeta, ithread, ui) + 3 ! Count the maximum possible multiplies per row for on-the-fly filtering IF (is_left .AND. otf_filtering) THEN !$OMP ATOMIC left_total_row_counts(stored_row) = & left_total_row_counts(stored_row) + 1 END IF END DO ! Copy data CALL dbcsr_data_set(data_buffer_p, & offset_threads(idata, ithread, ui) + local_images_displ(idata, ui) + 1, & recv_sizes(idata, ithread, ui, dst_proc), & make_buffers_data_recv, recv_displs(idata, ithread, ui, dst_proc)) offset_threads(idata, ithread, ui) = offset_threads(idata, ithread, ui) + & recv_sizes(idata, ithread, ui, dst_proc) END IF END DO END DO !$OMP END PARALLEL DEALLOCATE (send_sizes, recv_sizes) DEALLOCATE (send_displs, recv_displs, offset_data, offset_threads) DEALLOCATE (send_size_proc, send_displ_proc, recv_size_proc, recv_displ_proc) ! IF (is_left .AND. otf_filtering) THEN CALL mp_isum(left_total_row_counts, dbcsr_mp_my_row_group(mp_obj), request_count_rows) END IF ! CALL setup_rec_index_images(buffer%meta, img_nblks_rows, img_nblks_cols, & local_images_size(imeta, :), local_images_displ(imeta, :), & size_index, is_left) IF (buffer%has_rma_win) THEN do_win_create(1) = do_win_create(1) .OR. dbcsr_data_exists(buffer%data_before_resize) do_win_create(2) = do_win_create(2) .OR. ASSOCIATED(buffer%meta_before_resize) CALL mp_isum(do_win_create, buffer%subgrp, requests_win_create(irequests)) END IF ! IF (is_left) THEN NULLIFY (local_g2l_map_rows) DEALLOCATE (local_g2l_map_cols) ELSE DEALLOCATE (local_g2l_map_rows) NULLIFY (local_g2l_map_cols) END IF !$ IF (is_left .AND. do_symmetry) THEN !$ DEALLOCATE (locks) !$ END IF ! DEALLOCATE (img_nblks_rows, img_nblks_cols) DEALLOCATE (local_images_displ) ! CALL timestop(handle) END SUBROUTINE make_buffers SUBROUTINE make_layers_3D_AB(my_num_layers_3D, side3D, mp_obj, is_left, buffer) !! Make communicators for A and B matrices INTEGER, INTENT(IN) :: my_num_layers_3D, side3D TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_obj LOGICAL, INTENT(IN) :: is_left TYPE(dbcsr_buffer), INTENT(INOUT) :: buffer INTEGER :: color, key, mypcol, myprow TYPE(mp_comm_type) :: mygrp ! Switch to single layer communicator IF (my_num_layers_3D .LE. 1) THEN IF (buffer%num_layers_3D .GT. 1 .AND. buffer%subgrp .NE. mp_comm_null) & CALL mp_comm_free(buffer%subgrp) buffer%num_layers_3D = 1 IF (is_left) THEN buffer%subgrp = dbcsr_mp_my_row_group(mp_obj) ELSE buffer%subgrp = dbcsr_mp_my_col_group(mp_obj) END IF RETURN END IF ! ! Check if any existing 3D communicator can be reused mygrp = dbcsr_mp_group(mp_obj) IF (buffer%grp .EQ. mygrp .AND. buffer%num_layers_3D .EQ. my_num_layers_3D) RETURN ! ! Reset previous 3D communicator IF (buffer%num_layers_3D .GT. 1 .AND. buffer%subgrp .NE. mp_comm_null) & CALL mp_comm_free(buffer%subgrp) ! myprow = dbcsr_mp_myprow(mp_obj) mypcol = dbcsr_mp_mypcol(mp_obj) IF (is_left) THEN color = MOD(myprow, side3D) ! Column-major order key = mypcol*(dbcsr_mp_nprows(mp_obj)/side3D) + myprow/side3D ELSE color = MOD(mypcol, side3D) ! Row-major order key = myprow*(dbcsr_mp_npcols(mp_obj)/side3D) + mypcol/side3D END IF CALL mp_comm_split_direct(mygrp, buffer%subgrp, color, key) buffer%num_layers_3D = my_num_layers_3D END SUBROUTINE make_layers_3D_AB PURE FUNCTION get_rank3D(myprow, mypcol, nprows, side3D) !! Return the rank of the 3D layer (3D communicator for C), Column-major order INTEGER, INTENT(IN) :: myprow, mypcol, nprows, side3D INTEGER :: get_rank3D get_rank3D = myprow/side3D + (nprows/side3D)*(mypcol/side3D) END FUNCTION get_rank3D SUBROUTINE make_layers_3D_C_reduction(my_num_layers_3D, mp_obj) !! Make communicators for 3D layers for C-reduction INTEGER, INTENT(IN) :: my_num_layers_3D TYPE(dbcsr_mp_obj), INTENT(INOUT) :: mp_obj CHARACTER(len=100) :: msg INTEGER :: color, key, mypcol, myprow, & npcols, nprows, numnodes LOGICAL :: do_layers_3D LOGICAL, SAVE :: warning = .TRUE. TYPE(mp_comm_type) :: mygrp CALL dbcsr_mp_grid_setup(mp_obj) IF (my_num_layers_3D .LE. 1) THEN ! Reset 3D communicator if it was previously declared IF (layers_3D_C_reduction%num_layers_3D .GT. 1) CALL release_layers_3D_C_reduction() RETURN END IF ! ! Check if any existing 3D communicator can be reused mygrp = dbcsr_mp_group(mp_obj) IF (layers_3D_C_reduction%grp .EQ. mygrp .AND. & layers_3D_C_reduction%num_layers_3D .EQ. my_num_layers_3D) RETURN ! ! Reset 3D communicator CALL release_layers_3D_C_reduction() ! ! Checks for 3D algorithm numnodes = dbcsr_mp_numnodes(mp_obj) nprows = dbcsr_mp_nprows(mp_obj) npcols = dbcsr_mp_npcols(mp_obj) IF (dbcsr_cfg%use_mpi_rma%val) THEN IF (nprows .NE. npcols) THEN ! No square topology, scale the maximum coordinate do_layers_3D = MAX(nprows, npcols) .EQ. (my_num_layers_3D*MIN(nprows, npcols)) .AND. & my_num_layers_3D .LE. MIN(nprows, npcols) ELSE ! Square topology, scale both coordinates do_layers_3D = ((nprows/NINT(SQRT(REAL(MAX(1, my_num_layers_3D), KIND=real_8))))**2)* & my_num_layers_3D .EQ. (nprows*npcols) END IF IF (.NOT. do_layers_3D .AND. warning) THEN WRITE (UNIT=msg, FMT='(A,I3,A,I3,A,I3,A)') "Cannot make 3D layers with ", my_num_layers_3D, & " layers and (", nprows, "x", npcols, ") ranks! Run with a single layer." DBCSR_WARN(msg) warning = .FALSE. END IF IF (do_layers_3D) THEN layers_3D_C_reduction%grp = mygrp layers_3D_C_reduction%num_layers_3D = my_num_layers_3D layers_3D_C_reduction%max_num_layers_3D = & MAX(layers_3D_C_reduction%max_num_layers_3D, & my_num_layers_3D) layers_3D_C_reduction%side3D = NINT(SQRT(REAL(numnodes/my_num_layers_3D, KIND=real_8))) ! ! Create a new 3D communicator myprow = dbcsr_mp_myprow(mp_obj) mypcol = dbcsr_mp_mypcol(mp_obj) ! Row-wise order for color color = MOD(myprow, layers_3D_C_reduction%side3D)* & layers_3D_C_reduction%side3D + MOD(mypcol, layers_3D_C_reduction%side3D) ! Column-major order key = get_rank3D(myprow, mypcol, nprows, layers_3D_C_reduction%side3D) CALL mp_comm_split_direct(mygrp, layers_3D_C_reduction%grp3D, color, key) ! ! Create a 3D-row communicator based on the 3D communicator color = key/(nprows/layers_3D_C_reduction%side3D) CALL mp_comm_split_direct(layers_3D_C_reduction%grp3D, & layers_3D_C_reduction%rowgrp3D, color, key) END IF ELSE DBCSR_WARN('Cannot make 3D layers without experimental MPI algorithm enabled!') END IF END SUBROUTINE make_layers_3D_C_reduction SUBROUTINE release_layers_3D_C_reduction(release_buffers) !! Release communicators for 3D layers for C-reduction LOGICAL, OPTIONAL :: release_buffers INTEGER :: ibuff layers_3D_C_reduction%grp = mp_comm_null IF (layers_3D_C_reduction%rowgrp3D .NE. mp_comm_null) CALL mp_comm_free(layers_3D_C_reduction%rowgrp3D) IF (layers_3D_C_reduction%grp3D .NE. mp_comm_null) CALL mp_comm_free(layers_3D_C_reduction%grp3D) layers_3D_C_reduction%rowgrp3D = mp_comm_null layers_3D_C_reduction%grp3D = mp_comm_null layers_3D_C_reduction%num_layers_3D = 1 layers_3D_C_reduction%side3D = HUGE(1) IF (PRESENT(release_buffers)) THEN IF (release_buffers .AND. ALLOCATED(layers_3D_C_reduction%data_red3D)) THEN DO ibuff = 1, SIZE(layers_3D_C_reduction%data_red3D) CALL dbcsr_data_release(layers_3D_C_reduction%data_red3D(ibuff)) END DO DEALLOCATE (layers_3D_C_reduction%data_red3D) END IF END IF END SUBROUTINE release_layers_3D_C_reduction SUBROUTINE multiply_3D(imgdist_left, imgdist_right, & matrix_left, matrix_right, & product_matrix, & retain_sparsity, & filter_eps, flop, keep_product_data) !! Multiplies two DBCSR matrices (experimental MPI algorithm). !! This algorithm is experimental and it should be not used in !! production runs. TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT) :: imgdist_left, imgdist_right TYPE(dbcsr_type), INTENT(IN) :: matrix_left, matrix_right TYPE(dbcsr_type), INTENT(INOUT), TARGET :: product_matrix !! DBCSR product matrix LOGICAL, INTENT(IN), OPTIONAL :: retain_sparsity !! retain the sparsity of the existing product matrix; default is no REAL(kind=real_8), INTENT(IN), OPTIONAL :: filter_eps INTEGER(KIND=int_8), INTENT(OUT) :: flop !! effective flop LOGICAL, INTENT(IN) :: keep_product_data CHARACTER(len=*), PARAMETER :: routineN = 'multiply_3D' INTEGER :: blk, data_type, data_type_byte, final_step_k, handle, & handle1, handle2, icol3D, icol3D_send, ileft_buffer_calc, ileft_buffer_comm, & iright_buffer_calc, iright_buffer_comm, irow3D, irow3D_send, istep_k_ordered, ithread, & ivirt_k, last_step_k, left_col_mult, left_col_nimages, left_col_total_nimages, & left_max_data_size, left_max_meta_size, left_myfirstvcol, left_myfirstvrow, left_mypcol, & left_myprow, left_npcols, left_nprows, left_row_mult, left_row_nimages, & leftovers_first_k, leftovers_k, leftovers_shift_k, leftovers_start_k, min_nimages, & mycol3D, mypcol, myprow INTEGER :: myrank3D, myrow3D, myt, nblkrows_local, nbuffers, nbuffers_norms, ncols3D, & nranks3D, nrows3D, nthreads, numnodes, nvirt_k, proc3D_recv, proc3D_send, recv_vcol, & recv_vrow, right_col_mult, right_col_nimages, & right_max_data_size, right_max_meta_size, right_myfirstvcol, right_myfirstvrow, & right_mypcol, right_myprow, right_npcols, right_nprows, right_row_mult, & right_row_nimages, right_row_total_nimages, row, shift3D, shift3D_comm, shift3D_recv, & size_guess, size_guess_init, start_k, start_k_ordered, v_ki INTEGER(KIND=int_8) :: mem INTEGER, ALLOCATABLE, DIMENSION(:) :: left_vrow, product_matrix_epss_displ, & product_matrix_epss_size, product_matrix_meta, product_matrix_size_recv, & product_matrix_size_send, right_vcol INTEGER, ALLOCATABLE, DIMENSION(:, :) :: product_matrix_meta_displ, & product_matrix_meta_size TYPE(mp_request_type) :: request_epss, request_keep_sparsity TYPE(mp_request_type), DIMENSION(2) :: requests_reduction_size TYPE(mp_request_type), ALLOCATABLE, DIMENSION(:) :: requests_reduction INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_blk_sizes2enum, enum2col_blk_sizes, & enum2row_blk_sizes, product_matrix_meta_recv, product_matrix_meta_send, & row_blk_sizes2enum INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: k_sizes INTEGER, DIMENSION(:, :, :), POINTER, CONTIGUOUS :: left_displ_layers3D, & left_images_size_layers3D, & right_displ_layers3D, & right_images_size_layers3D INTEGER, DIMENSION(dbcsr_slot_nblkrows_total: & dbcsr_slot_nfullcols_local) :: left_global_indices, right_global_indices INTEGER, POINTER :: istep_k_comm INTEGER, TARGET :: istep_k, istep_k_comm_curr LOGICAL :: do_layers3D, do_square_layers3D, & first_k, first_v_k, is_not_comm, & keep_sparsity, otf_filtering LOGICAL, ALLOCATABLE, DIMENSION(:) :: do_comm_left, do_comm_right REAL(kind=sp) :: filter_eps_sp REAL(kind=sp), ALLOCATABLE, DIMENSION(:), TARGET :: row_max_epss REAL(kind=sp), ALLOCATABLE, DIMENSION(:, :) :: left_norms, right_norms REAL(kind=sp), DIMENSION(:), POINTER, CONTIGUOUS :: product_matrix_epss TYPE(dbcsr_2d_array_obj) :: product_matrix3D TYPE(dbcsr_buffer), ALLOCATABLE, DIMENSION(:), & TARGET :: left_buffers, right_buffers TYPE(dbcsr_buffer), POINTER :: left_buffer_p, right_buffer_p TYPE(dbcsr_data_obj) :: data_get, data_send TYPE(dbcsr_mm_multrec_type_p), ALLOCATABLE, & DIMENSION(:, :, :) :: multrec TYPE(dbcsr_mp_obj) :: left_mp_obj, product_mp_obj, right_mp_obj TYPE(mn_local_sizes), ALLOCATABLE, DIMENSION(:) :: m_sizes, n_sizes TYPE(mp_comm_type) :: grp_left, grp_right CALL timeset(routineN, handle) ! NULLIFY (row_blk_sizes2enum, enum2row_blk_sizes) NULLIFY (col_blk_sizes2enum, enum2col_blk_sizes) NULLIFY (k_sizes) ! IF (PRESENT(retain_sparsity)) THEN keep_sparsity = retain_sparsity ELSE keep_sparsity = .FALSE. END IF otf_filtering = PRESENT(filter_eps) ! !$OMP PARALLEL DEFAULT (NONE) & !$OMP SHARED (nthreads) !$OMP MASTER nthreads = 1 !$ nthreads = OMP_GET_NUM_THREADS() !$OMP END MASTER !$OMP END PARALLEL ! ! Dummy checks IF (.NOT. ASSOCIATED(product_matrix%wms)) & DBCSR_ABORT("Work matrices do not exist") IF (SIZE(product_matrix%wms) .NE. nthreads) & DBCSR_ABORT("Work matrices not correctly sized.") IF (.NOT. buffers_win%left%is_valid .OR. & .NOT. buffers_win%right%is_valid .OR. & .NOT. ASSOCIATED(buffers_win%left%meta) .OR. & .NOT. ASSOCIATED(buffers_win%right%meta) .OR. & .NOT. ASSOCIATED(left_images_size) .OR. & .NOT. ASSOCIATED(right_images_size) .OR. & .NOT. ALLOCATED(left_local_images_size) .OR. & .NOT. ALLOCATED(right_local_images_size)) & DBCSR_ABORT("No buffers associated for the experimental algo!") ! ! Set up variables flop = 0 data_type = dbcsr_get_data_type(product_matrix) data_type_byte = dbcsr_datatype_sizeof(data_type) left_row_nimages = imgdist_left%i%row_decimation left_row_mult = imgdist_left%i%row_multiplicity left_col_nimages = imgdist_left%i%col_decimation left_col_mult = imgdist_left%i%col_multiplicity right_row_nimages = imgdist_right%i%row_decimation right_row_mult = imgdist_right%i%row_multiplicity right_col_nimages = imgdist_right%i%col_decimation right_col_mult = imgdist_right%i%col_multiplicity left_mp_obj = dbcsr_distribution_mp(imgdist_left%i%main) right_mp_obj = dbcsr_distribution_mp(imgdist_right%i%main) product_mp_obj = dbcsr_distribution_mp(product_matrix%dist) numnodes = dbcsr_mp_numnodes(product_mp_obj) myprow = dbcsr_mp_myprow(product_mp_obj) mypcol = dbcsr_mp_mypcol(product_mp_obj) left_nprows = dbcsr_mp_nprows(left_mp_obj) left_npcols = dbcsr_mp_npcols(left_mp_obj) left_myprow = dbcsr_mp_myprow(left_mp_obj) left_mypcol = dbcsr_mp_mypcol(left_mp_obj) left_myfirstvrow = MOD(left_myprow, layers_3D_C_reduction%side3D)*left_row_nimages left_myfirstvcol = MOD(left_mypcol, layers_3D_C_reduction%side3D)*left_col_nimages right_nprows = dbcsr_mp_nprows(right_mp_obj) right_npcols = dbcsr_mp_npcols(right_mp_obj) right_myprow = dbcsr_mp_myprow(right_mp_obj) right_mypcol = dbcsr_mp_mypcol(right_mp_obj) right_myfirstvrow = MOD(right_myprow, layers_3D_C_reduction%side3D)*right_row_nimages right_myfirstvcol = MOD(right_mypcol, layers_3D_C_reduction%side3D)*right_col_nimages left_col_total_nimages = left_npcols*left_col_nimages right_row_total_nimages = right_nprows*right_row_nimages grp_right = buffers_win%right%subgrp grp_left = buffers_win%left%subgrp ! do_layers3D = layers_3D_C_reduction%num_layers_3D .GT. 1 myrow3D = myprow/layers_3D_C_reduction%side3D + 1 mycol3D = mypcol/layers_3D_C_reduction%side3D + 1 nrows3D = SIZE(left_images_size, 3) ncols3D = SIZE(right_images_size, 3) myrank3D = get_rank3D(myprow, mypcol, dbcsr_mp_nprows(product_mp_obj), layers_3D_C_reduction%side3D) nranks3D = layers_3D_C_reduction%num_layers_3D myprow = MOD(myprow, layers_3D_C_reduction%side3D) mypcol = MOD(mypcol, layers_3D_C_reduction%side3D) ! ! Dummy checks ! subcommunicators IF (.NOT. dbcsr_mp_has_subgroups(right_mp_obj)) & DBCSR_ABORT("Experimental algorithm requires rows subcommunicators for right matrix!") IF (.NOT. dbcsr_mp_has_subgroups(left_mp_obj)) & DBCSR_ABORT("Experimental algorithm requires columns subcommunicators for left matrix!") ! Right col nimages IF (right_col_nimages .NE. 1) & DBCSR_ABORT("Col nimages for right matrix is not 1!") ! Left row nimages IF (left_row_nimages .NE. 1) & DBCSR_ABORT("Row nimages for left matrix is not 1!") ! left/right matching IF (left_col_nimages .NE. right_row_mult) & DBCSR_ABORT("Left/Right image mismatch") IF (left_col_mult .NE. right_row_nimages) & DBCSR_ABORT("Left/Right image mismatch") IF (left_col_nimages*left_npcols .NE. right_row_nimages*right_nprows) & DBCSR_ABORT("Left/Right total mismatch") ! product/left matching IF (left_row_mult*dbcsr_mp_nprows(product_mp_obj) .NE. left_nprows) & DBCSR_ABORT("Product/Left total mismatch") ! product/left matching IF (right_col_mult*dbcsr_mp_npcols(product_mp_obj) .NE. right_npcols) & DBCSR_ABORT("Product/Right total mismatch") ! Check sizes from make_buffers IF (SIZE(left_images_size, 2) .NE. left_col_nimages .OR. & SIZE(right_images_size, 2) .NE. right_row_nimages) & DBCSR_ABORT("Mismatch in the sizes") ! dbcsr_mpi_statistics%nimages = MAX(dbcsr_mpi_statistics%nimages, left_col_nimages) dbcsr_mpi_statistics%nimages = MAX(dbcsr_mpi_statistics%nimages, right_row_nimages) ! ! The main transfer loop goes through the virtual rows/columns. ! The number of steps may be smaller if the grid dimension is very ! non-optimal (both left column images and right row images are > ! 1). min_nimages = MIN(left_col_nimages, right_row_nimages) nvirt_k = left_npcols*left_col_nimages ! ! Check RMA windows creation for original data CALL win_setup(buffers_win%left, do_win_create_left, requests_win_create(1)) CALL win_setup(buffers_win%right, do_win_create_right, requests_win_create(2)) ! ! Count the maximum possible multiplies per row for on-the-fly filtering ALLOCATE (product_matrix_epss_size(nrows3D), product_matrix_epss_displ(nrows3D)) IF (otf_filtering) THEN ! Wait for counts (sent in make_buffers) CALL timeset(routineN//"_count_rows", handle1) CALL mp_wait(request_count_rows) ! nblkrows_local = SIZE(left_total_row_counts) ALLOCATE (row_max_epss(nblkrows_local)) filter_eps_sp = REAL(filter_eps, KIND=KIND(row_max_epss)) !$OMP PARALLEL DO DEFAULT (NONE) & !$OMP SHARED(nblkrows_local,row_max_epss,filter_eps_sp,& !$OMP left_total_row_counts) ! Determine the maximum per-block epsilon DO row = 1, nblkrows_local row_max_epss(row) = & (filter_eps_sp/REAL(MAX(1, left_total_row_counts(row)), KIND=KIND(row_max_epss)))**2 END DO !$OMP END PARALLEL DO DEALLOCATE (left_total_row_counts) ! IF (do_layers3D .AND. nrows3D .GT. 1) THEN CALL mp_allgather(SIZE(row_max_epss), & product_matrix_epss_size, & layers_3D_C_reduction%rowgrp3D) size_guess = 0 DO irow3D = 1, nrows3D product_matrix_epss_displ(irow3D) = size_guess size_guess = size_guess + product_matrix_epss_size(irow3D) END DO ALLOCATE (product_matrix_epss(size_guess)) CALL mp_iallgather(row_max_epss, & product_matrix_epss, product_matrix_epss_size, product_matrix_epss_displ, & layers_3D_C_reduction%rowgrp3D, request_epss) ELSE product_matrix_epss_size(nrows3D) = SIZE(row_max_epss) product_matrix_epss_displ(nrows3D) = 0 product_matrix_epss => row_max_epss END IF CALL timestop(handle1) ELSE product_matrix_epss_size(:) = 0 product_matrix_epss_displ(:) = 0 ALLOCATE (product_matrix_epss(0)) END IF ! ! Exchange 3D meta for C matrix IF (do_layers3D .AND. keep_sparsity) THEN ALLOCATE (product_matrix_meta_size(nrows3D, ncols3D)) CALL mp_allgather(product_matrix%index(dbcsr_slot_size), & product_matrix_meta_size, layers_3D_C_reduction%grp3D) ALLOCATE (product_matrix_meta_displ(nrows3D, ncols3D)) size_guess = 0 DO icol3D = 1, ncols3D DO irow3D = 1, nrows3D product_matrix_meta_displ(irow3D, icol3D) = size_guess size_guess = size_guess + product_matrix_meta_size(irow3D, icol3D) END DO END DO ALLOCATE (product_matrix_meta(size_guess)) product_matrix%index(dbcsr_slot_nblks) = product_matrix%nblks product_matrix%index(dbcsr_slot_nze) = product_matrix%nze CALL mp_iallgather(product_matrix%index(1:product_matrix%index(dbcsr_slot_size)), & product_matrix_meta, product_matrix_meta_size, product_matrix_meta_displ, & layers_3D_C_reduction%grp3D, request_keep_sparsity) END IF ! ! Wait refs and max norms (sent in make_buffers) CALL timeset(routineN//"_sizes", handle1) CALL mp_waitall(requests) CALL timestop(handle1) DEALLOCATE (right_local_images_size, left_local_images_size) ! ! Needs to remap refs for virtual coordinates 3D CALL remap_layers3D(left_images_size, left_images_size_layers3D, left_displ_layers3D, & left_max_data_size, left_max_meta_size) CALL remap_layers3D(right_images_size, right_images_size_layers3D, right_displ_layers3D, & right_max_data_size, right_max_meta_size) left_max_meta_size = left_max_meta_size + dbcsr_num_slots right_max_meta_size = right_max_meta_size + dbcsr_num_slots ! do_square_layers3D = .FALSE. nbuffers_norms = 1 IF (nvirt_k .EQ. 1) THEN nbuffers = 1 ELSEIF (nrows3D .NE. ncols3D .OR. nranks3D .EQ. 1) THEN nbuffers = 2 ELSE ! Note that nrows3D==ncols3D >= 2 ! Last buffer is used as temporary for communications nbuffers = nrows3D + 1 nbuffers_norms = nrows3D do_square_layers3D = .TRUE. END IF ! ! update capacity of memory-pools IF (ASSOCIATED(memtype_abpanel_1%pool)) & CALL dbcsr_mempool_limit_capacity(memtype_abpanel_1%pool, & capacity=2) IF (ASSOCIATED(memtype_abpanel_2%pool)) & CALL dbcsr_mempool_limit_capacity(memtype_abpanel_2%pool, & capacity=2) IF (use_acc()) THEN ! enumerate the blocksizes to keep the following 2D-arrays small. CALL enumerate_blk_sizes(matrix_right%row_blk_size%low%data, & dbcsr_max_row_size(matrix_right), & row_blk_sizes2enum, enum2row_blk_sizes) CALL enumerate_blk_sizes(matrix_right%col_blk_size%low%data, & dbcsr_max_col_size(matrix_right), & col_blk_sizes2enum, enum2col_blk_sizes) END IF IF (nranks3D .GT. 1) THEN CALL dbcsr_mempool_limit_capacity(memtype_mpi_product%pool, & capacity=nranks3D - 1) END IF ! ! Prepare buffers for computation IF (nvirt_k .GT. 1) THEN ! Right CALL buffer_init(buffers_2%right, data_type, & right_max_data_size, & right_max_meta_size, & num_data=(nbuffers/2), & data_memory_type=memtype_abpanel_2, & trs_memory_type=memtype_trsbuffer_2) ! Left CALL buffer_init(buffers_2%left, data_type, & left_max_data_size, & left_max_meta_size, & num_data=(nbuffers/2), & data_memory_type=memtype_abpanel_2) END IF ! ! Prepare buffers for communication ! Right CALL buffer_init(buffers_1%right, data_type, & right_max_data_size, & right_max_meta_size, & num_data=(nbuffers - nbuffers/2), & data_memory_type=memtype_abpanel_1, & trs_memory_type=memtype_trsbuffer_1) ! Left CALL buffer_init(buffers_1%left, data_type, & left_max_data_size, & left_max_meta_size, & num_data=(nbuffers - nbuffers/2), & data_memory_type=memtype_abpanel_1) ! CALL setup_buffers(buffers_1%right, buffers_2%right, & right_buffers, nbuffers, & right_max_data_size, & right_max_meta_size, & matrix_right, imgdist_right) CALL setup_buffers(buffers_1%left, buffers_2%left, & left_buffers, nbuffers, & left_max_data_size, & left_max_meta_size, & matrix_left, imgdist_left) ! ! Setup the receive data pointers CALL dbcsr_data_init(data_get) CALL dbcsr_data_new(data_get, data_type) IF (do_layers3D) THEN CALL dbcsr_data_init(data_send) CALL dbcsr_data_new(data_send, data_type) ! Prepare buffers for 3D reduction IF (ALLOCATED(layers_3D_C_reduction%data_red3D)) THEN IF (SIZE(layers_3D_C_reduction%data_red3D) .LT. nthreads .OR. & layers_3D_C_reduction%data_type .NE. data_type) THEN DO myt = 1, SIZE(layers_3D_C_reduction%data_red3D) CALL dbcsr_data_release(layers_3D_C_reduction%data_red3D(myt)) END DO DEALLOCATE (layers_3D_C_reduction%data_red3D) layers_3D_C_reduction%data_type = 0 END IF END IF IF (.NOT. ALLOCATED(layers_3D_C_reduction%data_red3D)) THEN ALLOCATE (layers_3D_C_reduction%data_red3D(nthreads)) DO myt = 1, nthreads CALL dbcsr_data_init(layers_3D_C_reduction%data_red3D(myt)) CALL dbcsr_data_new(layers_3D_C_reduction%data_red3D(myt), data_type) END DO layers_3D_C_reduction%data_type = data_type END IF ALLOCATE (product_matrix_size_send(nthreads + 1), product_matrix_size_recv(nthreads + 1)) ALLOCATE (requests_reduction((nthreads + 1)*2)) END IF ! ! These values for meta data are used for global values right_global_indices(dbcsr_slot_nblkrows_total:dbcsr_slot_nfullcols_local) = & (/ & dbcsr_nblkrows_total(matrix_right), & dbcsr_nblkcols_total(matrix_right), & dbcsr_nfullrows_total(matrix_right), & dbcsr_nfullcols_total(matrix_right), & 0, 0, & dbcsr_nfullrows_local(matrix_right), & dbcsr_nfullcols_local(matrix_right)/) left_global_indices(dbcsr_slot_nblkrows_total:dbcsr_slot_nfullcols_local) = & (/ & dbcsr_nblkrows_total(matrix_left), & dbcsr_nblkcols_total(matrix_left), & dbcsr_nfullrows_total(matrix_left), & dbcsr_nfullcols_total(matrix_left), & 0, 0, & dbcsr_nfullrows_local(matrix_left), & dbcsr_nfullcols_local(matrix_left)/) ! ! Evaluate sizes for workspaces size_guess_init = 1 IF (.NOT. keep_sparsity .AND. use_acc()) THEN size_guess_init = product_matrix_size_guess(matrix_left, matrix_right, product_matrix, & left_max_data_size, right_max_data_size, & left_col_nimages, right_row_nimages, & nthreads) END IF ! ! Preallocate norms arrays IF (otf_filtering) THEN ALLOCATE (right_norms(right_max_meta_size/3, nbuffers_norms)) ALLOCATE (left_norms(left_max_meta_size/3, nbuffers_norms)) IF (do_layers3D .AND. nrows3D .GT. 1) THEN CALL mp_wait(request_epss) DEALLOCATE (row_max_epss) END IF ELSE ! The array must be valid when passed to called subroutines. ALLOCATE (right_norms(0, nbuffers_norms)) ALLOCATE (left_norms(0, nbuffers_norms)) END IF ! IF (do_layers3D .AND. keep_sparsity) CALL mp_wait(request_keep_sparsity) ! ALLOCATE (product_matrix3D%mats(nrows3D, ncols3D)) DO icol3D = 1, ncols3D DO irow3D = 1, nrows3D NULLIFY (product_matrix3D%mats(irow3D, icol3D)%matrix) END DO END DO ALLOCATE (multrec(0:nthreads - 1, nrows3D, ncols3D)) ! ! Here is the main loop ! 3D multiplication ! CALL timeset(routineN//"_loop", handle1) ! Take into account when ticks are not multiple of 3D layers leftovers_k = MOD(nvirt_k, nranks3D) leftovers_first_k = leftovers_k*myrank3D leftovers_start_k = 0 leftovers_shift_k = 0 IF (leftovers_k .GT. 0) THEN ! This is only for nrows3D==ncols3D leftovers_start_k = (nvirt_k/nrows3D - 1)*(myrank3D/nrows3D) - & (leftovers_k/nrows3D - 1)*(myrank3D/nrows3D) leftovers_shift_k = nranks3D*(leftovers_k/nrows3D) - leftovers_k*(MOD(myrank3D, nrows3D) + 1) END IF ! Ticks bounds start_k = (nvirt_k/nranks3D)*myrank3D last_step_k = nvirt_k + leftovers_first_k final_step_k = last_step_k - nranks3D ! Shift layers to keep local layer as the last one in computation shift3D = (mycol3D - 1)*nrows3D + & (nrows3D - myrow3D + 1)*(1 - MOD(mycol3D, 2)) + myrow3D*MOD(mycol3D, 2) iright_buffer_comm = 0 ileft_buffer_comm = 0 ALLOCATE (do_comm_right(ncols3D), do_comm_left(nrows3D)) ALLOCATE (right_vcol(ncols3D), left_vrow(nrows3D)) ALLOCATE (m_sizes(nrows3D), n_sizes(ncols3D)) irow3D_send = 0 icol3D_send = 0 first_k = .TRUE. first_v_k = .TRUE. istep_k_comm_curr = leftovers_first_k istep_k_comm => istep_k_comm_curr grouped_steps_index: DO istep_k = leftovers_first_k, last_step_k ! ! Wait data. Exclude the first iteration. wait: IF (istep_k .GT. leftovers_first_k) THEN IF (debug_mod) WRITE (*, '(1X,A)') routineN//" waiting for right and left" right_buffer_p => right_buffers(iright_buffer_calc) left_buffer_p => left_buffers(ileft_buffer_calc) IF (right_buffer_p%is_comm .AND. left_buffer_p%is_comm) THEN ! check if right matrix was already initialized IF (.NOT. right_buffer_p%matrix%valid) THEN CALL timeset(routineN//"_comm_right", handle2) CALL mp_waitall(right_buffer_p%get_requests(:)) CALL timestop(handle2) END IF ! check if left matrix was already initialized IF (.NOT. left_buffer_p%matrix%valid) THEN CALL timeset(routineN//"_comm_left", handle2) CALL mp_waitall(left_buffer_p%get_requests(:)) CALL timestop(handle2) END IF END IF END IF wait ! ! Matrix transfer. Transfer in all but the last loop iteration. shift3D_comm = shift3D xfer: DO WHILE (istep_k_comm .LT. last_step_k) start_k_ordered = start_k istep_k_ordered = istep_k_comm ! Put leftovers ticks always first IF (leftovers_k .GT. 0) THEN IF (istep_k_comm .LT. leftovers_first_k + leftovers_k) THEN start_k_ordered = leftovers_start_k ELSE istep_k_ordered = istep_k_comm + leftovers_shift_k END IF END IF first_k = MOD(istep_k_ordered, nranks3D) .EQ. 0 ivirt_k = istep_k_ordered/nranks3D IF (istep_k_comm .LT. leftovers_first_k + leftovers_k) THEN CALL row_col_3D_reflected(irow3D, icol3D, nrows3D, ncols3D, istep_k_ordered) ELSE CALL row_col_3D_reflected(irow3D, icol3D, nrows3D, ncols3D, shift3D) shift3D = shift3D + 1 END IF ! v_ki = MOD(ivirt_k, min_nimages) ! Reset communication flags at the first layer IF ((first_k .OR. istep_k_comm .EQ. leftovers_first_k) .AND. & istep_k_comm .EQ. istep_k_comm_curr) THEN do_comm_right(:) = .TRUE. do_comm_left(:) = .TRUE. END IF ! Take first image global virtual coordinates IF (v_ki .EQ. 0) THEN IF (istep_k_comm .GE. leftovers_first_k + leftovers_k) first_v_k = .FALSE. start_k_ordered = start_k_ordered + ivirt_k END IF IF (v_ki .EQ. 0 .OR. (first_v_k .AND. min_nimages .GT. 1)) THEN CALL image_calculator(imgdist_right, & vprow=recv_vrow, & vpcol=right_vcol(icol3D), & mypcol=mypcol, & myvprow=right_myfirstvrow, & myvpcol=right_myfirstvcol + (icol3D - 1)*layers_3D_C_reduction%side3D, & vprow_shift=start_k_ordered, & shifting='R') CALL image_calculator(imgdist_left, & vprow=left_vrow(irow3D), & vpcol=recv_vcol, & myprow=myprow, & myvprow=left_myfirstvrow + (irow3D - 1)*layers_3D_C_reduction%side3D, & myvpcol=left_myfirstvcol, & vpcol_shift=start_k_ordered, & shifting='L') END IF ! ! Set coordinates IF (do_square_layers3D) THEN ! Use the temporary buffers for the communication of the first tick IF (first_k) THEN iright_buffer_comm = nbuffers ileft_buffer_comm = nbuffers ELSE iright_buffer_comm = icol3D ileft_buffer_comm = irow3D END IF ELSE IF (do_comm_right(icol3D)) THEN iright_buffer_comm = MOD(iright_buffer_comm, nbuffers) + 1 END IF IF (do_comm_left(irow3D)) THEN ileft_buffer_comm = MOD(ileft_buffer_comm, nbuffers) + 1 END IF END IF ! ! Exit if data are already communicated IF (istep_k_comm .NE. istep_k_comm_curr) EXIT ! right_buffer_p => right_buffers(iright_buffer_comm) left_buffer_p => left_buffers(ileft_buffer_comm) right_buffer_p%coord3D = icol3D left_buffer_p%coord3D = irow3D ! ! First row, communicate right matrix IF (do_comm_right(icol3D)) THEN right_buffer_p%vprow = MOD(recv_vrow + v_ki, right_row_total_nimages) right_buffer_p%vpcol = right_vcol(icol3D) right_buffer_p%is_comm = .FALSE. END IF ! is_not_comm = .TRUE. IF (right_images_size_layers3D(imeta, icol3D, right_buffer_p%vprow) .NE. 0) THEN ! First col, communicate left matrix IF (do_comm_left(irow3D)) THEN left_buffer_p%vprow = left_vrow(irow3D) left_buffer_p%vpcol = MOD(recv_vcol + v_ki, left_col_total_nimages) left_buffer_p%is_comm = .FALSE. END IF ! IF (left_images_size_layers3D(imeta, irow3D, left_buffer_p%vpcol) .NE. 0) THEN ! Check if data is already communicated is_not_comm = do_comm_right(icol3D) .OR. do_comm_left(irow3D) IF (is_not_comm) THEN ! Right IF (do_comm_right(icol3D)) THEN IF (use_acc()) THEN CALL timeset(routineN//"_acc_sync_right", handle2) CALL acc_event_synchronize(right_buffer_p%data%d%acc_ready) CALL timestop(handle2) END IF ! do_comm_right(icol3D) = .FALSE. CALL rma_transfer(right_buffer_p%vprow, right_row_nimages, & right_images_size_layers3D(:, icol3D, right_buffer_p%vprow), & right_displ_layers3D(:, icol3D, right_buffer_p%vprow), & right_buffer_p, & buffers_win%right%meta_win, buffers_win%right%data_win, & data_get, data_type_byte, buffers_win%right, icol3D, ncols3D) END IF ! Left IF (do_comm_left(irow3D)) THEN IF (use_acc()) THEN CALL timeset(routineN//"_acc_sync_left", handle2) CALL acc_event_synchronize(left_buffer_p%data%d%acc_ready) CALL timestop(handle2) END IF ! do_comm_left(irow3D) = .FALSE. CALL rma_transfer(left_buffer_p%vpcol, left_col_nimages, & left_images_size_layers3D(:, irow3D, left_buffer_p%vpcol), & left_displ_layers3D(:, irow3D, left_buffer_p%vpcol), & left_buffer_p, & buffers_win%left%meta_win, buffers_win%left%data_win, & data_get, data_type_byte, buffers_win%left, irow3D, nrows3D) END IF END IF END IF END IF ! istep_k_comm_curr = istep_k_comm_curr + 1 ! Stop looping when data is communicated ! Only works for 4 layers IF (is_not_comm .OR. nranks3D .NE. 4) THEN istep_k_comm => istep_k IF ((istep_k_comm + 1) .EQ. istep_k_comm_curr) EXIT ! Restore coordinates by looping once again shift3D = shift3D_comm CYCLE END IF ! Keep looping until it starts a new communication (only for 4 layers) istep_k_comm => istep_k_comm_curr END DO xfer ! ! Create matrices and multrec's, only the first occurrence IF (.NOT. ASSOCIATED(product_matrix3D%mats(irow3D, icol3D)%matrix)) THEN IF (irow3D .EQ. myrow3D .AND. icol3D .EQ. mycol3D) THEN product_matrix3D%mats(irow3D, icol3D)%matrix => product_matrix ELSE ALLOCATE (product_matrix3D%mats(irow3D, icol3D)%matrix) IF (keep_sparsity) THEN size_guess = product_matrix_meta(product_matrix_meta_displ(irow3D, icol3D) + & dbcsr_slot_nze) CALL setup_buffer_matrix(product_matrix3D%mats(irow3D, icol3D)%matrix, & product_matrix, product_matrix_meta_size(irow3D, icol3D), & data_size=size_guess, & data_memory_type=memtype_mpi_product) product_matrix3D%mats(irow3D, icol3D)% & matrix%index(1:product_matrix_meta_size(irow3D, icol3D)) = & product_matrix_meta(product_matrix_meta_displ(irow3D, icol3D) + 1: & product_matrix_meta_displ(irow3D, icol3D) + & product_matrix_meta_size(irow3D, icol3D)) CALL dbcsr_data_clear(product_matrix3D%mats(irow3D, icol3D)%matrix%data_area, & ub=size_guess) ELSE CALL setup_buffer_matrix(product_matrix3D%mats(irow3D, icol3D)%matrix, & product_matrix, data_memory_type=memtype_mpi_product) END IF product_matrix3D%mats(irow3D, icol3D)%matrix%index(dbcsr_slot_home_prow) = & (irow3D - 1)*layers_3D_C_reduction%side3D + myprow product_matrix3D%mats(irow3D, icol3D)%matrix%index(dbcsr_slot_home_pcol) = & (icol3D - 1)*layers_3D_C_reduction%side3D + mypcol CALL dbcsr_reset_locals(product_matrix3D%mats(irow3D, icol3D)%matrix) product_matrix3D%mats(irow3D, icol3D)%matrix%nblks = 0 CALL dbcsr_repoint_index(product_matrix3D%mats(irow3D, icol3D)%matrix) END IF ! IF (.NOT. ASSOCIATED(m_sizes(irow3D)%sizes)) THEN ALLOCATE (m_sizes(irow3D)%sizes(dbcsr_nblkrows_local(product_matrix3D%mats(irow3D, icol3D)%matrix))) CALL local_filter(array_data(product_matrix3D%mats(irow3D, icol3D)%matrix%row_blk_size), & array_size(product_matrix3D%mats(irow3D, icol3D)%matrix%local_rows), & array_data(product_matrix3D%mats(irow3D, icol3D)%matrix%local_rows), & m_sizes(irow3D)%sizes) END IF IF (.NOT. ASSOCIATED(n_sizes(icol3D)%sizes)) THEN ALLOCATE (n_sizes(icol3D)%sizes(dbcsr_nblkcols_local(product_matrix3D%mats(irow3D, icol3D)%matrix))) CALL local_filter(array_data(product_matrix3D%mats(irow3D, icol3D)%matrix%col_blk_size), & array_size(product_matrix3D%mats(irow3D, icol3D)%matrix%local_cols), & array_data(product_matrix3D%mats(irow3D, icol3D)%matrix%local_cols), & n_sizes(icol3D)%sizes) END IF ! !$OMP PARALLEL DEFAULT(NONE) & !$OMP PRIVATE (size_guess, ithread) & !$OMP SHARED (product_matrix3D, multrec, & !$OMP keep_sparsity, filter_eps, & !$OMP product_matrix_epss, & !$OMP matrix_right, matrix_left, nthreads, & !$OMP irow3D, icol3D, myrow3D, mycol3D, keep_product_data, & !$OMP product_matrix_epss_displ, product_matrix_epss_size, & !$OMP memtype_product_wm, size_guess_init, nranks3D, m_sizes, n_sizes) ! ! Setup product work areas ! ithread = 0 !$ ithread = OMP_GET_THREAD_NUM() ! IF (irow3D .NE. myrow3D .OR. icol3D .NE. mycol3D) THEN IF (keep_product_data) THEN CALL dbcsr_add_wm_from_matrix(product_matrix3D%mats(irow3D, icol3D)%matrix) ELSE CALL dbcsr_work_create(product_matrix3D%mats(irow3D, icol3D)%matrix, & work_mutable=.FALSE., memory_type=memtype_product_wm(ithread)%p) END IF !$OMP BARRIER END IF ! The work arrays have to be setup size_guess = product_matrix3D%mats(irow3D, icol3D)%matrix%wms(ithread + 1)%datasize ! Should be minimal IF (.NOT. keep_sparsity) THEN size_guess = MAX(size_guess, size_guess_init) END IF CALL dbcsr_data_ensure_size(product_matrix3D%mats(irow3D, icol3D)% & matrix%wms(ithread + 1)%data_area, & size_guess) CALL dbcsr_data_set_size_referenced(product_matrix3D%mats(irow3D, icol3D)% & matrix%wms(ithread + 1)%data_area, & product_matrix3D%mats(irow3D, icol3D)% & matrix%wms(ithread + 1)%datasize) CALL ensure_array_size(product_matrix3D%mats(irow3D, icol3D)% & matrix%wms(ithread + 1)%row_i, ub=1) CALL ensure_array_size(product_matrix3D%mats(irow3D, icol3D)% & matrix%wms(ithread + 1)%col_i, ub=1) CALL ensure_array_size(product_matrix3D%mats(irow3D, icol3D)% & matrix%wms(ithread + 1)%blk_p, ub=1) ALLOCATE (multrec(ithread, irow3D, icol3D)%p) CALL dbcsr_mm_multrec_init(multrec(ithread, irow3D, icol3D)%p, & product=product_matrix3D%mats(irow3D, icol3D)%matrix, & keep_sparsity=keep_sparsity, & eps=filter_eps, & row_max_epss=product_matrix_epss(product_matrix_epss_displ(irow3D) + 1: & product_matrix_epss_displ(irow3D) + & product_matrix_epss_size(irow3D)), & block_estimate=0, & right_row_blk_size=dbcsr_row_block_sizes(matrix_right), & m_sizes=m_sizes(irow3D)%sizes, n_sizes=n_sizes(icol3D)%sizes, & nlayers=nranks3D, & keep_product_data=keep_product_data) !$OMP END PARALLEL ! product_matrix3D%mats(irow3D, icol3D)%matrix%nblks = 0 product_matrix3D%mats(irow3D, icol3D)%matrix%nze = 0 product_matrix3D%mats(irow3D, icol3D)%matrix%row_p(:) = 0 CALL dbcsr_data_set_size_referenced(product_matrix3D%mats(irow3D, icol3D)%matrix%data_area, 0) product_matrix3D%mats(irow3D, icol3D)%matrix%valid = .FALSE. END IF ! ! Do the multiplication. Exclude the first iteration. calc: IF (istep_k .GT. leftovers_first_k) THEN right_buffer_p => right_buffers(iright_buffer_calc) left_buffer_p => left_buffers(ileft_buffer_calc) irow3D = left_buffer_p%coord3D icol3D = right_buffer_p%coord3D IF (istep_k .GT. final_step_k) THEN !$OMP PARALLEL DEFAULT (NONE) & !$OMP SHARED (multrec, irow3D, icol3D, irow3D_send, icol3D_send, & !$OMP istep_k, final_step_k, product_matrix3D, & !$OMP handle2, requests_reduction_size, nthreads, & !$OMP product_matrix_meta_send, product_matrix_meta_recv, & !$OMP product_matrix_size_send, product_matrix_size_recv, & !$OMP buffers_win, data_send, data_get, proc3D_send, proc3D_recv, & !$OMP layers_3D_C_reduction, requests_reduction, & !$OMP dbcsr_mpi_statistics, data_type_byte) & !$OMP PRIVATE (ithread) ithread = 0 !$ ithread = omp_get_thread_num() ! Prepare data to send for 3D layer IF (istep_k .GT. final_step_k + 1) THEN CALL dbcsr_mm_multrec_finalize( & multrec(ithread, irow3D_send, icol3D_send)%p, & buffers_win%left%meta_red3D) !$OMP BARRIER !$OMP MASTER CALL timeset(routineN//"_red3D_size", handle2) CALL mp_waitall(requests_reduction_size) CALL timestop(handle2) CALL ensure_array_size(buffers_win%right%meta_red3D, & ub=product_matrix_size_recv(1), & nocopy=.TRUE.) product_matrix_meta_send => & buffers_win%left%meta_red3D(1:product_matrix_size_send(1)) product_matrix_meta_recv => & buffers_win%right%meta_red3D(1:product_matrix_size_recv(1)) CALL mp_isendrecv(product_matrix_meta_send, proc3D_send, & product_matrix_meta_recv, proc3D_recv, & layers_3D_C_reduction%grp3D, & requests_reduction(1), requests_reduction(2)) DO myt = 1, nthreads CALL dbcsr_data_ensure_size(layers_3D_C_reduction%data_red3D(myt), & product_matrix_size_recv(myt + 1), & nocopy=.TRUE.) CALL dbcsr_data_set_pointer( & area=data_send, & rsize=product_matrix_size_send(myt + 1), & csize=1, & pointee=product_matrix3D%mats(irow3D_send, icol3D_send)%matrix%wms(myt)%data_area) CALL dbcsr_data_set_pointer( & area=data_get, & rsize=product_matrix_size_recv(myt + 1), & csize=1, & pointee=layers_3D_C_reduction%data_red3D(myt)) CALL dbcsr_isendrecv_any(data_send, proc3D_send, & data_get, proc3D_recv, & layers_3D_C_reduction%grp3D, & requests_reduction(3 + (myt - 1)*2), & requests_reduction(4 + (myt - 1)*2)) CALL count_mpi_statistics(dbcsr_mpi_statistics%data_size(1, :), & product_matrix_size_send(myt + 1), & data_type_byte, & dbcsr_mpi_statistics%data_size_breakdown(:, :, 1)) END DO !$OMP END MASTER END IF !$OMP END PARALLEL END IF ! IF (right_buffer_p%is_comm .AND. left_buffer_p%is_comm) THEN iright_buffer_calc = MIN(iright_buffer_calc, nbuffers_norms) ileft_buffer_calc = MIN(ileft_buffer_calc, nbuffers_norms) ! check if right matrix was already initialized IF (.NOT. right_buffer_p%matrix%valid) THEN IF (use_acc()) CALL dbcsr_data_host2dev(right_buffer_p%data) ! Repoint indices of matrices CALL make_meta(right_buffer_p, & right_row_total_nimages, & right_buffer_p%vprow, & right_buffer_p%vpcol, & imgdist=imgdist_right, do_merge_rows=.FALSE., & global_indices=right_global_indices) CALL ensure_array_size(k_sizes, ub=array_size(right_buffer_p%matrix%local_rows)) CALL local_filter(array_data(right_buffer_p%matrix%row_blk_size), & array_size(right_buffer_p%matrix%local_rows), & array_data(right_buffer_p%matrix%local_rows), & k_sizes) IF (otf_filtering) THEN CALL calculate_norms(right_buffer_p%matrix, & right_norms(:, iright_buffer_calc), & k_sizes, n_sizes(icol3D)%sizes) END IF IF (use_acc()) THEN CALL acc_transpose_blocks(right_buffer_p%matrix, & right_buffer_p%trs_stackbuf, & k_sizes, n_sizes(icol3D)%sizes, & row_blk_sizes2enum, enum2row_blk_sizes, & col_blk_sizes2enum, enum2col_blk_sizes, & noresize=.TRUE.) END IF END IF ! check if left matrix was already initialized IF (.NOT. left_buffer_p%matrix%valid) THEN IF (use_acc()) CALL dbcsr_data_host2dev(left_buffer_p%data) ! Repoint indices of matrices CALL make_meta(left_buffer_p, & left_col_total_nimages, & left_buffer_p%vprow, & left_buffer_p%vpcol, & imgdist=imgdist_left, do_merge_rows=.TRUE., & global_indices=left_global_indices, & nthreads=nthreads) IF (otf_filtering) THEN CALL calculate_norms(left_buffer_p%matrix, & left_norms(:, ileft_buffer_calc), & m_sizes(irow3D)%sizes, k_sizes) END IF END IF ! Wait for left and right buffers transfer to device before proceeding IF (use_acc()) THEN CALL timeset(routineN//"_sync_h2d", handle2) CALL acc_device_synchronize() CALL timestop(handle2) END IF ! CALL timeset(routineN//"_multrec", handle2) !$OMP PARALLEL DEFAULT (NONE) & !$OMP SHARED (left_buffer_p, ileft_buffer_calc, & !$OMP right_buffer_p, iright_buffer_calc, & !$OMP left_norms,right_norms, & !$OMP multrec, irow3D, icol3D, handle2, k_sizes) & !$OMP PRIVATE (ithread) & !$OMP REDUCTION (+: flop) ithread = 0 !$ ithread = omp_get_thread_num() CALL dbcsr_mm_multrec_multiply(multrec(ithread, irow3D, icol3D)%p, & left=left_buffer_p%matrix, & right=right_buffer_p%matrix, & flop=flop, & a_norms=left_norms(:, ileft_buffer_calc), & b_norms=right_norms(:, iright_buffer_calc), & k_sizes=k_sizes) !$OMP END PARALLEL CALL timestop(handle2) END IF ! Reduce 3D layers and finalize the local layer IF (istep_k .GT. final_step_k) THEN ! Wait for the other 3D layers to reduce IF (istep_k .GT. final_step_k + 1) THEN CALL timeset(routineN//"_red3D_data", handle2) CALL mp_waitall(requests_reduction) CALL timestop(handle2) DO myt = 0, nthreads - 1 DEALLOCATE (multrec(myt, irow3D_send, icol3D_send)%p) CALL dbcsr_work_destroy( & product_matrix3D%mats(irow3D_send, icol3D_send)%matrix%wms(myt + 1)) END DO DEALLOCATE (product_matrix3D%mats(irow3D_send, icol3D_send)%matrix%wms) CALL dbcsr_release(product_matrix3D%mats(irow3D_send, icol3D_send)%matrix) END IF irow3D_send = irow3D icol3D_send = icol3D ! Store the initial shift for the recv node IF (istep_k .EQ. final_step_k + 1) THEN shift3D_recv = shift3D - 4 END IF !$OMP PARALLEL DEFAULT (NONE) & !$OMP SHARED (multrec, irow3D, icol3D, product_matrix3D, & !$OMP memtype_mpi_buffer, nthreads, myt, istep_k, & !$OMP irow3D_send, icol3D_send, myrow3D, mycol3D, & !$OMP last_step_k, proc3D_send, proc3D_recv, & !$OMP product_matrix_size_send, product_matrix_size_recv, & !$OMP nrows3D, ncols3D, shift3D_recv, myrank3D, & !$OMP layers_3D_C_reduction, requests_reduction_size, & !$OMP final_step_k, handle2, buffers_win, g2l_map_rows, g2l_map_cols) & !$OMP PRIVATE (ithread) & !$OMP REDUCTION (+: flop) ithread = 0 !$ ithread = omp_get_thread_num() ! ! Evaluate the size of layers to send and set the buffers IF (irow3D .NE. myrow3D .OR. & icol3D .NE. mycol3D) THEN CALL dbcsr_mm_multrec_dev2host_init(multrec(ithread, irow3D, icol3D)%p) !$OMP ATOMIC product_matrix3D%mats(irow3D_send, icol3D_send)%matrix%nblks = & product_matrix3D%mats(irow3D_send, icol3D_send)%matrix%nblks + & dbcsr_mm_multrec_get_nblks(multrec(ithread, irow3D_send, icol3D_send)%p) !$OMP BARRIER !$OMP MASTER ! First (nthreads+1) positions are reserved for ! the offset sizes of each thread for meta CALL ensure_array_size(buffers_win%left%meta_red3D, & ub=product_matrix3D%mats(irow3D_send, icol3D_send)% & matrix%nblks*3 + (nthreads + 1), & nocopy=.TRUE.) ! Set the offsets buffers_win%left%meta_red3D(1) = nthreads + 1 DO myt = 0, nthreads - 1 buffers_win%left%meta_red3D(myt + 2) = & buffers_win%left%meta_red3D(myt + 1) + & dbcsr_mm_multrec_get_nblks(multrec(myt, irow3D_send, icol3D_send)%p)*3 product_matrix_size_send(myt + 2) = & dbcsr_mm_multrec_get_nze(multrec(myt, irow3D_send, icol3D_send)%p) END DO ! Send/recv data and meta sizes product_matrix_size_send(1) = & buffers_win%left%meta_red3D(nthreads + 1) proc3D_send = (icol3D_send - 1)*nrows3D + irow3D_send - 1 ! CALL row_col_3D_reflected(irow3D, icol3D, nrows3D, ncols3D, shift3D_recv) shift3D_recv = shift3D_recv - 1 proc3D_recv = (icol3D - 1)*nrows3D + irow3D - 1 CALL mp_isendrecv(product_matrix_size_send, proc3D_send, & product_matrix_size_recv, proc3D_recv, & layers_3D_C_reduction%grp3D, & requests_reduction_size(1), & requests_reduction_size(2)) !$OMP END MASTER ELSE IF (istep_k .NE. last_step_k) & DBCSR_ABORT("Last layer does not correspond to local layer") END IF ! Reduce to the local layer IF (istep_k .GT. final_step_k + 1) THEN IF (dbcsr_data_get_size_referenced(layers_3D_C_reduction%data_red3D(ithread + 1)) .GT. 0) THEN CALL timeset(routineN//"_red3D", handle2) CALL dbcsr_mm_multrec_red3D(multrec(ithread, myrow3D, mycol3D)%p, & buffers_win%right%meta_red3D, & layers_3D_C_reduction%data_red3D(ithread + 1), & flop, g2l_map_rows, g2l_map_cols) CALL timestop(handle2) END IF END IF !$OMP END PARALLEL END IF END IF calc ! ! Swap temporary buffers for the first tick IF (do_square_layers3D .AND. first_k .AND. & istep_k .LT. last_step_k) THEN iright_buffer_comm = right_buffers(iright_buffer_comm)%coord3D ileft_buffer_comm = left_buffers(ileft_buffer_comm)%coord3D CALL swap_buffers(right_buffers(iright_buffer_comm), right_buffers(nbuffers)) CALL swap_buffers(left_buffers(ileft_buffer_comm), left_buffers(nbuffers)) END IF ! iright_buffer_calc = iright_buffer_comm ileft_buffer_calc = ileft_buffer_comm END DO grouped_steps_index ! CALL timestop(handle1) ! CALL m_memory(mem) max_memory = MAX(max_memory, REAL(mem)) ! IF (do_layers3D .AND. keep_sparsity) THEN DEALLOCATE (product_matrix_meta_size, product_matrix_meta_displ) DEALLOCATE (product_matrix_meta) END IF DEALLOCATE (right_norms, left_norms) DEALLOCATE (product_matrix_epss_size, product_matrix_epss_displ) IF (.NOT. otf_filtering .OR. (do_layers3D .AND. nrows3D .GT. 1)) THEN DEALLOCATE (product_matrix_epss) ELSE DEALLOCATE (row_max_epss) END IF ! DEALLOCATE (left_images_size, right_images_size) NULLIFY (left_images_size, right_images_size) DEALLOCATE (left_images_size_layers3D, left_displ_layers3D) DEALLOCATE (right_images_size_layers3D, right_displ_layers3D) ! ! Deallocate 3D layers IF (do_layers3D) THEN DEALLOCATE (product_matrix_size_send, product_matrix_size_recv) DEALLOCATE (requests_reduction) DO icol3D = 1, ncols3D DO irow3D = 1, nrows3D IF (irow3D .NE. myrow3D .OR. icol3D .NE. mycol3D) THEN DEALLOCATE (product_matrix3D%mats(irow3D, icol3D)%matrix) END IF END DO END DO CALL dbcsr_data_clear_pointer(data_send) CALL dbcsr_data_release(data_send) END IF DEALLOCATE (product_matrix3D%mats) ! Finalize local layer !$OMP PARALLEL DEFAULT (NONE) & !$OMP SHARED (multrec, myrow3D, mycol3D) & !$OMP PRIVATE (ithread) ithread = 0 !$ ithread = omp_get_thread_num() CALL dbcsr_mm_multrec_finalize(multrec(ithread, myrow3D, mycol3D)%p) DEALLOCATE (multrec(ithread, myrow3D, mycol3D)%p) !$OMP END PARALLEL DEALLOCATE (multrec) DEALLOCATE (g2l_map_rows, g2l_map_cols) CALL dbcsr_finalize(product_matrix, reshuffle=PRESENT(filter_eps) .AND. .NOT. keep_sparsity) ! DO irow3D = 1, nrows3D DEALLOCATE (m_sizes(irow3D)%sizes) END DO DEALLOCATE (m_sizes) DO icol3D = 1, ncols3D DEALLOCATE (n_sizes(icol3D)%sizes) END DO DEALLOCATE (n_sizes) IF (ASSOCIATED(k_sizes)) DEALLOCATE (k_sizes) ! CALL dbcsr_data_clear_pointer(data_get) CALL dbcsr_data_release(data_get) ! ! clean-up of communication buffers DO v_ki = 1, nbuffers CALL dbcsr_data_clear_pointer(left_buffers(v_ki)%data) IF (left_buffers(v_ki)%data%d%memory_type%acc_devalloc) THEN CALL acc_event_destroy(left_buffers(v_ki)%data%d%acc_ready) END IF CALL dbcsr_data_release(left_buffers(v_ki)%data) NULLIFY (left_buffers(v_ki)%matrix%index) CALL dbcsr_release(left_buffers(v_ki)%matrix) ! CALL dbcsr_data_clear_pointer(right_buffers(v_ki)%data) IF (right_buffers(v_ki)%data%d%memory_type%acc_devalloc) THEN CALL acc_event_destroy(right_buffers(v_ki)%data%d%acc_ready) END IF CALL dbcsr_data_release(right_buffers(v_ki)%data) NULLIFY (right_buffers(v_ki)%matrix%index) CALL dbcsr_release(right_buffers(v_ki)%matrix) IF (use_acc()) THEN CALL dbcsr_data_clear_pointer(right_buffers(v_ki)%trs_stackbuf) IF (right_buffers(v_ki)%trs_stackbuf%d%memory_type%acc_devalloc) THEN CALL acc_event_destroy(right_buffers(v_ki)%trs_stackbuf%d%acc_ready) END IF CALL dbcsr_data_release(right_buffers(v_ki)%trs_stackbuf) END IF END DO DEALLOCATE (left_buffers, right_buffers) DEALLOCATE (do_comm_left, do_comm_right) DEALLOCATE (right_vcol, left_vrow) IF (use_acc()) THEN DEALLOCATE (row_blk_sizes2enum, enum2row_blk_sizes) DEALLOCATE (col_blk_sizes2enum, enum2col_blk_sizes) END IF ! IF (debug_mod) THEN v_ki = 0 DO blk = 1, SIZE(product_matrix%blk_p) v_ki = MAX(v_ki, ABS(product_matrix%blk_p(blk))) END DO WRITE (*, *) routineN//" Actual final size", & LOG(REAL(dbcsr_data_get_size(product_matrix%data_area)))/LOG(10.0), & LOG(REAL(v_ki))/LOG(10.0) END IF ! CALL timestop(handle) END SUBROUTINE multiply_3D SUBROUTINE win_setup(buffer, do_win_create, request) TYPE(dbcsr_buffer), INTENT(INOUT) :: buffer LOGICAL, DIMENSION(:), INTENT(INOUT) :: do_win_create TYPE(mp_request_type), INTENT(INOUT) :: request CHARACTER(len=*), PARAMETER :: routineN = 'win_setup' INTEGER :: handle, handle1, myproc CALL timeset(routineN, handle) IF (buffer%has_rma_win) THEN CALL timeset(routineN//"_win_check", handle1) CALL mp_wait(request) CALL timestop(handle1) IF (do_win_create(1)) THEN CALL mp_win_unlock_all(buffer%data_win) CALL mp_win_free(buffer%data_win) END IF IF (do_win_create(2)) THEN CALL mp_win_unlock_all(buffer%meta_win) CALL mp_win_free(buffer%meta_win) END IF END IF CALL dbcsr_data_release(buffer%data_before_resize) IF (ASSOCIATED(buffer%meta_before_resize)) THEN CALL memory_deallocate(buffer%meta_before_resize, memtype_mpi_buffer) NULLIFY (buffer%meta_before_resize) END IF ! CALL mp_environ(taskid=myproc, groupid=buffer%subgrp) buffer%myproc = myproc IF (do_win_create(1)) THEN CALL dbcsr_win_create_any(buffer%data, buffer%subgrp, buffer%data_win) CALL mp_win_lock_all(buffer%data_win) END IF IF (do_win_create(2)) THEN CALL mp_win_create(buffer%meta, buffer%subgrp, buffer%meta_win) CALL mp_win_lock_all(buffer%meta_win) END IF ! buffer%has_rma_win = .TRUE. CALL timestop(handle) END SUBROUTINE win_setup SUBROUTINE row_col_3D_reflected(irow3D, icol3D, nrows3D, ncols3D, shift3D) !! Apply reflected order, i.e. row increasing value for odd col value, !! row decreasing value for even col value INTEGER, INTENT(INOUT) :: irow3D, icol3D INTEGER, INTENT(IN) :: nrows3D, ncols3D, shift3D INTEGER :: odd_or_even icol3D = MOD(shift3D/nrows3D, ncols3D) + 1 irow3D = MOD(shift3D, nrows3D) odd_or_even = MOD(icol3D, 2) irow3D = (nrows3D - irow3D)*(1 - odd_or_even) + (irow3D + 1)*odd_or_even END SUBROUTINE row_col_3D_reflected SUBROUTINE setup_buffers(buffer_1, buffer_2, buffers, nbuffers, data_size, meta_size, matrix, imgdist) TYPE(dbcsr_buffer), INTENT(INOUT), TARGET :: buffer_1, buffer_2 TYPE(dbcsr_buffer), ALLOCATABLE, DIMENSION(:), & INTENT(INOUT) :: buffers INTEGER, INTENT(IN) :: nbuffers, data_size, meta_size TYPE(dbcsr_type), INTENT(IN) :: matrix TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT) :: imgdist INTEGER :: ibuffer, jbuffer INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: meta_p LOGICAL :: has_trs_stackbuf TYPE(dbcsr_buffer), POINTER :: buffer_p ALLOCATE (buffers(nbuffers)) has_trs_stackbuf = dbcsr_data_valid(buffer_1%trs_stackbuf) .OR. dbcsr_data_valid(buffer_2%trs_stackbuf) DO ibuffer = 1, nbuffers jbuffer = (ibuffer - 1)/2 IF (MOD(ibuffer, 2) .EQ. 1) THEN buffer_p => buffer_1 ELSE buffer_p => buffer_2 END IF ! Use slices for the 3D buffers CALL dbcsr_data_init(buffers(ibuffer)%data) CALL dbcsr_data_new(buffers(ibuffer)%data, dbcsr_data_get_type(buffer_p%data), & memory_type=dbcsr_data_get_memory_type(buffer_p%data)) IF (buffers(ibuffer)%data%d%memory_type%acc_devalloc) THEN CALL acc_event_create(buffers(ibuffer)%data%d%acc_ready) END IF CALL dbcsr_data_set_pointer( & area=buffers(ibuffer)%data, & rsize=data_size, & csize=1, & pointee=buffer_p%data, & source_lb=data_size*jbuffer + 1) ! Use meta_p pointer to avoid warning target-lifetime meta_p => buffer_p%meta(meta_size*jbuffer + 1: & meta_size*(jbuffer + 1)) buffers(ibuffer)%meta => meta_p IF (has_trs_stackbuf) THEN CALL dbcsr_data_init(buffers(ibuffer)%trs_stackbuf) CALL dbcsr_data_new(buffers(ibuffer)%trs_stackbuf, dbcsr_data_get_type(buffer_p%trs_stackbuf), & memory_type=dbcsr_data_get_memory_type(buffer_p%trs_stackbuf)) IF (buffers(ibuffer)%trs_stackbuf%d%memory_type%acc_devalloc) THEN CALL acc_event_create(buffers(ibuffer)%trs_stackbuf%d%acc_ready) END IF CALL dbcsr_data_set_pointer( & area=buffers(ibuffer)%trs_stackbuf, & rsize=meta_size/3, & csize=1, & pointee=buffer_p%trs_stackbuf, & source_lb=(meta_size/3)*jbuffer + 1) END IF CALL setup_buffer_matrix_image(buffers(ibuffer)%matrix, imgdist, matrix, & buffers(ibuffer)%data, & buffers(ibuffer)%meta) END DO END SUBROUTINE setup_buffers SUBROUTINE setup_buffer_matrix_image(matrix, imgdist, & template_matrix, data_buffer, & meta_buffer) TYPE(dbcsr_type), INTENT(INOUT) :: matrix TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT) :: imgdist TYPE(dbcsr_type), INTENT(IN) :: template_matrix TYPE(dbcsr_data_obj), INTENT(INOUT) :: data_buffer INTEGER, DIMENSION(:), INTENT(IN), TARGET, CONTIGUOUS :: meta_buffer matrix = dbcsr_type() CALL dbcsr_create(matrix, & "Buffer image of "//template_matrix%name, & imgdist%i%main, & dbcsr_type_no_symmetry, & row_blk_size_obj=template_matrix%row_blk_size, & col_blk_size_obj=template_matrix%col_blk_size, & data_type=dbcsr_data_get_type(data_buffer), & data_buffer=data_buffer, & max_rbs=template_matrix%max_rbs, max_cbs=template_matrix%max_cbs, & row_blk_offset=template_matrix%row_blk_offset, & col_blk_offset=template_matrix%col_blk_offset, & index_memory_type=memtype_mpi_buffer, & make_index=.FALSE.) matrix%index => meta_buffer matrix%negate_real = template_matrix%negate_real matrix%negate_imaginary = template_matrix%negate_imaginary matrix%local_indexing = .TRUE. matrix%list_indexing = .TRUE. END SUBROUTINE setup_buffer_matrix_image SUBROUTINE swap_buffers(buffers_1, buffers_2) TYPE(dbcsr_buffer), INTENT(INOUT) :: buffers_1, buffers_2 TYPE(dbcsr_buffer) :: tmp tmp = buffers_1 buffers_1 = buffers_2 buffers_2 = tmp END SUBROUTINE swap_buffers SUBROUTINE rma_transfer(recv_vproc, nimages, & size_layers3D, displ_layers3D, & buffer, & meta_win, data_win, & data_get, data_type_byte, & buffer_win, layer3D, nlayers3D) INTEGER, INTENT(IN) :: recv_vproc, nimages INTEGER, DIMENSION(:), INTENT(IN) :: size_layers3D, displ_layers3D TYPE(dbcsr_buffer), INTENT(INOUT) :: buffer TYPE(mp_win_type), INTENT(IN) :: meta_win, data_win TYPE(dbcsr_data_obj), INTENT(INOUT) :: data_get INTEGER, INTENT(IN) :: data_type_byte TYPE(dbcsr_buffer), INTENT(IN) :: buffer_win INTEGER, INTENT(IN) :: layer3D, nlayers3D INTEGER :: recv_proc INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: meta_get buffer%is_comm = .TRUE. buffer%get_requests(:) = mp_request_null recv_proc = (recv_vproc/nimages)*nlayers3D + layer3D - 1 ! meta_get => buffer%meta(dbcsr_num_slots + 1:dbcsr_num_slots + size_layers3D(imeta)) buffer%meta_size = size_layers3D(imeta) CALL mp_rget(meta_get, recv_proc, & meta_win, & buffer_win%meta, & buffer_win%myproc, & disp=displ_layers3D(imeta), & request=buffer%get_requests(1)) CALL dbcsr_data_set_pointer( & area=data_get, & rsize=size_layers3D(idata), & csize=1, & pointee=buffer%data, & source_lb=1) CALL dbcsr_rget_any(data_get, recv_proc, & data_win, & buffer_win%data, & buffer_win%myproc, & disp=displ_layers3D(idata), & request=buffer%get_requests(2)) CALL count_mpi_statistics(dbcsr_mpi_statistics%data_size(1, :), & size_layers3D(idata), & data_type_byte, & dbcsr_mpi_statistics%data_size_breakdown(:, :, 1)) dbcsr_mpi_statistics%nexchanged = dbcsr_mpi_statistics%nexchanged + 1 ! ! Set the referenced sizes to the actual data moved via MPI CALL dbcsr_data_set_size_referenced(buffer%data, size_layers3D(idata)) buffer%matrix%valid = .FALSE. END SUBROUTINE rma_transfer SUBROUTINE setup_rec_index_images(meta_buffer, img_nblks_rows, img_nblks_cols, & refs_size, refs_displ, size_index, has_threads) INTEGER, DIMENSION(:), INTENT(INOUT) :: meta_buffer INTEGER, DIMENSION(:), INTENT(IN) :: img_nblks_rows, img_nblks_cols, & refs_size, refs_displ INTEGER, INTENT(IN) :: size_index LOGICAL, INTENT(IN) :: has_threads CHARACTER(len=*), PARAMETER :: routineN = 'setup_rec_index_images' INTEGER :: handle, in, nblkcols_local, & nblkrows_local, t_f, t_l, t_size !$ INTEGER :: ithread CALL timeset(routineN, handle) IF (has_threads) THEN nblkrows_local = img_nblks_rows(1) ELSE nblkcols_local = img_nblks_cols(1) END IF ! DO in = 1, SIZE(refs_size) IF (refs_size(in) .EQ. 0) CYCLE ! Number of blocks t_size = (refs_size(in) - size_index)/3 IF (has_threads) THEN nblkcols_local = img_nblks_cols(in) ELSE nblkrows_local = img_nblks_rows(in) END IF t_f = 1 t_l = t_size !$OMP PARALLEL IF (has_threads) DEFAULT (NONE) & !$OMP PRIVATE (ithread) & !$OMP FIRSTPRIVATE (t_f, t_l, t_size) & !$OMP SHARED (meta_buffer, in, has_threads, refs_displ, & !$OMP size_index, nblkrows_local, nblkcols_local) !$ ithread = OMP_GET_THREAD_NUM() + 1 !$ IF (has_threads) THEN !$ t_f = meta_buffer(refs_displ(in) + ithread) + 1 !$ t_l = meta_buffer(refs_displ(in) + ithread + 1) !$ END IF t_size = t_l - t_f + 1 IF (t_size .GT. 0) THEN CALL rec_sort_index(1, nblkrows_local, & 1, nblkcols_local, & t_size, & meta_buffer(refs_displ(in) + size_index + t_f*3 - 2: & refs_displ(in) + size_index + t_l*3), & 0) END IF !$OMP END PARALLEL END DO CALL timestop(handle) END SUBROUTINE setup_rec_index_images SUBROUTINE buffer_init(buffer, data_type, & !! Init buffer data_size, meta_size, & num_data, & data_memory_type, trs_memory_type) TYPE(dbcsr_buffer), INTENT(INOUT) :: buffer INTEGER, INTENT(IN) :: data_type, data_size, meta_size INTEGER, INTENT(IN), OPTIONAL :: num_data TYPE(dbcsr_memtype_type), INTENT(IN) :: data_memory_type TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL :: trs_memory_type INTEGER :: my_num_data LOGICAL :: new_trs_stackbuf my_num_data = 1 IF (PRESENT(num_data)) THEN my_num_data = num_data ELSE IF (dbcsr_data_valid(buffer%data_before_resize) .OR. ASSOCIATED(buffer%meta_before_resize)) & DBCSR_ABORT("Previous data area already initialized.") CALL dbcsr_data_init(buffer%data_before_resize) CALL dbcsr_data_new(buffer%data_before_resize, data_type, memory_type=data_memory_type) END IF new_trs_stackbuf = PRESENT(trs_memory_type) .AND. use_acc() ! IF (buffer%is_valid) THEN ! Invalid buffers if data_type is different IF (dbcsr_data_get_type(buffer%data) .NE. data_type) THEN CALL dbcsr_data_release(buffer%data) IF (new_trs_stackbuf) THEN CALL dbcsr_data_release(buffer%trs_stackbuf) END IF buffer%is_valid = .FALSE. END IF END IF ! IF (.NOT. buffer%is_valid) THEN ! First initialization CALL dbcsr_data_init(buffer%data) CALL dbcsr_data_new(buffer%data, data_type=data_type, & data_size=data_size*my_num_data, memory_type=data_memory_type) CALL dbcsr_data_set_size_referenced(buffer%data, data_size*my_num_data) IF (new_trs_stackbuf) THEN CALL dbcsr_data_init(buffer%trs_stackbuf) CALL dbcsr_data_new(buffer%trs_stackbuf, & data_type=dbcsr_type_int_4, data_size=(meta_size/3)*my_num_data, & memory_type=trs_memory_type) END IF buffer%is_valid = .TRUE. ELSE IF (PRESENT(num_data)) THEN CALL dbcsr_data_ensure_size(buffer%data, data_size*my_num_data, nocopy=.TRUE.) IF (new_trs_stackbuf) THEN CALL dbcsr_data_ensure_size(buffer%trs_stackbuf, (meta_size/3)*my_num_data, nocopy=.TRUE.) END IF ELSE ! Case for MPI windows ! data_before_resize keeps the pointer to previous data in the case of reallocation CALL dbcsr_data_ensure_size(buffer%data, data_size, nocopy=.TRUE., & area_resize=buffer%data_before_resize) END IF END IF ! IF (PRESENT(num_data)) THEN CALL ensure_array_size(buffer%meta, ub=meta_size*my_num_data, nocopy=.TRUE., & memory_type=memtype_mpi_buffer) ELSE ! Case for MPI windows ! meta_before_resize keeps the pointer to previous meta in the case of reallocation CALL ensure_array_size(buffer%meta, array_resize=buffer%meta_before_resize, & ub=meta_size, nocopy=.TRUE., & memory_type=memtype_mpi_buffer) END IF ! buffer%is_comm = .FALSE. END SUBROUTINE buffer_init SUBROUTINE buffers_release() !! Release all buffers IF (request_sync_mult .NE. mp_request_null) CALL mp_wait(request_sync_mult) request_sync_mult = mp_request_null CALL buffer_release(buffers_1%right) CALL buffer_release(buffers_1%left) CALL buffer_release(buffers_2%right) CALL buffer_release(buffers_2%left) CALL buffer_release(buffers_win%right) CALL buffer_release(buffers_win%left) ! IF (dbcsr_data_valid(make_buffers_data_send)) CALL dbcsr_data_release(make_buffers_data_send) IF (dbcsr_data_valid(make_buffers_data_recv)) CALL dbcsr_data_release(make_buffers_data_recv) IF (ASSOCIATED(make_buffers_meta_send)) CALL memory_deallocate(make_buffers_meta_send, memtype_mpi_buffer) IF (ASSOCIATED(make_buffers_meta_recv)) CALL memory_deallocate(make_buffers_meta_recv, memtype_mpi_buffer) END SUBROUTINE buffers_release SUBROUTINE buffer_release(buffer) !! Release buffer TYPE(dbcsr_buffer), INTENT(INOUT) :: buffer IF (buffer%has_rma_win) THEN CALL mp_win_unlock_all(buffer%data_win) CALL mp_win_free(buffer%data_win) CALL mp_win_unlock_all(buffer%meta_win) CALL mp_win_free(buffer%meta_win) buffer%has_rma_win = .FALSE. buffer%grp = mp_comm_null IF (buffer%subgrp .NE. mp_comm_null .AND. buffer%num_layers_3D .GT. 1) & CALL mp_comm_free(buffer%subgrp) buffer%subgrp = mp_comm_null buffer%num_layers_3D = 1 END IF ! IF (buffer%is_valid) THEN CALL dbcsr_data_release(buffer%data) IF (dbcsr_data_valid(buffer%trs_stackbuf)) THEN CALL dbcsr_data_release(buffer%trs_stackbuf) END IF IF (dbcsr_data_valid(buffer%data_before_resize)) THEN CALL dbcsr_data_release(buffer%data_before_resize) END IF buffer%is_valid = .FALSE. END IF IF (ASSOCIATED(buffer%meta)) THEN CALL memory_deallocate(buffer%meta, memtype_mpi_buffer) NULLIFY (buffer%meta) END IF IF (ASSOCIATED(buffer%meta_before_resize)) THEN CALL memory_deallocate(buffer%meta_before_resize, memtype_mpi_buffer) NULLIFY (buffer%meta_before_resize) END IF IF (ASSOCIATED(buffer%meta_red3D)) THEN CALL memory_deallocate(buffer%meta_red3D, memtype_mpi_buffer) NULLIFY (buffer%meta_red3D) END IF END SUBROUTINE buffer_release SUBROUTINE make_meta(buffer, ntotal_images, & !! Create meta indices vprow, vpcol, & imgdist, do_merge_rows, & global_indices, & nthreads) TYPE(dbcsr_buffer), INTENT(INOUT) :: buffer INTEGER, INTENT(IN) :: ntotal_images, vprow, vpcol TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT) :: imgdist LOGICAL, INTENT(IN) :: do_merge_rows INTEGER, DIMENSION(:), INTENT(IN) :: global_indices INTEGER, INTENT(IN), OPTIONAL :: nthreads INTEGER :: size_index buffer%matrix%index(dbcsr_slot_size) = & buffer%meta_size + dbcsr_num_slots size_index = 0 IF (PRESENT(nthreads)) THEN !$ size_index = nthreads + 1 END IF buffer%matrix%index(dbcsr_slot_nblks) = & (buffer%meta_size - size_index)/3 buffer%matrix%index(dbcsr_slot_nze) = & dbcsr_data_get_size_referenced(buffer%data) buffer%matrix%index(dbcsr_slot_dense) = 0 buffer%matrix%index(dbcsr_slot_nblkrows_total:dbcsr_slot_nfullcols_local) = & global_indices(:) buffer%matrix%index(dbcsr_slot_type:dbcsr_num_slots) = 0 ! Virtual coords IF (do_merge_rows) THEN buffer%matrix%index(dbcsr_slot_home_vprow) = vprow buffer%matrix%index(dbcsr_slot_home_vpcol) = MOD(vpcol, ntotal_images) ELSE buffer%matrix%index(dbcsr_slot_home_vprow) = MOD(vprow, ntotal_images) buffer%matrix%index(dbcsr_slot_home_vpcol) = vpcol END IF buffer%matrix%index(dbcsr_slot_row_p) = 1 buffer%matrix%index(dbcsr_slot_col_i) = 1 buffer%matrix%index(dbcsr_slot_blk_p) = 1 ! thr_c size_index = dbcsr_num_slots !$ IF (PRESENT(nthreads)) THEN !$ size_index = size_index + nthreads + 1 !$ buffer%matrix%index(dbcsr_slot_thr_c) = dbcsr_num_slots + 1 !$ buffer%matrix%index(dbcsr_slot_thr_c + 1) = size_index !$ END IF buffer%matrix%index(dbcsr_slot_coo_l) = size_index + 1 buffer%matrix%index(dbcsr_num_slots) = buffer%matrix%index(dbcsr_slot_size) ! ! Reset CALL dbcsr_reset_vlocals(buffer%matrix, imgdist) ! ! Repoint index buffer%matrix%nblks = 0 buffer%matrix%nze = 0 CALL dbcsr_repoint_index(buffer%matrix) buffer%matrix%valid = .TRUE. END SUBROUTINE make_meta SUBROUTINE remap_layers3D(refs_size, refs_size_layers3D, refs_displ_layers3D, & !! Remap the 4-rank array in a 3-rank array by introducing the virtual coordinate data_size, meta_size) INTEGER, DIMENSION(:, :, :, :), INTENT(IN), & CONTIGUOUS, POINTER :: refs_size INTEGER, DIMENSION(:, :, :), INTENT(OUT), & CONTIGUOUS, POINTER :: refs_size_layers3D, refs_displ_layers3D INTEGER, INTENT(OUT) :: data_size, meta_size INTEGER :: ilayer, image, iproc, nimages, & nlayers3D, nprocs nimages = SIZE(refs_size, 2) nlayers3D = SIZE(refs_size, 3) nprocs = SIZE(refs_size, 4) ! ALLOCATE (refs_size_layers3D(idata:imeta, nlayers3D, 0:nimages*nprocs - 1)) ALLOCATE (refs_displ_layers3D(idata:imeta, nlayers3D, 0:nimages*nprocs - 1)) data_size = 0; meta_size = 0 ! !$OMP PARALLEL DO DEFAULT (NONE) & !$OMP SHARED (nprocs, nimages, nlayers3D, & !$OMP refs_size_layers3D, refs_displ_layers3D, refs_size) & !$OMP PRIVATE (iproc,image,ilayer) & !$OMP REDUCTION (MAX : data_size, meta_size) DO iproc = 0, nprocs - 1 DO ilayer = 1, nlayers3D DO image = 1, nimages refs_size_layers3D(:, ilayer, image + iproc*nimages - 1) = refs_size(:, image, ilayer, iproc) data_size = MAX(data_size, refs_size(idata, image, ilayer, iproc)) meta_size = MAX(meta_size, refs_size(imeta, image, ilayer, iproc)) END DO refs_displ_layers3D(:, ilayer, iproc*nimages) = 0 DO image = 1, nimages - 1 refs_displ_layers3D(:, ilayer, image + iproc*nimages) = & refs_displ_layers3D(:, ilayer, image + iproc*nimages - 1) + refs_size(:, image, ilayer, iproc) END DO END DO END DO !$OMP END PARALLEL DO END SUBROUTINE remap_layers3D PURE FUNCTION get_max_layers_3D() INTEGER :: get_max_layers_3D get_max_layers_3D = layers_3D_C_reduction%max_num_layers_3D END FUNCTION get_max_layers_3D END MODULE dbcsr_mm_3d ================================================ FILE: src/mm/dbcsr_mm_accdrv.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_mm_accdrv !! Fourth layer of the dbcsr matrix-matrix multiplication. !! It hides the differences between performing calculations on the !! accelerator device or on the CPU. !! Modification history: !! - 2010-02-23 Moved from dbcsr_operations !! - 2011-11 Moved parameter-stack processing routines to !! dbcsr_mm_methods. !! - 2013-01 extensive refactoring (Ole Schuett) !! - 2014-04 generalized into acc-framework (Ole Schuett) USE dbcsr_acc_devmem, ONLY: acc_devmem_allocate_bytes, & acc_devmem_allocated, & acc_devmem_deallocate, & acc_devmem_host2dev, & acc_devmem_setzero_bytes, & acc_devmem_type USE dbcsr_acc_event, ONLY: acc_event_create, & acc_event_destroy, & acc_event_query, & acc_event_record, & acc_event_type, & acc_stream_wait_event USE dbcsr_acc_hostmem, ONLY: acc_hostmem_allocate, & acc_hostmem_deallocate USE dbcsr_acc_operations, ONLY: dbcsr_acc_do_mm_stack USE dbcsr_acc_stream, ONLY: acc_stream_associated, & acc_stream_create, & acc_stream_destroy, & acc_stream_synchronize, & acc_stream_type USE dbcsr_block_operations, ONLY: block_add USE dbcsr_config, ONLY: dbcsr_cfg, & default_resize_factor USE dbcsr_data_methods, ONLY: dbcsr_data_dev2host, & dbcsr_data_ensure_size, & dbcsr_data_get_size, & dbcsr_data_get_type, & dbcsr_data_new, & dbcsr_data_release USE dbcsr_kinds, ONLY: default_string_length, & int_4, & int_4_size, & int_8 USE dbcsr_mem_methods, ONLY: dbcsr_mempool_destruct, & dbcsr_mempool_limit_capacity, & dbcsr_memtype_setup USE dbcsr_mm_types, ONLY: dbcsr_ps_acc_width, & dbcsr_ps_width, & stack_descriptor_type USE dbcsr_toollib, ONLY: sort USE dbcsr_types, ONLY: dbcsr_data_area_type, & dbcsr_data_obj, & dbcsr_memtype_type, & dbcsr_type, & dbcsr_work_type #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_max_threads, omp_get_thread_num, omp_get_num_threads IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_accdrv' LOGICAL, PARAMETER, PRIVATE :: careful_mod = .FALSE. ! ************************************************************************************************** TYPE dbcsr_mm_accdrv_type PRIVATE TYPE(dbcsr_work_type), POINTER :: product_wm => Null() TYPE(dbcsr_data_obj) :: c_buffer = dbcsr_data_obj() LOGICAL :: c_area_copy = .TRUE. LOGICAL :: keep_product_data = .TRUE. LOGICAL :: do_gpu_c_redux = .FALSE. INTEGER :: nlayers = 1 END TYPE dbcsr_mm_accdrv_type ! ************************************************************************************************** PUBLIC :: dbcsr_mm_accdrv_type PUBLIC :: dbcsr_mm_accdrv_lib_init, dbcsr_mm_accdrv_lib_finalize PUBLIC :: dbcsr_mm_accdrv_barrier PUBLIC :: dbcsr_mm_accdrv_init, dbcsr_mm_accdrv_finalize PUBLIC :: dbcsr_mm_accdrv_process PUBLIC :: dbcsr_mm_accdrv_dev2host_init ! ===== Global Accelerator Memory ===== ! Allocating memory on the device and host-pinned is slow. ! Therefore, the memory is allocated once and stored in global variables. TYPE stack_buffer_type TYPE(acc_devmem_type) :: devmem = acc_devmem_type() INTEGER, DIMENSION(:, :), POINTER :: hostmem => Null() TYPE(acc_event_type) :: ready = acc_event_type() TYPE(acc_event_type) :: calculated = acc_event_type() TYPE(acc_stream_type) :: stream = acc_stream_type() END TYPE stack_buffer_type TYPE thread_private_type TYPE(stack_buffer_type), DIMENSION(:), POINTER :: stack_buffers => Null() TYPE(dbcsr_memtype_type) :: memtype_cbuffer = dbcsr_memtype_type() ! ensure that array-elements are on different cache lines INTEGER(kind=int_4), DIMENSION(64) :: padding = -1_int_4 END TYPE thread_private_type TYPE(thread_private_type), SAVE, DIMENSION(:), ALLOCATABLE, TARGET :: all_thread_privates TYPE(acc_stream_type), SAVE, DIMENSION(:), POINTER :: thread_streams => Null() CONTAINS SUBROUTINE dbcsr_mm_accdrv_lib_init() !! Initialize the library INTEGER :: nthreads nthreads = 1 !$ nthreads = OMP_GET_NUM_THREADS() !$OMP MASTER ALLOCATE (all_thread_privates(0:nthreads - 1)) !$OMP END MASTER !$OMP BARRIER END SUBROUTINE dbcsr_mm_accdrv_lib_init SUBROUTINE dbcsr_mm_accdrv_lib_finalize() !! Finalize the library CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_accdrv_lib_finalize' INTEGER :: error_handle, ithread TYPE(thread_private_type), POINTER :: thread_privates CALL timeset(routineN, error_handle) ithread = 0 !$ ithread = OMP_GET_THREAD_NUM() thread_privates => all_thread_privates(ithread) IF (ASSOCIATED(thread_privates%stack_buffers)) & CALL deallocate_stackbuffers() IF (ASSOCIATED(thread_privates%memtype_cbuffer%pool)) & CALL dbcsr_mempool_destruct(thread_privates%memtype_cbuffer%pool) !$OMP BARRIER !$OMP MASTER DEALLOCATE (all_thread_privates) !$OMP END MASTER !How much memory is still allocated on the card? !istat = dbcsr_acc_dev_mem_info(mem_free, mem_avail) !WRITE (*,*) "after finalize acc mem: ",mem_free, mem_avail, istat CALL deallocate_streams() CALL timestop(error_handle) END SUBROUTINE dbcsr_mm_accdrv_lib_finalize SUBROUTINE dbcsr_mm_accdrv_init(this, product_wm, nlayers, keep_product_data) !! Initializes a multiplication cycle for new set of C-blocks. TYPE(dbcsr_mm_accdrv_type), INTENT(INOUT) :: this TYPE(dbcsr_work_type), POINTER :: product_wm INTEGER, OPTIONAL :: nlayers LOGICAL, INTENT(IN) :: keep_product_data CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_accdrv_init' INTEGER :: handle, ithread, my_nlayers TYPE(dbcsr_data_obj) :: c_area TYPE(thread_private_type), POINTER :: thread_privates CALL timeset(routineN, handle) ithread = 0 !$ ithread = OMP_GET_THREAD_NUM() thread_privates => all_thread_privates(ithread) ! Setup global data which is reused in between multiplications !------------------------------------------------------------------------ CALL setup_streams() CALL setup_stackbuffers() !Each thread has its own memtype with its own mempool CALL dbcsr_memtype_setup(thread_privates%memtype_cbuffer, has_pool=.TRUE., acc_hostalloc=.TRUE., & acc_devalloc=.TRUE., acc_stream=thread_streams(ithread + 1)) my_nlayers = 1 IF (PRESENT(nlayers)) my_nlayers = nlayers this%nlayers = my_nlayers CALL dbcsr_mempool_limit_capacity(thread_privates%memtype_cbuffer%pool, capacity=my_nlayers) ! Setup things for this particular multiplication !------------------------------------------------------------------------ this%keep_product_data = keep_product_data this%do_gpu_c_redux = .FALSE. this%product_wm => product_wm c_area = this%product_wm%data_area CALL dbcsr_data_new(this%c_buffer, data_type=dbcsr_data_get_type(c_area), & data_size=dbcsr_data_get_size(c_area), memory_type=thread_privates%memtype_cbuffer) CALL acc_devmem_setzero_bytes(this%c_buffer%d%acc_devmem, & stream=this%c_buffer%d%memory_type%acc_stream) CALL acc_event_record(this%c_buffer%d%acc_ready, & stream=this%c_buffer%d%memory_type%acc_stream) CALL timestop(handle) END SUBROUTINE dbcsr_mm_accdrv_init SUBROUTINE setup_streams() !! Helper routine used by dbcsr_mm_accdrv_init() INTEGER :: nthreads nthreads = 1 !$ nthreads = OMP_GET_MAX_THREADS() !$OMP MASTER CALL stream_array_force_size(thread_streams, "Calc stream", n=nthreads) !$OMP END MASTER ! Other threads have to wait until streams are created !$OMP BARRIER END SUBROUTINE setup_streams SUBROUTINE deallocate_streams() !! Helper routine used by setup_streams() and dbcsr_mm_accdrv_lib_finalize() !$OMP MASTER CALL stream_array_force_size(thread_streams, "Calc stream", n=0) !$OMP END MASTER END SUBROUTINE deallocate_streams SUBROUTINE stream_array_force_size(streams, basename, n, events, priority) !! Helper routine TYPE(acc_stream_type), DIMENSION(:), POINTER :: streams CHARACTER(len=*), INTENT(IN) :: basename INTEGER, INTENT(IN) :: n TYPE(acc_event_type), DIMENSION(:), OPTIONAL, & POINTER :: events INTEGER, INTENT(IN), OPTIONAL :: priority CHARACTER(len=default_string_length) :: name INTEGER :: i IF (ASSOCIATED(streams)) THEN IF (SIZE(streams) /= n) THEN DO i = 1, SIZE(streams) CALL acc_stream_destroy(streams(i)) IF (PRESENT(events)) CALL acc_event_destroy(events(i)) END DO DEALLOCATE (streams) IF (PRESENT(events)) DEALLOCATE (events) END IF END IF IF (.NOT. ASSOCIATED(streams) .AND. n > 0) THEN ALLOCATE (streams(n)) IF (PRESENT(events)) ALLOCATE (events(n)) DO i = 1, SIZE(streams) WRITE (name, "(A,I3)") TRIM(basename), i CALL acc_stream_create(streams(i), name=TRIM(name), priority=priority) IF (PRESENT(events)) CALL acc_event_create(events(i)) END DO END IF END SUBROUTINE stream_array_force_size SUBROUTINE setup_stackbuffers() !! Helper routine used by dbcsr_mm_accdrv_init() INTEGER :: i, ithread, & my_thread_buffers TYPE(thread_private_type), POINTER :: thread_privates ithread = 0 !$ ithread = OMP_GET_THREAD_NUM() thread_privates => all_thread_privates(ithread) my_thread_buffers = dbcsr_cfg%accdrv_thread_buffers%val IF (ASSOCIATED(thread_privates%stack_buffers)) THEN IF (SIZE(thread_privates%stack_buffers) /= my_thread_buffers) & CALL deallocate_stackbuffers() END IF IF (.NOT. ASSOCIATED(thread_privates%stack_buffers)) THEN ALLOCATE (thread_privates%stack_buffers(my_thread_buffers)) DO i = 1, my_thread_buffers CALL acc_devmem_allocate_bytes(thread_privates%stack_buffers(i)%devmem, & int_4_size*dbcsr_ps_acc_width*dbcsr_cfg%mm_stack_size%val) thread_privates%stack_buffers(i)%stream = thread_streams(ithread + 1) CALL acc_hostmem_allocate(thread_privates%stack_buffers(i)%hostmem, & dbcsr_ps_acc_width, dbcsr_cfg%mm_stack_size%val, thread_privates%stack_buffers(i)%stream) CALL acc_event_create(thread_privates%stack_buffers(i)%ready) CALL acc_event_create(thread_privates%stack_buffers(i)%calculated) END DO END IF END SUBROUTINE setup_stackbuffers SUBROUTINE deallocate_stackbuffers() !! Helper routine used by setup_stackbuffers() and dbcsr_mm_accdrv_lib_finalize() INTEGER :: i, ithread TYPE(stack_buffer_type), DIMENSION(:), POINTER :: stack_buffers ithread = 0 !$ ithread = OMP_GET_THREAD_NUM() stack_buffers => all_thread_privates(ithread)%stack_buffers DO i = 1, SIZE(stack_buffers) CALL acc_devmem_deallocate(stack_buffers(i)%devmem) CALL acc_hostmem_deallocate(stack_buffers(i)%hostmem, stack_buffers(i)%stream) CALL acc_event_destroy(stack_buffers(i)%ready) CALL acc_event_destroy(stack_buffers(i)%calculated) END DO DEALLOCATE (stack_buffers) END SUBROUTINE deallocate_stackbuffers SUBROUTINE dbcsr_mm_accdrv_dev2host_init(this) !! Finalizes a multiplication cycle for a set of C-blocks. TYPE(dbcsr_mm_accdrv_type), INTENT(INOUT) :: this ! Transfer C-data from device to host and adding it to host's result IF (this%c_area_copy) THEN CALL dbcsr_data_dev2host(this%c_buffer) this%c_area_copy = .FALSE. END IF END SUBROUTINE dbcsr_mm_accdrv_dev2host_init SUBROUTINE dbcsr_mm_accdrv_finalize(this) !! Finalizes a multiplication cycle for a set of C-blocks. TYPE(dbcsr_mm_accdrv_type), INTENT(INOUT) :: this TYPE(dbcsr_data_obj) :: c_area ! Transfer C-data from device to host and adding it to host's result IF (this%c_area_copy) THEN CALL dbcsr_data_dev2host(this%c_buffer) END IF CALL acc_stream_synchronize(this%c_buffer%d%memory_type%acc_stream) c_area = this%product_wm%data_area IF (this%keep_product_data .OR. this%do_gpu_c_redux .OR. this%nlayers .GT. 1) THEN CALL block_add(c_area, this%c_buffer) CALL dbcsr_data_release(this%c_buffer) ELSE CALL dbcsr_data_release(this%product_wm%data_area) this%product_wm%data_area = this%c_buffer END IF END SUBROUTINE dbcsr_mm_accdrv_finalize SUBROUTINE stack_sort(params_in, params_out, stack_size) !! Sort stack entries with respect to the c_id. INTEGER, INTENT(IN) :: stack_size INTEGER, & DIMENSION(dbcsr_ps_acc_width, stack_size), & INTENT(OUT) :: params_out INTEGER, DIMENSION(dbcsr_ps_width, stack_size), & INTENT(IN) :: params_in INTEGER :: i INTEGER, DIMENSION(stack_size) :: c_sort, c_sort_ind ! sort by the C-blocks c_sort = params_in(6, :stack_size) CALL sort(c_sort, stack_size, c_sort_ind) DO i = 1, stack_size params_out(1:3, i) = params_in(4:6, c_sort_ind(i)) END DO END SUBROUTINE stack_sort SUBROUTINE stack_binning(params_in, params_out, stack_size) !! Roughly order stacks with a cheaper Binning-scheme by Peter Messmer INTEGER, INTENT(IN) :: stack_size INTEGER, & DIMENSION(dbcsr_ps_acc_width, stack_size), & INTENT(OUT) :: params_out INTEGER, DIMENSION(dbcsr_ps_width, stack_size), & INTENT(IN) :: params_in INTEGER :: bin_id, i, top INTEGER, DIMENSION(dbcsr_cfg%accdrv_binning_nbins%val) :: bin_top INTEGER, DIMENSION(dbcsr_ps_acc_width) :: val INTEGER, DIMENSION(dbcsr_ps_acc_width, dbcsr_cfg% & accdrv_binning_binsize%val, dbcsr_cfg% & accdrv_binning_nbins%val) :: bin_arr bin_top = 1 top = 1 DO i = 1, stack_size val(1:3) = params_in(4:6, i) bin_id = 1 + INT(MODULO(INT(val(3)*(val(3) + 3), KIND=int_8), & INT(dbcsr_cfg%accdrv_binning_nbins%val, KIND=int_8))) IF (bin_top(bin_id) > dbcsr_cfg%accdrv_binning_binsize%val) THEN params_out(1:3, top:top + bin_top(bin_id) - 2) = bin_arr(1:3, 1:bin_top(bin_id) - 1, bin_id) top = top + bin_top(bin_id) - 1 bin_top(bin_id) = 1 END IF bin_arr(1:3, bin_top(bin_id), bin_id) = val(1:3) bin_top(bin_id) = bin_top(bin_id) + 1 END DO DO i = 1, dbcsr_cfg%accdrv_binning_nbins%val IF (bin_top(i) > 1) THEN params_out(1:3, top:top + bin_top(i) - 2) = bin_arr(1:3, 1:bin_top(i) - 1, i) top = top + bin_top(i) - 1 END IF END DO END SUBROUTINE stack_binning SUBROUTINE dbcsr_mm_accdrv_barrier() INTEGER :: ithread ithread = 0 !$ ithread = OMP_GET_THREAD_NUM() CALL acc_stream_synchronize(thread_streams(ithread + 1)) END SUBROUTINE dbcsr_mm_accdrv_barrier SUBROUTINE dbcsr_mm_accdrv_process(this, left, right, params, stack_size, & !! Processes a given stack using accelerator stack_descr, success, generated_acc_untuned) TYPE(dbcsr_mm_accdrv_type), INTENT(INOUT) :: this TYPE(dbcsr_type), INTENT(IN) :: left, right INTEGER, INTENT(IN) :: stack_size INTEGER, DIMENSION(dbcsr_ps_width, stack_size), & INTENT(INOUT) :: params TYPE(stack_descriptor_type), INTENT(IN) :: stack_descr LOGICAL, INTENT(OUT) :: success, generated_acc_untuned CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_accdrv_process' INTEGER :: error_handle, error_handle2, & flop_per_entry, i, ithread, & stacked_datasize INTEGER, DIMENSION(:, :), POINTER :: stackbuf_hostmem_cropped TYPE(dbcsr_data_area_type), POINTER :: a_area, b_area, c_area TYPE(stack_buffer_type), DIMENSION(:), POINTER :: stack_buffers TYPE(stack_buffer_type), POINTER :: stackbuf NULLIFY (stackbuf, stackbuf_hostmem_cropped, stack_buffers) ithread = 0 !$ ithread = OMP_GET_THREAD_NUM() stack_buffers => all_thread_privates(ithread)%stack_buffers CALL timeset(routineN, error_handle) DO WHILE (.NOT. ASSOCIATED(stackbuf)) DO i = 1, SIZE(stack_buffers) IF (acc_event_query(stack_buffers(i)%calculated)) THEN stackbuf => stack_buffers(i) EXIT END IF END DO END DO stacked_datasize = this%product_wm%datasize CALL dbcsr_data_ensure_size(this%c_buffer, stacked_datasize, & factor=default_resize_factor, zero_pad=.TRUE.) !=========================================================================== ! sort the stack. Since this costs CPU time, only a good idea if the CPUs ! are not too busy, or device gain is very large CALL timeset(routineN//"_sort", error_handle2) flop_per_entry = 2*stack_descr%max_m*stack_descr%max_n*stack_descr%max_k IF (dbcsr_cfg%accdrv_stack_sort%val) THEN IF (flop_per_entry > dbcsr_cfg%accdrv_min_flop_sort%val) THEN CALL stack_sort(params, stackbuf%hostmem, stack_size) ELSE CALL stack_binning(params, stackbuf%hostmem, stack_size) END IF ELSE DO i = 1, stack_size stackbuf%hostmem(1:3, i) = params(4:6, i) END DO END IF CALL timestop(error_handle2) a_area => left%data_area%d b_area => right%data_area%d c_area => this%c_buffer%d !WRITE (*,*) "dbcsr_mm_accdrv_process: a_area%memory_type ", a_area%memory_type !WRITE (*,*) "dbcsr_mm_accdrv_process: b_area%memory_type ", b_area%memory_type !WRITE (*,*) "dbcsr_mm_accdrv_process: c_area%memory_type ", c_area%memory_type IF (.NOT. acc_devmem_allocated(a_area%acc_devmem)) & DBCSR_ABORT("dbcsr_mm_accdrv_process: a_area%acc_devmem not allocated") IF (.NOT. acc_devmem_allocated(b_area%acc_devmem)) & DBCSR_ABORT("dbcsr_mm_accdrv_process: b_area%acc_devmem not allocated") IF (.NOT. acc_devmem_allocated(c_area%acc_devmem)) & DBCSR_ABORT("dbcsr_mm_accdrv_process: c_area%acc_devmem not allocated") ! start uploading stacks; a, b, and c are ready by now stackbuf_hostmem_cropped => stackbuf%hostmem(:, 1:stack_size) CALL acc_devmem_host2dev(stackbuf%devmem, hostmem=stackbuf_hostmem_cropped, stream=stackbuf%stream) CALL acc_event_record(stackbuf%ready, stream=stackbuf%stream) ! We have to sync for the C area for the cuBLAS dgemm, used for large kernels CALL acc_stream_wait_event(c_area%memory_type%acc_stream, stackbuf%ready) CALL dbcsr_acc_do_mm_stack(params, stackbuf%devmem, stack_size, c_area%data_type, & a_data=a_area%acc_devmem, & b_data=b_area%acc_devmem, & c_data=c_area%acc_devmem, & m_max=stack_descr%max_m, & n_max=stack_descr%max_n, & k_max=stack_descr%max_k, & def_mnk=stack_descr%defined_mnk, & stack_stream=stackbuf%stream, & c_stream=c_area%memory_type%acc_stream, & success=success, & generated_acc_untuned=generated_acc_untuned) IF (success) THEN CALL acc_event_record(stackbuf%calculated, stream=stackbuf%stream) ELSE IF (dbcsr_cfg%use_acc_g2g%val) THEN DBCSR_ABORT("MPI G2G requires all kernels to be evaluated on the GPU!") END IF this%do_gpu_c_redux = .TRUE. END IF CALL timestop(error_handle) END SUBROUTINE dbcsr_mm_accdrv_process END MODULE dbcsr_mm_accdrv ================================================ FILE: src/mm/dbcsr_mm_cannon.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_mm_cannon !! First layer of the dbcsr matrix-matrix multiplication. !! It performs the MPI parallelization according to Cannon's algorithm. !! Modification history: !! - 2010-02-23 Moved from dbcsr_operations !! - 2011-11 Moved parameter-stack processing routines to !! dbcsr_mm_methods. !! - 2013-01 reorganized code (Ole Schuett) USE dbcsr_acc_event, ONLY: acc_event_synchronize USE dbcsr_acc_device, ONLY: acc_device_synchronize USE dbcsr_acc_stream, ONLY: acc_stream_synchronize USE dbcsr_acc_devmem, ONLY: acc_devmem_cptr USE dbcsr_array_types, ONLY: array_data, & array_exists, & array_i1d_obj, & array_size USE dbcsr_block_operations, ONLY: dbcsr_block_conjg, & dbcsr_block_copy_aa, & dbcsr_block_real_neg, & dbcsr_block_scale, & dbcsr_block_transpose_aa, & dbcsr_block_transpose USE dbcsr_config, ONLY: dbcsr_cfg, & use_acc USE dbcsr_data_methods, ONLY: & dbcsr_data_clear_pointer, dbcsr_data_ensure_size, dbcsr_data_get_size, & dbcsr_data_get_size_referenced, dbcsr_data_hold, dbcsr_data_host2dev, dbcsr_data_init, & dbcsr_data_new, dbcsr_data_release, dbcsr_data_set_pointer, & dbcsr_data_set_size_referenced, dbcsr_scalar_are_equal, dbcsr_scalar_negative, & dbcsr_scalar_one, dbcsr_get_data_p_s, dbcsr_get_data_p_d, dbcsr_get_data_p_c, dbcsr_get_data_p_z USE dbcsr_data_types, ONLY: dbcsr_datatype_sizeof USE dbcsr_dist_methods, ONLY: dbcsr_distribution_col_dist, & dbcsr_distribution_has_threads, & dbcsr_distribution_max_col_dist, & dbcsr_distribution_max_row_dist, & dbcsr_distribution_mp, & dbcsr_distribution_row_dist USE dbcsr_index_operations, ONLY: dbcsr_count_row_index, & dbcsr_has_local_row_index, & dbcsr_index_prune_deleted, & dbcsr_make_index_list, & dbcsr_make_index_local_row, & dbcsr_repoint_index USE dbcsr_io, ONLY: dbcsr_print USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left, & dbcsr_iterator_next_block, & dbcsr_iterator_start, & dbcsr_iterator_stop USE dbcsr_mem_methods, ONLY: dbcsr_mempool_limit_capacity USE dbcsr_methods, ONLY: & dbcsr_destroy_array, dbcsr_distribution, dbcsr_get_data_type, dbcsr_get_index_memory_type, & dbcsr_has_symmetry, dbcsr_image_dist_hold, dbcsr_image_dist_init, & dbcsr_image_dist_release, dbcsr_max_col_size, dbcsr_max_row_size, dbcsr_nblkcols_local, & dbcsr_nblkrows_local, dbcsr_nblkrows_total, dbcsr_release, dbcsr_valid_index USE dbcsr_mm_common, ONLY: & acc_transpose_blocks, calculate_norms, count_mpi_statistics, dbcsr_mm_multrec_type_p, & dbcsr_mpi_statistics, enumerate_blk_sizes, huge_norm, local_filter, max_memory, & memtype_abpanel_1, memtype_abpanel_2, memtype_mpi_buffer, memtype_trsbuffer_1, & memtype_normsbuf, memtype_offsetsbuf, memtype_nelemsbuf, acc_calculate_norms, & memtype_trsbuffer_2, product_matrix_size_guess, rec_sort_index, setup_buffer_matrix USE dbcsr_mm_dist_operations, ONLY: dbcsr_get_local_vcols, & dbcsr_get_local_vrows, & dbcsr_reset_vlocals, & image_calculator USE dbcsr_mm_multrec, ONLY: dbcsr_mm_multrec_finalize, & dbcsr_mm_multrec_init, & dbcsr_mm_multrec_multiply USE dbcsr_mp_methods, ONLY: & dbcsr_mp_grid_setup, dbcsr_mp_group, dbcsr_mp_has_subgroups, dbcsr_mp_my_col_group, & dbcsr_mp_my_row_group, dbcsr_mp_mynode, dbcsr_mp_mypcol, dbcsr_mp_myprow, dbcsr_mp_npcols, & dbcsr_mp_nprows, dbcsr_mp_numnodes, dbcsr_mp_pgrid USE dbcsr_mp_operations, ONLY: dbcsr_irecv_any, & dbcsr_isend_any, & hybrid_alltoall_any, & hybrid_alltoall_i1 USE dbcsr_operations, ONLY: dbcsr_copy, & dbcsr_crop_matrix USE dbcsr_ptr_util, ONLY: ensure_array_size USE dbcsr_transformations, ONLY: dbcsr_make_dense_low USE dbcsr_types, ONLY: & dbcsr_2d_array_type, dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_imagedistribution_obj, & dbcsr_iterator, dbcsr_memtype_type, dbcsr_meta_size, dbcsr_mp_obj, dbcsr_scalar_type, & dbcsr_slot_home_coli, dbcsr_slot_home_pcol, dbcsr_slot_home_prow, dbcsr_slot_home_rowi, & dbcsr_slot_home_vpcol, dbcsr_slot_home_vprow, dbcsr_slot_size, dbcsr_type, & dbcsr_type_complex_4, dbcsr_type_complex_8, dbcsr_type_int_4, dbcsr_type_no_symmetry, & dbcsr_type_real_4, dbcsr_type_real_8 USE dbcsr_dist_util, ONLY: count_bins, & dbcsr_checksum USE dbcsr_work_operations, ONLY: dbcsr_create, & dbcsr_special_finalize, & dbcsr_work_create USE dbcsr_kinds, ONLY: dp, & int_8, & real_4, & real_8, & sp USE dbcsr_machine, ONLY: default_output_unit, & m_memory USE dbcsr_mpiwrap, ONLY: mp_allgather, & mp_alltoall, & mp_environ, & mp_irecv, & mp_isend, & mp_request_null, & mp_sum, & mp_testany, & mp_waitall, & mp_comm_type, & mp_request_type USE ISO_C_BINDING, ONLY: C_F_POINTER #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_cannon' LOGICAL, PARAMETER :: debug_mod = .FALSE. LOGICAL, PARAMETER :: careful_mod = .FALSE. INTERFACE dbcsr_switch MODULE PROCEDURE dbcsr_switch_sets MODULE PROCEDURE dbcsr_switch_d_ptrs END INTERFACE PUBLIC :: multiply_cannon, make_m2s, & multiply_cannon_g2g CONTAINS SUBROUTINE make_m2s(matrix, m2s, rdist, dense_rdist, & !! Make images from the matrix (left or right) use_dense_mult, ab_dense, predistribute, & f_k, l_k, f_row, l_row, f_col, l_col, & row_blk_size, col_blk_size, & k_vmap, m_map, n_map, & alpha) TYPE(dbcsr_type), INTENT(IN) :: matrix TYPE(dbcsr_2d_array_type), INTENT(OUT), POINTER :: m2s TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT) :: rdist, dense_rdist LOGICAL, INTENT(IN) :: use_dense_mult, ab_dense CHARACTER, INTENT(IN) :: predistribute INTEGER, INTENT(IN) :: f_k, l_k, f_row, l_row, f_col, l_col TYPE(array_i1d_obj), INTENT(INOUT) :: row_blk_size, col_blk_size TYPE(array_i1d_obj), INTENT(IN) :: k_vmap, m_map, n_map TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: alpha CHARACTER(len=*), PARAMETER :: routineN = 'make_m2s' INTEGER :: handle, i, im, j, jm INTEGER, DIMENSION(4) :: f_crop LOGICAL :: do_scale, thread_redist TYPE(array_i1d_obj) :: col_map, row_map TYPE(dbcsr_type) :: dense_template, matrix_tmp CALL timeset(routineN, handle) ALLOCATE (m2s) do_scale = .FALSE. IF (PRESENT(alpha)) THEN IF (.NOT. dbcsr_scalar_are_equal(alpha, dbcsr_scalar_one(alpha%data_type))) THEN do_scale = .TRUE. END IF END IF IF (do_scale) THEN ! Copy and scale matrix if alpha is not 1. CALL dbcsr_make_images(matrix, m2s, rdist, & predistribute=predistribute, & no_copy_data=use_dense_mult, scale_value=alpha) ELSE CALL dbcsr_make_images(matrix, m2s, rdist, & predistribute=predistribute, & no_copy_data=use_dense_mult) END IF im = SIZE(m2s%mats, 1) jm = SIZE(m2s%mats, 2) SELECT CASE (predistribute) CASE ('L') f_crop = (/f_row, l_row, f_k, l_k/) row_map = m_map col_map = k_vmap thread_redist = .TRUE. CASE default f_crop = (/f_k, l_k, f_col, l_col/) row_map = k_vmap col_map = n_map thread_redist = .FALSE. END SELECT ! Post-processing of images. DO i = 1, im DO j = 1, jm CALL dbcsr_reset_vlocals(m2s%mats(i, j), rdist) ! Crop if necessary IF (ANY(f_crop .NE. 0)) THEN matrix_tmp = dbcsr_type() CALL dbcsr_crop_matrix(matrix_tmp, m2s%mats(i, j), & full_row_bounds=f_crop(1:2), & full_column_bounds=f_crop(3:4), & shallow_data=.FALSE.) CALL dbcsr_release(m2s%mats(i, j)) CALL dbcsr_copy(m2s%mats(i, j), matrix_tmp, shallow_data=.TRUE.) CALL dbcsr_release(matrix_tmp) CALL dbcsr_reset_vlocals(m2s%mats(i, j), rdist) END IF END DO END DO IF (ab_dense) THEN dense_template = dbcsr_type() CALL dbcsr_create(dense_template, template=matrix, & dist=dense_rdist%i%main, & row_blk_size_obj=row_blk_size, col_blk_size_obj=col_blk_size) CALL dbcsr_make_images_dense(m2s, dense_rdist, & row_map=row_map, col_map=col_map, & join_cols=use_dense_mult, join_rows=ab_dense, & new_template=dense_template) CALL dbcsr_image_dist_release(rdist) rdist = dense_rdist CALL dbcsr_image_dist_hold(rdist) DO i = 1, im DO j = 1, jm CALL dbcsr_reset_vlocals(m2s%mats(i, j), rdist) END DO END DO END IF DO i = 1, im DO j = 1, jm ! Convert to local-row index CALL dbcsr_make_index_local_row(m2s%mats(i, j)) ! Convert to list index CALL dbcsr_make_index_list(m2s%mats(i, j), thread_redist=thread_redist) END DO END DO IF (ab_dense) THEN CALL dbcsr_image_dist_release(dense_rdist) CALL dbcsr_release(dense_template) END IF CALL timestop(handle) END SUBROUTINE make_m2s SUBROUTINE dbcsr_make_images(source, normalized, target_image_dist, & predistribute, no_copy_data, scale_value) !! Creates row and column images of a matrix. TYPE(dbcsr_type), INTENT(IN) :: source !! input matrix TYPE(dbcsr_2d_array_type), INTENT(OUT) :: normalized !! image array of the normalized matrix TYPE(dbcsr_imagedistribution_obj), INTENT(IN) :: target_image_dist !! normalize to this image distribution CHARACTER, INTENT(IN), OPTIONAL :: predistribute !! predistribute data for multiplication LOGICAL, INTENT(IN), OPTIONAL :: no_copy_data !! try to not merge data at the end TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: scale_value !! scale with this value ! --------------------------------------------------------------------------- IF (dbcsr_cfg%use_mpi_rma%val) & DBCSR_ABORT("RMA algo not supported here!") IF (.NOT. dbcsr_valid_index(source)) & DBCSR_ABORT("Matrix not initialized.") CALL make_images(source, normalized, & target_image_dist, desymmetrize=dbcsr_has_symmetry(source), & predistribute=predistribute, & no_copy_data=no_copy_data, & scale_value=scale_value) normalized%image_dist = target_image_dist CALL dbcsr_image_dist_hold(normalized%image_dist) END SUBROUTINE dbcsr_make_images SUBROUTINE make_images(ism, ums, target_imgdist, desymmetrize, predistribute, & no_copy_data, scale_value) !! Makes column-based and row-based images of a matrix. TYPE(dbcsr_type), INTENT(IN) :: ism !! input symmetric matrix TYPE(dbcsr_2d_array_type), INTENT(OUT) :: ums !! normalized matrices TYPE(dbcsr_imagedistribution_obj), INTENT(IN) :: target_imgdist !! image distribution to normalize to LOGICAL, INTENT(IN), OPTIONAL :: desymmetrize !! desymmetrize a symmetric matrix CHARACTER, INTENT(IN), OPTIONAL :: predistribute !! predistribute data for multiplication LOGICAL, INTENT(IN), OPTIONAL :: no_copy_data !! try to not merge data at the end TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: scale_value !! scale with this value CHARACTER(len=*), PARAMETER :: routineN = 'make_images' INTEGER, PARAMETER :: metalen = 5 LOGICAL, PARAMETER :: dbg = .FALSE. CHARACTER :: predist_type, predist_type_fwd INTEGER :: blk, blk_l, blk_p, bp, col, col_img, col_size, coli, data_type, dst_p, handle, & handle2, ithread, ncol_images, nrow_images, nsymmetries, nthreads, numproc, & nze, pcol, prow, row, row_img, row_size, rowi, sd_pos, sm_pos, src_p, stored_blk_p, & stored_col, stored_row, symmetry_i, tr_col_size, tr_row_size, vcol, vrow INTEGER, ALLOCATABLE, DIMENSION(:) :: myt_sdp, myt_smp, rd_disp, recv_meta, & rm_disp, sd_disp, sdp, send_meta, & sm_disp, smp INTEGER, ALLOCATABLE, DIMENSION(:, :) :: all_total_send_offset, blk_ps, blks, & myt_total_send_count, & total_recv_count, total_send_count INTEGER, ALLOCATABLE, DIMENSION(:, :, :, :) :: myt_send_count, recv_count, send_count INTEGER, DIMENSION(:), CONTIGUOUS, POINTER :: col_blk_size, col_dist, col_img_dist, & row_blk_size, row_dist, row_img_dist INTEGER, DIMENSION(:, :), CONTIGUOUS, POINTER :: blacs2mpi LOGICAL :: nocopy, tr TYPE(dbcsr_data_obj) :: received_data_area, recv_data_area, & send_data_area TYPE(dbcsr_distribution_obj) :: old_dist, target_dist TYPE(dbcsr_iterator) :: iter TYPE(dbcsr_memtype_type) :: data_memory_type TYPE(dbcsr_mp_obj) :: mp_obj TYPE(dbcsr_scalar_type) :: scale_neg_one TYPE(dbcsr_type) :: sm TYPE(mp_comm_type) :: mp_group ! --------------------------------------------------------------------------- ! Check input matrix ! Set convenient variables to access input matrix info ! CALL timeset(routineN, handle) nocopy = .FALSE. IF (PRESENT(no_copy_data)) nocopy = no_copy_data sm = ism nsymmetries = 1 IF (PRESENT(desymmetrize)) THEN IF (desymmetrize .AND. sm%symmetry) THEN nsymmetries = 2 END IF END IF SELECT CASE (predistribute) CASE ('L', 'l') predist_type = 'L' predist_type_fwd = 'l' CASE ('R', 'r') predist_type = 'R' predist_type_fwd = 'r' CASE default DBCSR_ABORT("Incorrect pre-shift specifier.") END SELECT data_type = sm%data_type IF (data_type .NE. dbcsr_type_real_8 .AND. & data_type .NE. dbcsr_type_real_4 .AND. & data_type .NE. dbcsr_type_complex_8 .AND. & data_type .NE. dbcsr_type_complex_4) & DBCSR_ABORT("Invalid data type.") scale_neg_one = dbcsr_scalar_negative(dbcsr_scalar_one(data_type)) row_blk_size => array_data(sm%row_blk_size) col_blk_size => array_data(sm%col_blk_size) old_dist = dbcsr_distribution(ism) target_dist = target_imgdist%i%main row_dist => dbcsr_distribution_row_dist(target_dist) col_dist => dbcsr_distribution_col_dist(target_dist) IF (sm%symmetry) THEN IF (SIZE(row_dist) .NE. SIZE(col_dist)) & DBCSR_WARN('Unequal row and column distributions for symmetric matrix.') END IF nrow_images = target_imgdist%i%row_decimation IF (nrow_images .GT. 1) THEN row_img_dist => array_data(target_imgdist%i%row_image) ELSE NULLIFY (row_img_dist) END IF ncol_images = target_imgdist%i%col_decimation IF (ncol_images .GT. 1) THEN col_img_dist => array_data(target_imgdist%i%col_image) ELSE NULLIFY (col_img_dist) END IF mp_obj = dbcsr_distribution_mp(target_dist) blacs2mpi => dbcsr_mp_pgrid(mp_obj) numproc = dbcsr_mp_numnodes(mp_obj) mp_group = dbcsr_mp_group(mp_obj) IF (dbcsr_distribution_max_row_dist(old_dist) .GT. UBOUND(blacs2mpi, 1)) & DBCSR_ABORT('Row distribution references unexistent processor rows') IF (dbg) THEN IF (dbcsr_distribution_max_row_dist(old_dist) .NE. UBOUND(blacs2mpi, 1)) & DBCSR_WARN('Range of row distribution not equal to processor rows') END IF IF (dbcsr_distribution_max_col_dist(old_dist) .GT. UBOUND(blacs2mpi, 2)) & DBCSR_ABORT('Col distribution references unexistent processor cols') IF (dbg) THEN IF (dbcsr_distribution_max_col_dist(old_dist) .NE. UBOUND(blacs2mpi, 2)) & DBCSR_WARN('Range of col distribution not equal to processor cols') END IF ! Check threads configuration !$ IF (.NOT. dbcsr_distribution_has_threads(old_dist)) & !$ DBCSR_ABORT("Thread distribution not defined") ! Allocate shared temporary buffers ! ALLOCATE (send_count(2, nrow_images, ncol_images, 0:numproc - 1)); send_count = 0 ALLOCATE (recv_count(2, nrow_images, ncol_images, 0:numproc - 1)) ALLOCATE (total_send_count(2, 0:numproc - 1)); total_send_count = 0 ALLOCATE (total_recv_count(2, 0:numproc - 1)) ALLOCATE (sdp(0:numproc - 1)) ALLOCATE (smp(0:numproc - 1)) ALLOCATE (sd_disp(0:numproc - 1)); sd_disp(0) = 1 ALLOCATE (sm_disp(0:numproc - 1)); sm_disp(0) = 1 ALLOCATE (rd_disp(0:numproc - 1)); rd_disp(0) = 1 ALLOCATE (rm_disp(0:numproc - 1)); rm_disp(0) = 1 ALLOCATE (all_total_send_offset(2, 0:numproc - 1)) ALLOCATE (blk_ps(nrow_images, ncol_images)); blk_ps = 1 ALLOCATE (blks(nrow_images, ncol_images)); blks = 1 ! ! Allocate and init mats ! ALLOCATE (ums%mats(nrow_images, ncol_images)) data_memory_type = memtype_abpanel_1 DO row_img = 1, nrow_images DO col_img = 1, ncol_images ums%mats(row_img, col_img) = dbcsr_type() CALL dbcsr_create(ums%mats(row_img, col_img), "imaged "//sm%name, & target_dist, & dbcsr_type_no_symmetry, & row_blk_size_obj=sm%row_blk_size, col_blk_size_obj=sm%col_blk_size, & nze=0, data_type=data_type, & max_rbs=sm%max_rbs, max_cbs=sm%max_cbs, & row_blk_offset=sm%row_blk_offset, col_blk_offset=sm%col_blk_offset, & thread_dist=sm%dist, & data_memory_type=data_memory_type, & index_memory_type=memtype_mpi_buffer) ums%mats(row_img, col_img)%negate_real = sm%negate_real ums%mats(row_img, col_img)%negate_imaginary = sm%negate_imaginary END DO END DO nthreads = 1 !$OMP PARALLEL DEFAULT (NONE) & !$OMP PRIVATE (ithread, symmetry_i, row_img, col_img, & !$OMP myt_send_count, myt_total_send_count, & !$OMP iter, row, col, blk, row_size, col_size, stored_row, stored_col, & !$OMP prow, pcol, rowi, coli, vrow, vcol, dst_p, nze, myt_smp, myt_sdp, & !$OMP blk_p, bp, sd_pos, sm_pos,tr, & !$OMP tr_row_size, tr_col_size) & !$OMP SHARED (nthreads, nsymmetries, row_img_dist, col_img_dist, & !$OMP nrow_images, ncol_images, numproc, scale_value, & !$OMP ums, sm, ism, target_imgdist, row_dist, col_dist,& !$OMP predist_type_fwd, blacs2mpi, row_blk_size, col_blk_size, & !$OMP send_count, recv_count, handle2,mp_group, & !$OMP total_send_count, total_recv_count, recv_data_area, nocopy, & !$OMP data_type, recv_meta, send_data_area, send_meta, & !$OMP sd_disp, sm_disp, rd_disp, rm_disp, all_total_send_offset, blk_ps, blks, & !$OMP received_data_area, scale_neg_one, memtype_abpanel_1) ithread = 0 !$ ithread = omp_get_thread_num() !$OMP MASTER !$ nthreads = omp_get_num_threads() !$OMP END MASTER ! Allocate thread private data ! ALLOCATE (myt_send_count(2, nrow_images, ncol_images, 0:numproc - 1)); myt_send_count(:, :, :, :) = 0 ALLOCATE (myt_total_send_count(2, 0:numproc - 1)) ! Thread-local pointers of the current adding position into the send buffers ALLOCATE (myt_smp(0:numproc - 1), myt_sdp(0:numproc - 1)) ! Count sizes for sending ! CALL dbcsr_iterator_start(iter, ism, shared=.TRUE.) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, blk, & row_size=row_size, col_size=col_size) nze = row_size*col_size IF (nze .EQ. 0) CYCLE DO symmetry_i = 1, nsymmetries IF (symmetry_i .EQ. 1) THEN stored_row = row; stored_col = col ELSE IF (row .EQ. col) CYCLE stored_row = col; stored_col = row END IF ! Where do we send this block? row_img = 1 IF (nrow_images .GT. 1) row_img = row_img_dist(stored_row) col_img = 1 IF (ncol_images .GT. 1) col_img = col_img_dist(stored_col) CALL image_calculator(target_imgdist, & prow=prow, rowi=rowi, & pcol=pcol, coli=coli, & vprow=vrow, vpcol=vcol, & myprow=row_dist(stored_row), myrowi=row_img, & mypcol=col_dist(stored_col), mycoli=col_img, & shifting=predist_type_fwd) dst_p = blacs2mpi(prow, pcol) ! These counts are meant for the thread that processes this row. myt_send_count(1, rowi, coli, dst_p) = & myt_send_count(1, rowi, coli, dst_p) + 1 myt_send_count(2, rowi, coli, dst_p) = & myt_send_count(2, rowi, coli, dst_p) + nze END DO ! symmetry_i END DO CALL dbcsr_iterator_stop(iter) DO dst_p = 0, numproc - 1 myt_total_send_count(1, dst_p) = SUM(myt_send_count(1, :, :, dst_p)) myt_total_send_count(2, dst_p) = SUM(myt_send_count(2, :, :, dst_p)) END DO ! Merge the send counts !$OMP CRITICAL send_count(:, :, :, :) = send_count(:, :, :, :) + myt_send_count(:, :, :, :) total_send_count(:, :) = total_send_count(:, :) + myt_total_send_count(:, :) !$OMP END CRITICAL !$OMP BARRIER !$OMP MASTER CALL timeset(routineN//"_sizes", handle2) CALL mp_alltoall(send_count, recv_count, 2*nrow_images*ncol_images, & mp_group) CALL timestop(handle2) !$OMP END MASTER !$OMP BARRIER ! Fill in the meta data structures and copy the data. !$OMP DO DO dst_p = 0, numproc - 1 total_recv_count(1, dst_p) = SUM(recv_count(1, :, :, dst_p)) total_recv_count(2, dst_p) = SUM(recv_count(2, :, :, dst_p)) END DO !$OMP MASTER ! Allocate data structures needed for data exchange. CALL dbcsr_data_init(recv_data_area) CALL dbcsr_data_init(send_data_area) IF (nrow_images .EQ. 1 .AND. ncol_images .EQ. 1 .OR. nocopy) THEN ! For some cases the faster dbcsr_special_finalize(reshuffle=.FALSE.) can be used. ! This basically makes this working matrix the actual data-area. ! Hence, for those cases we have to use data_memory_type already here. CALL dbcsr_data_new(recv_data_area, data_type, SUM(total_recv_count(2, :)), memory_type=memtype_abpanel_1) ! Some MPI implementations have high overhead when encountering a new buffer. ! Therefore we also use the memory pool for the send buffer. CALL dbcsr_data_new(send_data_area, data_type, SUM(total_send_count(2, :)), memory_type=memtype_abpanel_1) ELSE CALL dbcsr_data_new(recv_data_area, data_type, SUM(total_recv_count(2, :))) CALL dbcsr_data_new(send_data_area, data_type, SUM(total_send_count(2, :))) END IF ALLOCATE (recv_meta(metalen*SUM(total_recv_count(1, :)))) ALLOCATE (send_meta(metalen*SUM(total_send_count(1, :)))) ! Calculate displacements for processors needed for the exchanges. DO dst_p = 1, numproc - 1 sm_disp(dst_p) = sm_disp(dst_p - 1) & + metalen*total_send_count(1, dst_p - 1) sd_disp(dst_p) = sd_disp(dst_p - 1) & + total_send_count(2, dst_p - 1) rm_disp(dst_p) = rm_disp(dst_p - 1) & + metalen*total_recv_count(1, dst_p - 1) rd_disp(dst_p) = rd_disp(dst_p - 1) & + total_recv_count(2, dst_p - 1) END DO myt_smp(:) = sm_disp(:) myt_sdp(:) = sd_disp(:) IF (nthreads .GT. 1) THEN all_total_send_offset(1, :) = myt_smp(:) + metalen*myt_total_send_count(1, :) all_total_send_offset(2, :) = myt_sdp(:) + myt_total_send_count(2, :) END IF !$OMP END MASTER !$OMP BARRIER IF (ithread .GT. 0) THEN !$OMP CRITICAL myt_smp(:) = all_total_send_offset(1, :) myt_sdp(:) = all_total_send_offset(2, :) all_total_send_offset(1, :) & = all_total_send_offset(1, :) + metalen*myt_total_send_count(1, :) all_total_send_offset(2, :) & = all_total_send_offset(2, :) + myt_total_send_count(2, :) !$OMP END CRITICAL ELSE CALL dbcsr_data_init(received_data_area) received_data_area = recv_data_area CALL dbcsr_data_hold(received_data_area) DO row_img = 1, nrow_images DO col_img = 1, ncol_images CALL dbcsr_work_create(ums%mats(row_img, col_img), & SUM(recv_count(1, row_img, col_img, :)), n=1) CALL dbcsr_data_hold(received_data_area) CALL dbcsr_data_release(ums%mats(row_img, col_img)%wms(1)%data_area) ums%mats(row_img, col_img)%wms(1)%data_area = received_data_area END DO END DO END IF !$OMP BARRIER ! Add timing call to the packing of the send buffers ! CALL timeset(routineN//"_pack", handle2) ! Copies metadata and actual data to be sent into the send buffers. CALL dbcsr_iterator_start(iter, ism, shared=.TRUE.) SELECT CASE (data_type) CASE (dbcsr_type_real_4) CALL prepare_buffers_s(sm%negate_real, sm%negate_imaginary, & iter, row, col, blk, blk_p, bp, & row_size, col_size, nze, nsymmetries, symmetry_i, & stored_row, stored_col, tr_row_size, tr_col_size, tr, & row_img, col_img, nrow_images, ncol_images, & row_img_dist, col_img_dist, predist_type_fwd, blacs2mpi, & target_imgdist, prow, pcol, rowi, coli, & row_dist, col_dist, dst_p, sm_pos, myt_smp, metalen, & sd_pos, myt_sdp, send_meta, sd_disp, & dbcsr_get_data_p_s(sm%data_area), & send_data_area, scale_neg_one, scale_value) CASE (dbcsr_type_real_8) CALL prepare_buffers_d(sm%negate_real, sm%negate_imaginary, & iter, row, col, blk, blk_p, bp, & row_size, col_size, nze, nsymmetries, symmetry_i, & stored_row, stored_col, tr_row_size, tr_col_size, tr, & row_img, col_img, nrow_images, ncol_images, & row_img_dist, col_img_dist, predist_type_fwd, blacs2mpi, & target_imgdist, prow, pcol, rowi, coli, & row_dist, col_dist, dst_p, sm_pos, myt_smp, metalen, & sd_pos, myt_sdp, send_meta, sd_disp, & dbcsr_get_data_p_d(sm%data_area), & send_data_area, scale_neg_one, scale_value) CASE (dbcsr_type_complex_4) CALL prepare_buffers_c(sm%negate_real, sm%negate_imaginary, & iter, row, col, blk, blk_p, bp, & row_size, col_size, nze, nsymmetries, symmetry_i, & stored_row, stored_col, tr_row_size, tr_col_size, tr, & row_img, col_img, nrow_images, ncol_images, & row_img_dist, col_img_dist, predist_type_fwd, blacs2mpi, & target_imgdist, prow, pcol, rowi, coli, & row_dist, col_dist, dst_p, sm_pos, myt_smp, metalen, & sd_pos, myt_sdp, send_meta, sd_disp, & dbcsr_get_data_p_c(sm%data_area), & send_data_area, scale_neg_one, scale_value) CASE (dbcsr_type_complex_8) CALL prepare_buffers_z(sm%negate_real, sm%negate_imaginary, & iter, row, col, blk, blk_p, bp, & row_size, col_size, nze, nsymmetries, symmetry_i, & stored_row, stored_col, tr_row_size, tr_col_size, tr, & row_img, col_img, nrow_images, ncol_images, & row_img_dist, col_img_dist, predist_type_fwd, blacs2mpi, & target_imgdist, prow, pcol, rowi, coli, & row_dist, col_dist, dst_p, sm_pos, myt_smp, metalen, & sd_pos, myt_sdp, send_meta, sd_disp, & dbcsr_get_data_p_z(sm%data_area), & send_data_area, scale_neg_one, scale_value) END SELECT CALL dbcsr_iterator_stop(iter) ! Deallocate thread private data ! DEALLOCATE (myt_send_count) DEALLOCATE (myt_total_send_count) DEALLOCATE (myt_smp, myt_sdp) CALL timestop(handle2) !$OMP END PARALLEL ! Exchange the data and metadata structures. In the interesting cases (square grids, row col distribution same), ! there are only very few processors that need to exchange data. ! The hybrid_alltoall deals with this by doing point to point communication CALL timeset(routineN//"_data", handle2) CALL hybrid_alltoall_any(send_data_area, total_send_count(2, :), sd_disp(:) - 1, & recv_data_area, total_recv_count(2, :), rd_disp(:) - 1, & mp_obj, & most_ptp=.TRUE., remainder_ptp=.TRUE., no_hybrid=.FALSE.) CALL hybrid_alltoall_i1( & send_meta(:), metalen*total_send_count(1, :), sm_disp(:) - 1, & recv_meta(:), metalen*total_recv_count(1, :), rm_disp(:) - 1, & most_ptp=.TRUE., remainder_ptp=.TRUE., no_hybrid=.FALSE., & mp_env=mp_obj) CALL timestop(handle2) ! Now create the work index and/or copy the relevant data from the ! receive buffer into the local indices. ! DO src_p = 0, numproc - 1 DO blk_l = 1, total_recv_count(1, src_p) stored_row = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1)) stored_col = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 1) stored_blk_p = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 2) row_img = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 3) col_img = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 4) nze = row_blk_size(stored_row)*col_blk_size(stored_col) blk = blks(row_img, col_img) blks(row_img, col_img) = blks(row_img, col_img) + 1 blk_ps(row_img, col_img) = blk_ps(row_img, col_img) + nze ums%mats(row_img, col_img)%wms(1)%row_i(blk) = stored_row ums%mats(row_img, col_img)%wms(1)%col_i(blk) = stored_col ums%mats(row_img, col_img)%wms(1)%blk_p(blk) = & SIGN(rd_disp(src_p) + ABS(stored_blk_p) - 1, stored_blk_p) END DO END DO ! Finalize the actual imaged matrices from the work matrices ! DO row_img = 1, nrow_images DO col_img = 1, ncol_images ums%mats(row_img, col_img)%wms(1)%lastblk = blks(row_img, col_img) - 1 ums%mats(row_img, col_img)%wms(1)%datasize = blk_ps(row_img, col_img) - 1 ! CALL dbcsr_data_set_size_referenced( & ums%mats(row_img, col_img)%wms(1)%data_area, & ums%mats(row_img, col_img)%wms(1)%datasize) IF (nrow_images .EQ. 1 .AND. ncol_images .EQ. 1 .OR. nocopy) THEN CALL dbcsr_special_finalize(ums%mats(row_img, col_img), reshuffle=.FALSE.) ELSE CALL dbcsr_special_finalize(ums%mats(row_img, col_img), reshuffle=.TRUE.) END IF ! Save the home process and image row and column CALL image_calculator(target_imgdist, & ums%mats(row_img, col_img)%index(dbcsr_slot_home_prow), & ums%mats(row_img, col_img)%index(dbcsr_slot_home_rowi), & ums%mats(row_img, col_img)%index(dbcsr_slot_home_pcol), & ums%mats(row_img, col_img)%index(dbcsr_slot_home_coli), & vprow=ums%mats(row_img, col_img)%index(dbcsr_slot_home_vprow), & vpcol=ums%mats(row_img, col_img)%index(dbcsr_slot_home_vpcol), & myrowi=row_img, mycoli=col_img, & shifting=predist_type) END DO END DO ! Deallocate shared temporary buffers ! DEALLOCATE (send_count, recv_count) DEALLOCATE (total_send_count, total_recv_count) DEALLOCATE (sdp, smp, sd_disp, sm_disp) DEALLOCATE (rd_disp, rm_disp) DEALLOCATE (all_total_send_offset) DEALLOCATE (blk_ps, blks) DEALLOCATE (recv_meta, send_meta) CALL dbcsr_data_release(send_data_area) CALL dbcsr_data_release(received_data_area) CALL dbcsr_data_release(recv_data_area) CALL timestop(handle) END SUBROUTINE make_images SUBROUTINE dbcsr_make_images_dense(images, new_rdist, & row_map, col_map, join_cols, join_rows, new_template) !! Makes dense matrices for the image matrices. !! @note !! Used for making matrices dense/undense !! @endnote TYPE(dbcsr_2d_array_type), INTENT(INOUT) :: images !! current (undense) matrix images, output is the dense matrix images TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT) :: new_rdist !! the new image distribution for dense matrices TYPE(array_i1d_obj), INTENT(IN) :: row_map, col_map !! mapping of current (undense) rows to dense rows !! mapping of current (undense) columns to dense columns LOGICAL, INTENT(IN) :: join_cols, join_rows !! make columns dense, default is yes !! make rows dense, default is yes TYPE(dbcsr_type), INTENT(IN) :: new_template !! template dense matrix for creating image matrices CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_images_dense' LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: handle, mat_col, mat_row, mat_vpcol, & mat_vprow INTEGER, DIMENSION(:), CONTIGUOUS, POINTER :: und_col_blk_offsets, und_row_blk_offsets INTEGER, DIMENSION(dbcsr_meta_size) :: old_meta REAL(kind=dp) :: cs TYPE(array_i1d_obj) :: dense_local_vcols, dense_local_vrows, & und_local_vcols, und_local_vrows TYPE(dbcsr_imagedistribution_obj) :: old_rdist TYPE(dbcsr_type) :: tmp_mat ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) old_rdist = images%image_dist ! DO mat_row = 1, images%image_dist%i%row_decimation DO mat_col = 1, images%image_dist%i%col_decimation IF (dbg) THEN cs = dbcsr_checksum(images%mats(mat_row, mat_col)) WRITE (*, *) routineN//" cs pre", cs END IF mat_vprow = images%mats(mat_row, mat_col)%index(dbcsr_slot_home_vprow) mat_vpcol = images%mats(mat_row, mat_col)%index(dbcsr_slot_home_vpcol) und_row_blk_offsets => array_data(images%mats(mat_row, mat_col)%row_blk_offset) und_col_blk_offsets => array_data(images%mats(mat_row, mat_col)%col_blk_offset) CALL dbcsr_get_local_vrows(old_rdist, und_local_vrows, mat_vprow) CALL dbcsr_get_local_vcols(old_rdist, und_local_vcols, mat_vpcol) CALL dbcsr_get_local_vrows(new_rdist, dense_local_vrows, mat_vprow) CALL dbcsr_get_local_vcols(new_rdist, dense_local_vcols, mat_vpcol) ! The old matrix has to be remembered so it is copied to ! tmp_mat. old_meta(:) = images%mats(mat_row, mat_col)%index(1:dbcsr_meta_size) tmp_mat = dbcsr_type() tmp_mat = images%mats(mat_row, mat_col) images%mats(mat_row, mat_col) = dbcsr_type() CALL dbcsr_create(images%mats(mat_row, mat_col), template=new_template) images%mats(mat_row, mat_col)%index(dbcsr_slot_home_prow & :dbcsr_slot_home_vpcol) = & old_meta(dbcsr_slot_home_prow:dbcsr_slot_home_vpcol) CALL dbcsr_make_dense_low(tmp_mat, images%mats(mat_row, mat_col), & array_data(und_local_vrows), array_data(und_local_vcols), & und_row_blk_offsets, und_col_blk_offsets, & array_data(dense_local_vrows), & array_data(dense_local_vcols), & array_data(new_template%row_blk_offset), & array_data(new_template%col_blk_offset), & array_data(row_map), array_data(col_map), join_rows, join_cols) ! CALL dbcsr_index_prune_deleted(images%mats(mat_row, mat_col)) ! CALL dbcsr_release(tmp_mat) IF (dbg) THEN cs = dbcsr_checksum(images%mats(mat_row, mat_col)) WRITE (*, *) routineN//" cs pst", cs END IF END DO END DO CALL dbcsr_image_dist_release(images%image_dist) images%image_dist = new_rdist CALL dbcsr_image_dist_hold(images%image_dist) CALL timestop(handle) END SUBROUTINE dbcsr_make_images_dense SUBROUTINE multiply_cannon(left_set, right_set, product_matrix, & retain_sparsity, & filter_eps, flop, keep_product_data) !! Multiplies two DBCSR matrices TYPE(dbcsr_2d_array_type), POINTER :: left_set, right_set !! set of imaged left matrices !! set of imaged right matrices TYPE(dbcsr_type), INTENT(INOUT) :: product_matrix !! DBCSR product matrix LOGICAL, INTENT(IN), OPTIONAL :: retain_sparsity !! retain the sparsity of the existing product matrix; default is no REAL(kind=real_8), INTENT(in), OPTIONAL :: filter_eps INTEGER(KIND=int_8), INTENT(OUT) :: flop !! effective flop LOGICAL, INTENT(IN) :: keep_product_data CHARACTER(len=*), PARAMETER :: routineN = 'multiply_cannon' INTEGER, PARAMETER :: idata = 1, ileft = 0, imeta = 2, & iright = 2 INTEGER :: data_type, data_type_byte, handle, handle1, handle2, handle3, i, ithread, & left_col_image, left_col_mult, left_col_nimages, left_dst_icol, left_dst_irow, & left_dst_p, left_dst_pcol, left_dst_prow, left_dst_vcol, left_dst_vrow, left_max_nblks, & left_max_nze, left_myfirstvcol, left_myfirstvrow, left_mypcol, left_myprow, left_npcols, & left_nprows, left_recv_icol, left_recv_irow, left_recv_p, left_recv_pcol, left_recv_prow, & left_recv_vcol, left_recv_vrow, left_row_image, left_row_mult, left_row_nimages, & left_send_icol, left_send_irow, left_send_p, left_send_pcol, left_send_prow INTEGER :: left_send_vcol, left_send_vrow, left_src_icol, left_src_irow, left_src_p, & left_src_pcol, left_src_prow, left_src_vcol, left_src_vrow, metronome, min_nimages, & mynode, nblkrows_used, nsteps_k, nthreads, numnodes, nvirt_k, & output_unit, right_col_image, right_col_mult, right_col_nimages, right_dst_icol, & right_dst_irow, right_dst_p, right_dst_pcol, right_dst_prow, right_dst_vcol, & right_dst_vrow, right_max_nblks, right_max_nze, right_myfirstvcol, right_myfirstvrow, & right_mypcol, right_myprow, right_npcols, right_nprows, right_recv_icol, right_recv_irow INTEGER :: right_recv_p, right_recv_pcol, right_recv_prow, right_recv_vcol, right_recv_vrow, & right_row_image, right_row_mult, right_row_nimages, right_send_icol, right_send_irow, & right_send_p, right_send_pcol, right_send_prow, right_send_vcol, right_send_vrow, & right_src_icol, right_src_irow, right_src_p, right_src_pcol, right_src_prow, & right_src_vcol, right_src_vrow, row, size_guess, size_guess_init, stat, threads_finished, & threads_finished_read, v_ki, v_ki_left, v_ki_right INTEGER(KIND=int_8) :: flop_single, flop_total, mem INTEGER, ALLOCATABLE, DIMENSION(:) :: row_counts, total_row_counts INTEGER, ALLOCATABLE, DIMENSION(:, :, :) :: left_sizes, my_sizes, right_sizes INTEGER, ALLOCATABLE, DIMENSION(:, :, :, :) :: all_sizes INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_blk_sizes2enum, enum2col_blk_sizes, & enum2row_blk_sizes, & left_index_rp, left_index_sp, m_sizes, n_sizes, & right_index_rp, right_index_sp, & row_blk_sizes2enum INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: k_sizes INTEGER, DIMENSION(:, :), POINTER, CONTIGUOUS :: left_pgrid, product_pgrid, right_pgrid INTEGER, SAVE :: mult_id = 0 LOGICAL :: keep_sparsity, list_indexing, & otf_filtering REAL(kind=sp), ALLOCATABLE, DIMENSION(:) :: left_norms, right_norms, & row_max_epss REAL(kind=sp) :: filter_eps_sp TYPE(dbcsr_2d_array_type), POINTER :: left_buffer_2, left_buffer_calc, & left_buffer_comm, right_buffer_2, right_buffer_calc, right_buffer_comm TYPE(dbcsr_data_obj) :: left_data_rp, left_data_sp, & right_data_rp, right_data_sp TYPE(dbcsr_data_obj), POINTER :: trs_stackbuf_calc, & trs_stackbuf_comm TYPE(dbcsr_data_obj), TARGET :: trs_stackbuf_1, trs_stackbuf_2 TYPE(dbcsr_mm_multrec_type_p), DIMENSION(:), ALLOCATABLE :: multrec TYPE(dbcsr_mp_obj) :: left_mp_obj, product_mp_obj, & right_mp_obj TYPE(mp_comm_type) :: grp, mp_group TYPE(mp_request_type), DIMENSION(:), ALLOCATABLE :: left_data_rr, left_data_sr, left_index_rr, & left_index_sr, right_data_rr, right_data_sr, right_index_rr, right_index_sr ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) NULLIFY (trs_stackbuf_calc, trs_stackbuf_comm) NULLIFY (row_blk_sizes2enum, enum2row_blk_sizes) NULLIFY (col_blk_sizes2enum, enum2col_blk_sizes) NULLIFY (k_sizes) ! ALLOCATE (left_buffer_2, right_buffer_2) mult_id = mult_id + 1 IF (PRESENT(retain_sparsity)) THEN keep_sparsity = retain_sparsity ELSE keep_sparsity = .FALSE. END IF otf_filtering = PRESENT(filter_eps) !$OMP PARALLEL DEFAULT (NONE) & !$OMP SHARED (multrec, nthreads, product_matrix) !$OMP MASTER nthreads = 1 !$ nthreads = OMP_GET_NUM_THREADS() IF (.NOT. ASSOCIATED(product_matrix%wms)) & DBCSR_ABORT("Work matrices do not exist") IF (SIZE(product_matrix%wms) .NE. nthreads) & DBCSR_ABORT("Work matrices not correctly sized.") ALLOCATE (multrec(0:nthreads - 1)) !$OMP END MASTER !$OMP END PARALLEL output_unit = default_output_unit flop_total = 0 ! Set up variables data_type = dbcsr_get_data_type(product_matrix) data_type_byte = dbcsr_datatype_sizeof(data_type) left_row_nimages = left_set%image_dist%i%row_decimation left_row_mult = left_set%image_dist%i%row_multiplicity left_col_nimages = left_set%image_dist%i%col_decimation left_col_mult = left_set%image_dist%i%col_multiplicity right_row_nimages = right_set%image_dist%i%row_decimation right_row_mult = right_set%image_dist%i%row_multiplicity right_col_nimages = right_set%image_dist%i%col_decimation right_col_mult = right_set%image_dist%i%col_multiplicity left_mp_obj = dbcsr_distribution_mp(left_set%image_dist%i%main) right_mp_obj = dbcsr_distribution_mp(right_set%image_dist%i%main) product_mp_obj = dbcsr_distribution_mp(product_matrix%dist) numnodes = dbcsr_mp_numnodes(product_mp_obj) mynode = dbcsr_mp_mynode(product_mp_obj) left_nprows = dbcsr_mp_nprows(left_mp_obj) left_npcols = dbcsr_mp_npcols(left_mp_obj) left_myprow = dbcsr_mp_myprow(left_mp_obj) left_mypcol = dbcsr_mp_mypcol(left_mp_obj) left_myfirstvrow = dbcsr_mp_myprow(left_mp_obj)*left_row_nimages left_myfirstvcol = dbcsr_mp_mypcol(left_mp_obj)*left_col_nimages right_nprows = dbcsr_mp_nprows(right_mp_obj) right_npcols = dbcsr_mp_npcols(right_mp_obj) right_myprow = dbcsr_mp_myprow(right_mp_obj) right_mypcol = dbcsr_mp_mypcol(right_mp_obj) right_myfirstvrow = dbcsr_mp_myprow(right_mp_obj)*right_row_nimages right_myfirstvcol = dbcsr_mp_mypcol(right_mp_obj)*right_col_nimages mp_group = dbcsr_mp_group(product_mp_obj) left_pgrid => dbcsr_mp_pgrid(left_mp_obj) right_pgrid => dbcsr_mp_pgrid(right_mp_obj) product_pgrid => dbcsr_mp_pgrid(product_mp_obj) CALL dbcsr_mp_grid_setup(product_mp_obj) CALL dbcsr_mp_grid_setup(left_mp_obj) CALL dbcsr_mp_grid_setup(right_mp_obj) ! ! Dummy checks ! left/right matching IF (left_col_nimages .NE. right_row_mult) & DBCSR_ABORT("Left/Right image mismatch") IF (left_col_mult .NE. right_row_nimages) & DBCSR_ABORT("Left/Right image mismatch") IF (left_col_nimages*left_npcols .NE. right_row_nimages*right_nprows) & DBCSR_ABORT("Left/Right total mismatch") ! product/left matching IF (left_row_mult*dbcsr_mp_nprows(product_mp_obj) .NE. left_row_nimages*left_nprows) & DBCSR_ABORT("Product/Left total mismatch") ! product/left matching IF (right_col_mult*dbcsr_mp_npcols(product_mp_obj) .NE. right_col_nimages*right_npcols) & DBCSR_ABORT("Product/Right total mismatch") ! Limitations IF (left_row_nimages .NE. 1) & DBCSR_ABORT("Product/Left matrix process grid mismatch") IF (left_row_mult .NE. 1) & DBCSR_ABORT("Product/Left matrix process grid mismatch") IF (right_col_nimages .NE. 1) & DBCSR_ABORT("Product/Right matrix process grid mismatch") IF (right_col_mult .NE. 1) & DBCSR_ABORT("Product/Right matrix process grid mismatch") dbcsr_mpi_statistics%nimages = MAX(dbcsr_mpi_statistics%nimages, left_row_nimages*left_col_nimages) dbcsr_mpi_statistics%nimages = MAX(dbcsr_mpi_statistics%nimages, right_row_nimages*right_col_nimages) ! ! Exchange size data ALLOCATE (my_sizes(4, MAX(left_row_nimages, right_row_nimages), & MAX(left_col_nimages, right_col_nimages))) my_sizes(:, :, :) = 0 DO left_row_image = 1, left_row_nimages DO left_col_image = 1, left_col_nimages my_sizes(idata + ileft, left_row_image, left_col_image) & = dbcsr_data_get_size_referenced( & left_set%mats(left_row_image, left_col_image)%data_area) my_sizes(imeta + ileft, left_row_image, left_col_image) = & left_set%mats(left_row_image, left_col_image)%index & (dbcsr_slot_size) END DO END DO DO right_row_image = 1, right_row_nimages DO right_col_image = 1, right_col_nimages my_sizes(idata + iright, right_row_image, right_col_image) & = dbcsr_data_get_size_referenced( & right_set%mats(right_row_image, right_col_image)%data_area) my_sizes(imeta + iright, right_row_image, right_col_image) = & right_set%mats(right_row_image, right_col_image)%index & (dbcsr_slot_size) END DO END DO ALLOCATE (all_sizes(4, LBOUND(my_sizes, 2):UBOUND(my_sizes, 2), & LBOUND(my_sizes, 3):UBOUND(my_sizes, 3), 0:numnodes - 1)) CALL mp_allgather(my_sizes, all_sizes, mp_group) ! ! Count the maximum possible multiplies per row for on-the-fly ! filtering. per_row_eps: IF (.NOT. otf_filtering) THEN ! These arrays must be valid when passed to called subroutines. ALLOCATE (left_norms(0), right_norms(0), row_max_epss(0), stat=stat) IF (stat .NE. 0) & DBCSR_ABORT("Could not allocate memory") ELSE IF (careful_mod) THEN IF (left_set%mats(1, 1)%bcsc) & DBCSR_ABORT("Can not do on-the-fly filtering with CSC-indexed matrices.") END IF IF (dbcsr_has_local_row_index(left_set%mats(1, 1))) THEN nblkrows_used = dbcsr_nblkrows_local(left_set%mats(1, 1)) ELSE nblkrows_used = dbcsr_nblkrows_total(left_set%mats(1, 1)) END IF ALLOCATE (row_max_epss(nblkrows_used), stat=stat) IF (stat .NE. 0) & DBCSR_ABORT("Could not allocate memory for left epsilons") ALLOCATE (row_counts(nblkrows_used), stat=stat) IF (stat .NE. 0) & DBCSR_ABORT("Could not allocate memory for left row counts") ! The summation could be done prow-locally but it would ! complicate the pre-row eps calculation. ALLOCATE (total_row_counts(nblkrows_used), stat=stat) IF (stat .NE. 0) & DBCSR_ABORT("Could not allocate memory for left row counts") ! Each prow member matrix (npcols * row_images) counts the ! blocks present in each of its rows. total_row_counts(:) = 0 DO left_row_image = 1, left_row_nimages DO left_col_image = 1, left_col_nimages list_indexing = & left_set%mats(left_row_image, left_col_image)%list_indexing IF (careful_mod) THEN IF (list_indexing) THEN IF ((left_set%mats(left_row_image, left_col_image)%nblks)*3 .NE. & SIZE(left_set%mats(left_row_image, left_col_image)%coo_l)) & DBCSR_ABORT("Row count mismatch") ELSE IF (nblkrows_used + 1 .NE. SIZE(left_set%mats(left_row_image, left_col_image)%row_p)) & DBCSR_ABORT("Row count mismatch") END IF END IF IF (list_indexing) THEN CALL count_bins( & left_set%mats(left_row_image, left_col_image)%nblks, & left_set%mats(left_row_image, left_col_image)%coo_l(1::3), & nblkrows_used, row_counts) ELSE CALL dbcsr_count_row_index( & left_set%mats(left_row_image, left_col_image)%row_p, & row_counts, nblkrows_used) END IF total_row_counts(:) = total_row_counts(:) & + row_counts(:) END DO END DO ! The counted blocks are then summed up CALL mp_sum(total_row_counts, dbcsr_mp_my_row_group(product_mp_obj)) ! and used to determine the maximum per-block epsilon. filter_eps_sp = REAL(filter_eps, KIND=KIND(row_max_epss)) !$OMP PARALLEL DO DEFAULT (NONE) & !$OMP SHARED(nblkrows_used,row_max_epss,filter_eps_sp,& !$OMP total_row_counts) DO row = 1, nblkrows_used row_max_epss(row) & = (filter_eps_sp & /REAL(MAX(1, total_row_counts(row)), KIND=KIND(row_max_epss)))**2 END DO !$OMP END PARALLEL DO ! DEALLOCATE (row_counts) DEALLOCATE (total_row_counts) END IF per_row_eps ! ! The main transfer loop goes through the virtual rows/columns. ! The number of steps may be smaller if the grid dimension is very ! non-optimal (both left column images and right row images are > ! 1). min_nimages = MIN(left_col_nimages, right_row_nimages) nvirt_k = left_npcols*left_col_nimages nsteps_k = nvirt_k/min_nimages ! ! Translate the all_sizes to account for pre-distribution. This ! is just done to simplify lookups. ALLOCATE (left_sizes(2, 0:left_nprows*left_row_nimages - 1, 0:nvirt_k - 1)) left_sizes = -1 DO left_src_vcol = 0, left_col_nimages*left_npcols - 1 DO left_src_vrow = 0, left_row_nimages*left_nprows - 1 ! Calculate what was shifted. The left_src_v{row,col} are ! the "source" rows/columns; the left_dst are the shifted ! targets where the data was placed in make_images. CALL image_calculator(left_set%image_dist, & prow=left_dst_prow, pcol=left_dst_pcol, & rowi=left_dst_irow, coli=left_dst_icol, & myvprow=left_src_vrow, myvpcol=left_src_vcol, & shifting='l') left_dst_p = left_pgrid(left_dst_prow, left_dst_pcol) left_sizes(idata, left_src_vrow, left_src_vcol) = & all_sizes( & idata + ileft, left_dst_irow, left_dst_icol, left_dst_p) left_sizes(imeta, left_src_vrow, left_src_vcol) = & all_sizes( & imeta + ileft, left_dst_irow, left_dst_icol, left_dst_p) END DO END DO ! ALLOCATE (right_sizes(2, 0:nvirt_k - 1, 0:right_npcols*right_col_nimages - 1)) right_sizes = -1 DO right_src_vcol = 0, right_col_nimages*right_npcols - 1 DO right_src_vrow = 0, right_row_nimages*right_nprows - 1 ! Calculate what was shifted. The right_src_v{row,col} are ! the "source" rows/columns; the right_dst are the shifted ! targets where the data was placed in make_images. CALL image_calculator(right_set%image_dist, & prow=right_dst_prow, pcol=right_dst_pcol, & rowi=right_dst_irow, coli=right_dst_icol, & myvprow=right_src_vrow, myvpcol=right_src_vcol, & shifting='r') right_dst_p = right_pgrid(right_dst_prow, right_dst_pcol) right_sizes(idata, right_src_vrow, right_src_vcol) = & all_sizes( & idata + iright, right_dst_irow, right_dst_icol, right_dst_p) right_sizes(imeta, right_src_vrow, right_src_vcol) = & all_sizes( & imeta + iright, right_dst_irow, right_dst_icol, right_dst_p) END DO END DO ! ! Setup product work areas left_max_nze = MAXVAL(all_sizes(idata + ileft, :, :, :)) left_max_nblks = MAXVAL(all_sizes(imeta + ileft, :, :, :)) right_max_nze = MAXVAL(all_sizes(idata + iright, :, :, :)) right_max_nblks = MAXVAL(all_sizes(imeta + iright, :, :, :)) !! ! Evaluate sizes for workspaces IF (.NOT. keep_sparsity) THEN IF (use_acc()) THEN size_guess_init = product_matrix_size_guess(left_set%mats(1, 1), right_set%mats(1, 1), product_matrix, & left_max_nze, right_max_nze, & left_col_nimages, right_row_nimages, & nthreads) ELSE size_guess_init = 1 END IF END IF ithread = 0 !$OMP PARALLEL DEFAULT(NONE) & !$OMP PRIVATE (i, size_guess, ithread) & !$OMP SHARED (product_matrix, left_max_nze, right_max_nze) & !$OMP SHARED (left_set, right_set, & !$OMP left_col_nimages, right_row_nimages) & !$OMP SHARED (nthreads, keep_sparsity, mynode, size_guess_init) ! !$ ithread = OMP_GET_THREAD_NUM() ! The work arrays have to be setup (actually, not quite sure). i = ithread + 1 size_guess = product_matrix%wms(i)%datasize ! Should be minimal IF (.NOT. keep_sparsity) THEN size_guess = MAX(size_guess, size_guess_init) END IF CALL dbcsr_data_ensure_size(product_matrix%wms(i)%data_area, & size_guess) CALL dbcsr_data_set_size_referenced(product_matrix%wms(i)%data_area, & product_matrix%wms(i)%datasize) ! XXXXXXX a quick fix right now, allocation with size 1 might actually not be needed at all, ! but something expects this to be associated CALL ensure_array_size(product_matrix%wms(i)%row_i, ub=1) CALL ensure_array_size(product_matrix%wms(i)%col_i, ub=1) CALL ensure_array_size(product_matrix%wms(i)%blk_p, ub=1) !$OMP END PARALLEL ! update capacity of memory-pools, +1 for the dense case IF (ASSOCIATED(memtype_abpanel_1%pool)) & CALL dbcsr_mempool_limit_capacity(memtype_abpanel_1%pool, & capacity=left_row_mult*left_col_nimages + right_row_nimages*right_col_mult + 1) IF (ASSOCIATED(memtype_abpanel_2%pool)) & CALL dbcsr_mempool_limit_capacity(memtype_abpanel_2%pool, & capacity=left_row_mult*left_col_nimages + right_row_nimages*right_col_mult + 1) IF (use_acc()) THEN ! enumerate the blocksizes to keep the following 2D-arrays small. CALL enumerate_blk_sizes(right_set%mats(1, 1)%row_blk_size%low%data, & dbcsr_max_row_size(right_set%mats(1, 1)), & row_blk_sizes2enum, enum2row_blk_sizes) CALL enumerate_blk_sizes(right_set%mats(1, 1)%col_blk_size%low%data, & dbcsr_max_col_size(right_set%mats(1, 1)), & col_blk_sizes2enum, enum2col_blk_sizes) END IF ! ! Setup the left buffer matrices ! CALL buffer_matrices_ensure_size(left_set, index_size=left_max_nblks, & data_size=left_max_nze) CALL setup_buffer_matrices(left_buffer_2, left_row_mult, left_col_nimages, & left_set%mats(1, 1), index_size=left_max_nblks, & data_size=left_max_nze) IF (otf_filtering) THEN ALLOCATE (left_norms(left_max_nblks), stat=stat) IF (stat .NE. 0) & DBCSR_ABORT("Could not allocate memory for left norms") IF (stat .NE. 0) otf_filtering = .FALSE. END IF left_buffer_calc => left_set left_buffer_comm => left_buffer_2 ALLOCATE (left_data_sr(left_col_nimages)) ALLOCATE (left_index_sr(left_col_nimages)) ALLOCATE (left_data_rr(left_col_nimages)) ALLOCATE (left_index_rr(left_col_nimages)) left_data_sr = mp_request_null left_data_rr = mp_request_null left_index_sr = mp_request_null left_index_rr = mp_request_null ! Setup buffers for right matrix CALL buffer_matrices_ensure_size(right_set, index_size=right_max_nblks, & data_size=right_max_nze) CALL setup_buffer_matrices(right_buffer_2, right_row_nimages, right_col_mult, & right_set%mats(1, 1), index_size=right_max_nblks, data_size=right_max_nze) IF (otf_filtering) THEN ALLOCATE (right_norms(right_max_nblks), stat=stat) IF (stat .NE. 0) & DBCSR_WARN("Could not allocate memory for right norms") IF (stat .NE. 0) otf_filtering = .FALSE. END IF right_buffer_calc => right_set right_buffer_comm => right_buffer_2 ALLOCATE (right_data_sr(right_row_nimages)) ALLOCATE (right_index_sr(right_row_nimages)) ALLOCATE (right_data_rr(right_row_nimages)) ALLOCATE (right_index_rr(right_row_nimages)) right_data_sr = mp_request_null right_data_rr = mp_request_null right_index_sr = mp_request_null right_index_rr = mp_request_null ! ALLOCATE (m_sizes(dbcsr_nblkrows_local(product_matrix))) CALL local_filter(array_data(product_matrix%row_blk_size), array_size(product_matrix%local_rows), & array_data(product_matrix%local_rows), m_sizes) ALLOCATE (n_sizes(dbcsr_nblkcols_local(product_matrix))) CALL local_filter(array_data(product_matrix%col_blk_size), array_size(product_matrix%local_cols), & array_data(product_matrix%local_cols), n_sizes) ! !$OMP PARALLEL & !$OMP DEFAULT (NONE) & !$OMP SHARED (left_buffer_comm, right_buffer_comm, product_matrix,& !$OMP keep_sparsity, filter_eps, row_max_epss, multrec, nthreads, & !$OMP right_data_sr, right_data_rr, left_data_sr, left_data_rr,& !$OMP right_index_sr, right_index_rr, left_index_sr, left_index_rr,& !$OMP m_sizes, n_sizes, keep_product_data), & !$OMP PRIVATE(ithread) ithread = 0 !$ ithread = OMP_GET_THREAD_NUM() ALLOCATE (multrec(ithread)%p) CALL dbcsr_mm_multrec_init(multrec(ithread)%p, & product=product_matrix, & keep_sparsity=keep_sparsity, & eps=filter_eps, & row_max_epss=row_max_epss, & block_estimate=MAX(product_matrix%nblks, & left_buffer_comm%mats(1, 1)%nblks, & right_buffer_comm%mats(1, 1)%nblks)/nthreads, & right_row_blk_size=array_data(right_buffer_comm%mats(1, 1)%row_blk_size), & m_sizes=m_sizes, n_sizes=n_sizes, & keep_product_data=keep_product_data) !$OMP END PARALLEL ! ! Setup indexing CALL setup_rec_index_2d(left_set, left_row_nimages, left_col_nimages) CALL setup_rec_index_2d(right_set, right_row_nimages, right_col_nimages) ! ! Setup the send/receive data pointers CALL dbcsr_data_init(left_data_sp) CALL dbcsr_data_init(left_data_rp) CALL dbcsr_data_init(right_data_sp) CALL dbcsr_data_init(right_data_rp) CALL dbcsr_data_new(left_data_sp, data_type) CALL dbcsr_data_new(left_data_rp, data_type) CALL dbcsr_data_new(right_data_sp, data_type) CALL dbcsr_data_new(right_data_rp, data_type) ! Setup transpose stackbuffers IF (use_acc()) THEN CALL dbcsr_data_init(trs_stackbuf_1) CALL dbcsr_data_init(trs_stackbuf_2) CALL dbcsr_data_new(trs_stackbuf_1, data_type=dbcsr_type_int_4, & data_size=2*right_max_nblks, memory_type=memtype_trsbuffer_1) CALL dbcsr_data_new(trs_stackbuf_2, data_type=dbcsr_type_int_4, & data_size=2*right_max_nblks, memory_type=memtype_trsbuffer_2) trs_stackbuf_calc => trs_stackbuf_1 trs_stackbuf_comm => trs_stackbuf_2 END IF ! ! Reset indices for virtual images v_ki_right = 0 v_ki_left = 0 ! ! Here is the main loop. ! ! In the first loop iteration, the data is fetched from the ! sources. In the remaining iterations, the data are exchanged ! among neighbors. In the last loop only calculations take place. ! CALL timeset(routineN//"_loop", handle1) ! grouped_k_index: DO metronome = 0, nvirt_k - 1 ! Wait for right matrix transfer completion. Wait in all but ! the first loop iteration. CALL timeset(routineN//"_metrocomm1", handle2) wait_right: IF (v_ki_right .EQ. right_row_nimages) THEN ! Reset index v_ki_right = 0 IF (debug_mod) WRITE (*, '(1X,A)') routineN//" waiting for right" ! CALL mp_waitall(right_data_sr) CALL mp_waitall(right_data_rr) CALL mp_waitall(right_index_sr) CALL mp_waitall(right_index_rr) ! ! Repoint indices of right matrices DO v_ki = 0, right_row_nimages - 1 CALL dbcsr_repoint_index(right_buffer_calc%mats(v_ki + 1, 1)) right_buffer_calc%mats(v_ki + 1, 1)%valid = .TRUE. END DO END IF wait_right CALL timestop(handle2) ! ! Right matrix transfer. Transfer in all but the last loop ! iteration. xfer_right: IF (v_ki_right .EQ. 0 .AND. metronome + right_row_nimages .LT. nvirt_k) THEN DO v_ki = 0, right_row_nimages - 1 ! Calculate the process to send to. It's the virtual ! process row -min_nimages up (i.e., smaller row number) ! from me. CALL image_calculator(right_set%image_dist, & prow=right_send_prow, rowi=right_send_irow, & ! output pcol=right_send_pcol, coli=right_send_icol, & ! output vprow=right_send_vrow, vpcol=right_send_vcol, & ! output ! myvprow goes through all of my (process row) images myvprow=v_ki + right_myfirstvrow, & myvpcol=right_myfirstvcol, & ! nothing happens in the columns vprow_shift=-right_row_nimages, & shifting='0') ! Calculate which data I send. CALL image_calculator(right_set%image_dist, & prow=right_dst_prow, rowi=right_dst_irow, & pcol=right_dst_pcol, coli=right_dst_icol, & vprow=right_dst_vrow, vpcol=right_dst_vcol, & ! myvprows goes through all of my (process row) images myvprow=v_ki + right_myfirstvrow, & myvpcol=right_myfirstvcol, & ! nothing happens in the columns vprow_shift=metronome, & ! This is with relative shifting. shifting='R') right_dst_p = right_pgrid(right_dst_prow, right_dst_pcol) CALL dbcsr_data_set_pointer( & area=right_data_sp, & rsize=right_sizes(idata, right_dst_vrow, right_dst_vcol), & csize=1, & pointee=right_buffer_calc%mats(v_ki + 1, 1)%data_area) right_index_sp => right_buffer_calc%mats( & v_ki + 1, 1 & )%index(1: & right_sizes(imeta, right_dst_vrow, right_dst_vcol)) ! ! Calculate the process to receive from CALL image_calculator(right_set%image_dist, & prow=right_recv_prow, rowi=right_recv_irow, & pcol=right_recv_pcol, coli=right_recv_icol, & vprow=right_recv_vrow, vpcol=right_recv_vcol, & myvprow=v_ki + right_myfirstvrow, & myvpcol=right_myfirstvcol, & vprow_shift=+right_row_nimages, & ! just the opposite as "send to" shifting='0') ! Calculate which data I receive CALL image_calculator(right_set%image_dist, & prow=right_src_prow, rowi=right_src_irow, & pcol=right_src_pcol, coli=right_src_icol, & vprow=right_src_vrow, vpcol=right_src_vcol, & myvprow=v_ki + right_myfirstvrow, & myvpcol=right_myfirstvcol, & ! receive window moves with the metronome vprow_shift=metronome + right_row_nimages, & shifting='R') ! IF (use_acc()) THEN CALL timeset(routineN//"_acc_sync_right", handle3) CALL acc_event_synchronize(right_buffer_comm%mats(v_ki + 1, 1)%data_area%d%acc_ready) CALL timestop(handle3) END IF right_src_p = right_pgrid(right_src_prow, right_src_pcol) CALL dbcsr_data_set_pointer( & area=right_data_rp, & rsize=right_sizes(idata, right_src_vrow, right_src_vcol), & csize=1, & pointee=right_buffer_comm%mats(v_ki + 1, 1)%data_area) right_index_rp => right_buffer_comm%mats( & v_ki + 1, 1 & )%index(1: & right_sizes(imeta, right_src_vrow, right_src_vcol)) ! right_send_p = right_pgrid(right_send_prow, right_send_pcol) right_recv_p = right_pgrid(right_recv_prow, right_recv_pcol) ! These are column-communicator relative IF (dbcsr_mp_has_subgroups(right_mp_obj)) THEN right_send_p = right_send_prow right_recv_p = right_recv_prow grp = dbcsr_mp_my_col_group(right_mp_obj) ELSE grp = dbcsr_mp_group(right_mp_obj) END IF ! CALL timeset(routineN//"_metrocomm2", handle2) CALL dbcsr_irecv_any(right_data_rp, right_recv_p, & grp, right_data_rr(v_ki + 1), tag=right_src_vrow) CALL mp_irecv(right_index_rp, right_recv_p, & grp, right_index_rr(v_ki + 1), tag=right_src_vrow) CALL dbcsr_isend_any(right_data_sp, right_send_p, & grp, right_data_sr(v_ki + 1), tag=right_dst_vrow) CALL mp_isend(right_index_sp, right_send_p, & grp, right_index_sr(v_ki + 1), tag=right_dst_vrow) dbcsr_mpi_statistics%nexchanged = dbcsr_mpi_statistics%nexchanged + 1 CALL count_mpi_statistics(dbcsr_mpi_statistics%data_size(1, :), & dbcsr_data_get_size(right_data_rp), & data_type_byte, & dbcsr_mpi_statistics%data_size_breakdown(:, :, 1)) CALL timestop(handle2) END DO END IF xfer_right ! ! Wait for left matrix transfer completion. Wait in all but ! the first loop iteration. CALL timeset(routineN//"_metrocomm3", handle2) wait_left: IF (v_ki_left .EQ. left_col_nimages) THEN ! Reset index v_ki_left = 0 IF (debug_mod) WRITE (*, '(1X,A)') routineN//" waiting for left" CALL mp_waitall(left_data_sr) CALL mp_waitall(left_data_rr) CALL mp_waitall(left_index_sr) CALL mp_waitall(left_index_rr) ! ! Repoint indices of left matrices DO v_ki = 0, left_col_nimages - 1 CALL dbcsr_repoint_index(left_buffer_calc%mats(1, v_ki + 1)) left_buffer_calc%mats(1, v_ki + 1)%valid = .TRUE. END DO END IF wait_left CALL timestop(handle2) ! ! Left matrix transfer. Transfer in all but the last processor images. xfer_left: IF (v_ki_left .EQ. 0 .AND. metronome + left_col_nimages .LT. nvirt_k) THEN DO v_ki = 0, left_col_nimages - 1 ! Calculate the process to send to. CALL image_calculator(left_set%image_dist, & prow=left_send_prow, rowi=left_send_irow, & ! output pcol=left_send_pcol, coli=left_send_icol, & ! output vprow=left_send_vrow, vpcol=left_send_vcol, & ! output myvprow=left_myfirstvrow, & ! nothing happens in the rows ! go through all my column images myvpcol=v_ki + left_myfirstvcol, & ! send to process left_col_nimages left in the grid vpcol_shift=-left_col_nimages, & shifting='0') ! Calculate which data I send. CALL image_calculator(left_set%image_dist, & prow=left_dst_prow, rowi=left_dst_irow, & pcol=left_dst_pcol, coli=left_dst_icol, & vprow=left_dst_vrow, vpcol=left_dst_vcol, & myvprow=left_myfirstvrow, & ! go through all my column images myvpcol=v_ki + left_myfirstvcol, & vpcol_shift=metronome, & ! This is with relative shifting. shifting='L') ! left_dst_p = left_pgrid(left_dst_prow, left_dst_pcol) CALL dbcsr_data_set_pointer( & area=left_data_sp, & rsize=left_sizes(idata, left_dst_vrow, left_dst_vcol), & csize=1, & pointee=left_buffer_calc%mats(1, v_ki + 1)%data_area) left_index_sp => left_buffer_calc%mats( & 1, v_ki + 1 & )%index(1: & left_sizes(imeta, left_dst_vrow, left_dst_vcol)) ! ! Calculate the process to receive from CALL image_calculator(left_set%image_dist, & prow=left_recv_prow, rowi=left_recv_irow, & pcol=left_recv_pcol, coli=left_recv_icol, & vprow=left_recv_vrow, vpcol=left_recv_vcol, & myvprow=left_myfirstvrow, & myvpcol=v_ki + left_myfirstvcol, & vpcol_shift=+left_col_nimages, & ! just the opposite as "send to" shifting='0') ! Calculate which data I receive CALL image_calculator(left_set%image_dist, & prow=left_src_prow, rowi=left_src_irow, & pcol=left_src_pcol, coli=left_src_icol, & vprow=left_src_vrow, vpcol=left_src_vcol, & myvprow=left_myfirstvrow, & myvpcol=v_ki + left_myfirstvcol, & ! receive window moves with the metronome vpcol_shift=metronome + left_col_nimages, & shifting='L') ! IF (use_acc()) THEN CALL timeset(routineN//"_acc_sync_left", handle3) CALL acc_event_synchronize(left_buffer_comm%mats(1, v_ki + 1)%data_area%d%acc_ready) CALL timestop(handle3) END IF left_src_p = left_pgrid(left_src_prow, left_src_pcol) CALL dbcsr_data_set_pointer( & area=left_data_rp, & rsize=left_sizes(idata, left_src_vrow, left_src_vcol), & csize=1, & pointee=left_buffer_comm%mats(1, v_ki + 1)%data_area) left_index_rp => left_buffer_comm%mats( & 1, v_ki + 1 & )%index(1: & left_sizes(imeta, left_src_vrow, left_src_vcol)) ! left_send_p = left_pgrid(left_send_prow, left_send_pcol) left_recv_p = left_pgrid(left_recv_prow, left_recv_pcol) ! These are column-communicator relative IF (dbcsr_mp_has_subgroups(left_mp_obj)) THEN left_send_p = left_send_pcol left_recv_p = left_recv_pcol grp = dbcsr_mp_my_row_group(left_mp_obj) ELSE grp = dbcsr_mp_group(left_mp_obj) END IF ! CALL timeset(routineN//"_metrocomm4", handle2) CALL dbcsr_irecv_any(left_data_rp, left_recv_p, & grp, left_data_rr(v_ki + 1), tag=left_src_vcol) CALL mp_irecv(left_index_rp, left_recv_p, & grp, left_index_rr(v_ki + 1), tag=left_src_vcol) CALL dbcsr_isend_any(left_data_sp, left_send_p, & grp, left_data_sr(v_ki + 1), tag=left_dst_vcol) CALL mp_isend(left_index_sp, left_send_p, & grp, left_index_sr(v_ki + 1), tag=left_dst_vcol) dbcsr_mpi_statistics%nexchanged = dbcsr_mpi_statistics%nexchanged + 1 CALL count_mpi_statistics(dbcsr_mpi_statistics%data_size(2, :), & dbcsr_data_get_size(left_data_rp), & data_type_byte, & dbcsr_mpi_statistics%data_size_breakdown(:, :, 2)) CALL timestop(handle2) END DO END IF xfer_left ! ! Do multiplication v_ki_left = v_ki_left + 1 v_ki_right = v_ki_right + 1 IF (debug_mod) THEN CALL dbcsr_print(left_buffer_calc%mats(1, v_ki_left), nodata=.TRUE.) CALL dbcsr_print(right_buffer_calc%mats(v_ki_right, 1), nodata=.TRUE.) END IF ! ! from here the code for dbcsr_mm_driver_inner_init was taken ! IF (.FALSE.) WRITE (*, *) routineN//" TICK", metronome ! Since the right matrix is shifted vertically, the ! received data always has different notions of "local ! rows". Thus the local_rows and global_rows must be ! recalculated. CALL dbcsr_reset_vlocals(right_buffer_calc%mats(v_ki_right, 1), & right_set%image_dist) CALL dbcsr_reset_vlocals(left_buffer_calc%mats(1, v_ki_left), & left_set%image_dist) ! CALL ensure_array_size(k_sizes, ub=array_size(right_buffer_calc%mats(v_ki_right, 1)%local_rows)) CALL local_filter(array_data(right_buffer_calc%mats(v_ki_right, 1)%row_blk_size), & array_size(right_buffer_calc%mats(v_ki_right, 1)%local_rows), & array_data(right_buffer_calc%mats(v_ki_right, 1)%local_rows), & k_sizes) ! IF (use_acc()) THEN CALL dbcsr_data_host2dev(left_buffer_calc%mats(1, v_ki_left)%data_area) CALL dbcsr_data_host2dev(right_buffer_calc%mats(v_ki_right, 1)%data_area) CALL acc_transpose_blocks(right_buffer_calc%mats(v_ki_right, 1), trs_stackbuf_calc, & k_sizes, n_sizes, & row_blk_sizes2enum, enum2row_blk_sizes, & col_blk_sizes2enum, enum2col_blk_sizes) END IF ! Sets the local right-matrix columns IF (otf_filtering) THEN left_norms(:) = huge_norm right_norms(:) = huge_norm CALL calculate_norms(right_buffer_calc%mats(v_ki_right, 1), & right_norms, k_sizes, n_sizes) CALL calculate_norms(left_buffer_calc%mats(1, v_ki_left), & left_norms, m_sizes, k_sizes) END IF ! Wait for left and right buffers transfer to device before proceeding IF (use_acc()) THEN CALL timeset(routineN//"_sync_h2d", handle2) CALL acc_device_synchronize() CALL timestop(handle2) END IF ! flop_single = 0 threads_finished = 0 !$OMP PARALLEL DEFAULT (NONE) & !$OMP SHARED (left_buffer_calc, right_buffer_calc, & !$OMP v_ki_left, v_ki_right, handle2, handle3, & !$OMP product_matrix, multrec,& !$OMP filter_eps, right_norms, left_norms, row_max_epss, & !$OMP keep_sparsity,threads_finished, & !$OMP right_data_sr, right_data_rr, right_index_sr, right_index_rr, & !$OMP left_data_sr, left_data_rr, left_index_sr, left_index_rr, & !$OMP dbcsr_cfg, k_sizes, nvirt_k, metronome) & !$OMP PRIVATE (ithread,nthreads,threads_finished_read) & !$OMP REDUCTION (+: flop_single) ithread = 0; nthreads = 1 !$ ithread = omp_get_thread_num(); nthreads = omp_get_num_threads() CALL timeset(routineN//"_multrec", handle2) CALL dbcsr_mm_multrec_multiply(multrec(ithread)%p, & left=left_buffer_calc%mats(1, v_ki_left), & right=right_buffer_calc%mats(v_ki_right, 1), & flop=flop_single, & a_norms=left_norms, b_norms=right_norms, & k_sizes=k_sizes) IF (metronome == nvirt_k - 1) THEN CALL timeset(routineN//"_multrec_finalize", handle3) CALL dbcsr_mm_multrec_finalize(multrec(ithread)%p) DEALLOCATE (multrec(ithread)%p) CALL timestop(handle3) END IF !$OMP ATOMIC threads_finished = threads_finished + 1 IF (dbcsr_cfg%use_comm_thread%val .AND. (ithread .EQ. 0)) THEN DO ! requires OMP 3.1 (e.g. gcc >=4.7), for correctness, otherwise we keep fingers crossed #if defined _OPENMP && _OPENMP >= 200711 !$OMP ATOMIC READ #endif threads_finished_read = threads_finished IF (threads_finished_read .EQ. nthreads) EXIT CALL mp_testany(right_data_sr) CALL mp_testany(right_data_rr) CALL mp_testany(left_data_sr) CALL mp_testany(left_data_rr) CALL mp_testany(right_index_sr) CALL mp_testany(right_index_rr) CALL mp_testany(left_index_sr) CALL mp_testany(left_index_rr) END DO END IF !$OMP BARRIER CALL timestop(handle2) !$OMP END PARALLEL flop_total = flop_total + flop_single ! ! Move to the next images IF (v_ki_left .EQ. left_col_nimages) THEN CALL dbcsr_switch(left_buffer_calc, left_buffer_comm) END IF IF (v_ki_right .EQ. right_row_nimages) THEN CALL dbcsr_switch(right_buffer_calc, right_buffer_comm) CALL dbcsr_switch(trs_stackbuf_calc, trs_stackbuf_comm) END IF END DO grouped_k_index CALL timestop(handle1) CALL m_memory(mem) max_memory = MAX(max_memory, REAL(mem)) IF (use_acc()) THEN CALL dbcsr_data_release(trs_stackbuf_1) CALL dbcsr_data_release(trs_stackbuf_2) DEALLOCATE (row_blk_sizes2enum, enum2row_blk_sizes) DEALLOCATE (col_blk_sizes2enum, enum2col_blk_sizes) END IF IF (ALLOCATED(right_norms)) THEN DEALLOCATE (right_norms) END IF IF (ALLOCATED(left_norms)) THEN DEALLOCATE (left_norms) END IF IF (ALLOCATED(row_max_epss)) THEN DEALLOCATE (row_max_epss) END IF ! CALL dbcsr_destroy_array(right_buffer_2) CALL dbcsr_destroy_array(left_buffer_2) DEALLOCATE (my_sizes) ! CALL dbcsr_data_clear_pointer(left_data_sp) CALL dbcsr_data_clear_pointer(left_data_rp) CALL dbcsr_data_clear_pointer(right_data_sp) CALL dbcsr_data_clear_pointer(right_data_rp) CALL dbcsr_data_release(left_data_sp) CALL dbcsr_data_release(left_data_rp) CALL dbcsr_data_release(right_data_sp) CALL dbcsr_data_release(right_data_rp) ! DEALLOCATE (left_data_rr, left_data_sr, left_index_rr, left_index_sr, & right_data_rr, right_data_sr, right_index_rr, right_index_sr) ! ! IF (debug_mod) THEN v_ki = 0 DO i = 1, SIZE(product_matrix%blk_p) v_ki = MAX(v_ki, ABS(product_matrix%blk_p(i))) END DO WRITE (*, *) routineN//" Actual final size", & LOG(REAL(dbcsr_data_get_size(product_matrix%data_area)))/LOG(10.0), & LOG(REAL(v_ki))/LOG(10.0) END IF ! flop = flop_total DEALLOCATE (left_buffer_2, right_buffer_2) DEALLOCATE (m_sizes, n_sizes) IF (ASSOCIATED(k_sizes)) DEALLOCATE (k_sizes) ! CALL timestop(handle) END SUBROUTINE multiply_cannon SUBROUTINE multiply_cannon_g2g(left_set, right_set, product_matrix, & retain_sparsity, & filter_eps, flop, keep_product_data) !! Multiplies two DBCSR matrices !! !! This function is expected to be called only if __DBCSR_ACC_G2G !! is enabled and the data type is FP64. !! !! If __DBCSR_ACC is enabled, norms are calculated on the GPU and !! MPI calls reference buffers on the GPU device. Input matrices !! are copied from host to device only once. For the right matrix, !! transpose kernel is also called only once and the transposed !! matrix is transferred over MPI to neighbors. !! !! If __DBCSR_ACC is not enabled, all calculations are performed on !! the CPU and MPI calls reference host buffers. TYPE(dbcsr_2d_array_type), POINTER :: left_set, right_set !! set of imaged left matrices !! set of imaged right matrices TYPE(dbcsr_type), INTENT(INOUT) :: product_matrix !! DBCSR product matrix LOGICAL, INTENT(IN), OPTIONAL :: retain_sparsity !! retain the sparsity of the existing product matrix; default is no REAL(kind=real_8), INTENT(in), OPTIONAL :: filter_eps INTEGER(KIND=int_8), INTENT(OUT) :: flop !! effective flop LOGICAL, INTENT(IN) :: keep_product_data CHARACTER(len=*), PARAMETER :: routineN = 'multiply_cannon' INTEGER, PARAMETER :: idata = 1, ileft = 0, imeta = 2, & iright = 2 INTEGER :: data_type, data_type_byte, handle, handle1, handle2, handle3, i, ithread, & left_col_image, left_col_mult, left_col_nimages, left_dst_icol, left_dst_irow, & left_dst_p, left_dst_pcol, left_dst_prow, left_dst_vcol, left_dst_vrow, left_max_nblks, & left_max_nze, left_myfirstvcol, left_myfirstvrow, left_mypcol, left_myprow, left_npcols, & left_nprows, left_recv_icol, left_recv_irow, left_recv_p, left_recv_pcol, left_recv_prow, & left_recv_vcol, left_recv_vrow, left_row_image, left_row_mult, left_row_nimages, & left_send_icol, left_send_irow, left_send_p, left_send_pcol, left_send_prow INTEGER :: left_send_vcol, left_send_vrow, left_src_icol, left_src_irow, left_src_p, & left_src_pcol, left_src_prow, left_src_vcol, left_src_vrow, metronome, min_nimages, & mynode, nblkrows_used, nsteps_k, nthreads, numnodes, nvirt_k, & output_unit, right_col_image, right_col_mult, right_col_nimages, right_dst_icol, & right_dst_irow, right_dst_p, right_dst_pcol, right_dst_prow, right_dst_vcol, & right_dst_vrow, right_max_nblks, right_max_nze, right_myfirstvcol, right_myfirstvrow, & right_mypcol, right_myprow, right_npcols, right_nprows, right_recv_icol, right_recv_irow INTEGER :: right_recv_p, right_recv_pcol, right_recv_prow, right_recv_vcol, right_recv_vrow, & right_row_image, right_row_mult, right_row_nimages, right_send_icol, right_send_irow, & right_send_p, right_send_pcol, right_send_prow, right_send_vcol, right_send_vrow, & right_src_icol, right_src_irow, right_src_p, right_src_pcol, right_src_prow, & right_src_vcol, right_src_vrow, row, size_guess, size_guess_init, stat, threads_finished, & threads_finished_read, v_ki, v_ki_left, v_ki_right, max_nblks INTEGER :: left_numnodes, right_numnodes, left_mynode, right_mynode INTEGER :: msglen INTEGER(KIND=int_8) :: flop_single, flop_total, mem INTEGER, ALLOCATABLE, DIMENSION(:) :: row_counts, total_row_counts INTEGER, ALLOCATABLE, DIMENSION(:, :, :) :: left_sizes, my_sizes, right_sizes INTEGER, ALLOCATABLE, DIMENSION(:, :, :, :) :: all_sizes INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_blk_sizes2enum, enum2col_blk_sizes, & enum2row_blk_sizes, m_sizes, n_sizes, & row_blk_sizes2enum, left_index_rp, left_index_sp, & right_index_rp, right_index_sp INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: k_sizes INTEGER, DIMENSION(:, :), POINTER, CONTIGUOUS :: left_pgrid, product_pgrid, right_pgrid INTEGER, SAVE :: mult_id = 0 LOGICAL :: keep_sparsity, list_indexing, & otf_filtering LOGICAL :: copy_left, copy_right REAL(kind=sp), ALLOCATABLE, DIMENSION(:) :: left_norms, right_norms, & row_max_epss REAL(kind=sp) :: filter_eps_sp TYPE(dbcsr_2d_array_type), POINTER :: left_buffer_2, left_buffer_calc, & left_buffer_comm, right_buffer_2, right_buffer_calc, right_buffer_comm TYPE(dbcsr_data_obj) :: left_data_rp, left_data_sp, & right_data_rp, right_data_sp TYPE(dbcsr_data_obj), POINTER :: trs_stackbuf_calc, & trs_stackbuf_comm TYPE(dbcsr_data_obj), TARGET :: trs_stackbuf_1, trs_stackbuf_2 TYPE(dbcsr_data_obj) :: normsbuf, offsetsbuf, nelemsbuf TYPE(dbcsr_mm_multrec_type_p), DIMENSION(:), ALLOCATABLE :: multrec TYPE(dbcsr_mp_obj) :: left_mp_obj, product_mp_obj, & right_mp_obj TYPE(mp_comm_type) :: grp, left_grp, right_grp, mp_group TYPE(mp_request_type), DIMENSION(:), ALLOCATABLE :: left_data_rr, left_data_sr, left_index_rr, & left_index_sr, right_data_rr, right_data_sr, right_index_rr, right_index_sr ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) NULLIFY (trs_stackbuf_calc, trs_stackbuf_comm) NULLIFY (row_blk_sizes2enum, enum2row_blk_sizes) NULLIFY (col_blk_sizes2enum, enum2col_blk_sizes) NULLIFY (k_sizes) ! ALLOCATE (left_buffer_2, right_buffer_2) mult_id = mult_id + 1 IF (PRESENT(retain_sparsity)) THEN keep_sparsity = retain_sparsity ELSE keep_sparsity = .FALSE. END IF otf_filtering = PRESENT(filter_eps) !$OMP PARALLEL DEFAULT (NONE) & !$OMP SHARED (multrec, nthreads, product_matrix) !$OMP MASTER nthreads = 1 !$ nthreads = OMP_GET_NUM_THREADS() IF (.NOT. ASSOCIATED(product_matrix%wms)) & DBCSR_ABORT("Work matrices do not exist") IF (SIZE(product_matrix%wms) .NE. nthreads) & DBCSR_ABORT("Work matrices not correctly sized.") ALLOCATE (multrec(0:nthreads - 1)) !$OMP END MASTER !$OMP END PARALLEL output_unit = default_output_unit flop_total = 0 ! Set up variables data_type = dbcsr_get_data_type(product_matrix) data_type_byte = dbcsr_datatype_sizeof(data_type) left_row_nimages = left_set%image_dist%i%row_decimation left_row_mult = left_set%image_dist%i%row_multiplicity left_col_nimages = left_set%image_dist%i%col_decimation left_col_mult = left_set%image_dist%i%col_multiplicity right_row_nimages = right_set%image_dist%i%row_decimation right_row_mult = right_set%image_dist%i%row_multiplicity right_col_nimages = right_set%image_dist%i%col_decimation right_col_mult = right_set%image_dist%i%col_multiplicity left_mp_obj = dbcsr_distribution_mp(left_set%image_dist%i%main) right_mp_obj = dbcsr_distribution_mp(right_set%image_dist%i%main) product_mp_obj = dbcsr_distribution_mp(product_matrix%dist) numnodes = dbcsr_mp_numnodes(product_mp_obj) mynode = dbcsr_mp_mynode(product_mp_obj) left_nprows = dbcsr_mp_nprows(left_mp_obj) left_npcols = dbcsr_mp_npcols(left_mp_obj) left_myprow = dbcsr_mp_myprow(left_mp_obj) left_mypcol = dbcsr_mp_mypcol(left_mp_obj) left_myfirstvrow = dbcsr_mp_myprow(left_mp_obj)*left_row_nimages left_myfirstvcol = dbcsr_mp_mypcol(left_mp_obj)*left_col_nimages right_nprows = dbcsr_mp_nprows(right_mp_obj) right_npcols = dbcsr_mp_npcols(right_mp_obj) right_myprow = dbcsr_mp_myprow(right_mp_obj) right_mypcol = dbcsr_mp_mypcol(right_mp_obj) right_myfirstvrow = dbcsr_mp_myprow(right_mp_obj)*right_row_nimages right_myfirstvcol = dbcsr_mp_mypcol(right_mp_obj)*right_col_nimages mp_group = dbcsr_mp_group(product_mp_obj) left_pgrid => dbcsr_mp_pgrid(left_mp_obj) right_pgrid => dbcsr_mp_pgrid(right_mp_obj) product_pgrid => dbcsr_mp_pgrid(product_mp_obj) CALL dbcsr_mp_grid_setup(product_mp_obj) CALL dbcsr_mp_grid_setup(left_mp_obj) CALL dbcsr_mp_grid_setup(right_mp_obj) ! ! Dummy checks ! left/right matching IF (left_col_nimages .NE. right_row_mult) & DBCSR_ABORT("Left/Right image mismatch") IF (left_col_mult .NE. right_row_nimages) & DBCSR_ABORT("Left/Right image mismatch") IF (left_col_nimages*left_npcols .NE. right_row_nimages*right_nprows) & DBCSR_ABORT("Left/Right total mismatch") ! product/left matching IF (left_row_mult*dbcsr_mp_nprows(product_mp_obj) .NE. left_row_nimages*left_nprows) & DBCSR_ABORT("Product/Left total mismatch") ! product/left matching IF (right_col_mult*dbcsr_mp_npcols(product_mp_obj) .NE. right_col_nimages*right_npcols) & DBCSR_ABORT("Product/Right total mismatch") ! Limitations IF (left_row_nimages .NE. 1) & DBCSR_ABORT("Product/Left matrix process grid mismatch") IF (left_row_mult .NE. 1) & DBCSR_ABORT("Product/Left matrix process grid mismatch") IF (right_col_nimages .NE. 1) & DBCSR_ABORT("Product/Right matrix process grid mismatch") IF (right_col_mult .NE. 1) & DBCSR_ABORT("Product/Right matrix process grid mismatch") dbcsr_mpi_statistics%nimages = MAX(dbcsr_mpi_statistics%nimages, left_row_nimages*left_col_nimages) dbcsr_mpi_statistics%nimages = MAX(dbcsr_mpi_statistics%nimages, right_row_nimages*right_col_nimages) ! ! Exchange size data ALLOCATE (my_sizes(4, MAX(left_row_nimages, right_row_nimages), & MAX(left_col_nimages, right_col_nimages))) my_sizes(:, :, :) = 0 DO left_row_image = 1, left_row_nimages DO left_col_image = 1, left_col_nimages my_sizes(idata + ileft, left_row_image, left_col_image) & = dbcsr_data_get_size_referenced( & left_set%mats(left_row_image, left_col_image)%data_area) my_sizes(imeta + ileft, left_row_image, left_col_image) = & left_set%mats(left_row_image, left_col_image)%index & (dbcsr_slot_size) END DO END DO DO right_row_image = 1, right_row_nimages DO right_col_image = 1, right_col_nimages my_sizes(idata + iright, right_row_image, right_col_image) & = dbcsr_data_get_size_referenced( & right_set%mats(right_row_image, right_col_image)%data_area) my_sizes(imeta + iright, right_row_image, right_col_image) = & right_set%mats(right_row_image, right_col_image)%index & (dbcsr_slot_size) END DO END DO ALLOCATE (all_sizes(4, LBOUND(my_sizes, 2):UBOUND(my_sizes, 2), & LBOUND(my_sizes, 3):UBOUND(my_sizes, 3), 0:numnodes - 1)) CALL mp_allgather(my_sizes, all_sizes, mp_group) ! ! Count the maximum possible multiplies per row for on-the-fly ! filtering. per_row_eps: IF (.NOT. otf_filtering) THEN ! These arrays must be valid when passed to called subroutines. ALLOCATE (left_norms(0), right_norms(0), row_max_epss(0), stat=stat) IF (stat .NE. 0) & DBCSR_ABORT("Could not allocate memory") ELSE IF (careful_mod) THEN IF (left_set%mats(1, 1)%bcsc) & DBCSR_ABORT("Can not do on-the-fly filtering with CSC-indexed matrices.") END IF IF (dbcsr_has_local_row_index(left_set%mats(1, 1))) THEN nblkrows_used = dbcsr_nblkrows_local(left_set%mats(1, 1)) ELSE nblkrows_used = dbcsr_nblkrows_total(left_set%mats(1, 1)) END IF ALLOCATE (row_max_epss(nblkrows_used), stat=stat) IF (stat .NE. 0) & DBCSR_ABORT("Could not allocate memory for left epsilons") ALLOCATE (row_counts(nblkrows_used), stat=stat) IF (stat .NE. 0) & DBCSR_ABORT("Could not allocate memory for left row counts") ! The summation could be done prow-locally but it would ! complicate the pre-row eps calculation. ALLOCATE (total_row_counts(nblkrows_used), stat=stat) IF (stat .NE. 0) & DBCSR_ABORT("Could not allocate memory for left row counts") ! Each prow member matrix (npcols * row_images) counts the ! blocks present in each of its rows. total_row_counts(:) = 0 DO left_row_image = 1, left_row_nimages DO left_col_image = 1, left_col_nimages list_indexing = & left_set%mats(left_row_image, left_col_image)%list_indexing IF (careful_mod) THEN IF (list_indexing) THEN IF ((left_set%mats(left_row_image, left_col_image)%nblks)*3 .NE. & SIZE(left_set%mats(left_row_image, left_col_image)%coo_l)) & DBCSR_ABORT("Row count mismatch") ELSE IF (nblkrows_used + 1 .NE. SIZE(left_set%mats(left_row_image, left_col_image)%row_p)) & DBCSR_ABORT("Row count mismatch") END IF END IF IF (list_indexing) THEN CALL count_bins( & left_set%mats(left_row_image, left_col_image)%nblks, & left_set%mats(left_row_image, left_col_image)%coo_l(1::3), & nblkrows_used, row_counts) ELSE CALL dbcsr_count_row_index( & left_set%mats(left_row_image, left_col_image)%row_p, & row_counts, nblkrows_used) END IF total_row_counts(:) = total_row_counts(:) & + row_counts(:) END DO END DO ! The counted blocks are then summed up CALL mp_sum(total_row_counts, dbcsr_mp_my_row_group(product_mp_obj)) ! and used to determine the maximum per-block epsilon. filter_eps_sp = REAL(filter_eps, KIND=KIND(row_max_epss)) !$OMP PARALLEL DO DEFAULT (NONE) & !$OMP SHARED(nblkrows_used,row_max_epss,filter_eps_sp,& !$OMP total_row_counts) DO row = 1, nblkrows_used row_max_epss(row) & = (filter_eps_sp & /REAL(MAX(1, total_row_counts(row)), KIND=KIND(row_max_epss)))**2 END DO !$OMP END PARALLEL DO ! DEALLOCATE (row_counts) DEALLOCATE (total_row_counts) END IF per_row_eps ! ! The main transfer loop goes through the virtual rows/columns. ! The number of steps may be smaller if the grid dimension is very ! non-optimal (both left column images and right row images are > ! 1). min_nimages = MIN(left_col_nimages, right_row_nimages) nvirt_k = left_npcols*left_col_nimages nsteps_k = nvirt_k/min_nimages ! ! Translate the all_sizes to account for pre-distribution. This ! is just done to simplify lookups. ALLOCATE (left_sizes(2, 0:left_nprows*left_row_nimages - 1, 0:nvirt_k - 1)) left_sizes = -1 DO left_src_vcol = 0, left_col_nimages*left_npcols - 1 DO left_src_vrow = 0, left_row_nimages*left_nprows - 1 ! Calculate what was shifted. The left_src_v{row,col} are ! the "source" rows/columns; the left_dst are the shifted ! targets where the data was placed in make_images. CALL image_calculator(left_set%image_dist, & prow=left_dst_prow, pcol=left_dst_pcol, & rowi=left_dst_irow, coli=left_dst_icol, & myvprow=left_src_vrow, myvpcol=left_src_vcol, & shifting='l') left_dst_p = left_pgrid(left_dst_prow, left_dst_pcol) left_sizes(idata, left_src_vrow, left_src_vcol) = & all_sizes( & idata + ileft, left_dst_irow, left_dst_icol, left_dst_p) left_sizes(imeta, left_src_vrow, left_src_vcol) = & all_sizes( & imeta + ileft, left_dst_irow, left_dst_icol, left_dst_p) END DO END DO ! ALLOCATE (right_sizes(2, 0:nvirt_k - 1, 0:right_npcols*right_col_nimages - 1)) right_sizes = -1 DO right_src_vcol = 0, right_col_nimages*right_npcols - 1 DO right_src_vrow = 0, right_row_nimages*right_nprows - 1 ! Calculate what was shifted. The right_src_v{row,col} are ! the "source" rows/columns; the right_dst are the shifted ! targets where the data was placed in make_images. CALL image_calculator(right_set%image_dist, & prow=right_dst_prow, pcol=right_dst_pcol, & rowi=right_dst_irow, coli=right_dst_icol, & myvprow=right_src_vrow, myvpcol=right_src_vcol, & shifting='r') right_dst_p = right_pgrid(right_dst_prow, right_dst_pcol) right_sizes(idata, right_src_vrow, right_src_vcol) = & all_sizes( & idata + iright, right_dst_irow, right_dst_icol, right_dst_p) right_sizes(imeta, right_src_vrow, right_src_vcol) = & all_sizes( & imeta + iright, right_dst_irow, right_dst_icol, right_dst_p) END DO END DO ! ! Setup product work areas left_max_nze = MAXVAL(all_sizes(idata + ileft, :, :, :)) left_max_nblks = MAXVAL(all_sizes(imeta + ileft, :, :, :)) right_max_nze = MAXVAL(all_sizes(idata + iright, :, :, :)) right_max_nblks = MAXVAL(all_sizes(imeta + iright, :, :, :)) !! ! Evaluate sizes for workspaces IF (.NOT. keep_sparsity) THEN IF (use_acc()) THEN size_guess_init = product_matrix_size_guess(left_set%mats(1, 1), right_set%mats(1, 1), product_matrix, & left_max_nze, right_max_nze, & left_col_nimages, right_row_nimages, & nthreads) ELSE size_guess_init = 1 END IF END IF ithread = 0 !$OMP PARALLEL DEFAULT(NONE) & !$OMP PRIVATE (i, size_guess, ithread) & !$OMP SHARED (product_matrix, left_max_nze, right_max_nze) & !$OMP SHARED (left_set, right_set, & !$OMP left_col_nimages, right_row_nimages) & !$OMP SHARED (nthreads, keep_sparsity, mynode, size_guess_init) ! !$ ithread = OMP_GET_THREAD_NUM() ! The work arrays have to be setup (actually, not quite sure). i = ithread + 1 size_guess = product_matrix%wms(i)%datasize ! Should be minimal IF (.NOT. keep_sparsity) THEN size_guess = MAX(size_guess, size_guess_init) END IF CALL dbcsr_data_ensure_size(product_matrix%wms(i)%data_area, & size_guess) CALL dbcsr_data_set_size_referenced(product_matrix%wms(i)%data_area, & product_matrix%wms(i)%datasize) ! XXXXXXX a quick fix right now, allocation with size 1 might actually not be needed at all, ! but something expects this to be associated CALL ensure_array_size(product_matrix%wms(i)%row_i, ub=1) CALL ensure_array_size(product_matrix%wms(i)%col_i, ub=1) CALL ensure_array_size(product_matrix%wms(i)%blk_p, ub=1) !$OMP END PARALLEL ! update capacity of memory-pools, +1 for the dense case IF (ASSOCIATED(memtype_abpanel_1%pool)) & CALL dbcsr_mempool_limit_capacity(memtype_abpanel_1%pool, & capacity=left_row_mult*left_col_nimages + right_row_nimages*right_col_mult + 1) IF (ASSOCIATED(memtype_abpanel_2%pool)) & CALL dbcsr_mempool_limit_capacity(memtype_abpanel_2%pool, & capacity=left_row_mult*left_col_nimages + right_row_nimages*right_col_mult + 1) IF (use_acc()) THEN ! enumerate the blocksizes to keep the following 2D-arrays small. CALL enumerate_blk_sizes(right_set%mats(1, 1)%row_blk_size%low%data, & dbcsr_max_row_size(right_set%mats(1, 1)), & row_blk_sizes2enum, enum2row_blk_sizes) CALL enumerate_blk_sizes(right_set%mats(1, 1)%col_blk_size%low%data, & dbcsr_max_col_size(right_set%mats(1, 1)), & col_blk_sizes2enum, enum2col_blk_sizes) END IF ! Save col and row communicators IF (dbcsr_mp_has_subgroups(right_mp_obj)) THEN right_grp = dbcsr_mp_my_col_group(right_mp_obj) ELSE right_grp = dbcsr_mp_group(right_mp_obj) END IF IF (dbcsr_mp_has_subgroups(left_mp_obj)) THEN left_grp = dbcsr_mp_my_row_group(left_mp_obj) ELSE left_grp = dbcsr_mp_group(left_mp_obj) END IF CALL mp_environ(left_numnodes, left_mynode, left_grp) CALL mp_environ(right_numnodes, right_mynode, right_grp) ! ! Setup the left buffer matrices ! CALL buffer_matrices_ensure_size(left_set, index_size=left_max_nblks, & data_size=left_max_nze) CALL setup_buffer_matrices(left_buffer_2, left_row_mult, left_col_nimages, & left_set%mats(1, 1), index_size=left_max_nblks, & data_size=left_max_nze) IF (otf_filtering) THEN ALLOCATE (left_norms(left_max_nblks), stat=stat) IF (stat .NE. 0) & DBCSR_ABORT("Could not allocate memory for left norms") IF (stat .NE. 0) otf_filtering = .FALSE. END IF left_buffer_calc => left_set left_buffer_comm => left_buffer_2 ALLOCATE (left_data_sr(left_col_nimages)) ALLOCATE (left_index_sr(left_col_nimages)) ALLOCATE (left_data_rr(left_col_nimages)) ALLOCATE (left_index_rr(left_col_nimages)) left_data_sr = mp_request_null left_data_rr = mp_request_null left_index_sr = mp_request_null left_index_rr = mp_request_null ! Setup buffers for right matrix CALL buffer_matrices_ensure_size(right_set, index_size=right_max_nblks, & data_size=right_max_nze) CALL setup_buffer_matrices(right_buffer_2, right_row_nimages, right_col_mult, & right_set%mats(1, 1), index_size=right_max_nblks, data_size=right_max_nze) IF (otf_filtering) THEN ALLOCATE (right_norms(right_max_nblks), stat=stat) IF (stat .NE. 0) & DBCSR_WARN("Could not allocate memory for right norms") IF (stat .NE. 0) otf_filtering = .FALSE. END IF IF (use_acc() .and. otf_filtering) THEN max_nblks = MAX(left_max_nblks, right_max_nblks) CALL dbcsr_data_init(normsbuf) CALL dbcsr_data_new(normsbuf, data_type=dbcsr_type_real_4, & data_size=max_nblks, memory_type=memtype_normsbuf) CALL dbcsr_data_init(offsetsbuf) CALL dbcsr_data_new(offsetsbuf, data_type=dbcsr_type_int_4, & data_size=max_nblks, memory_type=memtype_offsetsbuf) CALL dbcsr_data_init(nelemsbuf) CALL dbcsr_data_new(nelemsbuf, data_type=dbcsr_type_int_4, & data_size=max_nblks, memory_type=memtype_nelemsbuf) END IF right_buffer_calc => right_set right_buffer_comm => right_buffer_2 ALLOCATE (right_data_sr(right_row_nimages)) ALLOCATE (right_index_sr(right_row_nimages)) ALLOCATE (right_data_rr(right_row_nimages)) ALLOCATE (right_index_rr(right_row_nimages)) right_data_sr = mp_request_null right_data_rr = mp_request_null right_index_sr = mp_request_null right_index_rr = mp_request_null ! ALLOCATE (m_sizes(dbcsr_nblkrows_local(product_matrix))) CALL local_filter(array_data(product_matrix%row_blk_size), array_size(product_matrix%local_rows), & array_data(product_matrix%local_rows), m_sizes) ALLOCATE (n_sizes(dbcsr_nblkcols_local(product_matrix))) CALL local_filter(array_data(product_matrix%col_blk_size), array_size(product_matrix%local_cols), & array_data(product_matrix%local_cols), n_sizes) ! !$OMP PARALLEL & !$OMP DEFAULT (NONE) & !$OMP SHARED (left_buffer_comm, right_buffer_comm, product_matrix,& !$OMP keep_sparsity, filter_eps, row_max_epss, multrec, nthreads, & !$OMP right_data_sr, right_data_rr, left_data_sr, left_data_rr,& !$OMP right_index_sr, right_index_rr, left_index_sr, left_index_rr,& !$OMP m_sizes, n_sizes, keep_product_data), & !$OMP PRIVATE(ithread) ithread = 0 !$ ithread = OMP_GET_THREAD_NUM() ALLOCATE (multrec(ithread)%p) CALL dbcsr_mm_multrec_init(multrec(ithread)%p, & product=product_matrix, & keep_sparsity=keep_sparsity, & eps=filter_eps, & row_max_epss=row_max_epss, & block_estimate=MAX(product_matrix%nblks, & left_buffer_comm%mats(1, 1)%nblks, & right_buffer_comm%mats(1, 1)%nblks)/nthreads, & right_row_blk_size=array_data(right_buffer_comm%mats(1, 1)%row_blk_size), & m_sizes=m_sizes, n_sizes=n_sizes, & keep_product_data=keep_product_data) !$OMP END PARALLEL ! ! Setup indexing CALL setup_rec_index_2d(left_set, left_row_nimages, left_col_nimages) CALL setup_rec_index_2d(right_set, right_row_nimages, right_col_nimages) ! ! Setup the send/receive data pointers CALL dbcsr_data_init(left_data_sp) CALL dbcsr_data_init(left_data_rp) CALL dbcsr_data_init(right_data_sp) CALL dbcsr_data_init(right_data_rp) CALL dbcsr_data_new(left_data_sp, data_type) CALL dbcsr_data_new(left_data_rp, data_type) CALL dbcsr_data_new(right_data_sp, data_type) CALL dbcsr_data_new(right_data_rp, data_type) ! Setup transpose stackbuffers IF (use_acc()) THEN CALL dbcsr_data_init(trs_stackbuf_1) CALL dbcsr_data_init(trs_stackbuf_2) CALL dbcsr_data_new(trs_stackbuf_1, data_type=dbcsr_type_int_4, & data_size=2*right_max_nblks, memory_type=memtype_trsbuffer_1) CALL dbcsr_data_new(trs_stackbuf_2, data_type=dbcsr_type_int_4, & data_size=2*right_max_nblks, memory_type=memtype_trsbuffer_2) trs_stackbuf_calc => trs_stackbuf_1 trs_stackbuf_comm => trs_stackbuf_2 END IF ! ! Reset indices for virtual images v_ki_right = 0 v_ki_left = 0 ! ! Here is the main loop. ! ! In the first loop iteration, the data is fetched from the ! sources. In the remaining iterations, the data are exchanged ! among neighbors. In the last loop only calculations take place. ! CALL timeset(routineN//"_loop", handle1) copy_left = .true. copy_right = .true. ! grouped_k_index: DO metronome = 0, nvirt_k - 1 ! Wait for right matrix transfer completion. Wait in all but ! the first loop iteration. CALL timeset(routineN//"_metrocomm1", handle2) wait_right: IF (v_ki_right .EQ. right_row_nimages) THEN ! Reset index v_ki_right = 0 IF (debug_mod) WRITE (*, '(1X,A)') routineN//" waiting for right" ! CALL mp_waitall(right_data_sr) CALL mp_waitall(right_data_rr) CALL mp_waitall(right_index_sr) CALL mp_waitall(right_index_rr) ! ! Repoint indices of right matrices DO v_ki = 0, right_row_nimages - 1 CALL dbcsr_repoint_index(right_buffer_calc%mats(v_ki + 1, 1)) right_buffer_calc%mats(v_ki + 1, 1)%valid = .TRUE. END DO END IF wait_right CALL timestop(handle2) ! ! Wait for left matrix transfer completion. Wait in all but ! the first loop iteration. CALL timeset(routineN//"_metrocomm3", handle2) wait_left: IF (v_ki_left .EQ. left_col_nimages) THEN ! Reset index v_ki_left = 0 IF (debug_mod) WRITE (*, '(1X,A)') routineN//" waiting for left" CALL mp_waitall(left_data_sr) CALL mp_waitall(left_data_rr) CALL mp_waitall(left_index_sr) CALL mp_waitall(left_index_rr) ! ! Repoint indices of left matrices DO v_ki = 0, left_col_nimages - 1 CALL dbcsr_repoint_index(left_buffer_calc%mats(1, v_ki + 1)) left_buffer_calc%mats(1, v_ki + 1)%valid = .TRUE. END DO END IF wait_left CALL timestop(handle2) v_ki_left = v_ki_left + 1 v_ki_right = v_ki_right + 1 IF (debug_mod) THEN CALL dbcsr_print(left_buffer_calc%mats(1, v_ki_left), nodata=.TRUE.) CALL dbcsr_print(right_buffer_calc%mats(v_ki_right, 1), nodata=.TRUE.) END IF ! ! from here the code for dbcsr_mm_driver_inner_init was taken ! IF (.FALSE.) WRITE (*, *) routineN//" TICK", metronome ! Since the right matrix is shifted vertically, the ! received data always has different notions of "local ! rows". Thus the local_rows and global_rows must be ! recalculated. CALL dbcsr_reset_vlocals(right_buffer_calc%mats(v_ki_right, 1), & right_set%image_dist) CALL dbcsr_reset_vlocals(left_buffer_calc%mats(1, v_ki_left), & left_set%image_dist) ! CALL ensure_array_size(k_sizes, ub=array_size(right_buffer_calc%mats(v_ki_right, 1)%local_rows)) CALL local_filter(array_data(right_buffer_calc%mats(v_ki_right, 1)%row_blk_size), & array_size(right_buffer_calc%mats(v_ki_right, 1)%local_rows), & array_data(right_buffer_calc%mats(v_ki_right, 1)%local_rows), & k_sizes) ! ! Transfer left and right buffers from host to GPU memory IF (use_acc()) THEN IF (copy_left) THEN ! copy left buffer images to device DO v_ki = 1, left_col_nimages CALL dbcsr_data_host2dev(left_buffer_calc%mats(1, v_ki)%data_area) CALL timeset(routineN//"_sync_h2d", handle2) CALL acc_stream_synchronize(left_buffer_calc%mats(1, v_ki)%data_area%d%memory_type%acc_stream) CALL timestop(handle2) END DO copy_left = .false. END IF ! calculate norms for matrices in left buffer IF (otf_filtering) THEN left_norms(:) = huge_norm CALL acc_calculate_norms(left_buffer_calc%mats(1, v_ki_left), & left_norms, normsbuf, offsetsbuf, nelemsbuf, m_sizes, k_sizes) END IF IF (copy_right) THEN ! copy right buffer images to device DO v_ki = 1, right_row_nimages CALL dbcsr_data_host2dev(right_buffer_calc%mats(v_ki, 1)%data_area) CALL timeset(routineN//"_sync_h2d", handle2) CALL acc_stream_synchronize(right_buffer_calc%mats(v_ki, 1)%data_area%d%memory_type%acc_stream) CALL timestop(handle2) ! now transpose right buffer image CALL acc_transpose_blocks(right_buffer_calc%mats(v_ki, 1), trs_stackbuf_calc, & k_sizes, n_sizes, & row_blk_sizes2enum, enum2row_blk_sizes, & col_blk_sizes2enum, enum2col_blk_sizes) END DO ! Wait for transpose to complete before proceeding CALL timeset(routineN//"_sync_h2d", handle2) CALL acc_stream_synchronize(trs_stackbuf_calc%d%memory_type%acc_stream) CALL timestop(handle2) copy_right = .false. END IF ! calculate norms for matrices in right buffer IF (otf_filtering) THEN right_norms(:) = huge_norm CALL acc_calculate_norms(right_buffer_calc%mats(v_ki_right, 1), & right_norms, normsbuf, offsetsbuf, nelemsbuf, k_sizes, n_sizes) END IF END IF ! ! Right matrix transfer. Transfer in all but the last loop ! iteration. xfer_right: IF (v_ki_right .EQ. 1 .AND. metronome + right_row_nimages .LT. nvirt_k) THEN DO v_ki = 0, right_row_nimages - 1 ! Calculate the process to send to. It's the virtual ! process row -min_nimages up (i.e., smaller row number) ! from me. CALL image_calculator(right_set%image_dist, & prow=right_send_prow, rowi=right_send_irow, & ! output pcol=right_send_pcol, coli=right_send_icol, & ! output vprow=right_send_vrow, vpcol=right_send_vcol, & ! output ! myvprow goes through all of my (process row) images myvprow=v_ki + right_myfirstvrow, & myvpcol=right_myfirstvcol, & ! nothing happens in the columns vprow_shift=-right_row_nimages, & shifting='0') ! Calculate which data I send. CALL image_calculator(right_set%image_dist, & prow=right_dst_prow, rowi=right_dst_irow, & pcol=right_dst_pcol, coli=right_dst_icol, & vprow=right_dst_vrow, vpcol=right_dst_vcol, & ! myvprows goes through all of my (process row) images myvprow=v_ki + right_myfirstvrow, & myvpcol=right_myfirstvcol, & ! nothing happens in the columns vprow_shift=metronome, & ! This is with relative shifting. shifting='R') right_dst_p = right_pgrid(right_dst_prow, right_dst_pcol) CALL dbcsr_data_set_pointer( & area=right_data_sp, & rsize=right_sizes(idata, right_dst_vrow, right_dst_vcol), & csize=1, & pointee=right_buffer_calc%mats(v_ki + 1, 1)%data_area) right_index_sp => right_buffer_calc%mats( & v_ki + 1, 1 & )%index(1: & right_sizes(imeta, right_dst_vrow, right_dst_vcol)) ! ! Calculate the process to receive from CALL image_calculator(right_set%image_dist, & prow=right_recv_prow, rowi=right_recv_irow, & pcol=right_recv_pcol, coli=right_recv_icol, & vprow=right_recv_vrow, vpcol=right_recv_vcol, & myvprow=v_ki + right_myfirstvrow, & myvpcol=right_myfirstvcol, & vprow_shift=+right_row_nimages, & ! just the opposite as "send to" shifting='0') ! Calculate which data I receive CALL image_calculator(right_set%image_dist, & prow=right_src_prow, rowi=right_src_irow, & pcol=right_src_pcol, coli=right_src_icol, & vprow=right_src_vrow, vpcol=right_src_vcol, & myvprow=v_ki + right_myfirstvrow, & myvpcol=right_myfirstvcol, & ! receive window moves with the metronome vprow_shift=metronome + right_row_nimages, & shifting='R') ! IF (use_acc()) THEN CALL timeset(routineN//"_acc_sync_right", handle3) CALL acc_event_synchronize(right_buffer_comm%mats(v_ki + 1, 1)%data_area%d%acc_ready) CALL timestop(handle3) END IF right_src_p = right_pgrid(right_src_prow, right_src_pcol) CALL dbcsr_data_set_pointer( & area=right_data_rp, & rsize=right_sizes(idata, right_src_vrow, right_src_vcol), & csize=1, & pointee=right_buffer_comm%mats(v_ki + 1, 1)%data_area) right_index_rp => right_buffer_comm%mats( & v_ki + 1, 1 & )%index(1: & right_sizes(imeta, right_src_vrow, right_src_vcol)) ! right_send_p = right_pgrid(right_send_prow, right_send_pcol) right_recv_p = right_pgrid(right_recv_prow, right_recv_pcol) ! These are column-communicator relative IF (dbcsr_mp_has_subgroups(right_mp_obj)) THEN right_send_p = right_send_prow right_recv_p = right_recv_prow grp = dbcsr_mp_my_col_group(right_mp_obj) ELSE grp = dbcsr_mp_group(right_mp_obj) END IF ! CALL timeset(routineN//"_metrocomm2", handle2) IF (.not. use_acc()) THEN CALL dbcsr_irecv_any(right_data_rp, right_recv_p, & grp, right_data_rr(v_ki + 1), tag=right_src_vrow) ELSE msglen = right_sizes(idata, right_src_vrow, right_src_vcol) #if defined (__DBCSR_ACC) CALL C_F_POINTER(acc_devmem_cptr(right_buffer_comm%mats( & v_ki + 1, 1)%data_area%d%acc_devmem), & right_data_rp%d%r_dp, (/msglen/)) #endif CALL mp_irecv(right_data_rp%d%r_dp, & right_recv_p, grp, & right_data_rr(v_ki + 1), tag=right_src_vrow) END IF CALL mp_irecv(right_index_rp, right_recv_p, & grp, right_index_rr(v_ki + 1), tag=right_src_vrow) IF (.not. use_acc()) THEN CALL dbcsr_isend_any(right_data_sp, right_send_p, & grp, right_data_sr(v_ki + 1), tag=right_dst_vrow) ELSE msglen = right_sizes(idata, right_dst_vrow, right_dst_vcol) #if defined (__DBCSR_ACC) CALL C_F_POINTER(acc_devmem_cptr(right_buffer_calc%mats( & v_ki + 1, 1)%data_area%d%acc_devmem), & right_data_sp%d%r_dp, (/msglen/)) #endif CALL mp_isend(right_data_sp%d%r_dp, & right_send_p, grp, & right_data_sr(v_ki + 1), tag=right_dst_vrow) END IF CALL mp_isend(right_index_sp, right_send_p, & grp, right_index_sr(v_ki + 1), tag=right_dst_vrow) dbcsr_mpi_statistics%nexchanged = dbcsr_mpi_statistics%nexchanged + 1 CALL count_mpi_statistics(dbcsr_mpi_statistics%data_size(1, :), & dbcsr_data_get_size(right_data_rp), & data_type_byte, & dbcsr_mpi_statistics%data_size_breakdown(:, :, 1)) CALL timestop(handle2) END DO END IF xfer_right ! ! Left matrix transfer. Transfer in all but the last processor images. xfer_left: IF (v_ki_left .EQ. 1 .AND. metronome + left_col_nimages .LT. nvirt_k) THEN DO v_ki = 0, left_col_nimages - 1 ! Calculate the process to send to. CALL image_calculator(left_set%image_dist, & prow=left_send_prow, rowi=left_send_irow, & ! output pcol=left_send_pcol, coli=left_send_icol, & ! output vprow=left_send_vrow, vpcol=left_send_vcol, & ! output myvprow=left_myfirstvrow, & ! nothing happens in the rows ! go through all my column images myvpcol=v_ki + left_myfirstvcol, & ! send to process left_col_nimages left in the grid vpcol_shift=-left_col_nimages, & shifting='0') ! Calculate which data I send. CALL image_calculator(left_set%image_dist, & prow=left_dst_prow, rowi=left_dst_irow, & pcol=left_dst_pcol, coli=left_dst_icol, & vprow=left_dst_vrow, vpcol=left_dst_vcol, & myvprow=left_myfirstvrow, & ! go through all my column images myvpcol=v_ki + left_myfirstvcol, & vpcol_shift=metronome, & ! This is with relative shifting. shifting='L') ! left_dst_p = left_pgrid(left_dst_prow, left_dst_pcol) CALL dbcsr_data_set_pointer( & area=left_data_sp, & rsize=left_sizes(idata, left_dst_vrow, left_dst_vcol), & csize=1, & pointee=left_buffer_calc%mats(1, v_ki + 1)%data_area) left_index_sp => left_buffer_calc%mats( & 1, v_ki + 1 & )%index(1: & left_sizes(imeta, left_dst_vrow, left_dst_vcol)) ! ! Calculate the process to receive from CALL image_calculator(left_set%image_dist, & prow=left_recv_prow, rowi=left_recv_irow, & pcol=left_recv_pcol, coli=left_recv_icol, & vprow=left_recv_vrow, vpcol=left_recv_vcol, & myvprow=left_myfirstvrow, & myvpcol=v_ki + left_myfirstvcol, & vpcol_shift=+left_col_nimages, & ! just the opposite as "send to" shifting='0') ! Calculate which data I receive CALL image_calculator(left_set%image_dist, & prow=left_src_prow, rowi=left_src_irow, & pcol=left_src_pcol, coli=left_src_icol, & vprow=left_src_vrow, vpcol=left_src_vcol, & myvprow=left_myfirstvrow, & myvpcol=v_ki + left_myfirstvcol, & ! receive window moves with the metronome vpcol_shift=metronome + left_col_nimages, & shifting='L') ! IF (use_acc()) THEN CALL timeset(routineN//"_acc_sync_left", handle3) CALL acc_event_synchronize(left_buffer_comm%mats(1, v_ki + 1)%data_area%d%acc_ready) CALL timestop(handle3) END IF left_src_p = left_pgrid(left_src_prow, left_src_pcol) CALL dbcsr_data_set_pointer( & area=left_data_rp, & rsize=left_sizes(idata, left_src_vrow, left_src_vcol), & csize=1, & pointee=left_buffer_comm%mats(1, v_ki + 1)%data_area) left_index_rp => left_buffer_comm%mats( & 1, v_ki + 1 & )%index(1: & left_sizes(imeta, left_src_vrow, left_src_vcol)) ! left_send_p = left_pgrid(left_send_prow, left_send_pcol) left_recv_p = left_pgrid(left_recv_prow, left_recv_pcol) ! These are column-communicator relative IF (dbcsr_mp_has_subgroups(left_mp_obj)) THEN left_send_p = left_send_pcol left_recv_p = left_recv_pcol grp = dbcsr_mp_my_row_group(left_mp_obj) ELSE grp = dbcsr_mp_group(left_mp_obj) END IF ! CALL timeset(routineN//"_metrocomm4", handle2) IF (.not. use_acc()) THEN CALL dbcsr_irecv_any(left_data_rp, left_recv_p, & grp, left_data_rr(v_ki + 1), tag=left_src_vcol) ELSE msglen = left_sizes(idata, left_src_vrow, left_src_vcol) #if defined (__DBCSR_ACC) CALL C_F_POINTER(acc_devmem_cptr(left_buffer_comm%mats( & 1, v_ki + 1)%data_area%d%acc_devmem), & left_data_rp%d%r_dp, (/msglen/)) #endif CALL mp_irecv(left_data_rp%d%r_dp, & left_recv_p, grp, & left_data_rr(v_ki + 1), tag=left_src_vcol) END IF CALL mp_irecv(left_index_rp, left_recv_p, & grp, left_index_rr(v_ki + 1), tag=left_src_vcol) IF (.not. use_acc()) THEN CALL dbcsr_isend_any(left_data_sp, left_send_p, & grp, left_data_sr(v_ki + 1), tag=left_dst_vcol) ELSE msglen = left_sizes(idata, left_dst_vrow, left_dst_vcol) #if defined (__DBCSR_ACC) CALL C_F_POINTER(acc_devmem_cptr(left_buffer_calc%mats( & 1, v_ki + 1)%data_area%d%acc_devmem), & left_data_sp%d%r_dp, (/msglen/)) #endif CALL mp_isend(left_data_sp%d%r_dp, & left_send_p, grp, & left_data_sr(v_ki + 1), tag=left_dst_vcol) END IF CALL mp_isend(left_index_sp, left_send_p, & grp, left_index_sr(v_ki + 1), tag=left_dst_vcol) dbcsr_mpi_statistics%nexchanged = dbcsr_mpi_statistics%nexchanged + 1 CALL count_mpi_statistics(dbcsr_mpi_statistics%data_size(2, :), & dbcsr_data_get_size(left_data_rp), & data_type_byte, & dbcsr_mpi_statistics%data_size_breakdown(:, :, 2)) CALL timestop(handle2) END DO END IF xfer_left ! Do multiplication ! If no GPU backend, calculate norms on the CPU IF (otf_filtering .and. .not. use_acc()) THEN left_norms(:) = huge_norm right_norms(:) = huge_norm CALL calculate_norms(right_buffer_calc%mats(v_ki_right, 1), & right_norms, k_sizes, n_sizes) CALL calculate_norms(left_buffer_calc%mats(1, v_ki_left), & left_norms, m_sizes, k_sizes) END IF ! flop_single = 0 threads_finished = 0 !$OMP PARALLEL DEFAULT (NONE) & !$OMP SHARED (left_buffer_calc, right_buffer_calc, & !$OMP v_ki_left, v_ki_right, handle2, handle3, & !$OMP product_matrix, multrec,& !$OMP filter_eps, right_norms, left_norms, row_max_epss, & !$OMP keep_sparsity,threads_finished, & !$OMP right_data_sr, right_data_rr, right_index_sr, right_index_rr, & !$OMP left_data_sr, left_data_rr, left_index_sr, left_index_rr, & !$OMP dbcsr_cfg, k_sizes, nvirt_k, metronome) & !$OMP PRIVATE (ithread,nthreads,threads_finished_read) & !$OMP REDUCTION (+: flop_single) ithread = 0; nthreads = 1 !$ ithread = omp_get_thread_num(); nthreads = omp_get_num_threads() CALL timeset(routineN//"_multrec", handle2) CALL dbcsr_mm_multrec_multiply(multrec(ithread)%p, & left=left_buffer_calc%mats(1, v_ki_left), & right=right_buffer_calc%mats(v_ki_right, 1), & flop=flop_single, & a_norms=left_norms, b_norms=right_norms, & k_sizes=k_sizes) IF (metronome == nvirt_k - 1) THEN CALL timeset(routineN//"_multrec_finalize", handle3) CALL dbcsr_mm_multrec_finalize(multrec(ithread)%p) DEALLOCATE (multrec(ithread)%p) CALL timestop(handle3) END IF !$OMP ATOMIC threads_finished = threads_finished + 1 IF (dbcsr_cfg%use_comm_thread%val .AND. (ithread .EQ. 0)) THEN DO ! requires OMP 3.1 (e.g. gcc >=4.7), for correctness, otherwise we keep fingers crossed #if defined _OPENMP && _OPENMP >= 200711 !$OMP ATOMIC READ #endif threads_finished_read = threads_finished IF (threads_finished_read .EQ. nthreads) EXIT ! Using MPI_Testany to trigger forward progress in MPI CALL mp_testany(right_data_sr) CALL mp_testany(right_data_rr) CALL mp_testany(left_data_sr) CALL mp_testany(left_data_rr) CALL mp_testany(right_index_sr) CALL mp_testany(right_index_rr) CALL mp_testany(left_index_sr) CALL mp_testany(left_index_rr) END DO END IF !$OMP BARRIER CALL timestop(handle2) !$OMP END PARALLEL flop_total = flop_total + flop_single ! ! Move to the next images IF (v_ki_left .EQ. left_col_nimages) THEN CALL dbcsr_switch(left_buffer_calc, left_buffer_comm) END IF IF (v_ki_right .EQ. right_row_nimages) THEN CALL dbcsr_switch(right_buffer_calc, right_buffer_comm) CALL dbcsr_switch(trs_stackbuf_calc, trs_stackbuf_comm) END IF END DO grouped_k_index CALL timestop(handle1) CALL m_memory(mem) max_memory = MAX(max_memory, REAL(mem)) IF (use_acc()) THEN CALL dbcsr_data_release(trs_stackbuf_1) CALL dbcsr_data_release(trs_stackbuf_2) DEALLOCATE (row_blk_sizes2enum, enum2row_blk_sizes) DEALLOCATE (col_blk_sizes2enum, enum2col_blk_sizes) IF (otf_filtering) THEN CALL dbcsr_data_release(normsbuf) CALL dbcsr_data_release(offsetsbuf) CALL dbcsr_data_release(nelemsbuf) END IF END IF IF (ALLOCATED(right_norms)) THEN DEALLOCATE (right_norms) END IF IF (ALLOCATED(left_norms)) THEN DEALLOCATE (left_norms) END IF IF (ALLOCATED(row_max_epss)) THEN DEALLOCATE (row_max_epss) END IF ! CALL dbcsr_destroy_array(right_buffer_2) CALL dbcsr_destroy_array(left_buffer_2) DEALLOCATE (my_sizes) ! CALL dbcsr_data_clear_pointer(left_data_sp) CALL dbcsr_data_clear_pointer(left_data_rp) CALL dbcsr_data_clear_pointer(right_data_sp) CALL dbcsr_data_clear_pointer(right_data_rp) CALL dbcsr_data_release(left_data_sp) CALL dbcsr_data_release(left_data_rp) CALL dbcsr_data_release(right_data_sp) CALL dbcsr_data_release(right_data_rp) ! DEALLOCATE (left_data_rr, left_data_sr, left_index_rr, left_index_sr, & right_data_rr, right_data_sr, right_index_rr, right_index_sr) ! ! IF (debug_mod) THEN v_ki = 0 DO i = 1, SIZE(product_matrix%blk_p) v_ki = MAX(v_ki, ABS(product_matrix%blk_p(i))) END DO WRITE (*, *) routineN//" Actual final size", & LOG(REAL(dbcsr_data_get_size(product_matrix%data_area)))/LOG(10.0), & LOG(REAL(v_ki))/LOG(10.0) END IF ! flop = flop_total DEALLOCATE (left_buffer_2, right_buffer_2) DEALLOCATE (m_sizes, n_sizes) IF (ASSOCIATED(k_sizes)) DEALLOCATE (k_sizes) ! CALL timestop(handle) END SUBROUTINE multiply_cannon_g2g SUBROUTINE setup_buffer_matrices(buffer_set, buff_nrows, buff_ncols, & source_matrix, index_size, data_size) TYPE(dbcsr_2d_array_type), INTENT(OUT) :: buffer_set INTEGER, INTENT(IN) :: buff_nrows, buff_ncols TYPE(dbcsr_type), INTENT(IN) :: source_matrix INTEGER, INTENT(IN) :: index_size INTEGER, INTENT(IN), OPTIONAL :: data_size CHARACTER(len=*), PARAMETER :: routineN = 'setup_buffer_matrices' INTEGER :: col_image, handle, row_image ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) CALL dbcsr_image_dist_init(buffer_set%image_dist) ALLOCATE (buffer_set%mats(buff_nrows, buff_ncols)) DO row_image = 1, buff_nrows DO col_image = 1, buff_ncols CALL setup_buffer_matrix(buffer_set%mats(row_image, col_image), & source_matrix, index_size, data_size=data_size, & data_memory_type=memtype_abpanel_2) END DO END DO IF (source_matrix%local_indexing .AND. careful_mod) THEN IF (.NOT. array_exists(source_matrix%local_rows)) & DBCSR_ABORT("Local rows should exist.") IF (.NOT. array_exists(source_matrix%global_rows)) & DBCSR_ABORT("Global rows should exist.") ! IF (.NOT. array_exists(source_matrix%local_cols)) & DBCSR_ABORT("Local cols should exist.") IF (.NOT. array_exists(source_matrix%global_cols)) & DBCSR_ABORT("Global cols should exist.") END IF CALL timestop(handle) END SUBROUTINE setup_buffer_matrices SUBROUTINE buffer_matrices_ensure_size(buffer_set, index_size, data_size) !! Enlarge left_set and right_set to hold any a/b-panel. !! left_set and right_set are created by make_images to hold the a/b-panels !! used for the initial cannon-tick. This routine ensures that these buffers !! can hold any a/b-panel occurring during a matrix multiply and makes them !! therefore suitable as buffers for the entire cannon algorithm. !! This saves memory since no separate buffers for the first cannon-tick !! have to be allocated. TYPE(dbcsr_2d_array_type), INTENT(INOUT) :: buffer_set INTEGER, INTENT(IN) :: index_size, data_size CHARACTER(len=*), PARAMETER :: routineN = 'buffer_matrices_ensure_size' INTEGER :: col_image, handle, row_image ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) DO row_image = 1, SIZE(buffer_set%mats, 1) DO col_image = 1, SIZE(buffer_set%mats, 2) CALL dbcsr_data_ensure_size(buffer_set%mats(row_image, col_image)%data_area, & data_size) CALL ensure_array_size(buffer_set%mats(row_image, col_image)%index, & ub=index_size, & memory_type=dbcsr_get_index_memory_type(buffer_set%mats(row_image, col_image))) CALL dbcsr_repoint_index(buffer_set%mats(row_image, col_image)) END DO END DO CALL timestop(handle) END SUBROUTINE buffer_matrices_ensure_size SUBROUTINE setup_rec_index_2d(matrix_set, n_rows, n_cols) TYPE(dbcsr_2d_array_type), INTENT(INOUT) :: matrix_set INTEGER, INTENT(IN) :: n_rows, n_cols CHARACTER(len=*), PARAMETER :: routineN = 'setup_rec_index_2d' LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: handle, i_col, i_row, t_f, t_l, t_size !$ INTEGER :: ithread LOGICAL :: thread_redist ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) DO i_row = 1, n_rows DO i_col = 1, n_cols IF (.FALSE.) & CALL dbcsr_reset_vlocals(matrix_set%mats(i_row, i_col), & matrix_set%image_dist) IF (dbg) THEN WRITE (*, *) routineN//" m, n, size", & SIZE(matrix_set%mats(i_row, i_col)%coo_l), & dbcsr_nblkrows_local(matrix_set%mats(i_row, i_col)), & dbcsr_nblkcols_local(matrix_set%mats(i_row, i_col)) WRITE (*, '(3(1X,I7))') matrix_set%mats(i_row, i_col)%coo_l END IF IF (careful_mod) THEN IF (SIZE(matrix_set%mats(i_row, i_col)%coo_l) .NE. matrix_set%mats(i_row, i_col)%nblks*3) & DBCSR_ABORT("Block count mismatch.") END IF thread_redist = ASSOCIATED(matrix_set%mats(i_row, i_col)%thr_c) t_size = SIZE(matrix_set%mats(i_row, i_col)%coo_l)/3 t_f = 1 t_l = t_size !$OMP PARALLEL IF (thread_redist) DEFAULT (NONE) & !$OMP PRIVATE (ithread) & !$OMP FIRSTPRIVATE (t_f, t_l, t_size) & !$OMP SHARED (matrix_set, i_row, i_col, thread_redist) !$ ithread = OMP_GET_THREAD_NUM() !$ IF (thread_redist) THEN !$ t_f = matrix_set%mats(i_row, i_col)%thr_c(ithread + 1) + 1 !$ t_l = matrix_set%mats(i_row, i_col)%thr_c(ithread + 2) !$ END IF t_size = t_l - t_f + 1 !$OMP BARRIER IF (t_size .GT. 0) THEN CALL call_rec_sort_index( & dbcsr_nblkrows_local(matrix_set%mats(i_row, i_col)), & dbcsr_nblkcols_local(matrix_set%mats(i_row, i_col)), & t_size, & matrix_set%mats(i_row, i_col)%coo_l((t_f*3 - 2):(t_l*3))) END IF !$OMP END PARALLEL END DO END DO CALL timestop(handle) END SUBROUTINE setup_rec_index_2d SUBROUTINE call_rec_sort_index(m, n, nblks, idx) !! Used to thunk a call to rec_sort_index INTEGER, INTENT(IN) :: m, n, nblks INTEGER, DIMENSION(3, 1:nblks), INTENT(INOUT) :: idx ! --------------------------------------------------------------------------- CALL rec_sort_index(1, m, 1, n, nblks, idx, 0) END SUBROUTINE call_rec_sort_index SUBROUTINE dbcsr_switch_sets(set1p, set2p) !! Switches pointers between two matrix sets TYPE(dbcsr_2d_array_type), POINTER :: set1p, set2p TYPE(dbcsr_2d_array_type), POINTER :: tmp_set ! --------------------------------------------------------------------------- tmp_set => set1p set1p => set2p set2p => tmp_set END SUBROUTINE dbcsr_switch_sets SUBROUTINE dbcsr_switch_d_ptrs(area1p, area2p) !! Switches pointers between two data areas TYPE(dbcsr_data_obj), POINTER :: area1p, area2p TYPE(dbcsr_data_obj), POINTER :: tmp_p tmp_p => area1p area1p => area2p area2p => tmp_p END SUBROUTINE dbcsr_switch_d_ptrs #:include '../data/dbcsr.fypp' #:for n, nametype1, base1, prec1, kind1, type1, dkind1, normname1 in inst_params_float ! ************************************************************************************************** SUBROUTINE prepare_buffers_${nametype1}$ (negate_real, negate_imaginary, & iter, row, col, blk, blk_p, bp, & row_size, col_size, nze, nsymmetries, symmetry_i, & stored_row, stored_col, tr_row_size, tr_col_size, tr, & row_img, col_img, nrow_images, ncol_images, & row_img_dist, col_img_dist, predist_type_fwd, blacs2mpi, & target_imgdist, prow, pcol, rowi, coli, & row_dist, col_dist, dst_p, sm_pos, myt_smp, metalen, & sd_pos, myt_sdp, send_meta, sd_disp, & data_area, send_data_area, scale_neg_one, scale_value) !! Prepare buffers for multiplications LOGICAL, INTENT(IN) :: negate_real, negate_imaginary TYPE(dbcsr_iterator), INTENT(INOUT) :: iter INTEGER, INTENT(INOUT) :: row, col, blk, blk_p, row_size, col_size, & nze, bp, symmetry_i, & stored_row, stored_col, tr_row_size, tr_col_size, & row_img, col_img, prow, pcol, rowi, coli, & dst_p, sm_pos, sd_pos INTEGER, INTENT(IN) :: nsymmetries, nrow_images, ncol_images, metalen LOGICAL, INTENT(INOUT) :: tr INTEGER, DIMENSION(:), INTENT(IN), CONTIGUOUS, POINTER :: row_img_dist, col_img_dist, row_dist, col_dist INTEGER, DIMENSION(:), ALLOCATABLE, INTENT(IN) :: sd_disp INTEGER, DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: myt_smp, myt_sdp, send_meta TYPE(dbcsr_imagedistribution_obj), INTENT(IN) :: target_imgdist INTEGER, DIMENSION(:, :), INTENT(IN), CONTIGUOUS, POINTER :: blacs2mpi CHARACTER, INTENT(IN) :: predist_type_fwd ${type1}$, DIMENSION(:), INTENT(IN), CONTIGUOUS :: data_area TYPE(dbcsr_data_obj), INTENT(INOUT) :: send_data_area TYPE(dbcsr_scalar_type), INTENT(IN) :: scale_neg_one TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: scale_value DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, blk, blk_p=blk_p, & row_size=row_size, col_size=col_size) nze = row_size*col_size IF (nze .EQ. 0) CYCLE bp = ABS(blk_p) DO symmetry_i = 1, nsymmetries IF (symmetry_i .EQ. 1) THEN stored_row = row; stored_col = col; tr = blk_p .LT. 0 tr_row_size = col_size; tr_col_size = row_size ELSE IF (row .EQ. col) CYCLE stored_row = col; stored_col = row; tr = blk_p .GT. 0 tr_row_size = row_size; tr_col_size = col_size END IF ! Where do we send this block? row_img = 1 IF (nrow_images .GT. 1) row_img = row_img_dist(stored_row) col_img = 1 IF (ncol_images .GT. 1) col_img = col_img_dist(stored_col) CALL image_calculator(target_imgdist, & prow=prow, rowi=rowi, & pcol=pcol, coli=coli, & myprow=row_dist(stored_row), myrowi=row_img, & mypcol=col_dist(stored_col), mycoli=col_img, & shifting=predist_type_fwd) dst_p = blacs2mpi(prow, pcol) sm_pos = myt_smp(dst_p) myt_smp(dst_p) = myt_smp(dst_p) + metalen sd_pos = myt_sdp(dst_p) myt_sdp(dst_p) = myt_sdp(dst_p) + nze IF (tr) THEN IF (PRESENT(scale_value)) THEN CALL dbcsr_block_transpose(send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1), & data_area(bp:bp + nze - 1)*scale_value%${base1}$_${prec1}$, & tr_row_size, tr_col_size) ELSE CALL dbcsr_block_transpose(send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1), & data_area(bp:bp + nze - 1), & tr_row_size, tr_col_size) END IF IF (negate_real .AND. negate_imaginary) THEN send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1) = & send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1)*scale_neg_one%${base1}$_${prec1}$ ELSEIF (negate_real) THEN #:if nametype1=="s" or nametype1=="d" send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1) = & -send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1) #:else send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1) = & CMPLX( & -REAL(send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1), KIND=${kind1}$), & AIMAG(send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1)), & KIND=${kind1}$) #:endif ELSEIF (negate_imaginary) THEN #:if nametype1=="c" or nametype1=="z" send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1) = & CONJG(send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1)) #:endif END IF ELSE ! Copy the block IF (PRESENT(scale_value)) THEN send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1) = & data_area(bp:bp + nze - 1)*scale_value%${base1}$_${prec1}$ ELSE send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1) = data_area(bp:bp + nze - 1) END IF END IF send_meta(sm_pos) = stored_row send_meta(sm_pos + 1) = stored_col send_meta(sm_pos + 2) = sd_pos - sd_disp(dst_p) + 1 send_meta(sm_pos + 3) = rowi send_meta(sm_pos + 4) = coli END DO END DO END SUBROUTINE prepare_buffers_${nametype1}$ #:endfor END MODULE dbcsr_mm_cannon ================================================ FILE: src/mm/dbcsr_mm_common.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_mm_common !! Common variables and routines for the dbcsr matrix-matrix multiplication algorithms. !! Modification history: !! - 2016-08 Code organization (Alfio Lazzaro). USE ISO_C_BINDING, ONLY: C_PTR, C_INT USE dbcsr_acc_event, ONLY: acc_event_record, & acc_event_synchronize, & acc_stream_wait_event USE dbcsr_acc_stream, ONLY: acc_stream_type, & acc_stream_synchronize, & acc_stream_cptr USE dbcsr_acc_devmem, ONLY: acc_devmem_cptr USE dbcsr_array_types, ONLY: array_data, & array_hold USE dbcsr_acc_operations, ONLY: dbcsr_acc_transpose USE dbcsr_data_methods, ONLY: dbcsr_data_ensure_size, & dbcsr_data_get_size, & dbcsr_data_host2dev, & dbcsr_data_dev2host, & dbcsr_data_set_size_referenced, & dbcsr_get_data_p_c, & dbcsr_get_data_p_d, & dbcsr_get_data_p_s, & dbcsr_get_data_p_z USE dbcsr_methods, ONLY: dbcsr_get_data_type, & dbcsr_get_index_memory_type, & dbcsr_nfullcols_local, & dbcsr_nfullrows_local, & dbcsr_valid_index USE dbcsr_mm_multrec, ONLY: dbcsr_mm_multrec_type USE dbcsr_ptr_util, ONLY: ensure_array_size USE dbcsr_types, ONLY: & dbcsr_data_obj, dbcsr_memtype_type, dbcsr_mpi_size_limits, dbcsr_mpi_statistics_type, & dbcsr_type, dbcsr_type_complex_4, dbcsr_type_complex_8, dbcsr_type_int_4, & dbcsr_type_real_4, dbcsr_type_real_8 USE dbcsr_work_operations, ONLY: dbcsr_create USE dbcsr_kinds, ONLY: int_4, & int_8, & real_4, & real_8, & sp #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_common' TYPE dbcsr_memtype_type_p TYPE(dbcsr_memtype_type), POINTER :: p => Null() ! ensure that array-elements are on different cache lines INTEGER(kind=int_4), DIMENSION(64) :: padding = -1_int_4 END TYPE dbcsr_memtype_type_p TYPE(dbcsr_memtype_type_p), DIMENSION(:), POINTER, SAVE :: memtype_product_wm => Null() TYPE(dbcsr_mpi_statistics_type), SAVE :: dbcsr_mpi_statistics INTEGER, SAVE :: num_multiplications = 0 REAL, SAVE :: max_memory = 0 REAL, PARAMETER :: huge_norm = HUGE(1.0)**(1.0/3.0) TYPE(dbcsr_memtype_type), SAVE :: memtype_abpanel_1, memtype_abpanel_2, & memtype_trsbuffer_1, memtype_trsbuffer_2, & memtype_normsbuf, memtype_offsetsbuf, & memtype_nelemsbuf, & memtype_mpi_buffer, memtype_mpi_product TYPE(acc_stream_type), SAVE :: stream_1, stream_2 ! ab-panels and streams are shared between all threads TYPE dbcsr_mm_multrec_type_p TYPE(dbcsr_mm_multrec_type), POINTER :: p => Null() ! ensure that array-elements are on different cache lines INTEGER(kind=int_4), DIMENSION(64) :: padding END TYPE dbcsr_mm_multrec_type_p PUBLIC :: memtype_product_wm PUBLIC :: dbcsr_mpi_statistics, num_multiplications PUBLIC :: max_memory PUBLIC :: memtype_abpanel_1, memtype_abpanel_2, & memtype_trsbuffer_1, memtype_trsbuffer_2, & memtype_normsbuf, memtype_offsetsbuf, & memtype_nelemsbuf, & memtype_mpi_buffer, memtype_mpi_product PUBLIC :: stream_1, stream_2 PUBLIC :: dbcsr_mm_multrec_type_p PUBLIC :: count_mpi_statistics PUBLIC :: setup_buffer_matrix PUBLIC :: rec_sort_index PUBLIC :: enumerate_blk_sizes PUBLIC :: acc_transpose_blocks PUBLIC :: acc_calculate_norms PUBLIC :: product_matrix_size_guess PUBLIC :: calculate_norms PUBLIC :: huge_norm PUBLIC :: local_filter #if defined (__DBCSR_ACC) INTERFACE FUNCTION acc_interface_calculate_norms(mat, nblks, offsets, nelems, norms, stream_ptr) RESULT(istat) & BIND(C, name="c_calculate_norms") IMPORT TYPE(C_PTR), INTENT(IN), VALUE :: mat TYPE(C_PTR), INTENT(IN), VALUE :: offsets TYPE(C_PTR), INTENT(IN), VALUE :: nelems TYPE(C_PTR), VALUE :: norms INTEGER(KIND=C_INT), INTENT(IN), & VALUE :: nblks TYPE(C_PTR), VALUE :: stream_ptr INTEGER(KIND=C_INT) :: istat END FUNCTION acc_interface_calculate_norms END INTERFACE #endif CONTAINS SUBROUTINE count_mpi_statistics(mpi_statistics, data_size, & element_size_bytes, size_breakdown) REAL, DIMENSION(:), INTENT(INOUT) :: mpi_statistics INTEGER, INTENT(IN) :: data_size INTEGER, INTENT(IN) :: element_size_bytes INTEGER(KIND=int_8), DIMENSION(:, :), & INTENT(INOUT), OPTIONAL :: size_breakdown INTEGER :: ilimit, nlimits INTEGER(KIND=int_8) :: data_size_bytes, llimit ! change in bytes data_size_bytes = INT(data_size, KIND=int_8)*INT(element_size_bytes, KIND=int_8) ! mpi_statistics(1) = mpi_statistics(1) + REAL(data_size_bytes) mpi_statistics(2) = MIN(mpi_statistics(2), REAL(data_size_bytes)) mpi_statistics(3) = MAX(mpi_statistics(3), REAL(data_size_bytes)) IF (PRESENT(size_breakdown)) THEN nlimits = SIZE(dbcsr_mpi_size_limits) ! check for oversize messages IF (data_size_bytes .GT. dbcsr_mpi_size_limits(nlimits)) THEN size_breakdown(nlimits + 1, 1) = size_breakdown(nlimits + 1, 1) + 1 size_breakdown(nlimits + 1, 2) = size_breakdown(nlimits + 1, 2) + data_size_bytes RETURN END IF llimit = 0 DO ilimit = 1, nlimits IF (data_size_bytes .GE. llimit .AND. data_size_bytes .LE. dbcsr_mpi_size_limits(ilimit)) THEN size_breakdown(ilimit, 1) = size_breakdown(ilimit, 1) + 1 size_breakdown(ilimit, 2) = size_breakdown(ilimit, 2) + data_size_bytes RETURN END IF llimit = dbcsr_mpi_size_limits(ilimit) END DO END IF END SUBROUTINE count_mpi_statistics SUBROUTINE setup_buffer_matrix(matrix, source_matrix, & index_size, data_size, data_buffer, data_memory_type) TYPE(dbcsr_type), INTENT(INOUT) :: matrix TYPE(dbcsr_type), INTENT(IN) :: source_matrix INTEGER, INTENT(IN), OPTIONAL :: index_size, data_size TYPE(dbcsr_data_obj), INTENT(IN), OPTIONAL :: data_buffer TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL :: data_memory_type matrix = dbcsr_type() CALL dbcsr_create(matrix, & template=source_matrix, & name=TRIM("Buffer of "//TRIM(source_matrix%name)), & nze=data_size, & data_buffer=data_buffer, & data_memory_type=data_memory_type, & index_memory_type=memtype_mpi_buffer) IF (PRESENT(data_size)) THEN CALL dbcsr_data_ensure_size( & matrix%data_area, & data_size, nocopy=.TRUE.) END IF IF (PRESENT(index_size)) THEN CALL ensure_array_size( & matrix%index, & ub=index_size, nocopy=.TRUE., & memory_type=dbcsr_get_index_memory_type(matrix)) END IF matrix%negate_real = source_matrix%negate_real matrix%negate_imaginary = source_matrix%negate_imaginary matrix%local_indexing = source_matrix%local_indexing matrix%list_indexing = source_matrix%list_indexing ! IF (source_matrix%has_local_rows) THEN matrix%local_rows = source_matrix%local_rows CALL array_hold(matrix%local_rows) matrix%has_local_rows = .TRUE. END IF IF (source_matrix%has_global_rows) THEN matrix%global_rows = source_matrix%global_rows CALL array_hold(matrix%global_rows) matrix%has_global_rows = .TRUE. END IF IF (source_matrix%has_local_cols) THEN matrix%local_cols = source_matrix%local_cols CALL array_hold(matrix%local_cols) matrix%has_local_cols = .TRUE. END IF IF (source_matrix%has_global_cols) THEN matrix%global_cols = source_matrix%global_cols CALL array_hold(matrix%global_cols) matrix%has_global_cols = .TRUE. END IF END SUBROUTINE setup_buffer_matrix RECURSIVE SUBROUTINE rec_sort_index(mi, mf, ni, nf, nele, a, d) !! Sorts index for recursing. !! !! History !! - 2011-02-17 [UB] modified for use in DBCSR; reduced memory usage. !! @note !! Always cut longest first. On a tie cut N !! @endnote INTEGER, INTENT(IN) :: mi, mf, ni, nf, nele INTEGER, DIMENSION(3, 1:nele), INTENT(inout) :: a INTEGER, INTENT(IN) :: d LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: half, M, N, nlow INTEGER, ALLOCATABLE, DIMENSION(:, :) :: tmp ! --------------------------------------------------------------------------- IF (dbg) THEN WRITE (*, *) " rs", mi, mf, "/", ni, nf, "=>", nele, d WRITE (*, '(3(1X,I7))') a(:, 1:nele) END IF IF (dbg) THEN IF (d .GT. 20) THEN WRITE (*, *) a(1, -d*1000) END IF END IF ALLOCATE (tmp(3, nele)) M = mf - mi + 1 N = nf - ni + 1 IF (M > N) THEN half = M/2 CALL rec_split(nele, a, tmp, 1, nlow, mi, half) a = tmp DEALLOCATE (tmp) IF (nlow .GT. 1) THEN CALL rec_sort_index(mi, mi + half - 1, ni, nf, nlow, a(:, 1:nlow), d + 1) END IF IF (nele - nlow .GT. 1) THEN CALL rec_sort_index(mi + half, mf, ni, nf, nele - nlow, a(:, nlow + 1:nele), d + 1) END IF ELSE half = N/2 CALL rec_split(nele, a, tmp, 2, nlow, ni, half) a = tmp DEALLOCATE (tmp) IF (nlow .GT. 1) THEN CALL rec_sort_index(mi, mf, ni, ni + half - 1, nlow, a(:, 1:nlow), d + 1) END IF IF (nele - nlow .GT. 1) THEN CALL rec_sort_index(mi, mf, ni + half, nf, nele - nlow, a(:, nlow + 1:nele), d + 1) END IF END IF END SUBROUTINE rec_sort_index SUBROUTINE rec_split(nele, a, split, row_or_col, nlow, mi, half) INTEGER, INTENT(IN) :: nele INTEGER, DIMENSION(3, nele), INTENT(IN) :: a INTEGER, DIMENSION(3, nele), INTENT(OUT) :: split INTEGER, INTENT(IN) :: row_or_col INTEGER, INTENT(OUT) :: nlow INTEGER, INTENT(IN) :: mi, half INTEGER :: el, half_m, p_high, p_low half_m = mi + half - 1 p_low = 1 p_high = nele DO el = 1, nele IF (a(row_or_col, el) <= half_m) THEN split(1:3, p_low) = a(1:3, el) p_low = p_low + 1 ELSE split(1:3, p_high) = a(1:3, el) p_high = p_high - 1 END IF END DO nlow = p_low - 1 DBCSR_ASSERT(p_high .EQ. nlow) END SUBROUTINE rec_split SUBROUTINE enumerate_blk_sizes(blk_sizes, max_size, enum, rev_enum) !! Enumerate all occurring blocksizes INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: blk_sizes INTEGER, INTENT(IN) :: max_size INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: enum, rev_enum CHARACTER(len=*), PARAMETER :: routineN = 'enumerate_blk_sizes' INTEGER :: handle, i, n CALL timeset(routineN, handle) ALLOCATE (enum(0:max_size)) enum(:) = 0 DO i = 1, SIZE(blk_sizes) enum(blk_sizes(i)) = 1 END DO n = SUM(enum) ALLOCATE (rev_enum(n)) n = 0 DO i = 0, SIZE(enum) - 1 IF (enum(i) > 0) THEN n = n + 1 enum(i) = n rev_enum(n) = i END IF END DO CALL timestop(handle) END SUBROUTINE enumerate_blk_sizes SUBROUTINE acc_transpose_blocks(matrix, trs_stackbuf, & !! write out a stack for transposing the blocks row_blk_sizes, col_blk_sizes, & row_blk_sizes2enum, enum2row_blk_sizes, & col_blk_sizes2enum, enum2col_blk_sizes, & noresize) TYPE(dbcsr_type), INTENT(IN) :: matrix TYPE(dbcsr_data_obj), INTENT(INOUT) :: trs_stackbuf INTEGER, DIMENSION(:), INTENT(IN), POINTER, CONTIGUOUS :: row_blk_sizes, col_blk_sizes, & row_blk_sizes2enum, enum2row_blk_sizes, & col_blk_sizes2enum, enum2col_blk_sizes LOGICAL, INTENT(IN), OPTIONAL :: noresize CHARACTER(len=*), PARAMETER :: routineN = 'acc_transpose_blocks' INTEGER :: blk_p, handle, handle1, i, m, mi, & mi_max, n, nblks, ni, ni_max, offset, x, & row, col INTEGER, ALLOCATABLE, DIMENSION(:, :) :: counters, filled, offsets, tmp_stack INTEGER, DIMENSION(:), POINTER :: blk_index INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: trs_stack LOGICAL :: my_noresize CALL timeset(routineN, handle) NULLIFY (trs_stack) IF (.NOT. matrix%list_indexing) & DBCSR_ABORT("build_trs_stack: only list_indexing supported.") IF (.NOT. matrix%local_indexing) & DBCSR_ABORT("build_trs_stack: only local_indexing supported.") IF (trs_stackbuf%d%data_type /= dbcsr_type_int_4) & DBCSR_ABORT("build_trs_stack: stac_buf has wrong datatype") blk_index => matrix%coo_l nblks = matrix%nblks ! make sure buffer from previous cannon-tick was uploaded CALL timeset(routineN//"_sync", handle1) CALL acc_event_synchronize(trs_stackbuf%d%acc_ready) CALL timestop(handle1) CALL timeset(routineN//"_ensure", handle1) my_noresize = .FALSE. IF (PRESENT(noresize)) my_noresize = noresize IF (my_noresize) THEN IF (dbcsr_data_get_size(trs_stackbuf) .LT. nblks) & DBCSR_ABORT("build_trs_stack: trs_stackbuf undersized") ELSE CALL dbcsr_data_ensure_size(trs_stackbuf, data_size=nblks, nocopy=.TRUE.) END IF CALL dbcsr_data_set_size_referenced(trs_stackbuf, nblks) trs_stack => trs_stackbuf%d%i4 CALL timestop(handle1) mi_max = SIZE(enum2row_blk_sizes); ni_max = SIZE(enum2col_blk_sizes) ALLOCATE (counters(mi_max, ni_max), offsets(mi_max, ni_max)) counters(:, :) = 0; offsets(:, :) = 0 CALL timeset(routineN//"_comp", handle1) ! Simplified algorithm for single size blocks IF (mi_max .EQ. 1 .AND. ni_max .EQ. 1) THEN DO i = 1, nblks blk_p = blk_index(3*(i - 1) + 3) IF (blk_p == 0) CYCLE counters(1, 1) = counters(1, 1) + 1 trs_stack(counters(1, 1)) = blk_p - 1 END DO ELSE ALLOCATE (tmp_stack(3, nblks)) ! collect block addresses and dimensions in a temporary stack ! while doing so, also count number of blocks per block-dimensions DO i = 1, nblks row = blk_index(3*(i - 1) + 1) col = blk_index(3*(i - 1) + 2) blk_p = blk_index(3*(i - 1) + 3) IF (blk_p == 0) CYCLE m = row_blk_sizes(row) n = col_blk_sizes(col) mi = row_blk_sizes2enum(m) ni = col_blk_sizes2enum(n) tmp_stack(1, i) = mi tmp_stack(2, i) = ni tmp_stack(3, i) = blk_p - 1 counters(mi, ni) = counters(mi, ni) + 1 END DO ! calculate offsets for first element of each sub-stack offset = 0 DO mi = 1, mi_max DO ni = 1, ni_max offsets(mi, ni) = offset offset = offset + counters(mi, ni) END DO END DO ! write all sub-stacks into the host-pinned buffer ALLOCATE (filled(mi_max, ni_max)) filled(:, :) = 0 DO i = 1, nblks mi = tmp_stack(1, i) ni = tmp_stack(2, i) blk_p = tmp_stack(3, i) x = offsets(mi, ni) + filled(mi, ni) + 1 trs_stack(x) = blk_p filled(mi, ni) = filled(mi, ni) + 1 END DO !sanity check DO ni = 1, ni_max DO mi = 1, mi_max IF (filled(mi, ni) /= counters(mi, ni)) & DBCSR_ABORT("acc_transpose_blocks: bug") END DO END DO END IF CALL timestop(handle1) CALL timeset(routineN//"_sync", handle1) !transfer all stacks CALL dbcsr_data_host2dev(trs_stackbuf) ! make sure block-buffer is uploaded before running the kernels CALL acc_stream_wait_event(trs_stackbuf%d%memory_type%acc_stream, matrix%data_area%d%acc_ready) CALL timestop(handle1) CALL timeset(routineN//"_kernels", handle1) ! launch kernels DO ni = 1, ni_max DO mi = 1, mi_max IF (counters(mi, ni) > 0) THEN m = enum2row_blk_sizes(mi) n = enum2col_blk_sizes(ni) CALL dbcsr_acc_transpose( & trs_stack=trs_stackbuf%d%acc_devmem, & offset=offsets(mi, ni), & nblks=counters(mi, ni), & data_type=matrix%data_type, & buffer=matrix%data_area%d%acc_devmem, & m=m, n=n, & stream=trs_stackbuf%d%memory_type%acc_stream) END IF END DO END DO CALL timestop(handle1) CALL timeset(routineN//"_sync", handle1) ! make sure block-buffer are not used until transpose kernels finished CALL acc_event_record(trs_stackbuf%d%acc_ready, trs_stackbuf%d%memory_type%acc_stream) CALL acc_stream_wait_event(matrix%data_area%d%memory_type%acc_stream, trs_stackbuf%d%acc_ready) CALL acc_event_record(matrix%data_area%d%acc_ready, matrix%data_area%d%memory_type%acc_stream) CALL timestop(handle1) CALL timestop(handle) END SUBROUTINE acc_transpose_blocks SUBROUTINE acc_calculate_norms(matrix, norms, normsbuf, offsetsbuf, nelemsbuf, row_blk_sizes, col_blk_sizes) !! calculate norms for a set of blocks in matrix whose row and col sizes are given TYPE(dbcsr_type), INTENT(IN) :: matrix REAL(kind=sp), DIMENSION(:), INTENT(OUT) :: norms TYPE(dbcsr_data_obj), INTENT(INOUT), TARGET :: normsbuf TYPE(dbcsr_data_obj), INTENT(INOUT), TARGET :: offsetsbuf TYPE(dbcsr_data_obj), INTENT(INOUT), TARGET :: nelemsbuf INTEGER, DIMENSION(:), POINTER, CONTIGUOUS, INTENT(IN) :: row_blk_sizes, col_blk_sizes CHARACTER(len=*), PARAMETER :: routineN = 'acc_calculate_norms' INTEGER :: nblks, blk_p, handle, i INTEGER :: nblks_final, j INTEGER :: data_type INTEGER :: row, col INTEGER, DIMENSION(:), POINTER :: blk_index REAL, DIMENSION(:), POINTER, CONTIGUOUS :: normsbuf_ptr INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: offsetsbuf_ptr INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: nelemsbuf_ptr #if defined (__DBCSR_ACC) INTEGER :: istat #endif CALL timeset(routineN, handle) blk_index => matrix%coo_l nblks = matrix%nblks data_type = dbcsr_get_data_type(matrix) if (nblks > 0 .and. data_type .eq. dbcsr_type_real_8) then IF (normsbuf%d%data_type /= dbcsr_type_real_4) & DBCSR_ABORT("acc_calculate_norms: normsbuf has wrong datatype") IF (offsetsbuf%d%data_type /= dbcsr_type_int_4) & DBCSR_ABORT("acc_calculate_norms: offsetsbuf has wrong datatype") IF (nelemsbuf%d%data_type /= dbcsr_type_int_4) & DBCSR_ABORT("acc_calculate_norms: nelemsbuf has wrong datatype") NULLIFY (normsbuf_ptr) NULLIFY (offsetsbuf_ptr) NULLIFY (nelemsbuf_ptr) CALL dbcsr_data_ensure_size(normsbuf, data_size=nblks, nocopy=.TRUE.) CALL dbcsr_data_set_size_referenced(normsbuf, nblks) normsbuf_ptr => normsbuf%d%r_sp CALL dbcsr_data_ensure_size(offsetsbuf, data_size=nblks, nocopy=.TRUE.) CALL dbcsr_data_set_size_referenced(offsetsbuf, nblks) offsetsbuf_ptr => offsetsbuf%d%i4 CALL dbcsr_data_ensure_size(nelemsbuf, data_size=nblks, nocopy=.TRUE.) CALL dbcsr_data_set_size_referenced(nelemsbuf, nblks) nelemsbuf_ptr => nelemsbuf%d%i4 j = 1 DO i = 1, nblks blk_p = blk_index(3*i) IF (blk_p == 0) CYCLE offsetsbuf_ptr(j) = blk_p - 1 row = blk_index(3*i - 2) col = blk_index(3*i - 1) nelemsbuf_ptr(j) = row_blk_sizes(row)*col_blk_sizes(col) j = j + 1 END DO nblks_final = j - 1 ! copy offsets to GPU buffer, launch kernel, copy norms back to host ! offsetsbuf, nelemsbuf and normsbuf share the same stream, so no need ! to synchronize stream until norms are copied back to host CALL dbcsr_data_host2dev(offsetsbuf) CALL dbcsr_data_host2dev(nelemsbuf) #if defined (__DBCSR_ACC) istat = acc_interface_calculate_norms(acc_devmem_cptr(matrix%data_area%d%acc_devmem), & INT(nblks_final, KIND=C_INT), & acc_devmem_cptr(offsetsbuf%d%acc_devmem), & acc_devmem_cptr(nelemsbuf%d%acc_devmem), & acc_devmem_cptr(normsbuf%d%acc_devmem), & acc_stream_cptr(normsbuf%d%memory_type%acc_stream)) IF (istat == -1) & DBCSR_ABORT("acc_calculate_norms: warp size obtained is unexpected") #endif CALL dbcsr_data_dev2host(normsbuf) CALL acc_stream_synchronize(normsbuf%d%memory_type%acc_stream) j = 1 DO i = 1, nblks blk_p = blk_index(3*i) IF (blk_p == 0) CYCLE norms(i) = normsbuf_ptr(j) j = j + 1 END DO else ! call CPU function to calculate norms CALL calculate_norms(matrix, norms, row_blk_sizes, col_blk_sizes) end if CALL timestop(handle) END SUBROUTINE acc_calculate_norms FUNCTION product_matrix_size_guess(matrix_left, matrix_right, product_matrix, & !! Guess the size of the product matrix from the A and B sparsities left_data_size, right_data_size, & left_col_nimages, right_row_nimages, & nthreads) RESULT(size_guess) TYPE(dbcsr_type), INTENT(IN) :: matrix_left, matrix_right, product_matrix INTEGER, INTENT(IN) :: left_data_size, right_data_size, & left_col_nimages, right_row_nimages, & nthreads INTEGER :: size_guess INTEGER(KIND=int_8) :: size8 REAL(kind=real_8) :: factor, fill_guess, left_fill, right_fill ! First we calculate the sparsities size8 = INT(dbcsr_nfullrows_local(matrix_left), KIND=int_8)* & INT(dbcsr_nfullcols_local(matrix_left), KIND=int_8) size8 = MAX(1_int_8, size8) left_fill = (REAL(left_data_size, KIND=real_8)*REAL(left_col_nimages, KIND=real_8))/REAL(size8, KIND=real_8) size8 = INT(dbcsr_nfullrows_local(matrix_right), KIND=int_8)* & INT(dbcsr_nfullcols_local(matrix_right), KIND=int_8) size8 = MAX(1_int_8, size8) right_fill = (REAL(right_data_size, KIND=real_8)*REAL(right_row_nimages, KIND=real_8))/REAL(size8, KIND=real_8) size8 = INT(dbcsr_nfullrows_local(product_matrix), KIND=int_8)* & INT(dbcsr_nfullcols_local(product_matrix), KIND=int_8) size8 = MAX(1_int_8, size8) ! factor = 7.0 ! Old guess factor = 2.4 ! New guess fill_guess = factor*MAX(left_fill, right_fill) fill_guess = MIN(1.0_real_8, MAX(0.0_real_8, fill_guess)) IF (nthreads .GT. 1) THEN fill_guess = fill_guess*3.0_real_8/REAL(2*nthreads, KIND=real_8) END IF size_guess = INT(REAL(size8, KIND=real_8)*fill_guess, KIND=int_4) END FUNCTION product_matrix_size_guess SUBROUTINE calculate_norms(matrix, norms, row_blk_sizes, col_blk_sizes) !! Calculates per-block norms. !! Rewritten to be very low-level. TYPE(dbcsr_type), INTENT(IN) :: matrix !! DBCSR matrix for which to calculate norms REAL(kind=sp), DIMENSION(:), INTENT(OUT) :: norms !! Block norms INTEGER, DIMENSION(:), POINTER, CONTIGUOUS, INTENT(IN) :: row_blk_sizes, col_blk_sizes CHARACTER(len=*), PARAMETER :: routineN = 'calculate_norms' INTEGER :: data_type, handle, nblks ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) ! Checks for validity IF (.NOT. dbcsr_valid_index(matrix)) & DBCSR_ABORT("The matrix must be valid.") data_type = dbcsr_get_data_type(matrix) nblks = matrix%nblks SELECT CASE (data_type) CASE (dbcsr_type_real_4) CALL calc_norms_s(norms, nblks, matrix%coo_l, & row_blk_sizes, col_blk_sizes, & dbcsr_get_data_p_s(matrix%data_area)) CASE (dbcsr_type_real_8) CALL calc_norms_d(norms, nblks, matrix%coo_l, & row_blk_sizes, col_blk_sizes, & dbcsr_get_data_p_d(matrix%data_area)) CASE (dbcsr_type_complex_4) CALL calc_norms_c(norms, nblks, matrix%coo_l, & row_blk_sizes, col_blk_sizes, & dbcsr_get_data_p_c(matrix%data_area)) CASE (dbcsr_type_complex_8) CALL calc_norms_z(norms, nblks, matrix%coo_l, & row_blk_sizes, col_blk_sizes, & dbcsr_get_data_p_z(matrix%data_area)) CASE DEFAULT DBCSR_ABORT("Invalid data type.") END SELECT ! CALL timestop(handle) END SUBROUTINE calculate_norms PURE SUBROUTINE local_filter(full_data, nle, local_elements, local_data) !! Gathers the local elements from all data (full_data) INTEGER, DIMENSION(:), INTENT(IN), CONTIGUOUS :: full_data !! All elements INTEGER, INTENT(IN) :: nle !! Number of local elements INTEGER, DIMENSION(1:nle), INTENT(IN) :: local_elements !! List of local elements INTEGER, DIMENSION(1:nle), INTENT(OUT) :: local_data !! Local elements obtained from all elements INTEGER :: l DO l = 1, nle local_data(l) = full_data(local_elements(l)) END DO END SUBROUTINE local_filter #:include '../data/dbcsr.fypp' #:for n, nametype1, base1, prec1, kind1, type1, dkind1, normname1 in inst_params_float SUBROUTINE calc_norms_${nametype1}$ (norms, nblks, & blki, rbs, cbs, DATA) !! Calculates norms of the entire matrix with minimal overhead. REAL(kind=sp), DIMENSION(:), INTENT(OUT) :: norms INTEGER, INTENT(IN) :: nblks INTEGER, DIMENSION(3, nblks), INTENT(IN) :: blki INTEGER, DIMENSION(:), INTENT(IN) :: rbs, cbs ${type1}$, DIMENSION(:), & INTENT(IN) :: DATA INTEGER :: blk, bp, bpe, row, col REAL(KIND=real_8), EXTERNAL :: DDOT #if defined (__ACCELERATE) REAL(KIND=real_8), EXTERNAL :: SDOT #else REAL(KIND=real_4), EXTERNAL :: SDOT #endif ! --------------------------------------------------------------------------- !$OMP parallel default(none) & !$OMP shared(DATA, norms, nblks, rbs, cbs, blki) & !$OMP private(row, col, blk, bp, bpe) !$OMP do schedule(dynamic) DO blk = 1, nblks bp = blki(3, blk) row = blki(1, blk) col = blki(2, blk) #:if nametype1 in ['d', 's'] bpe = rbs(row)*cbs(col) norms(blk) = REAL(${normname1}$ (bpe, data(bp), 1, data(bp), 1)), KIND = sp) #:else bpe = bp + rbs(row)*cbs(col) - 1 norms(blk) = REAL(SUM(ABS(DATA(bp:bpe))**2), KIND=sp) #:endif END DO !$OMP end do !$OMP end parallel END SUBROUTINE calc_norms_${nametype1}$ #:endfor END MODULE dbcsr_mm_common ================================================ FILE: src/mm/dbcsr_mm_csr.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_mm_csr !! Third layer of the dbcsr matrix-matrix multiplication. !! It collects the full matrix blocks, which need to be multiplied, !! and stores their parameters in various stacks. !! After a certain amount of parameters is collected it dispatches !! the filled stacks to either the CPU or the accelerator device. !! Modification history: !! - 2010-02-23 Moved from dbcsr_operations !! - 2011-11 Moved parameter-stack processing routines to !! dbcsr_mm_methods. !! - 2013-01 extensive refactoring (Ole Schuett) USE dbcsr_array_types, ONLY: array_data USE dbcsr_block_operations, ONLY: block_add, & dbcsr_block_copy_aa USE dbcsr_config, ONLY: dbcsr_cfg, & default_resize_factor USE dbcsr_data_methods, ONLY: dbcsr_data_ensure_size USE dbcsr_dist_util, ONLY: map_most_common USE dbcsr_kinds, ONLY: int_1, & int_4, & int_8, & sp USE dbcsr_mm_sched, ONLY: & dbcsr_mm_sched_barrier, dbcsr_mm_sched_begin_burst, dbcsr_mm_sched_dev2host_init, & dbcsr_mm_sched_end_burst, dbcsr_mm_sched_finalize, dbcsr_mm_sched_init, & dbcsr_mm_sched_lib_finalize, dbcsr_mm_sched_lib_init, & dbcsr_mm_sched_process, dbcsr_mm_sched_set_orig_datasize, dbcsr_mm_sched_type USE dbcsr_mm_types, ONLY: & dbcsr_ps_width, p_a_first, p_b_first, p_c_blk, p_c_first, p_k, p_m, p_n, & stack_descriptor_type USE dbcsr_ptr_util, ONLY: ensure_array_size USE dbcsr_toollib, ONLY: sort USE dbcsr_types, ONLY: dbcsr_data_obj, & dbcsr_type, & dbcsr_work_type #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_csr' LOGICAL, PARAMETER :: debug_mod = .FALSE. LOGICAL, PARAMETER :: careful_mod = .FALSE. INTEGER, PARAMETER :: max_stack_block_size = HUGE(INT(0)) !! max_stack_block_size The maximal block size to be specially treated. ! ************************************************************************************************** TYPE dbcsr_mm_csr_type PRIVATE TYPE(hash_table_type), DIMENSION(:), POINTER :: c_hashes => Null() INTEGER :: nm_stacks = -1, nn_stacks = -1, nk_stacks = -1 INTEGER(KIND=int_4), DIMENSION(:), POINTER :: m_size_maps => Null() INTEGER(KIND=int_4), DIMENSION(:), POINTER :: n_size_maps => Null() INTEGER(KIND=int_4), DIMENSION(:), POINTER :: k_size_maps => Null() INTEGER :: max_m = -1, max_n = -1, max_k = -1 INTEGER :: m_size_maps_size = -1, & n_size_maps_size = -1, & k_size_maps_size = -1 INTEGER(KIND=int_1), DIMENSION(:, :, :), POINTER :: stack_map => Null() TYPE(stack_descriptor_type), DIMENSION(:), POINTER :: stacks_descr => Null() TYPE(dbcsr_work_type), POINTER :: product_wm => Null() INTEGER, DIMENSION(:, :, :), POINTER :: stacks_data => Null() INTEGER, DIMENSION(:), POINTER :: stacks_fillcount => Null() TYPE(dbcsr_mm_sched_type) :: sched = dbcsr_mm_sched_type() LOGICAL :: keep_product_data = .FALSE. END TYPE dbcsr_mm_csr_type #include "utils/dbcsr_hash_table_types.f90" ! ************************************************************************************************** PUBLIC :: dbcsr_mm_csr_type PUBLIC :: dbcsr_mm_csr_lib_init, dbcsr_mm_csr_lib_finalize PUBLIC :: dbcsr_mm_csr_init, dbcsr_mm_csr_finalize PUBLIC :: dbcsr_mm_csr_multiply, dbcsr_mm_csr_purge_stacks PUBLIC :: dbcsr_mm_csr_dev2host_init, dbcsr_mm_csr_red3D CONTAINS SUBROUTINE dbcsr_mm_csr_lib_init() !! Initialize the library CALL dbcsr_mm_sched_lib_init() END SUBROUTINE SUBROUTINE dbcsr_mm_csr_lib_finalize() !! Finalize the library CALL dbcsr_mm_sched_lib_finalize() END SUBROUTINE SUBROUTINE dbcsr_mm_csr_multiply(this, left, right, mi, mf, ni, nf, ki, kf, & !! A wrapper around dbcsr_mm_csr_multiply_low to avoid expensive dereferencings. ai, af, & bi, bf, & m_sizes, n_sizes, k_sizes, & c_local_rows, c_local_cols, & c_has_symmetry, keep_sparsity, use_eps, & row_max_epss, & flop, & a_index, b_index, a_norms, b_norms) TYPE(dbcsr_mm_csr_type), INTENT(INOUT) :: this TYPE(dbcsr_type), INTENT(IN) :: left, right INTEGER, INTENT(IN) :: mi, mf, ni, nf, ki, kf, ai, af, bi, bf INTEGER, DIMENSION(:), INTENT(INOUT) :: m_sizes, n_sizes, k_sizes, c_local_rows, & c_local_cols LOGICAL, INTENT(INOUT) :: c_has_symmetry, keep_sparsity, use_eps REAL(kind=sp), DIMENSION(:) :: row_max_epss INTEGER(KIND=int_8), INTENT(INOUT) :: flop INTEGER, DIMENSION(1:3, 1:af), INTENT(IN) :: a_index INTEGER, DIMENSION(1:3, 1:bf), INTENT(IN) :: b_index REAL(KIND=sp), DIMENSION(:), POINTER :: a_norms, b_norms INTEGER :: ithread, max_new_nblks, nblks_new ithread = 0 !$ ithread = omp_get_thread_num() ! This has to be done here because ensure_array_size() expects a pointer. ! the maximum number of blocks can be safely estimated by considering both the rowxcol, ! but also the blocks the latter can never be larger than norec**2, which is a 'small' constant max_new_nblks = INT(MIN(INT(mf - mi + 1, int_8)*INT(nf - ni + 1, int_8), & INT(af - ai + 1, int_8)*INT(bf - bi + 1, int_8))) nblks_new = this%product_wm%lastblk + max_new_nblks CALL ensure_array_size(this%product_wm%row_i, ub=nblks_new, & factor=default_resize_factor) CALL ensure_array_size(this%product_wm%col_i, ub=nblks_new, & factor=default_resize_factor) CALL ensure_array_size(this%product_wm%blk_p, ub=nblks_new, & factor=default_resize_factor) CALL dbcsr_mm_csr_multiply_low(this, left=left, right=right, & mi=mi, mf=mf, ki=ki, kf=kf, & ai=ai, af=af, & bi=bi, bf=bf, & c_row_i=this%product_wm%row_i, & c_col_i=this%product_wm%col_i, & c_blk_p=this%product_wm%blk_p, & lastblk=this%product_wm%lastblk, & datasize=this%product_wm%datasize, & m_sizes=m_sizes, n_sizes=n_sizes, k_sizes=k_sizes, & c_local_rows=c_local_rows, c_local_cols=c_local_cols, & c_has_symmetry=c_has_symmetry, keep_sparsity=keep_sparsity, & use_eps=use_eps, & row_max_epss=row_max_epss, & flop=flop, & row_size_maps=this%m_size_maps, & col_size_maps=this%n_size_maps, & k_size_maps=this%k_size_maps, & row_size_maps_size=this%m_size_maps_size, & col_size_maps_size=this%n_size_maps_size, & k_size_maps_size=this%k_size_maps_size, & nm_stacks=this%nm_stacks, nn_stacks=this%nn_stacks, & nk_stacks=this%nk_stacks, & stack_map=this%stack_map, & stacks_data=this%stacks_data, & stacks_fillcount=this%stacks_fillcount, & c_hashes=this%c_hashes, & a_index=a_index, b_index=b_index, & a_norms=a_norms, b_norms=b_norms) END SUBROUTINE dbcsr_mm_csr_multiply SUBROUTINE dbcsr_mm_csr_multiply_low(this, left, right, mi, mf, ki, kf, & !! Performs multiplication of smaller submatrices. ai, af, bi, bf, & c_row_i, c_col_i, c_blk_p, lastblk, datasize, & m_sizes, n_sizes, k_sizes, & c_local_rows, c_local_cols, & c_has_symmetry, keep_sparsity, use_eps, & row_max_epss, flop, & row_size_maps, col_size_maps, k_size_maps, & row_size_maps_size, col_size_maps_size, k_size_maps_size, & nm_stacks, nn_stacks, nk_stacks, stack_map, & stacks_data, stacks_fillcount, c_hashes, & a_index, b_index, a_norms, b_norms) TYPE(dbcsr_mm_csr_type), INTENT(INOUT) :: this TYPE(dbcsr_type), INTENT(IN) :: left, right INTEGER, INTENT(IN) :: mi, mf, ki, kf, ai, af, bi, bf INTEGER, DIMENSION(:), INTENT(INOUT) :: c_row_i, c_col_i, c_blk_p INTEGER, INTENT(INOUT) :: lastblk, datasize INTEGER, DIMENSION(:), INTENT(IN) :: m_sizes, n_sizes, k_sizes, c_local_rows, & c_local_cols LOGICAL, INTENT(IN) :: c_has_symmetry, keep_sparsity, use_eps REAL(kind=sp), DIMENSION(:) :: row_max_epss INTEGER(KIND=int_8), INTENT(INOUT) :: flop INTEGER, INTENT(IN) :: row_size_maps_size, k_size_maps_size, & col_size_maps_size INTEGER(KIND=int_4), & DIMENSION(0:row_size_maps_size - 1), INTENT(IN) :: row_size_maps INTEGER(KIND=int_4), & DIMENSION(0:col_size_maps_size - 1), INTENT(IN) :: col_size_maps INTEGER(KIND=int_4), & DIMENSION(0:k_size_maps_size - 1), INTENT(IN) :: k_size_maps INTEGER, INTENT(IN) :: nm_stacks, nn_stacks, nk_stacks INTEGER(KIND=int_1), DIMENSION(nn_stacks + 1, & nk_stacks + 1, nm_stacks + 1), INTENT(IN) :: stack_map INTEGER, DIMENSION(:, :, :), INTENT(INOUT) :: stacks_data INTEGER, DIMENSION(:), INTENT(INOUT) :: stacks_fillcount TYPE(hash_table_type), DIMENSION(:), INTENT(INOUT) :: c_hashes INTEGER, DIMENSION(1:3, 1:af), INTENT(IN) :: a_index INTEGER, DIMENSION(1:3, 1:bf), INTENT(IN) :: b_index REAL(KIND=sp), DIMENSION(:), POINTER :: a_norms, b_norms CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_csr_multiply_low' LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: a_blk, a_col_l, a_row_l, b_blk, b_col_l, c_blk_id, c_col_logical, c_nze, & c_row_logical, ithread, k_size, m_size, mapped_col_size, mapped_k_size, mapped_row_size, & n_a_norms, n_b_norms, n_size, nstacks, s_dp, ws INTEGER, DIMENSION(mi:mf + 1) :: a_row_p INTEGER, DIMENSION(ki:kf + 1) :: b_row_p INTEGER, DIMENSION(2, bf - bi + 1) :: b_blk_info INTEGER, DIMENSION(2, af - ai + 1) :: a_blk_info INTEGER(KIND=int_4) :: offset LOGICAL :: block_exists REAL(kind=sp) :: a_norm, a_row_eps, b_norm REAL(KIND=sp), DIMENSION(1:af - ai + 1) :: left_norms REAL(KIND=sp), DIMENSION(1:bf - bi + 1) :: right_norms ! --------------------------------------------------------------------------- ithread = 0 !$ ithread = omp_get_thread_num() nstacks = SIZE(this%stacks_data, 3) IF (use_eps) THEN n_a_norms = af - ai + 1 n_b_norms = bf - bi + 1 ELSE n_a_norms = 0 n_b_norms = 0 END IF ! ! Build the indices CALL build_csr_index(mi, mf, ai, af, a_row_p, a_blk_info, a_index, & n_a_norms, left_norms, a_norms) CALL build_csr_index(ki, kf, bi, bf, b_row_p, b_blk_info, b_index, & n_b_norms, right_norms, b_norms) a_row_cycle: DO a_row_l = mi, mf m_size = m_sizes(a_row_l) a_row_eps = row_max_epss(a_row_l) mapped_row_size = row_size_maps(m_size) a_blk_cycle: DO a_blk = a_row_p(a_row_l) + 1, a_row_p(a_row_l + 1) a_col_l = a_blk_info(1, a_blk) IF (debug_mod) WRITE (*, *) ithread, routineN//" A col", a_col_l, ";", a_row_l k_size = k_sizes(a_col_l) mapped_k_size = k_size_maps(k_size) a_norm = left_norms(a_blk) b_blk_cycle: DO b_blk = b_row_p(a_col_l) + 1, b_row_p(a_col_l + 1) IF (dbg) THEN WRITE (*, '(1X,A,3(1X,I7),1X,A,1X,I16)') routineN//" trying B", & a_row_l, b_blk_info(1, b_blk), a_col_l, "at", b_blk_info(2, b_blk) END IF b_norm = right_norms(b_blk) IF (a_norm*b_norm .LT. a_row_eps) THEN CYCLE END IF b_col_l = b_blk_info(1, b_blk) ! Don't calculate symmetric blocks. symmetric_product: IF (c_has_symmetry) THEN c_row_logical = c_local_rows(a_row_l) c_col_logical = c_local_cols(b_col_l) IF (c_row_logical .NE. c_col_logical & .AND. my_checker_tr(c_row_logical, c_col_logical)) THEN IF (dbg) THEN WRITE (*, *) "Skipping symmetric block!", c_row_logical, & c_col_logical END IF CYCLE END IF END IF symmetric_product c_blk_id = hash_table_get(c_hashes(a_row_l), b_col_l) IF (.FALSE.) THEN WRITE (*, '(1X,A,3(1X,I7),1X,A,1X,I16)') routineN//" coor", & a_row_l, a_col_l, b_col_l, "c blk", c_blk_id END IF block_exists = c_blk_id .GT. 0 n_size = n_sizes(b_col_l) c_nze = m_size*n_size ! IF (block_exists) THEN offset = c_blk_p(c_blk_id) ELSE IF (keep_sparsity) CYCLE offset = datasize + 1 lastblk = lastblk + 1 datasize = datasize + c_nze c_blk_id = lastblk ! assign a new c-block-id IF (dbg) WRITE (*, *) routineN//" new block offset, nze", offset, c_nze CALL hash_table_add(c_hashes(a_row_l), & b_col_l, c_blk_id) ! We still keep the linear index because it's ! easier than getting the values out of the ! hashtable in the end. c_row_i(lastblk) = a_row_l c_col_i(lastblk) = b_col_l c_blk_p(lastblk) = offset END IF ! TODO: this is only called with careful_mod ! We should not call certain MM routines (netlib BLAS) ! with zero LDs; however, we still need to get to here ! to get new blocks. IF (careful_mod) THEN IF (c_nze .EQ. 0 .OR. k_size .EQ. 0) THEN DBCSR_ABORT("Can not call MM with LDx=0.") CYCLE END IF END IF mapped_col_size = col_size_maps(n_size) ws = stack_map(mapped_col_size, mapped_k_size, mapped_row_size) stacks_fillcount(ws) = stacks_fillcount(ws) + 1 s_dp = stacks_fillcount(ws) stacks_data(p_m, s_dp, ws) = m_size stacks_data(p_n, s_dp, ws) = n_size stacks_data(p_k, s_dp, ws) = k_size stacks_data(p_a_first, s_dp, ws) = a_blk_info(2, a_blk) stacks_data(p_b_first, s_dp, ws) = b_blk_info(2, b_blk) stacks_data(p_c_first, s_dp, ws) = offset stacks_data(p_c_blk, s_dp, ws) = c_blk_id flop = flop + INT(2*c_nze, int_8)*INT(k_size, int_8) IF (stacks_fillcount(ws) >= SIZE(stacks_data, 2)) & CALL flush_stacks(this, left=left, right=right) END DO b_blk_cycle ! b END DO a_blk_cycle ! a_col END DO a_row_cycle ! a_row END SUBROUTINE dbcsr_mm_csr_multiply_low SUBROUTINE dbcsr_mm_csr_init(this, left, right, product, & !! Initializes a multiplication cycle for new set of C-blocks. m_sizes, n_sizes, block_estimate, right_row_blk_size, & nlayers, keep_product_data) TYPE(dbcsr_mm_csr_type), INTENT(INOUT) :: this TYPE(dbcsr_type), INTENT(IN), OPTIONAL :: left, right TYPE(dbcsr_type), INTENT(INOUT) :: product INTEGER, DIMENSION(:), POINTER :: m_sizes, n_sizes INTEGER, INTENT(IN) :: block_estimate INTEGER, DIMENSION(:), INTENT(IN) :: right_row_blk_size INTEGER, OPTIONAL :: nlayers LOGICAL, INTENT(IN) :: keep_product_data CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_csr_init' INTEGER :: default_stack, handle, istack, ithread, & k_map, k_size, m_map, m_size, n_map, & n_size, nstacks, nthreads, ps_g INTEGER, ALLOCATABLE, DIMENSION(:) :: flop_index, flop_list, most_common_k, & most_common_m, most_common_n TYPE(stack_descriptor_type), ALLOCATABLE, & DIMENSION(:) :: tmp_descr CALL timeset(routineN, handle) ithread = 0; nthreads = 1 !$ ithread = OMP_GET_THREAD_NUM(); nthreads = OMP_GET_NUM_THREADS() IF (PRESENT(left) .NEQV. PRESENT(right)) & DBCSR_ABORT("Must both left and right provided or not.") IF (PRESENT(left) .AND. PRESENT(right)) THEN ! find out if we have local_indexin IF (.NOT. right%local_indexing) & DBCSR_ABORT("Matrices must have local indexing.") IF (.NOT. left%local_indexing) & DBCSR_ABORT("Matrices must have local indexing.") END IF ! Setup the hash tables if needed ALLOCATE (this%c_hashes(product%nblkrows_local)) CALL fill_hash_tables(this%c_hashes, product, block_estimate, & row_map=array_data(product%global_rows), & col_map=array_data(product%global_cols)) ! Setup the MM stack this%nm_stacks = dbcsr_cfg%n_stacks%val this%nn_stacks = dbcsr_cfg%n_stacks%val this%nk_stacks = dbcsr_cfg%n_stacks%val nstacks = this%nm_stacks*this%nn_stacks*this%nk_stacks + 1 IF (nstacks > INT(HUGE(this%stack_map))) & DBCSR_ABORT("Too many stacks requested (global/dbcsr/n_size_*_stacks in input)") ALLOCATE (this%stacks_descr(nstacks)) ALLOCATE (this%stacks_data(dbcsr_ps_width, dbcsr_cfg%mm_stack_size%val, nstacks)) ALLOCATE (this%stacks_fillcount(nstacks)) this%stacks_fillcount(:) = 0 ALLOCATE (most_common_m(this%nm_stacks)) ALLOCATE (most_common_n(this%nn_stacks)) ALLOCATE (most_common_k(this%nk_stacks)) CALL map_most_common(m_sizes, this%m_size_maps, this%nm_stacks, & most_common_m, & max_stack_block_size, this%max_m) this%m_size_maps_size = SIZE(this%m_size_maps) CALL map_most_common(n_sizes, this%n_size_maps, this%nn_stacks, & most_common_n, & max_stack_block_size, this%max_n) this%n_size_maps_size = SIZE(this%n_size_maps) CALL map_most_common(right_row_blk_size, & this%k_size_maps, this%nk_stacks, & most_common_k, & max_stack_block_size, this%max_k) this%k_size_maps_size = SIZE(this%k_size_maps) ! Creates the stack map--a mapping from (mapped) stack block sizes ! (carrier%*_sizes) to a stack number. Triples with even one ! uncommon size will be mapped to a general, non-size-specific ! stack. ALLOCATE (this%stack_map(this%nn_stacks + 1, this%nk_stacks + 1, this%nm_stacks + 1)) default_stack = nstacks DO m_map = 1, this%nm_stacks + 1 IF (m_map .LE. this%nm_stacks) THEN m_size = most_common_m(m_map) ELSE m_size = 777 END IF DO k_map = 1, this%nk_stacks + 1 IF (k_map .LE. this%nk_stacks) THEN k_size = most_common_k(k_map) ELSE k_size = 888 END IF DO n_map = 1, this%nn_stacks + 1 IF (n_map .LE. this%nn_stacks) THEN n_size = most_common_n(n_map) ELSE n_size = 999 END IF IF (m_map .LE. this%nm_stacks & .AND. k_map .LE. this%nk_stacks & .AND. n_map .LE. this%nn_stacks) THEN ! This is the case when m, n, and k are all defined. ps_g = (m_map - 1)*this%nn_stacks*this%nk_stacks + & (k_map - 1)*this%nn_stacks + n_map ps_g = nstacks - ps_g this%stack_map(n_map, k_map, m_map) = INT(ps_g, kind=int_1) ! Also take care of the stack m, n, k descriptors this%stacks_descr(ps_g)%m = m_size this%stacks_descr(ps_g)%n = n_size this%stacks_descr(ps_g)%k = k_size this%stacks_descr(ps_g)%max_m = m_size this%stacks_descr(ps_g)%max_n = n_size this%stacks_descr(ps_g)%max_k = k_size this%stacks_descr(ps_g)%defined_mnk = .TRUE. ELSE ! This is the case when at least one of m, n, or k is ! undefined. ps_g = default_stack this%stack_map(n_map, k_map, m_map) = INT(default_stack, kind=int_1) ! Also take care of the stack m, n, k descriptors this%stacks_descr(ps_g)%m = 0 this%stacks_descr(ps_g)%n = 0 this%stacks_descr(ps_g)%k = 0 this%stacks_descr(ps_g)%max_m = this%max_m this%stacks_descr(ps_g)%max_n = this%max_n this%stacks_descr(ps_g)%max_k = this%max_k this%stacks_descr(ps_g)%defined_mnk = .FALSE. END IF END DO END DO END DO DEALLOCATE (most_common_m) DEALLOCATE (most_common_n) DEALLOCATE (most_common_k) ! sort to make the order fixed... all defined stacks first, default stack ! last. Next, sort according to flops, first stack lots of flops, last ! stack, few flops ! The default stack shall remain at the end of the gridcolumn ALLOCATE (flop_list(nstacks - 1), flop_index(nstacks - 1), tmp_descr(nstacks)) DO istack = 1, nstacks - 1 flop_list(istack) = -2*this%stacks_descr(istack)%m & *this%stacks_descr(istack)%n & *this%stacks_descr(istack)%k END DO CALL sort(flop_list, nstacks - 1, flop_index) tmp_descr(:) = this%stacks_descr DO istack = 1, nstacks - 1 this%stacks_descr(istack) = tmp_descr(flop_index(istack)) END DO DO m_map = 1, SIZE(this%stack_map, 1) DO k_map = 1, SIZE(this%stack_map, 2) map_loop: DO n_map = 1, SIZE(this%stack_map, 1) DO istack = 1, nstacks - 1 IF (this%stack_map(m_map, k_map, n_map) == flop_index(istack)) THEN this%stack_map(m_map, k_map, n_map) = INT(istack, kind=int_1) CYCLE map_loop END IF END DO END DO map_loop END DO END DO DEALLOCATE (flop_list, flop_index, tmp_descr) this%keep_product_data = keep_product_data this%product_wm => product%wms(ithread + 1) CALL dbcsr_mm_sched_init(this%sched, & product_wm=this%product_wm, & nlayers=nlayers, & keep_product_data=keep_product_data) CALL timestop(handle) END SUBROUTINE dbcsr_mm_csr_init SUBROUTINE fill_hash_tables(hashes, matrix, block_estimate, row_map, col_map) !! Fills row hashtable from an existing matrix. TYPE(hash_table_type), DIMENSION(:), INTENT(inout) :: hashes TYPE(dbcsr_type), INTENT(IN) :: matrix INTEGER :: block_estimate !! guess for the number of blocks in the product matrix, can be zero INTEGER, DIMENSION(:), INTENT(IN) :: row_map, col_map CHARACTER(len=*), PARAMETER :: routineN = 'fill_hash_tables' INTEGER :: col, handle, i, imat, n_rows, row ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) imat = 1 !$ imat = OMP_GET_THREAD_NUM() + 1 n_rows = matrix%nblkrows_local IF (SIZE(hashes) /= n_rows) & DBCSR_ABORT("Local row count mismatch") DO row = 1, n_rows ! create the hash table row with a reasonable initial size CALL hash_table_create(hashes(row), & MAX(8, (3*block_estimate)/MAX(1, n_rows))) END DO ! We avoid using the iterator because we will use the existing ! work matrix instead of the BCSR index. DO i = 1, matrix%wms(imat)%lastblk row = matrix%wms(imat)%row_i(i) col = matrix%wms(imat)%col_i(i) row = row_map(row) col = col_map(col) CALL hash_table_add(hashes(row), col, i) END DO CALL timestop(handle) END SUBROUTINE fill_hash_tables SUBROUTINE dbcsr_mm_csr_finalize(this) !! Finalizes a multiplication cycle for a set of C-blocks. TYPE(dbcsr_mm_csr_type), INTENT(INOUT) :: this INTEGER :: i CALL dbcsr_mm_sched_finalize(this%sched) ! Clear hash tables DO i = 1, SIZE(this%c_hashes) CALL hash_table_release(this%c_hashes(i)) END DO DEALLOCATE (this%c_hashes) DEALLOCATE (this%stacks_descr) DEALLOCATE (this%stack_map) DEALLOCATE (this%m_size_maps) DEALLOCATE (this%n_size_maps) DEALLOCATE (this%k_size_maps) DEALLOCATE (this%stacks_fillcount) DEALLOCATE (this%stacks_data) END SUBROUTINE dbcsr_mm_csr_finalize SUBROUTINE dbcsr_mm_csr_dev2host_init(this) TYPE(dbcsr_mm_csr_type), INTENT(INOUT) :: this CALL dbcsr_mm_sched_dev2host_init(this%sched) END SUBROUTINE dbcsr_mm_csr_dev2host_init SUBROUTINE dbcsr_mm_csr_red3D(this, meta_buffer, data_buffer, flop, m_sizes, n_sizes, & !! Make the reduction of the 3D layers in the local csr object g2l_map_rows, g2l_map_cols, original_lastblk, & keep_sparsity) TYPE(dbcsr_mm_csr_type), INTENT(INOUT) :: this INTEGER, DIMENSION(:), INTENT(IN), TARGET :: meta_buffer TYPE(dbcsr_data_obj), INTENT(IN) :: data_buffer INTEGER(KIND=int_8), INTENT(INOUT) :: flop INTEGER, DIMENSION(:), INTENT(IN) :: m_sizes, n_sizes, g2l_map_rows, & g2l_map_cols INTEGER, INTENT(IN) :: original_lastblk LOGICAL, INTENT(IN) :: keep_sparsity INTEGER :: c_blk_id, iblock, ithread, lb, lb_data, & lb_meta, nblks_max, nblocks, nthreads, & nze, nze_max, ub_meta INTEGER, DIMENSION(:), POINTER :: blk_p, col_i, row_i LOGICAL :: block_exists ithread = 0; nthreads = 1 !$ ithread = OMP_GET_THREAD_NUM(); nthreads = OMP_GET_NUM_THREADS() lb_meta = meta_buffer(ithread + 1) nblocks = (meta_buffer(ithread + 2) - lb_meta)/3 ub_meta = lb_meta + nblocks row_i => meta_buffer(lb_meta + 1:ub_meta) lb_meta = ub_meta ub_meta = lb_meta + nblocks col_i => meta_buffer(lb_meta + 1:ub_meta) ! Make local indexing if needed IF (keep_sparsity) THEN DO iblock = 1, original_lastblk row_i(iblock) = g2l_map_rows(row_i(iblock)) col_i(iblock) = g2l_map_cols(col_i(iblock)) END DO END IF lb_meta = ub_meta ub_meta = lb_meta + nblocks blk_p => meta_buffer(lb_meta + 1:ub_meta) ! ! Get sizes nze_max = this%product_wm%datasize nblks_max = this%product_wm%lastblk DO iblock = 1, nblocks nze = m_sizes(row_i(iblock))*n_sizes(col_i(iblock)) IF (nze .EQ. 0) CYCLE c_blk_id = hash_table_get(this%c_hashes(row_i(iblock)), col_i(iblock)) block_exists = c_blk_id .GT. 0 IF (block_exists) CYCLE nblks_max = nblks_max + 1 nze_max = nze_max + nze END DO ! Resize buffers CALL dbcsr_data_ensure_size(this%product_wm%data_area, & nze_max, factor=default_resize_factor, nocopy=.FALSE., & zero_pad=.TRUE.) CALL ensure_array_size(this%product_wm%row_i, ub=nblks_max, & factor=default_resize_factor, nocopy=.FALSE.) CALL ensure_array_size(this%product_wm%col_i, ub=nblks_max, & factor=default_resize_factor, nocopy=.FALSE.) CALL ensure_array_size(this%product_wm%blk_p, ub=nblks_max, & factor=default_resize_factor, nocopy=.FALSE.) DO iblock = 1, nblocks nze = m_sizes(row_i(iblock))*n_sizes(col_i(iblock)) IF (nze .EQ. 0) CYCLE lb_data = blk_p(iblock) c_blk_id = hash_table_get(this%c_hashes(row_i(iblock)), col_i(iblock)) block_exists = c_blk_id .GT. 0 IF (block_exists) THEN lb = this%product_wm%blk_p(c_blk_id) CALL block_add(this%product_wm%data_area, data_buffer, & lb, lb_data, nze) flop = flop + nze ELSE lb = this%product_wm%datasize + 1 this%product_wm%lastblk = this%product_wm%lastblk + 1 this%product_wm%datasize = this%product_wm%datasize + nze c_blk_id = this%product_wm%lastblk ! assign a new c-block-id CALL hash_table_add(this%c_hashes(row_i(iblock)), col_i(iblock), c_blk_id) this%product_wm%row_i(this%product_wm%lastblk) = row_i(iblock) this%product_wm%col_i(this%product_wm%lastblk) = col_i(iblock) this%product_wm%blk_p(this%product_wm%lastblk) = lb ! CALL dbcsr_block_copy_aa(this%product_wm%data_area, data_buffer, & m_sizes(row_i(iblock)), n_sizes(col_i(iblock)), lb, lb_data) END IF END DO CALL dbcsr_mm_sched_set_orig_datasize(this%sched, this%product_wm%datasize) END SUBROUTINE dbcsr_mm_csr_red3D SUBROUTINE dbcsr_mm_csr_purge_stacks(this, left, right) TYPE(dbcsr_mm_csr_type), INTENT(INOUT) :: this TYPE(dbcsr_type), INTENT(IN) :: left, right CALL flush_stacks(this, left, right, purge=.TRUE.) CALL dbcsr_mm_sched_barrier() END SUBROUTINE dbcsr_mm_csr_purge_stacks SUBROUTINE flush_stacks(this, left, right, purge) TYPE(dbcsr_mm_csr_type), INTENT(INOUT) :: this TYPE(dbcsr_type), INTENT(IN) :: left, right LOGICAL, INTENT(IN), OPTIONAL :: purge INTEGER :: i, min_fill, n_stacks INTEGER, DIMENSION(:, :), POINTER :: stack_data INTEGER, POINTER :: stack_fillcount TYPE(stack_descriptor_type) :: stack_descr n_stacks = SIZE(this%stacks_data, 3) min_fill = SIZE(this%stacks_data, 2)*3/4 !TODO: play with this IF (PRESENT(purge)) THEN IF (purge) min_fill = 0 END IF CALL dbcsr_mm_sched_begin_burst(this%sched) DO i = 1, n_stacks IF (this%stacks_fillcount(i) > min_fill) THEN stack_data => this%stacks_data(:, :, i) stack_fillcount => this%stacks_fillcount(i) stack_descr = this%stacks_descr(i) CALL dbcsr_mm_sched_process(this%sched, & left, right, & stack_data=stack_data, & stack_fillcount=stack_fillcount, & stack_descr=stack_descr) stack_fillcount = 0 END IF END DO CALL dbcsr_mm_sched_end_burst() END SUBROUTINE flush_stacks SUBROUTINE build_csr_index(mi, mf, ai, af, row_p, blk_info, list_index, & !! Builds and sorts a CSR index from a list index. nnorms, csr_norms, list_norms) INTEGER, INTENT(IN) :: mi, mf, ai, af INTEGER, DIMENSION(mi:mf + 1), INTENT(OUT) :: row_p INTEGER, DIMENSION(2, 1:af - ai + 1), INTENT(OUT) :: blk_info INTEGER, DIMENSION(3, 1:af), INTENT(IN) :: list_index INTEGER, INTENT(IN) :: nnorms REAL(KIND=sp), DIMENSION(1:af - ai + 1), INTENT(OUT) :: csr_norms REAL(KIND=sp), DIMENSION(:), INTENT(IN) :: list_norms LOGICAL, PARAMETER :: careful = .FALSE., dbg = .FALSE. INTEGER :: i, row INTEGER, DIMENSION(mi:mf) :: counts ! --------------------------------------------------------------------------- ! Counts blocks per row and calculates the offsets. IF (dbg) THEN WRITE (*, '(I7,1X,5(A,2(1X,I7)))') 0, "bci", mi, mf, ";", ai, af !write(*,'(3(I7))')list_index(:,ai:af) END IF counts(:) = 0 DO i = ai, af IF (careful) THEN IF (list_index(1, i) < mi) DBCSR_ABORT("Out of range") IF (list_index(1, i) > mf) DBCSR_ABORT("Out of range") END IF counts(list_index(1, i)) = counts(list_index(1, i)) + 1 END DO row_p(mi) = 0 DO i = mi + 1, mf + 1 row_p(i) = row_p(i - 1) + counts(i - 1) END DO ! Adds every block to its corresponding row. counts(:) = 0 DO i = ai, af row = list_index(1, i) counts(row) = counts(row) + 1 IF (careful) THEN IF (row_p(row) + counts(row) > af - ai + 1) DBCSR_ABORT("Out of range") IF (row_p(row) + counts(row) < 1) DBCSR_ABORT("Out of range") END IF blk_info(1, row_p(row) + counts(row)) = list_index(2, i) blk_info(2, row_p(row) + counts(row)) = list_index(3, i) IF (nnorms .GT. 0) THEN csr_norms(row_p(row) + counts(row)) = list_norms(i) END IF END DO IF (nnorms .EQ. 0) THEN csr_norms(:) = 0.0_sp END IF END SUBROUTINE build_csr_index ELEMENTAL FUNCTION my_checker_tr(row, column) RESULT(transpose) !! Determines whether a transpose must be applied !! !! Source !! This function is copied from dbcsr_dist_operations for speed reasons. INTEGER, INTENT(IN) :: row, column !! The absolute matrix row. !! The absolute matrix column. LOGICAL :: transpose transpose = BTEST(column + row, 0) .EQV. column .GE. row END FUNCTION my_checker_tr #include "utils/dbcsr_hash_table.f90" END MODULE dbcsr_mm_csr ================================================ FILE: src/mm/dbcsr_mm_dist_operations.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_mm_dist_operations !! DBCSR operations on distributions related to matrix multiplication USE dbcsr_array_types, ONLY: & array_data, array_equality, array_exists, array_hold, array_i1d_obj, array_new, & array_nullify, array_release, array_size USE dbcsr_dist_methods, ONLY: & dbcsr_distribution_col_dist, dbcsr_distribution_has_threads, dbcsr_distribution_hold, & dbcsr_distribution_make_threads, dbcsr_distribution_mp, dbcsr_distribution_ncols, & dbcsr_distribution_new, dbcsr_distribution_no_threads, dbcsr_distribution_nrows, & dbcsr_distribution_release, dbcsr_distribution_row_dist, dbcsr_distribution_thread_dist USE dbcsr_dist_operations, ONLY: dbcsr_get_local_cols, & dbcsr_get_local_rows, & find_all_local_elements, & rebin_distribution USE dbcsr_methods, ONLY: dbcsr_distribution, & dbcsr_release_locals USE dbcsr_mp_methods, ONLY: dbcsr_mp_mypcol, & dbcsr_mp_myprow, & dbcsr_mp_npcols, & dbcsr_mp_nprows USE dbcsr_toollib, ONLY: gcd USE dbcsr_types, ONLY: & dbcsr_distribution_obj, dbcsr_imagedistribution_obj, dbcsr_mp_obj, dbcsr_slot_home_pcol, & dbcsr_slot_home_prow, dbcsr_slot_home_vpcol, dbcsr_slot_home_vprow, & dbcsr_slot_nblkcols_local, dbcsr_slot_nblkrows_local, dbcsr_type #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE INTEGER :: idid = 0 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_dist_operations' PUBLIC :: dbcsr_create_image_dist, dbcsr_make_dists_dense PUBLIC :: image_calculator, make_sizes_dense PUBLIC :: dbcsr_reset_locals, dbcsr_reset_vlocals PUBLIC :: dbcsr_get_local_vrows, dbcsr_get_local_vcols LOGICAL, PARAMETER :: careful_mod = .FALSE. LOGICAL, PARAMETER :: debug_mod = .FALSE. CONTAINS SUBROUTINE dbcsr_create_image_dist(imgdist, dist, & match_row_pdist, match_row_idist, match_row_nbins, & match_col_pdist, match_col_idist, match_col_nbins, & nimages_rows, nimages_cols) !! Creates an image distribution given the other compatibility images TYPE(dbcsr_imagedistribution_obj), INTENT(OUT) :: imgdist !! distribution repetition TYPE(dbcsr_distribution_obj), INTENT(IN) :: dist !! distribution for which to form the image distribution INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: match_row_pdist, match_row_idist !! match the new row distribution to this row distribution !! match the row distribution to these row images INTEGER, INTENT(IN) :: match_row_nbins !! number of bins in the distribution to match the local rows INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: match_col_pdist, match_col_idist !! match the new column distribution to this column distribution !! match the new column distribution to these column images INTEGER, INTENT(IN) :: match_col_nbins, nimages_rows, & nimages_cols !! number of bins in the distribution to match the local columns CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_create_image_dist' INTEGER :: ncols, npcols, nprows, nrows INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_dist_data, col_img_data, col_vdist, & row_dist_data, row_img_data, row_vdist LOGICAL :: new_col_dist, new_row_dist TYPE(dbcsr_distribution_obj) :: new_dist TYPE(dbcsr_mp_obj) :: mp_env ! --------------------------------------------------------------------------- idid = idid + 1 ALLOCATE (imgdist%i) imgdist%i%refcount = 1 imgdist%i%id = idid mp_env = dbcsr_distribution_mp(dist) ! Determine the factors. nrows = dbcsr_distribution_nrows(dist) ncols = dbcsr_distribution_ncols(dist) nprows = dbcsr_mp_nprows(mp_env) npcols = dbcsr_mp_npcols(mp_env) IF (debug_mod) WRITE (*, '(1X,A,I5,"x",I5)') routineN//"pgrid", & nprows, npcols ! ! Create the new row distribution and row image distribution imgdist%i%row_decimation = nimages_rows/nprows imgdist%i%row_multiplicity = nimages_rows/gcd(nimages_rows, match_row_nbins) new_row_dist = .FALSE. ! IF (debug_mod) WRITE (*, *) routineN//'row decimation, multiplicity', & imgdist%i%row_decimation, imgdist%i%row_multiplicity IF (debug_mod) WRITE (*, *) routineN//" nprows, match prows", nprows, match_row_nbins ALLOCATE (row_img_data(nrows)) ALLOCATE (row_vdist(nrows)) ! IF (imgdist%i%row_decimation .EQ. 1 .AND. imgdist%i%row_multiplicity .EQ. 1 .AND. & .NOT. PRESENT(match_row_pdist)) THEN row_dist_data => dbcsr_distribution_row_dist(dist) row_img_data(:) = 1 ELSE IF (PRESENT(match_row_pdist)) THEN ALLOCATE (row_dist_data(nrows)) new_row_dist = .TRUE. IF (PRESENT(match_row_idist)) THEN CALL rebin_imaged_distribution(row_dist_data, row_img_data, & match_row_pdist, match_row_idist, & nprows, & imgdist%i%row_multiplicity, imgdist%i%row_decimation) ELSE CALL rebin_distribution(row_dist_data, row_img_data, & match_row_pdist, & nprows, & imgdist%i%row_multiplicity, imgdist%i%row_decimation) END IF ELSE row_dist_data => dbcsr_distribution_row_dist(dist) CALL reimage_distribution(row_img_data, & row_dist_data, nprows, imgdist%i%row_decimation) END IF END IF CALL make_vdistribution(nrows, row_vdist, row_dist_data, & imgdist%i%row_decimation, row_img_data) CALL array_new(imgdist%i%vrow_dist, row_vdist, gift=.TRUE.) ! ! Create the new column distribution and column image distribution imgdist%i%col_decimation = nimages_cols/npcols imgdist%i%col_multiplicity = nimages_cols/gcd(nimages_cols, match_col_nbins) new_col_dist = .FALSE. ! IF (debug_mod) WRITE (*, *) routineN//'col decimation, multiplicity', & imgdist%i%col_decimation, imgdist%i%col_multiplicity IF (debug_mod) WRITE (*, *) routineN//" npcols, match pcols", npcols, match_col_nbins ALLOCATE (col_img_data(ncols)) ALLOCATE (col_vdist(ncols)) ! IF (imgdist%i%col_decimation .EQ. 1 .AND. imgdist%i%col_multiplicity .EQ. 1 .AND. & .NOT. PRESENT(match_col_pdist)) THEN col_dist_data => dbcsr_distribution_col_dist(dist) col_img_data(:) = 1 ELSE IF (PRESENT(match_col_pdist)) THEN ALLOCATE (col_dist_data(ncols)) new_col_dist = .TRUE. IF (PRESENT(match_col_idist)) THEN CALL rebin_imaged_distribution(col_dist_data, col_img_data, & match_col_pdist, match_col_idist, & npcols, & imgdist%i%col_multiplicity, imgdist%i%col_decimation) ELSE CALL rebin_distribution(col_dist_data, col_img_data, & match_col_pdist, & npcols, & imgdist%i%col_multiplicity, imgdist%i%col_decimation) END IF ELSE col_dist_data => dbcsr_distribution_col_dist(dist) CALL reimage_distribution(col_img_data, & col_dist_data, & npcols, imgdist%i%col_decimation) END IF END IF CALL make_vdistribution(ncols, col_vdist, col_dist_data, & imgdist%i%col_decimation, col_img_data) CALL array_new(imgdist%i%vcol_dist, col_vdist, gift=.TRUE.) ! ! Copy the row & column distribution from old distribution IF (new_row_dist .AND. new_col_dist) THEN CALL dbcsr_distribution_new(new_dist, & mp_env, & row_dist_data, col_dist_data, & reuse_arrays=.TRUE.) ELSE CALL dbcsr_distribution_new(new_dist, & mp_env, & row_dist_data, col_dist_data) IF (new_row_dist) DEALLOCATE (row_dist_data) IF (new_col_dist) DEALLOCATE (col_dist_data) END IF ! Now finish the distribution image. imgdist%i%main = new_dist CALL array_new(imgdist%i%col_image, col_img_data, gift=.TRUE.) CALL array_new(imgdist%i%row_image, row_img_data, gift=.TRUE.) ! imgdist%i%has_other_vl_rows = .FALSE. imgdist%i%has_other_vl_cols = .FALSE. imgdist%i%has_global_vrow_map = .FALSE. imgdist%i%has_global_vcol_map = .FALSE. ! !$ IF (dbcsr_distribution_has_threads(dist)) THEN !$ imgdist%i%main%d%num_threads = dist%d%num_threads !$ imgdist%i%main%d%has_thread_dist = .TRUE. !$ imgdist%i%main%d%thread_dist = dist%d%thread_dist !$ CALL array_hold(imgdist%i%main%d%thread_dist) !$ END IF END SUBROUTINE dbcsr_create_image_dist SUBROUTINE dbcsr_new_image_dist(imgdist, dist, & template) TYPE(dbcsr_imagedistribution_obj), INTENT(OUT) :: imgdist TYPE(dbcsr_distribution_obj), INTENT(IN) :: dist TYPE(dbcsr_imagedistribution_obj), INTENT(IN) :: template ! --------------------------------------------------------------------------- idid = idid + 1 ALLOCATE (imgdist%i) imgdist%i%refcount = 1 imgdist%i%id = idid imgdist%i%row_decimation = template%i%row_decimation imgdist%i%row_multiplicity = template%i%row_multiplicity imgdist%i%col_decimation = template%i%col_decimation imgdist%i%col_multiplicity = template%i%col_multiplicity ! NULLIFY (imgdist%i%other_vl_rows) NULLIFY (imgdist%i%other_vl_cols) CALL array_nullify(imgdist%i%global_vrow_map) CALL array_nullify(imgdist%i%global_vcol_map) imgdist%i%has_other_vl_rows = .FALSE. imgdist%i%has_other_vl_cols = .FALSE. imgdist%i%has_global_vrow_map = .FALSE. imgdist%i%has_global_vcol_map = .FALSE. ! imgdist%i%main = dist CALL dbcsr_distribution_hold(imgdist%i%main) ! END SUBROUTINE dbcsr_new_image_dist SUBROUTINE dbcsr_make_dists_dense(product_dist, left_rdist, right_rdist, & !! Prepares distributions for making dense matrices. dense_product_dist, dense_left_rdist, dense_right_rdist, & partial, & m_map, k_vmap, n_map, & old_m_sizes) TYPE(dbcsr_distribution_obj), INTENT(IN) :: product_dist TYPE(dbcsr_imagedistribution_obj), INTENT(IN) :: left_rdist, right_rdist TYPE(dbcsr_distribution_obj), INTENT(OUT) :: dense_product_dist TYPE(dbcsr_imagedistribution_obj), INTENT(OUT) :: dense_left_rdist, dense_right_rdist LOGICAL, INTENT(IN) :: partial TYPE(array_i1d_obj), INTENT(OUT) :: m_map, k_vmap, n_map TYPE(array_i1d_obj), INTENT(IN) :: old_m_sizes CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_dists_dense' INTEGER :: error_handle, i, j, k_nbins, m_nbins, & n_nbins, nthreads INTEGER, DIMENSION(:), POINTER :: tdist TYPE(array_i1d_obj) :: new_k_idist, new_k_pdist, new_k_vdist, & new_m_dist, new_m_sizes, new_n_dist, & old_k_vdist, old_m_dist, old_n_dist TYPE(dbcsr_distribution_obj) :: dense_left_dist, dense_right_dist ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) ! IF (.NOT. dbcsr_distribution_has_threads(product_dist)) & DBCSR_ABORT("Product distribution must have threads.") tdist => array_data(dbcsr_distribution_thread_dist(product_dist)) old_m_dist = product_dist%d%row_dist_block old_n_dist = product_dist%d%col_dist_block old_k_vdist = right_rdist%i%vrow_dist m_nbins = dbcsr_mp_nprows(product_dist%d%mp_env) n_nbins = dbcsr_mp_npcols(product_dist%d%mp_env) k_nbins = dbcsr_mp_nprows(right_rdist%i%main%d%mp_env)*right_rdist%i%row_decimation IF (.NOT. array_equality(old_k_vdist, left_rdist%i%vcol_dist)) & DBCSR_ABORT("k distribution mismatch") nthreads = product_dist%d%num_threads ! IF (partial) THEN new_m_dist = old_m_dist CALL array_hold(new_m_dist) new_n_dist = old_n_dist CALL array_hold(new_n_dist) dense_product_dist = product_dist CALL dbcsr_distribution_hold(dense_product_dist) CALL array_new(m_map, (/(i, i=1, array_size(new_m_dist))/), lb=1) CALL array_new(n_map, (/(i, i=1, array_size(new_n_dist))/), lb=1) ELSE CALL dbcsr_make_1dist_dense(m_nbins, old_m_dist, new_m_dist, m_map, & nthreads, tdist) CALL dbcsr_make_1dist_dense(n_nbins, old_n_dist, new_n_dist, n_map, 0) CALL dbcsr_distribution_new(dense_product_dist, product_dist%d%mp_env, & new_m_dist, new_n_dist) CALL make_sizes_dense(old_m_sizes, m_map, array_size(new_m_dist), new_m_sizes) CALL dbcsr_distribution_make_threads(dense_product_dist, & array_data(new_m_sizes)) CALL array_release(new_m_sizes) tdist => array_data(dbcsr_distribution_thread_dist(dense_product_dist)) ! Resets the thread distribution to be in-order. DO i = 1, m_nbins tdist((i - 1)*nthreads + 1:(i)*nthreads) = (/(j, j=0, nthreads - 1)/) END DO END IF ! CALL dbcsr_make_1dist_dense(k_nbins, old_k_vdist, new_k_vdist, k_vmap, 0) CALL v_to_p_i_dist_o(new_k_vdist, & left_rdist%i%col_decimation, new_k_pdist, new_k_idist) ! Left CALL dbcsr_distribution_new(dense_left_dist, left_rdist%i%main%d%mp_env, & new_m_dist, new_k_pdist) CALL dbcsr_distribution_no_threads(dense_left_dist) dense_left_dist%d%thread_dist = dbcsr_distribution_thread_dist(dense_product_dist) CALL array_hold(dense_left_dist%d%thread_dist) dense_left_dist%d%has_thread_dist = .TRUE. CALL dbcsr_new_image_dist(dense_left_rdist, dense_left_dist, left_rdist) CALL dbcsr_distribution_release(dense_left_dist) CALL array_new(dense_left_rdist%i%row_image, & (/(1, i=1, array_size(new_m_dist))/), lb=1) dense_left_rdist%i%col_image = new_k_idist CALL array_hold(new_k_idist) dense_left_rdist%i%vrow_dist = new_m_dist CALL array_hold(new_m_dist) dense_left_rdist%i%vcol_dist = new_k_vdist CALL array_hold(new_k_vdist) ! CALL array_release(new_k_pdist) CALL array_release(new_k_idist) ! Right CALL v_to_p_i_dist_o(new_k_vdist, & right_rdist%i%row_decimation, new_k_pdist, new_k_idist) CALL dbcsr_distribution_new(dense_right_dist, right_rdist%i%main%d%mp_env, & new_k_pdist, new_n_dist) CALL dbcsr_new_image_dist(dense_right_rdist, dense_right_dist, right_rdist) CALL dbcsr_distribution_release(dense_right_dist) CALL array_new(dense_right_rdist%i%col_image, & (/(1, i=1, array_size(new_n_dist))/), lb=1) dense_right_rdist%i%row_image = new_k_idist CALL array_hold(new_k_idist) dense_right_rdist%i%vrow_dist = new_k_vdist CALL array_hold(new_k_vdist) dense_right_rdist%i%vcol_dist = new_n_dist CALL array_hold(new_n_dist) ! CALL array_release(new_k_idist) CALL array_release(new_k_pdist) CALL array_release(new_m_dist) CALL array_release(new_n_dist) CALL array_release(new_k_vdist) ! CALL timestop(error_handle) END SUBROUTINE dbcsr_make_dists_dense SUBROUTINE dbcsr_reset_locals(matrix) !! Resets local rows, columns to the correct arrays and values. TYPE(dbcsr_type), INTENT(INOUT) :: matrix LOGICAL, PARAMETER :: dbg = .FALSE. TYPE(dbcsr_distribution_obj) :: dist ! --------------------------------------------------------------------------- dist = dbcsr_distribution(matrix) CALL dbcsr_release_locals(matrix) ! Rows IF (dbg) & WRITE (*, *) "reset local rows for ", TRIM(matrix%name), & matrix%nblkrows_local, "prow", matrix%index(dbcsr_slot_home_prow), & dbcsr_mp_myprow(dbcsr_distribution_mp(matrix%dist)) CALL dbcsr_get_local_rows(dist, matrix%local_rows, & matrix%index(dbcsr_slot_home_prow)) CALL array_hold(matrix%local_rows) IF (dbg) WRITE (*, *) "local rows", matrix%local_rows%low%data matrix%nblkrows_local = array_size(matrix%local_rows) CALL dbcsr_get_global_row_map(dist, matrix%global_rows) CALL array_hold(matrix%global_rows) matrix%has_local_rows = .TRUE. matrix%has_global_rows = .TRUE. ! Columns IF (dbg) & WRITE (*, *) "reset local cols for ", TRIM(matrix%name), & matrix%nblkcols_local, "pcol", matrix%index(dbcsr_slot_home_pcol), & dbcsr_mp_mypcol(dbcsr_distribution_mp(matrix%dist)) CALL dbcsr_get_local_cols(dist, matrix%local_cols, & matrix%index(dbcsr_slot_home_pcol)) CALL array_hold(matrix%local_cols) IF (dbg) WRITE (*, *) "local cols", matrix%local_cols%low%data matrix%nblkcols_local = array_size(matrix%local_cols) CALL dbcsr_get_global_col_map(dist, matrix%global_cols) CALL array_hold(matrix%global_cols) matrix%has_local_cols = .TRUE. matrix%has_global_cols = .TRUE. ! END SUBROUTINE dbcsr_reset_locals SUBROUTINE dbcsr_reset_vlocals(matrix, imgdist, do_rows) !! Resets local rows, columns to the correct arrays and values !! for images. TYPE(dbcsr_type), INTENT(INOUT) :: matrix TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT) :: imgdist LOGICAL, INTENT(IN), OPTIONAL :: do_rows LOGICAL :: my_do_rows ! --------------------------------------------------------------------------- CALL dbcsr_release_locals(matrix) my_do_rows = .TRUE. IF (PRESENT(do_rows)) my_do_rows = do_rows ! Rows IF (.NOT. PRESENT(do_rows) .OR. my_do_rows) THEN CALL dbcsr_get_local_vrows(imgdist, matrix%local_rows, & matrix%index(dbcsr_slot_home_vprow)) ELSE matrix%local_rows = imgdist%i%main%d%local_rows END IF CALL array_hold(matrix%local_rows) matrix%has_local_rows = .TRUE. matrix%nblkrows_local = array_size(matrix%local_rows) matrix%index(dbcsr_slot_nblkrows_local) = array_size(matrix%local_rows) CALL dbcsr_get_global_vrow_map(imgdist, matrix%global_rows) CALL array_hold(matrix%global_rows) matrix%has_global_rows = .TRUE. ! Columns IF (.NOT. PRESENT(do_rows) .OR. .NOT. my_do_rows) THEN CALL dbcsr_get_local_vcols(imgdist, matrix%local_cols, & matrix%index(dbcsr_slot_home_vpcol)) ELSE matrix%local_cols = imgdist%i%main%d%local_cols END IF CALL array_hold(matrix%local_cols) matrix%has_local_cols = .TRUE. matrix%nblkcols_local = array_size(matrix%local_cols) matrix%index(dbcsr_slot_nblkcols_local) = array_size(matrix%local_cols) CALL dbcsr_get_global_vcol_map(imgdist, matrix%global_cols) CALL array_hold(matrix%global_cols) matrix%has_global_cols = .TRUE. END SUBROUTINE dbcsr_reset_vlocals SUBROUTINE dbcsr_get_local_vrows(imgdist, local_vrows, local_vprow) !! Determines mapping from local to global virtual process rows TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT) :: imgdist !! image distribution TYPE(array_i1d_obj), INTENT(OUT) :: local_vrows !! local rows INTEGER, INTENT(IN) :: local_vprow !! the local virtual process row CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_local_vrows' INTEGER :: el, error_handle, nvprows, vprow INTEGER, ALLOCATABLE, DIMENSION(:) :: itmp, nle INTEGER, DIMENSION(:), POINTER :: vrow_dist IF (careful_mod) CALL timeset(routineN, error_handle) ! If the current local row mappings do not exist, create them. IF (.NOT. imgdist%i%has_other_vl_rows) THEN imgdist%i%has_other_vl_rows = .TRUE. nvprows = dbcsr_mp_nprows(dbcsr_distribution_mp(imgdist%i%main)) & *imgdist%i%row_decimation ALLOCATE (imgdist%i%other_vl_rows(0:nvprows - 1)) ALLOCATE (nle(0:nvprows - 1)) vrow_dist => array_data(imgdist%i%vrow_dist) ! Count the number of local elements per row. nle(:) = 0 DO el = 1, SIZE(vrow_dist) vprow = vrow_dist(el) nle(vprow) = nle(vprow) + 1 END DO DO vprow = 0, nvprows - 1 ALLOCATE (itmp(nle(vprow))) itmp = 0 CALL array_new(imgdist%i%other_vl_rows(vprow), & itmp, lb=1) DEALLOCATE (itmp) END DO DEALLOCATE (nle) CALL find_all_local_elements(imgdist%i%other_vl_rows, vrow_dist, nvprows) ELSE IF (careful_mod .AND. .NOT. ASSOCIATED(imgdist%i%other_vl_rows)) & DBCSR_ABORT("Local rows mapping does not exist.") END IF local_vrows = imgdist%i%other_vl_rows(local_vprow) IF (careful_mod) CALL timestop(error_handle) END SUBROUTINE dbcsr_get_local_vrows SUBROUTINE dbcsr_get_local_vcols(imgdist, local_vcols, local_vpcol) !! Determines mapping from local to global virtual process columns TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT) :: imgdist !! image distribution TYPE(array_i1d_obj), INTENT(OUT) :: local_vcols !! local columns INTEGER, INTENT(IN) :: local_vpcol !! the local virtual process column CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_local_vcols' INTEGER :: el, error_handle, nvpcols, vpcol INTEGER, ALLOCATABLE, DIMENSION(:) :: nle INTEGER, DIMENSION(:), POINTER :: itmp, vcol_dist IF (careful_mod) CALL timeset(routineN, error_handle) ! If the current local col mappings do not exist, create them. IF (.NOT. imgdist%i%has_other_vl_cols) THEN imgdist%i%has_other_vl_cols = .TRUE. nvpcols = dbcsr_mp_npcols(dbcsr_distribution_mp(imgdist%i%main)) & *imgdist%i%col_decimation ALLOCATE (imgdist%i%other_vl_cols(0:nvpcols - 1)) ALLOCATE (nle(0:nvpcols - 1)) vcol_dist => array_data(imgdist%i%vcol_dist) ! Count the number of local elements per col. nle(:) = 0 DO el = 1, SIZE(vcol_dist) vpcol = vcol_dist(el) nle(vpcol) = nle(vpcol) + 1 END DO DO vpcol = 0, nvpcols - 1 ALLOCATE (itmp(nle(vpcol))) itmp = 0 CALL array_new(imgdist%i%other_vl_cols(vpcol), & itmp, lb=1) DEALLOCATE (itmp) END DO DEALLOCATE (nle) CALL find_all_local_elements(imgdist%i%other_vl_cols, vcol_dist, nvpcols) ELSE IF (careful_mod .AND. .NOT. ASSOCIATED(imgdist%i%other_vl_cols)) & DBCSR_ABORT("Local cols mapping does not exist.") END IF local_vcols = imgdist%i%other_vl_cols(local_vpcol) IF (careful_mod) CALL timestop(error_handle) END SUBROUTINE dbcsr_get_local_vcols SUBROUTINE image_calculator(image_dist, & prow, rowi, pcol, coli, vprow, vpcol, & myprow, mypcol, myrowi, mycoli, myvprow, myvpcol, & vprow_shift, vpcol_shift, & shifting) !! Transform between virtual process rows/columns and actual process rows/columns and images therein. !! !! Shifting !! (L)eft and (R)ight shifting are "shifts from", (l)eft and (r)ight !! are "shifts to". A caller (or the my* specifications) would use !! L/R to see which data he has (i.e., from where his data was !! shifted). To see where the caller's data goes to, use l/r. TYPE(dbcsr_imagedistribution_obj), INTENT(IN) :: image_dist INTEGER, INTENT(OUT), OPTIONAL :: prow, rowi, pcol, coli, vprow, vpcol INTEGER, INTENT(IN), OPTIONAL :: myprow, mypcol, myrowi, mycoli, myvprow, & myvpcol, vprow_shift, vpcol_shift CHARACTER, INTENT(IN), OPTIONAL :: shifting INTEGER :: col_mult, my_pcol, my_prow, ncol_images, & npcols, nprows, nrow_images, nvpcols, & nvprows, row_mult, vcol, vrow TYPE(dbcsr_mp_obj) :: mp ! --------------------------------------------------------------------------- IF (careful_mod .AND. .NOT. PRESENT(myvprow) .AND. .NOT. PRESENT(mycoli)) THEN CALL dbcsr_abort(__LOCATION__, & "Must specify either (process row and row image) or (virtual process row)") END IF IF (careful_mod .AND. .NOT. PRESENT(myvpcol) .AND. .NOT. PRESENT(mycoli)) THEN CALL dbcsr_abort(__LOCATION__, & "Must specify either (process col and col image) or (virtual process col)") END IF ! mp = image_dist%i%main%d%mp_env nprows = SIZE(mp%mp%pgrid, 1) npcols = SIZE(mp%mp%pgrid, 2) nrow_images = image_dist%i%row_decimation ncol_images = image_dist%i%col_decimation row_mult = image_dist%i%row_multiplicity col_mult = image_dist%i%col_multiplicity nvprows = nprows*nrow_images nvpcols = npcols*ncol_images ! IF (PRESENT(myprow)) THEN my_prow = myprow ELSE my_prow = mp%mp%myprow END IF IF (PRESENT(mypcol)) THEN my_pcol = mypcol ELSE my_pcol = mp%mp%mypcol END IF ! IF (.NOT. PRESENT(myvprow)) THEN vrow = my_prow*nrow_images + myrowi - 1 ELSE vrow = myvprow END IF IF (.NOT. PRESENT(myvpcol)) THEN vcol = my_pcol*ncol_images + mycoli - 1 ELSE vcol = myvpcol END IF ! IF (PRESENT(vprow_shift)) vrow = vrow + vprow_shift IF (PRESENT(vpcol_shift)) vcol = vcol + vpcol_shift IF (PRESENT(shifting)) THEN SELECT CASE (shifting) CASE ('R') vrow = vrow + my_pcol*row_mult CASE ('L') vcol = vcol + my_prow*col_mult CASE ('r') vrow = vrow - my_pcol*row_mult CASE ('l') vcol = vcol - my_prow*col_mult END SELECT END IF vrow = MODULO(vrow, nvprows) vcol = MODULO(vcol, nvpcols) IF (PRESENT(prow)) prow = vrow/nrow_images IF (PRESENT(rowi)) rowi = MODULO(vrow, nrow_images) + 1 IF (PRESENT(pcol)) pcol = vcol/ncol_images IF (PRESENT(coli)) coli = MODULO(vcol, ncol_images) + 1 IF (PRESENT(vprow)) vprow = vrow IF (PRESENT(vpcol)) vpcol = vcol END SUBROUTINE image_calculator SUBROUTINE make_sizes_dense(old_sizes, mapping, nel_new, new_sizes) !! Matches row/block sizes and offsets to a given distribution !! @note !! Used for making matrices dense/undense !! @endnote TYPE(array_i1d_obj), INTENT(IN) :: old_sizes, mapping INTEGER, INTENT(IN) :: nel_new TYPE(array_i1d_obj), INTENT(OUT) :: new_sizes INTEGER :: el, nel_old INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: map, new_s, old_s ! --------------------------------------------------------------------------- map => array_data(mapping) old_s => array_data(old_sizes) nel_old = array_size(old_sizes) ALLOCATE (new_s(nel_new)) new_s(:) = 0 DO el = 1, nel_old new_s(map(el)) = new_s(map(el)) + old_s(el) END DO CALL array_new(new_sizes, new_s, gift=.TRUE.) END SUBROUTINE make_sizes_dense SUBROUTINE dbcsr_make_1dist_dense(nbins, old_dist, dense_dist, dist_map, nsubdist, subdist) !! Makes a 1-D distribution dense. INTEGER, INTENT(IN) :: nbins !! Number of bins in the main distribution TYPE(array_i1d_obj), INTENT(IN) :: old_dist !! Current distribution TYPE(array_i1d_obj), INTENT(OUT) :: dense_dist, dist_map !! Dense distribution !! Map from current to dense distribution INTEGER, INTENT(IN) :: nsubdist !! Number of bins in the subdistribution INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: subdist !! Subdistribution INTEGER :: b, i, n_new_bins INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: dense, map, old_d ! --------------------------------------------------------------------------- IF (nsubdist .EQ. 0) THEN n_new_bins = nbins ELSE n_new_bins = nbins*nsubdist END IF old_d => array_data(old_dist) ALLOCATE (dense(n_new_bins)) ALLOCATE (map(array_size(old_dist))) ! IF (nsubdist .EQ. 0) THEN dense(:) = (/(b, b=0, n_new_bins - 1)/) map(:) = old_d(:) + 1 ELSE DO i = 1, nbins dense((i - 1)*nsubdist + 1:(i)*nsubdist) = i - 1 END DO map(:) = old_d(:)*nsubdist + subdist(:) + 1 END IF ! CALL array_new(dense_dist, dense, gift=.TRUE.) CALL array_new(dist_map, map, gift=.TRUE.) END SUBROUTINE dbcsr_make_1dist_dense pure SUBROUTINE v_to_p_i_dist(nel, vdist, nim, pdist, idist) !! Converts virtual 1-D distribution to process and image INTEGER, INTENT(in) :: nel INTEGER, DIMENSION(1:nel), INTENT(in) :: vdist INTEGER, INTENT(in) :: nim INTEGER, DIMENSION(1:nel), INTENT(out) :: pdist, idist INTEGER :: i DO i = 1, nel pdist(i) = vdist(i)/nim idist(i) = MOD(vdist(i), nim) + 1 END DO END SUBROUTINE v_to_p_i_dist SUBROUTINE v_to_p_i_dist_o(vdist, nim, pdist, idist) TYPE(array_i1d_obj), INTENT(in) :: vdist INTEGER, INTENT(in) :: nim TYPE(array_i1d_obj), INTENT(out) :: pdist, idist INTEGER :: nel INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: id, pd, vd nel = array_size(vdist) vd => array_data(vdist) ALLOCATE (pd(nel), id(nel)) CALL v_to_p_i_dist(nel, vd, nim, pd, id) CALL array_new(pdist, pd, gift=.TRUE.) CALL array_new(idist, id, gift=.TRUE.) END SUBROUTINE v_to_p_i_dist_o SUBROUTINE dbcsr_get_global_row_map(dist, row_map) !! Determines mapping from global to local rows TYPE(dbcsr_distribution_obj), INTENT(INOUT) :: dist !! mapping for this distribution TYPE(array_i1d_obj), INTENT(OUT) :: row_map !! mapping to local rows CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_global_row_map' INTEGER :: error_handle, nprows INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: rmap, row_dist CALL timeset(routineN, error_handle) ! If the current local row mappings do not exist, create them. IF (.NOT. dist%d%has_global_row_map) THEN row_dist => dbcsr_distribution_row_dist(dist) ALLOCATE (rmap(SIZE(row_dist))) nprows = dbcsr_mp_nprows(dbcsr_distribution_mp(dist)) CALL map_all_local_elements(rmap, row_dist, nprows) CALL array_new(dist%d%global_row_map, rmap, gift=.TRUE.) dist%d%has_global_row_map = .TRUE. ELSE IF (careful_mod .AND. .NOT. array_exists(dist%d%global_row_map)) & DBCSR_ABORT("Row map does not exist.") END IF row_map = dist%d%global_row_map CALL timestop(error_handle) END SUBROUTINE dbcsr_get_global_row_map SUBROUTINE dbcsr_get_global_col_map(dist, col_map) !! Determines mapping from global to local columns TYPE(dbcsr_distribution_obj), INTENT(INOUT) :: dist !! mapping for this distribution TYPE(array_i1d_obj), INTENT(OUT) :: col_map !! mapping to local columns CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_global_col_map' INTEGER :: error_handle, npcols INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: cmap, col_dist CALL timeset(routineN, error_handle) ! If the current local col mappings do not exist, create them. IF (.NOT. dist%d%has_global_col_map) THEN col_dist => dbcsr_distribution_col_dist(dist) ALLOCATE (cmap(SIZE(col_dist))) npcols = dbcsr_mp_npcols(dbcsr_distribution_mp(dist)) CALL map_all_local_elements(cmap, col_dist, npcols) CALL array_new(dist%d%global_col_map, cmap, gift=.TRUE.) dist%d%has_global_col_map = .TRUE. ELSE IF (careful_mod .AND. .NOT. array_exists(dist%d%global_col_map)) & DBCSR_ABORT("Column map does not exist.") END IF col_map = dist%d%global_col_map CALL timestop(error_handle) END SUBROUTINE dbcsr_get_global_col_map SUBROUTINE dbcsr_get_global_vrow_map(imgdist, vrow_map) !! Determines mapping from global to virtual local rows TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT) :: imgdist !! mapping for this image distribution TYPE(array_i1d_obj), INTENT(OUT) :: vrow_map !! mapping to local rows CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_global_vrow_map' INTEGER :: error_handle, nvprows INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: rmap, vrow_dist IF (careful_mod) CALL timeset(routineN, error_handle) ! If the current local row mappings do not exist, create them. IF (.NOT. imgdist%i%has_global_vrow_map) THEN vrow_dist => array_data(imgdist%i%vrow_dist) ALLOCATE (rmap(SIZE(vrow_dist))) nvprows = dbcsr_mp_nprows(dbcsr_distribution_mp(imgdist%i%main)) & *imgdist%i%row_decimation CALL map_all_local_elements(rmap, vrow_dist, nvprows) CALL array_new(imgdist%i%global_vrow_map, rmap, gift=.TRUE.) imgdist%i%has_global_vrow_map = .TRUE. ELSE IF (careful_mod .AND. .NOT. array_exists(imgdist%i%global_vrow_map)) & DBCSR_ABORT("Row map does not exist.") END IF vrow_map = imgdist%i%global_vrow_map IF (careful_mod) CALL timestop(error_handle) END SUBROUTINE dbcsr_get_global_vrow_map SUBROUTINE dbcsr_get_global_vcol_map(imgdist, vcol_map) !! Determines mapping from global to virtual local columns TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT) :: imgdist !! mapping for this image distribution TYPE(array_i1d_obj), INTENT(OUT) :: vcol_map !! mapping to local columns CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_global_vcol_map' INTEGER :: error_handle, nvpcols INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: rmap, vcol_dist IF (careful_mod) CALL timeset(routineN, error_handle) ! If the current local col mappings do not exist, create them. IF (.NOT. imgdist%i%has_global_vcol_map) THEN vcol_dist => array_data(imgdist%i%vcol_dist) ALLOCATE (rmap(SIZE(vcol_dist))) nvpcols = dbcsr_mp_npcols(dbcsr_distribution_mp(imgdist%i%main)) & *imgdist%i%col_decimation CALL map_all_local_elements(rmap, vcol_dist, nvpcols) CALL array_new(imgdist%i%global_vcol_map, rmap, gift=.TRUE.) imgdist%i%has_global_vcol_map = .TRUE. ELSE IF (careful_mod .AND. .NOT. array_exists(imgdist%i%global_vcol_map)) & DBCSR_ABORT("Col map does not exist.") END IF vcol_map = imgdist%i%global_vcol_map IF (careful_mod) CALL timestop(error_handle) END SUBROUTINE dbcsr_get_global_vcol_map PURE SUBROUTINE map_all_local_elements(global_elements, & bin_distribution, nbins) !! Points to local virtual elements. !! All elements are mapped at once. Therefore an entry in the !! resulting array can be used as a lookup index for any of the local !! element arrays. The distribution itself tells into which array to !! look. INTEGER, DIMENSION(:), INTENT(OUT) :: global_elements !! enumerated local elements INTEGER, DIMENSION(:), INTENT(IN) :: bin_distribution !! distribution of elements to bins INTEGER, INTENT(IN) :: nbins !! number of bins INTEGER :: bin, el INTEGER, DIMENSION(0:nbins - 1) :: nlve nlve(:) = 0 DO el = 1, SIZE(bin_distribution) bin = bin_distribution(el) nlve(bin) = nlve(bin) + 1 global_elements(el) = nlve(bin) END DO END SUBROUTINE map_all_local_elements SUBROUTINE reimage_distribution(images, my_bins, & nbins, nimages) !! Makes new distribution with decimation and multiplicity !! Multiplicity is being ignored, maybe this is a bug !! !! Definition of multiplicity and nimages !! Multiplicity and decimation (number of images) are used to !! match process grid coordinates on non-square process !! grids. Given source_nbins and target_nbins, their relation is !! source_nbins * target_multiplicity !! = target_nbins * target_nimages. !! It is best when both multiplicity and nimages are small. To !! get these two factors, then, one can use the following formulas: !! nimages = lcm(source_nbins, target_nbins) / target_nbins !! multiplicity = target_nbins / gcd(source_nbins, target_nbins) !! from the target's point of view (nimages = target_nimages). !! !! Mapping !! The new distribution comprises of real bins and images within !! bins. These can be view as target_nbins*nimages virtual !! columns. These same virtual columns are also !! source_nbins*multiplicity in number. Therefore these virtual !! columns are mapped from source_nbins*multiplicity onto !! target_bins*nimages (each target bin has nimages images): !! Source 4: |1 2 3|4 5 6|7 8 9|A B C| (4*3) !! Target 6: |1 2|3 4|5 6|7 8|9 A|B C| (6*2) !! multiplicity=3, nimages=2, 12 virtual columns (1-C). !! Source bin elements are evenly mapped into one of multiplicity !! virtual columns. Other (non-even, block-size aware) mappings !! could be better. INTEGER, DIMENSION(:), INTENT(OUT) :: images !! new image distribution INTEGER, DIMENSION(:), INTENT(IN) :: my_bins !! Basis for the new images INTEGER, INTENT(IN) :: nbins, nimages !! number of bins in the new real distribution !! number of images in the new distribution INTEGER :: bin, i INTEGER, ALLOCATABLE, DIMENSION(:) :: bin_multiplier ! --------------------------------------------------------------------------- ALLOCATE (bin_multiplier(0:nbins - 1)) bin_multiplier(:) = 0 DO i = 1, SIZE(my_bins) bin = my_bins(i) images(i) = 1 + bin_multiplier(bin) bin_multiplier(bin) = bin_multiplier(bin) + 1 IF (bin_multiplier(bin) .GE. nimages) THEN bin_multiplier(bin) = 0 END IF END DO END SUBROUTINE reimage_distribution PURE SUBROUTINE make_vdistribution(nelements, vbins, bins, decimation, images) !! Makes new virtual distribution of rows/columns. INTEGER, INTENT(IN) :: nelements !! number of elements INTEGER, DIMENSION(nelements), INTENT(OUT) :: vbins !! virtual bins INTEGER, DIMENSION(nelements), INTENT(IN) :: bins !! bins to which elements belong INTEGER, INTENT(IN) :: decimation !! matching between bins INTEGER, DIMENSION(nelements), INTENT(IN) :: images !! images to which element belong INTEGER :: el ! --------------------------------------------------------------------------- DO el = 1, nelements vbins(el) = bins(el)*decimation + images(el) - 1 END DO END SUBROUTINE make_vdistribution SUBROUTINE rebin_imaged_distribution(new_bins, images, & source_bins, source_images, nbins, multiplicity, nimages) !! Makes new distribution with multiplicity !! !! Definition of multiplicity and nimages !! Multiplicity and number of images are used to match process !! grid coordinates on non-square process grids. Given !! source_nbins and target_nbins, their relation is !! source_nbins * multiplicity = target_nbins * nimages. !! It is best when both multiplicity and nimages are small. To !! get these two factors, then, one can use the following formulas: !! nimages = lcm(source_nbins, target_nbins) / target_nbins !! multiplicity = target_nbins / gcd(source_nbins, target_nbins) !! !! Mapping !! The new distribution comprises of real bins and images within !! bins. These can be view as target_nbins*nimages virtual !! columns. These same virtual columns are also !! source_nbins*multiplicity in number. Therefore these virtual !! columns are mapped from source_nbins*multiplicity onto !! target_bins*nimages (each target bin has nimages images): !! Source 4: |1 2 3|4 5 6|7 8 9|A B C| (4*3) !! Target 6: |1 2|3 4|5 6|7 8|9 A|B C| (6*2) !! multiplicity=3, nimages=2, 12 virtual columns (1-C). !! Source bin elements are evenly mapped into one of multiplicity !! virtual columns. Other (non-even, block-size aware) mappings !! could be better. INTEGER, DIMENSION(:), INTENT(OUT) :: new_bins, images !! new real distribution !! new image distribution INTEGER, DIMENSION(:), INTENT(IN) :: source_bins, source_images !! Basis for the new distribution and images !! Basis for the new distribution and images INTEGER, INTENT(IN) :: nbins, multiplicity, nimages !! number of bins in the new real distribution !! multiplicity !! number of images in the new distribution INTEGER :: i, virtual_bin ! --------------------------------------------------------------------------- DO i = 1, SIZE(new_bins) IF (i .LE. SIZE(source_bins)) THEN virtual_bin = source_bins(i)*multiplicity + source_images(i) - 1 ELSE ! Fill remainder with a cyclic distribution virtual_bin = MOD(i, nbins*nimages) END IF new_bins(i) = virtual_bin/nimages images(i) = 1 + MOD(virtual_bin, nimages) IF (new_bins(i) .GE. nbins) & DBCSR_ABORT("Wrong bin calculation") IF (images(i) .GT. nimages) & DBCSR_ABORT("Wrong image calculation") END DO END SUBROUTINE rebin_imaged_distribution END MODULE dbcsr_mm_dist_operations ================================================ FILE: src/mm/dbcsr_mm_hostdrv.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_mm_hostdrv !! Stacks of small matrix multiplications USE dbcsr_config, ONLY: dbcsr_cfg, & use_acc, & mm_driver_blas, & mm_driver_matmul, & mm_driver_smm, & mm_driver_xsmm USE dbcsr_data_methods, ONLY: dbcsr_data_get_size USE dbcsr_mm_types, ONLY: dbcsr_ps_width, & p_a_first, & p_b_first, & p_c_first, & p_k, & p_m, & p_n, & stack_descriptor_type USE dbcsr_types, ONLY: dbcsr_data_obj, & dbcsr_type, & dbcsr_type_complex_4, & dbcsr_type_complex_8, & dbcsr_type_real_4, & dbcsr_type_real_8, & dbcsr_work_type USE dbcsr_kinds, ONLY: dp, & int_8, & real_4, & real_8, & sp #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_hostdrv' CHARACTER(len=*), PARAMETER, PRIVATE :: int_print = "(10(1X,I7))" PUBLIC :: dbcsr_mm_hostdrv_lib_init, dbcsr_mm_hostdrv_lib_finalize PUBLIC :: dbcsr_mm_hostdrv_process PUBLIC :: dbcsr_mm_hostdrv_type PUBLIC :: dbcsr_mm_hostdrv_init LOGICAL, PARAMETER :: debug_mod = .FALSE. LOGICAL, PARAMETER :: careful_mod = .FALSE. TYPE dbcsr_mm_hostdrv_type TYPE(dbcsr_data_obj) :: data_area = dbcsr_data_obj() END TYPE dbcsr_mm_hostdrv_type CONTAINS SUBROUTINE dbcsr_mm_hostdrv_lib_init() !! Initialize the library END SUBROUTINE dbcsr_mm_hostdrv_lib_init SUBROUTINE dbcsr_mm_hostdrv_lib_finalize() !! Finalize the library END SUBROUTINE dbcsr_mm_hostdrv_lib_finalize SUBROUTINE dbcsr_mm_hostdrv_init(this, product_wm) !! Initialize the library TYPE(dbcsr_mm_hostdrv_type), INTENT(INOUT) :: this TYPE(dbcsr_work_type), POINTER :: product_wm CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_hostdrv_init' INTEGER :: handle CALL timeset(routineN, handle) this%data_area = product_wm%data_area CALL timestop(handle) END SUBROUTINE dbcsr_mm_hostdrv_init SUBROUTINE dbcsr_mm_hostdrv_process(this, left, right, params, stack_size, & stack_descr, success, used_smm) !! Calls the various drivers that process the stack. TYPE(dbcsr_mm_hostdrv_type), INTENT(INOUT) :: this TYPE(dbcsr_type), INTENT(IN) :: left, right !! Left-matrix data !! Right-matrix data INTEGER, INTENT(IN) :: stack_size INTEGER, DIMENSION(1:dbcsr_ps_width, stack_size), & INTENT(INOUT) :: params !! Stack of GEMM parameters TYPE(stack_descriptor_type), INTENT(IN) :: stack_descr LOGICAL, INTENT(OUT) :: success, used_smm CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_hostdrv_process' LOGICAL, PARAMETER :: careful = careful_mod, dbg = debug_mod INTEGER :: error_handle, sp REAL(KIND=dp) :: rnd IF (use_acc()) & !for cpu-only runs this is called too often CALL timeset(routineN, error_handle) success = .TRUE. !host driver never fails...hopefully used_smm = .FALSE. IF (dbg) THEN CALL RANDOM_NUMBER(rnd) IF (rnd < 0.01_dp) THEN WRITE (*, *) routineN//" Stack size", stack_size, dbcsr_ps_width CALL print_gemm_parameters(params(:, 1:stack_size)) END IF END IF ! Verify stack consistency. Only the upper bound is verified. IF (careful) THEN DO sp = 1, stack_size IF (params(p_a_first, sp) + params(p_m, sp)*params(p_k, sp) - 1 > dbcsr_data_get_size(left%data_area)) & DBCSR_ABORT("A data out of bounds.") IF (params(p_b_first, sp) + params(p_k, sp)*params(p_n, sp) - 1 > dbcsr_data_get_size(right%data_area)) & DBCSR_ABORT("B data out of bounds.") IF (params(p_c_first, sp) + params(p_m, sp)*params(p_n, sp) - 1 > dbcsr_data_get_size(this%data_area)) & DBCSR_ABORT("C data out of bounds.") END DO END IF SELECT CASE (dbcsr_cfg%mm_driver%val) CASE (mm_driver_matmul) SELECT CASE (this%data_area%d%data_type) CASE (dbcsr_type_real_4) CALL internal_process_mm_stack_s(params, & stack_size, & left%data_area%d%r_sp, right%data_area%d%r_sp, this%data_area%d%r_sp) CASE (dbcsr_type_real_8) CALL internal_process_mm_stack_d(params, & stack_size, & left%data_area%d%r_dp, right%data_area%d%r_dp, this%data_area%d%r_dp) CASE (dbcsr_type_complex_4) CALL internal_process_mm_stack_c(params, & stack_size, & left%data_area%d%c_sp, right%data_area%d%c_sp, this%data_area%d%c_sp) CASE (dbcsr_type_complex_8) CALL internal_process_mm_stack_z(params, & stack_size, & left%data_area%d%c_dp, right%data_area%d%c_dp, this%data_area%d%c_dp) CASE default DBCSR_ABORT("Invalid data type") END SELECT CASE (mm_driver_smm) SELECT CASE (this%data_area%d%data_type) CASE (dbcsr_type_real_4) CALL smm_process_mm_stack_s(stack_descr, params, & stack_size, & left%data_area%d%r_sp, right%data_area%d%r_sp, this%data_area%d%r_sp, used_smm) CASE (dbcsr_type_real_8) CALL smm_process_mm_stack_d(stack_descr, params, & stack_size, & left%data_area%d%r_dp, right%data_area%d%r_dp, this%data_area%d%r_dp, used_smm) CASE (dbcsr_type_complex_4) CALL smm_process_mm_stack_c(stack_descr, params, & stack_size, & left%data_area%d%c_sp, right%data_area%d%c_sp, this%data_area%d%c_sp, used_smm) CASE (dbcsr_type_complex_8) CALL smm_process_mm_stack_z(stack_descr, params, & stack_size, & left%data_area%d%c_dp, right%data_area%d%c_dp, this%data_area%d%c_dp, used_smm) CASE default DBCSR_ABORT("Invalid data type") END SELECT #if defined(__LIBXSMM) CASE (mm_driver_xsmm) SELECT CASE (this%data_area%d%data_type) #if TO_VERSION(1, 10) < TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) CASE (dbcsr_type_real_4) CALL xsmm_process_mm_batch_s(stack_descr, params, stack_size, & left%data_area%d%r_sp, right%data_area%d%r_sp, this%data_area%d%r_sp, used_smm) CASE (dbcsr_type_real_8) CALL xsmm_process_mm_batch_d(stack_descr, params, stack_size, & left%data_area%d%r_dp, right%data_area%d%r_dp, this%data_area%d%r_dp, used_smm) CASE (dbcsr_type_complex_4) CALL xsmm_process_mm_batch_c(stack_descr, params, stack_size, & left%data_area%d%c_sp, right%data_area%d%c_sp, this%data_area%d%c_sp, used_smm) CASE (dbcsr_type_complex_8) CALL xsmm_process_mm_batch_z(stack_descr, params, stack_size, & left%data_area%d%c_dp, right%data_area%d%c_dp, this%data_area%d%c_dp, used_smm) #else CASE (dbcsr_type_real_4) CALL xsmm_process_mm_stack_s(stack_descr, params, stack_size, & left%data_area%d%r_sp, right%data_area%d%r_sp, this%data_area%d%r_sp, used_smm) CASE (dbcsr_type_real_8) CALL xsmm_process_mm_stack_d(stack_descr, params, stack_size, & left%data_area%d%r_dp, right%data_area%d%r_dp, this%data_area%d%r_dp, used_smm) CASE (dbcsr_type_complex_4) CALL xsmm_process_mm_stack_c(stack_descr, params, stack_size, & left%data_area%d%c_sp, right%data_area%d%c_sp, this%data_area%d%c_sp, used_smm) CASE (dbcsr_type_complex_8) CALL xsmm_process_mm_stack_z(stack_descr, params, stack_size, & left%data_area%d%c_dp, right%data_area%d%c_dp, this%data_area%d%c_dp, used_smm) #endif CASE default DBCSR_ABORT("Invalid data type") END SELECT #endif CASE (mm_driver_blas) SELECT CASE (this%data_area%d%data_type) CASE (dbcsr_type_real_4) CALL blas_process_mm_stack_s(params, & stack_size, & left%data_area%d%r_sp, right%data_area%d%r_sp, this%data_area%d%r_sp) CASE (dbcsr_type_real_8) CALL blas_process_mm_stack_d(params, & stack_size, & left%data_area%d%r_dp, right%data_area%d%r_dp, this%data_area%d%r_dp) CASE (dbcsr_type_complex_4) CALL blas_process_mm_stack_c(params, & stack_size, & left%data_area%d%c_sp, right%data_area%d%c_sp, this%data_area%d%c_sp) CASE (dbcsr_type_complex_8) CALL blas_process_mm_stack_z(params, & stack_size, & left%data_area%d%c_dp, right%data_area%d%c_dp, this%data_area%d%c_dp) CASE default DBCSR_ABORT("Invalid data type") END SELECT CASE default DBCSR_ABORT("Invalid multiplication driver") END SELECT IF (use_acc()) & !for cpu-only runs this is called too often CALL timestop(error_handle) END SUBROUTINE dbcsr_mm_hostdrv_process SUBROUTINE print_gemm_parameters(params) !! Helper-routine used by dbcsr_mm_hostdrv_process to print debug info. INTEGER, DIMENSION(:, :), INTENT(in) :: params INTEGER :: sp DO sp = 1, SIZE(params, 2) WRITE (*, '(1X,A,1X,I7,":",3(1X,I4,","),".",3(1X,I12,","))') & "GEMM PARAMETERS", & sp, & params(p_m, sp), & params(p_k, sp), & params(p_n, sp), & params(p_a_first, sp), & params(p_b_first, sp), & params(p_c_first, sp) END DO END SUBROUTINE print_gemm_parameters #:include '../data/dbcsr.fypp' #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float SUBROUTINE blas_process_mm_stack_${nametype1}$ (params, & stack_size, & a_data, b_data, c_data) !! Processes MM stack and issues BLAS xGEMM calls INTEGER, INTENT(IN) :: stack_size !! Number of parameters INTEGER, DIMENSION(dbcsr_ps_width, 1:stack_size), & INTENT(IN) :: params !! Stack of MM parameters ${type1}$, DIMENSION(*), INTENT(IN) :: a_data, & b_data !! Left-matrix data !! Right-matrix data ${type1}$, DIMENSION(*), INTENT(INOUT) :: c_data !! Product data INTEGER :: sp ! --------------------------------------------------------------------------- DO sp = 1, stack_size CALL ${gemmname1[n]}$ ('N', & 'N', & params(p_m, sp), params(p_n, sp), & !m, n params(p_k, sp), & ! k ${one1[n]}$, & ! alpha a_data(params(p_a_first, sp)), & ! A params(p_m, sp), & !lda b_data(params(p_b_first, sp)), & ! B params(p_k, sp), & !ldb ${one1[n]}$, & ! beta c_data(params(p_c_first, sp)), params(p_m, sp)) END DO END SUBROUTINE blas_process_mm_stack_${nametype1}$ SUBROUTINE internal_process_mm_stack_${nametype1}$ (params, stack_size, & a_data, b_data, c_data) !! Processes MM stack and issues internal MM calls. INTEGER, INTENT(IN) :: stack_size !! Number of parameters INTEGER, DIMENSION(dbcsr_ps_width, 1:stack_size), & INTENT(IN) :: params !! Stack of MM parameters ${type1}$, DIMENSION(*), INTENT(IN) :: a_data, & b_data !! Left-matrix data !! Right-matrix data ${type1}$, DIMENSION(*), INTENT(INOUT) :: c_data !! Product data INTEGER :: sp ! --------------------------------------------------------------------------- DO sp = 1, stack_size CALL internal_mm_${nametype1}$_nn( & params(p_m, sp), & params(p_n, sp), & params(p_k, sp), & a_data(params(p_a_first, sp)), & b_data(params(p_b_first, sp)), & c_data(params(p_c_first, sp))) END DO END SUBROUTINE internal_process_mm_stack_${nametype1}$ SUBROUTINE smm_process_mm_stack_${nametype1}$ (stack_descr, params, & stack_size, & a_data, b_data, c_data, used_smm) !! Processes MM stack and issues SMM library calls INTEGER, INTENT(IN) :: stack_size !! Number of parameters TYPE(stack_descriptor_type), INTENT(IN) :: stack_descr INTEGER, DIMENSION(dbcsr_ps_width, 1:stack_size), & INTENT(IN) :: params !! Stack of MM parameters ${type1}$, DIMENSION(*), INTENT(IN) :: a_data, & b_data !! Left-matrix data !! Right-matrix data ${type1}$, DIMENSION(*), INTENT(INOUT) :: c_data !! Product data LOGICAL, INTENT(OUT) :: used_smm #if defined(__HAS_smm_${nametype1}$nn) INTEGER :: sp ! TODO we have no way of knowing which calls to libsmm actually resolve to BLAS ! Fixing this requires an interface change to libsmm. used_smm = .TRUE. #if defined(__HAS_smm_vec) IF (stack_descr%defined_mnk) THEN CALL smm_vec_${nametype1}$nn(stack_descr%m, stack_descr%n, stack_descr%k, & a_data, b_data, c_data, stack_size, & dbcsr_ps_width, params, p_a_first, p_b_first, p_c_first) RETURN END IF #endif DO sp = 1, stack_size CALL smm_${nametype1}$nn( & params(p_m, sp), & params(p_n, sp), & params(p_k, sp), & a_data(params(p_a_first, sp)), & b_data(params(p_b_first, sp)), & c_data(params(p_c_first, sp))) END DO #else ! We do not want to abort here, fall back to BLAS. used_smm = .FALSE. CALL blas_process_mm_stack_${nametype1}$ (params, stack_size, a_data, b_data, c_data) #endif MARK_USED(stack_descr) END SUBROUTINE smm_process_mm_stack_${nametype1}$ #if defined(__LIBXSMM) && TO_VERSION(1, 10) < TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) SUBROUTINE xsmm_process_mm_batch_${nametype1}$ (stack_descr, params, & stack_size, a_data, b_data, c_data, used_smm) !! Processes MM stack and issues libxsmm calls #if ${xsmm_supported[n]}$ #if !defined(DBCSR_LIBXSMM_GEMM_BATCH) #define DBCSR_LIBXSMM_GEMM_BATCH libxsmm_gemm_batch #endif ! Caution: This dependency is ignored by makedep.py, because libxsmm.F is kinda empty. USE libxsmm, ONLY: LIBXSMM_GEMM_PRECISION => ${'LIBXSMM_DATATYPE_F'+bits1[n]}$, & libxsmm_gemm => libxsmm_${nametype1}$gemm, & libxsmm_gemm_batch => DBCSR_LIBXSMM_GEMM_BATCH, & libxsmm_ptr0 REAL(${kind1}$), PARAMETER :: one = 1.0_${kind1}$ INTEGER :: sp #endif INTEGER, INTENT(IN) :: stack_size !! Number of parameters TYPE(stack_descriptor_type), INTENT(IN) :: stack_descr INTEGER, DIMENSION(dbcsr_ps_width, 1:stack_size), & INTENT(IN) :: params !! Stack of MM parameters ${type1}$, DIMENSION(*), TARGET, INTENT(IN) :: a_data !! Left-matrix data ${type1}$, DIMENSION(*), TARGET, INTENT(IN) :: b_data !! Right-matrix data ${type1}$, DIMENSION(*), TARGET, INTENT(INOUT) :: c_data !! Product data LOGICAL, INTENT(OUT) :: used_smm !! Flag to signal if an efficient kernel was used #if ${xsmm_supported[n]}$ IF (stack_descr%defined_mnk) THEN ! homogeneous stack CALL libxsmm_gemm_batch(LIBXSMM_GEMM_PRECISION, LIBXSMM_GEMM_PRECISION, 'N', 'N', & m=stack_descr%m, n=stack_descr%n, k=stack_descr%k, & alpha=libxsmm_ptr0(one), a=libxsmm_ptr0(a_data(LBOUND(a_data, 1))), & lda=stack_descr%m, & b=libxsmm_ptr0(b_data(LBOUND(b_data, 1))), & ldb=stack_descr%k, & beta=libxsmm_ptr0(one), c=libxsmm_ptr0(c_data(LBOUND(c_data, 1))), & ldc=stack_descr%m, index_base=1, & index_stride=KIND(params)*dbcsr_ps_width, & stride_a=libxsmm_ptr0(params(p_a_first, 1)), & stride_b=libxsmm_ptr0(params(p_b_first, 1)), & stride_c=libxsmm_ptr0(params(p_c_first, 1)), & batchsize=stack_size) used_smm = .TRUE. ELSE ! Dispatch for every (different) matrix DO sp = 1, stack_size CALL libxsmm_gemm(m=params(p_m, sp), n=params(p_n, sp), k=params(p_k, sp), & a=a_data(params(p_a_first, sp)), & b=b_data(params(p_b_first, sp)), & c=c_data(params(p_c_first, sp)), & alpha=one, beta=one) END DO used_smm = .FALSE. END IF #else MARK_USED(stack_descr) ! We do not want to abort here, fall back to BLAS. CALL blas_process_mm_stack_${nametype1}$ (params, stack_size, a_data, b_data, c_data) used_smm = .FALSE. #endif END SUBROUTINE xsmm_process_mm_batch_${nametype1}$ #endif #if defined(__LIBXSMM) && TO_VERSION(1, 10) >= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) SUBROUTINE xsmm_process_mm_stack_${nametype1}$ (stack_descr, params, & stack_size, a_data, b_data, c_data, used_smm) !! Processes MM stack and issues libxsmm calls #if ${xsmm_supported[n]}$ ! Caution: This dependency is ignored by makedep.py, because libxsmm.F is kinda empty. USE libxsmm, ONLY: libxsmm_function => libxsmm_${nametype1}$mmfunction, & libxsmm_dispatch => libxsmm_${nametype1}$mmdispatch, & libxsmm_available => libxsmm_${nametype1}$mmavailable, & libxsmm_call => libxsmm_${nametype1}$mmcall, & libxsmm_gemm => libxsmm_${nametype1}$gemm, & LIBXSMM_PREFETCH_NONE, & LIBXSMM_PREFETCH, & LIBXSMM_MAX_MNK, & LIBXSMM_FLAGS INTEGER, PARAMETER :: LIBXSMM_DEFAULT_PREFETCH = LIBXSMM_PREFETCH INTEGER, PARAMETER :: LIBXSMM_DEFAULT_FLAGS = LIBXSMM_FLAGS REAL(${kind1}$), PARAMETER :: one = 1.0_${kind1}$ REAL(${kind1}$), DIMENSION(:, :), POINTER :: a_ptr, b_ptr, c_ptr INTEGER :: m, n, k, sp, fa, fb, fc LOGICAL :: processed TYPE(libxsmm_function) :: func INTEGER(int_8) :: threshold INTEGER :: pa, pb, pc #endif INTEGER, INTENT(IN) :: stack_size !! Number of parameters TYPE(stack_descriptor_type), INTENT(IN) :: stack_descr INTEGER, DIMENSION(dbcsr_ps_width, 1:stack_size), & INTENT(IN) :: params !! Stack of MM parameters ${type1}$, DIMENSION(*), TARGET, INTENT(IN) :: a_data !! Left-matrix data ${type1}$, DIMENSION(*), TARGET, INTENT(IN) :: b_data !! Right-matrix data ${type1}$, DIMENSION(*), TARGET, INTENT(INOUT) :: c_data !! Product data LOGICAL, INTENT(OUT) :: used_smm !! Flag to signal if an efficient kernel was used #if ${xsmm_supported[n]}$ processed = .FALSE. used_smm = .FALSE. ! check whether the matrix stack is homogeneous or not IF (stack_descr%defined_mnk) THEN threshold = INT(stack_descr%m, int_8)* & INT(stack_descr%n, int_8)* & INT(stack_descr%k, int_8) ! check if matrices are too large for LIBXSMM (BLAS is likely more efficient) IF (threshold <= LIBXSMM_MAX_MNK) THEN ! try to get a function pointer from libxsmm CALL libxsmm_dispatch(func, & m=stack_descr%m, n=stack_descr%n, k=stack_descr%k, alpha=one, beta=one, & flags=LIBXSMM_DEFAULT_FLAGS, prefetch=LIBXSMM_DEFAULT_PREFETCH) IF (libxsmm_available(func)) THEN ! load first stack entry DBCSR_ASSERT(stack_size > 0) pa = params(p_a_first, 1) pb = params(p_b_first, 1) pc = params(p_c_first, 1) DO sp = 1, stack_size - 1 fa = pa; fb = pb; fc = pc ! prefetch next blocks pa = params(p_a_first, sp + 1) pb = params(p_b_first, sp + 1) pc = params(p_c_first, sp + 1) ! condition evaluates at compile-time (PARAMETER) IF (LIBXSMM_DEFAULT_PREFETCH /= LIBXSMM_PREFETCH_NONE) THEN CALL libxsmm_call(func, & a=a_data(fa), b=b_data(fb), c=c_data(fc), & ! provide locations of the next operand set pa=a_data(pa), pb=b_data(pb), pc=c_data(pc)) ELSE CALL libxsmm_call(func, & a=a_data(fa), b=b_data(fb), c=c_data(fc)) END IF END DO ! handle last stack entry without out-of-bounds access fa = pa; fb = pb; fc = pc ! condition evaluates at compile-time (PARAMETER) IF (LIBXSMM_DEFAULT_PREFETCH /= LIBXSMM_PREFETCH_NONE) THEN CALL libxsmm_call(func, & a=a_data(fa), b=b_data(fb), c=c_data(fc), & ! prefetch same blocks pa=a_data(pa), pb=b_data(pb), pc=c_data(pc)) ELSE CALL libxsmm_call(func, & a=a_data(fa), b=b_data(fb), c=c_data(fc)) END IF processed = .TRUE. used_smm = .TRUE. END IF ELSE CALL blas_process_mm_stack_${nametype1}$ (params, stack_size, a_data, b_data, c_data) processed = .TRUE. END IF END IF IF (.NOT. processed) THEN ! Dispatch interface was not used, call regular interface. ! Should only happen for inhomogeneous stacks. ! Counted as used_smm = .FALSE. DO sp = 1, stack_size m = params(p_m, sp) n = params(p_n, sp) k = params(p_k, sp) fa = params(p_a_first, sp) fb = params(p_b_first, sp) fc = params(p_c_first, sp) ! somewhat expensive pointer remapping required a_ptr(1:m, 1:k) => a_data(fa:fa + (m*k)) b_ptr(1:k, 1:n) => b_data(fb:fb + (k*n)) c_ptr(1:m, 1:n) => c_data(fc:fc + (m*n)) CALL libxsmm_gemm(m=m, n=n, k=k, a=a_ptr, b=b_ptr, c=c_ptr, & alpha=one, beta=one) END DO END IF #else MARK_USED(stack_descr) ! We do not want to abort here, fall back to BLAS. CALL blas_process_mm_stack_${nametype1}$ (params, stack_size, a_data, b_data, c_data) used_smm = .FALSE. #endif END SUBROUTINE xsmm_process_mm_stack_${nametype1}$ #endif PURE SUBROUTINE internal_mm_${nametype1}$_nn( & M, N, K, A, B, C) INTEGER, INTENT(IN) :: M, N, K ${type1}$, INTENT(INOUT) :: C(M, N) ${type1}$, INTENT(IN) :: B(K, N) ${type1}$, INTENT(IN) :: A(M, K) C(:, :) = C(:, :) + MATMUL(A, B) END SUBROUTINE internal_mm_${nametype1}$_nn #:endfor END MODULE dbcsr_mm_hostdrv ================================================ FILE: src/mm/dbcsr_mm_multrec.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_mm_multrec !! Second layer of the dbcsr matrix-matrix multiplication. !! It divides the multiplication in a cache-oblivious manner. !! Modification history: !! - 2010-02-23 Moved from dbcsr_operations !! - 2011-11 Moved parameter-stack processing routines to !! dbcsr_mm_methods. !! - 2013-01 extensive refactoring (Ole Schuett) USE dbcsr_array_types, ONLY: array_data, & array_equality USE dbcsr_block_operations, ONLY: dbcsr_data_set USE dbcsr_config, ONLY: dbcsr_cfg USE dbcsr_dist_methods, ONLY: dbcsr_distribution_col_dist, & dbcsr_distribution_has_threads, & dbcsr_distribution_local_cols, & dbcsr_distribution_local_cols_obj, & dbcsr_distribution_local_rows, & dbcsr_distribution_local_rows_obj, & dbcsr_distribution_row_dist, & dbcsr_distribution_thread_dist USE dbcsr_mm_csr, ONLY: & dbcsr_mm_csr_dev2host_init, dbcsr_mm_csr_finalize, dbcsr_mm_csr_init, & dbcsr_mm_csr_lib_finalize, dbcsr_mm_csr_lib_init, dbcsr_mm_csr_multiply, & dbcsr_mm_csr_purge_stacks, dbcsr_mm_csr_red3D, dbcsr_mm_csr_type USE dbcsr_types, ONLY: dbcsr_data_obj, & dbcsr_type, & dbcsr_work_type, & dbcsr_type_complex_4, dbcsr_type_complex_8, & dbcsr_type_real_4, dbcsr_type_real_8 USE dbcsr_kinds, ONLY: int_8, & real_4, & real_8, & sp #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_multrec' LOGICAL, PARAMETER :: careful_mod = .FALSE. TYPE dbcsr_mm_multrec_type !! Used to carry data among the various calls. Each thread has !! its own private copy. PRIVATE LOGICAL :: c_has_symmetry = .FALSE., keep_sparsity = .FALSE., keep_product_data = .FALSE., use_eps = .FALSE. !! The product matrix has symmetry !! Sparsity of C matrix should be kept !! Use on-the-fly filtering INTEGER, DIMENSION(:), POINTER :: m_sizes => NULL(), n_sizes => NULL(), k_sizes => NULL() !! Block sizes of A and C matrix rows, indexed locally !! Block sizes of B and C matrix columns, indexed locally !! Block sizes of A matrix columns and B matrix rows, indexed locally INTEGER, DIMENSION(:), POINTER :: m_global_sizes => NULL(), n_global_sizes => NULL() INTEGER, DIMENSION(:), POINTER :: c_local_rows => NULL(), c_local_cols => NULL(), k_locals => NULL(), & c_global_rows => NULL(), c_global_cols => NULL() !! C and A matrix local rows. Map from local row (index) to global row (value). !! C and B matrix local columns. Map from local column (index) to global column (value). !! A matrix local columns and B matrix local rows. Map from local row/column (index) to global row/column (value). !! C and A matrix global rows. Map from global rows (index) to local rows (value). !! C and B matrix global columns. Map from global columns (index) to local columns (value). REAL(KIND=sp), DIMENSION(:), POINTER :: row_max_epss => NULL(), a_norms => NULL(), b_norms => NULL() !! Maximum eps to be used for one row. !! Norms of A matrix blocks. !! Norms of B matrix blocks. REAL(KIND=real_8) :: eps = -1.0_real_8 INTEGER :: original_lastblk = -1 !! Number of work matrix blocks before addition INTEGER(kind=int_8) :: flop = -1_int_8 !! flop count TYPE(dbcsr_work_type), POINTER :: product_wm => Null() TYPE(dbcsr_mm_csr_type) :: csr = dbcsr_mm_csr_type() LOGICAL :: new_row_max_epss = .FALSE. LOGICAL :: initialized = .FALSE. END TYPE dbcsr_mm_multrec_type ! ************************************************************************************************** PUBLIC :: dbcsr_mm_multrec_type PUBLIC :: dbcsr_mm_multrec_lib_init, dbcsr_mm_multrec_lib_finalize PUBLIC :: dbcsr_mm_multrec_init, dbcsr_mm_multrec_finalize PUBLIC :: dbcsr_mm_multrec_multiply PUBLIC :: dbcsr_mm_multrec_dev2host_init, dbcsr_mm_multrec_red3D PUBLIC :: dbcsr_mm_multrec_get_nblks, dbcsr_mm_multrec_get_nze CONTAINS SUBROUTINE dbcsr_mm_multrec_lib_init() !! Initialize the library CALL dbcsr_mm_csr_lib_init() END SUBROUTINE SUBROUTINE dbcsr_mm_multrec_lib_finalize() !! Finalize the library CALL dbcsr_mm_csr_lib_finalize() END SUBROUTINE SUBROUTINE dbcsr_mm_multrec_init(this, left, right, product, & keep_sparsity, eps, row_max_epss, block_estimate, right_row_blk_size, & m_sizes, n_sizes, nlayers, keep_product_data) !! Sets up recursive multiplication TYPE(dbcsr_mm_multrec_type), INTENT(out) :: this TYPE(dbcsr_type), INTENT(IN), OPTIONAL :: left, right !! left DBCSR matrix !! right DBCSR matrix TYPE(dbcsr_type), INTENT(INOUT) :: product !! resulting DBCSR product matrix LOGICAL, INTENT(IN) :: keep_sparsity !! retain the sparsity of the existing product matrix, default is no LOGICAL, INTENT(IN), OPTIONAL :: keep_product_data !! Perform final reduction on C data, default is yes REAL(kind=real_8), INTENT(in), OPTIONAL :: eps !! on-the-fly filtering epsilon REAL(kind=sp), DIMENSION(:), INTENT(IN), TARGET :: row_max_epss INTEGER, INTENT(IN) :: block_estimate INTEGER, DIMENSION(:), INTENT(IN) :: right_row_blk_size INTEGER, DIMENSION(:), INTENT(IN), POINTER :: m_sizes, n_sizes INTEGER, OPTIONAL :: nlayers CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_multrec_init' LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: c_nblkcols_local, c_nblkrows_local, & handle, ithread INTEGER, DIMENSION(:), POINTER :: c_local_cols, c_local_rows !$ INTEGER, DIMENSION(:), POINTER :: product_thread_dist ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) ithread = 0 !$ ithread = OMP_GET_THREAD_NUM() ! IF (this%initialized) & DBCSR_ABORT("multrec already initialized.") IF (PRESENT(left) .NEQV. PRESENT(right)) & DBCSR_ABORT("Must both left and right provided or not.") IF (PRESENT(left) .AND. PRESENT(right)) THEN ! Ensures that the index is correctly defined. IF (.NOT. left%list_indexing) & DBCSR_ABORT("Must use list indexing for this routine.") IF (left%bcsc) & DBCSR_ABORT("Wrong routine for BCSC matrices.") IF (right%bcsc) & DBCSR_ABORT("Wrong routine for BCSC matrices.") IF (.NOT. right%local_indexing) & DBCSR_ABORT("Matrices must have local indexing.") IF (.NOT. left%local_indexing) & DBCSR_ABORT("Matrices must have local indexing.") END IF ! ! Fill result data structure. this%keep_sparsity = keep_sparsity this%c_has_symmetry = product%symmetry this%keep_product_data = .TRUE. IF (PRESENT(keep_product_data)) THEN this%keep_product_data = keep_product_data END IF this%use_eps = PRESENT(eps) this%original_lastblk = product%wms(ithread + 1)%lastblk this%flop = INT(0, int_8) this%product_wm => product%wms(ithread + 1) IF (PRESENT(eps)) THEN this%eps = eps ELSE this%eps = 0.0_real_8 END IF ! ! !$ NULLIFY (product_thread_dist) !$ IF (.NOT. dbcsr_distribution_has_threads(product%dist)) & !$ DBCSR_ABORT("Missing thread distribution.") !$ product_thread_dist => array_data( & !$ dbcsr_distribution_thread_dist(product%dist)) ! ! Find out the C/A rows and C/B columns and sizes. c_nblkrows_local = product%nblkrows_local c_local_rows => array_data(product%local_rows) c_nblkcols_local = product%nblkcols_local c_local_cols => array_data(product%local_cols) this%c_local_rows => c_local_rows this%c_local_cols => c_local_cols IF (dbg) WRITE (*, *) "setting up for product", product%name IF (careful_mod) THEN IF (.NOT. array_equality(dbcsr_distribution_local_rows_obj(product%dist), & product%local_rows)) THEN WRITE (*, *) "row dist", dbcsr_distribution_row_dist(product%dist) WRITE (*, *) "dist local rows", dbcsr_distribution_local_rows(product%dist) WRITE (*, *) " mat local rows", array_data(product%local_rows) DBCSR_ABORT("Array mismatch.") END IF IF (.NOT. array_equality(dbcsr_distribution_local_cols_obj(product%dist), & product%local_cols)) THEN WRITE (*, *) "col dist", dbcsr_distribution_col_dist(product%dist) WRITE (*, *) "dist local cols", dbcsr_distribution_local_cols(product%dist) WRITE (*, *) " mat local cols", array_data(product%local_cols) DBCSR_ABORT("Array mismatch.") END IF IF (SIZE(c_local_rows) /= c_nblkrows_local) & DBCSR_ABORT("Row count mismatch.") IF (SIZE(c_local_cols) /= c_nblkcols_local) & DBCSR_ABORT("Column count mismatch.") END IF ! ! And the k epsilons IF ((PRESENT(left) .AND. PRESENT(right)) .OR. .NOT. this%use_eps) THEN ALLOCATE (this%row_max_epss(c_nblkrows_local)) this%new_row_max_epss = .TRUE. END IF IF (this%use_eps) THEN IF (PRESENT(left) .AND. PRESENT(right)) THEN CALL local_filter_sp(row_max_epss, c_nblkrows_local, c_local_rows, & this%row_max_epss) ELSE this%row_max_epss => row_max_epss END IF ELSE this%row_max_epss(:) = -HUGE(0.0_sp) END IF ! this%m_sizes => m_sizes this%n_sizes => n_sizes this%m_global_sizes => array_data(product%row_blk_size) this%n_global_sizes => array_data(product%col_blk_size) NULLIFY (this%k_locals) NULLIFY (this%k_sizes) !TODO: should we move this up? CALL dbcsr_mm_csr_init(this%csr, & left=left, right=right, product=product, & m_sizes=this%m_sizes, n_sizes=this%n_sizes, & block_estimate=block_estimate, & right_row_blk_size=right_row_blk_size, & nlayers=nlayers, & keep_product_data=this%keep_product_data) this%initialized = .TRUE. CALL timestop(handle) END SUBROUTINE dbcsr_mm_multrec_init SUBROUTINE dbcsr_mm_multrec_multiply(this, left, right, flop, & a_norms, b_norms, k_sizes) !! Multiplies two DBCSR matrices using recursive algorithm !! This routine sets up the multiplication. Specifically, it
    !!
  • verifies input sanity !!
  • converts everything into "local indexing" !!
TYPE(dbcsr_mm_multrec_type), INTENT(inout) :: this TYPE(dbcsr_type), INTENT(IN) :: left, right !! left DBCSR matrix !! right DBCSR matrix INTEGER(KIND=int_8), INTENT(INOUT) :: flop !! number of effective double-precision floating point operations performed REAL(kind=sp), DIMENSION(:), INTENT(in), TARGET :: a_norms, b_norms !! norms of left-matrix blocks !! norms of right-matrix blocks INTEGER, DIMENSION(:), INTENT(IN), POINTER :: k_sizes !$ INTEGER :: ithread INTEGER :: t_a_f, t_a_l, t_b_f, t_b_l INTEGER, DIMENSION(:), POINTER :: k_locals ! --------------------------------------------------------------------------- IF (.NOT. this%initialized) & DBCSR_ABORT("multrec not initialized.") this%flop = 0 ! Find out the local A columns / B rows and sizes ! The right%local_rows is setup by the communication engine. k_locals => array_data(right%local_rows) this%k_locals => k_locals this%k_sizes => k_sizes ! Setup the block norms this%a_norms => a_norms this%b_norms => b_norms ! Start local multiplication t_a_f = 1 t_a_l = left%nblks t_b_f = 1 t_b_l = right%nblks !$ IF (ASSOCIATED(left%thr_c)) THEN !$ ithread = OMP_GET_THREAD_NUM() !$ t_a_f = left%thr_c(ithread + 1) + 1 !$ t_a_l = left%thr_c(ithread + 2) !$ END IF CALL sparse_multrec(this, left, right, & 1, left%nblkrows_local, & 1, right%nblkcols_local, & 1, SIZE(k_locals), & t_a_f, t_a_l, left%coo_l, & t_b_f, t_b_l, right%coo_l, & 0) CALL dbcsr_mm_csr_purge_stacks(this%csr, left, right) flop = flop + this%flop ! END SUBROUTINE dbcsr_mm_multrec_multiply SUBROUTINE dbcsr_mm_multrec_dev2host_init(this) !! Sets up recursive multiplication TYPE(dbcsr_mm_multrec_type), INTENT(inout) :: this ! --------------------------------------------------------------------------- IF (.NOT. this%initialized) & DBCSR_ABORT("multrec not initialized.") CALL dbcsr_mm_csr_dev2host_init(this%csr) END SUBROUTINE dbcsr_mm_multrec_dev2host_init SUBROUTINE dbcsr_mm_multrec_finalize(this, meta_buffer) !! Sets up recursive multiplication TYPE(dbcsr_mm_multrec_type), INTENT(inout) :: this INTEGER, DIMENSION(:), INTENT(INOUT), OPTIONAL :: meta_buffer CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_multrec_finalize' INTEGER :: handle, ithread, lb_meta, & nblocks, nthreads, ub_meta ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (.NOT. this%initialized) & DBCSR_ABORT("multrec not initialized.") CALL dbcsr_mm_csr_finalize(this%csr) ! Release the carrier IF (this%new_row_max_epss) DEALLOCATE (this%row_max_epss) IF (PRESENT(meta_buffer)) THEN ithread = 0; nthreads = 1 !$ ithread = OMP_GET_THREAD_NUM(); nthreads = OMP_GET_NUM_THREADS() ! Copy wms data into matrix lb_meta = meta_buffer(ithread + 1) nblocks = (meta_buffer(ithread + 2) - lb_meta)/3 ub_meta = lb_meta + nblocks meta_buffer(lb_meta + 1:ub_meta) = this%product_wm%row_i(1:nblocks) lb_meta = ub_meta ub_meta = lb_meta + nblocks meta_buffer(lb_meta + 1:ub_meta) = this%product_wm%col_i(1:nblocks) lb_meta = ub_meta ub_meta = lb_meta + nblocks meta_buffer(lb_meta + 1:ub_meta) = this%product_wm%blk_p(1:nblocks) ELSE CALL remap_local2global(this%product_wm%row_i, & this%product_wm%col_i, & this%c_local_rows, this%c_local_cols, & this%original_lastblk + 1, this%product_wm%lastblk) ! if filtering is requested remove small blocks, unless the sparsity needs to be kept IF (this%use_eps .AND. .NOT. this%keep_sparsity) THEN CALL multrec_filtering(this) ELSE this%product_wm%datasize_after_filtering = this%product_wm%datasize END IF END IF this%initialized = .FALSE. CALL timestop(handle) END SUBROUTINE dbcsr_mm_multrec_finalize SUBROUTINE multrec_filtering(this) !! Applying in-place filtering on the workspace TYPE(dbcsr_mm_multrec_type), INTENT(inout) :: this CHARACTER(len=*), PARAMETER :: routineN = 'multrec_filtering' INTEGER :: handle CALL timeset(routineN, handle) SELECT CASE (this%product_wm%data_area%d%data_type) CASE (dbcsr_type_real_4) CALL multrec_filtering_s(this%eps, & this%product_wm%lastblk, & this%product_wm%row_i, & this%product_wm%col_i, & this%product_wm%blk_p, & this%m_global_sizes, this%n_global_sizes, & this%product_wm%datasize_after_filtering, & this%product_wm%data_area%d%r_sp) CASE (dbcsr_type_real_8) CALL multrec_filtering_d(this%eps, & this%product_wm%lastblk, & this%product_wm%row_i, & this%product_wm%col_i, & this%product_wm%blk_p, & this%m_global_sizes, this%n_global_sizes, & this%product_wm%datasize_after_filtering, & this%product_wm%data_area%d%r_dp) CASE (dbcsr_type_complex_4) CALL multrec_filtering_c(this%eps, & this%product_wm%lastblk, & this%product_wm%row_i, & this%product_wm%col_i, & this%product_wm%blk_p, & this%m_global_sizes, this%n_global_sizes, & this%product_wm%datasize_after_filtering, & this%product_wm%data_area%d%c_sp) CASE (dbcsr_type_complex_8) CALL multrec_filtering_z(this%eps, & this%product_wm%lastblk, & this%product_wm%row_i, & this%product_wm%col_i, & this%product_wm%blk_p, & this%m_global_sizes, this%n_global_sizes, & this%product_wm%datasize_after_filtering, & this%product_wm%data_area%d%c_dp) CASE DEFAULT DBCSR_ABORT("Invalid data type.") END SELECT CALL timestop(handle) END SUBROUTINE multrec_filtering SUBROUTINE dbcsr_mm_multrec_red3D(this, meta_buffer, data_buffer, flop, g2l_map_rows, g2l_map_cols) !! Make the reduction of the 3D layers in the local multrec object TYPE(dbcsr_mm_multrec_type), INTENT(inout) :: this INTEGER, DIMENSION(:), INTENT(IN) :: meta_buffer TYPE(dbcsr_data_obj), INTENT(IN) :: data_buffer INTEGER(KIND=int_8), INTENT(INOUT) :: flop INTEGER, DIMENSION(:), INTENT(IN) :: g2l_map_rows, g2l_map_cols CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_multrec_red3D' INTEGER :: handle CALL timeset(routineN, handle) IF (.NOT. this%initialized) & DBCSR_ABORT("multrec not initialized.") CALL dbcsr_mm_csr_red3D(this%csr, meta_buffer, data_buffer, flop, & m_sizes=this%m_sizes, n_sizes=this%n_sizes, & g2l_map_rows=g2l_map_rows, & g2l_map_cols=g2l_map_cols, & original_lastblk=this%original_lastblk, & keep_sparsity=this%keep_sparsity) CALL timestop(handle) END SUBROUTINE dbcsr_mm_multrec_red3D FUNCTION dbcsr_mm_multrec_get_nblks(this) RESULT(nblks) !! Return number of blocks TYPE(dbcsr_mm_multrec_type), INTENT(IN) :: this INTEGER :: nblks nblks = this%product_wm%lastblk END FUNCTION dbcsr_mm_multrec_get_nblks FUNCTION dbcsr_mm_multrec_get_nze(this) RESULT(nze) !! Return data size TYPE(dbcsr_mm_multrec_type), INTENT(IN) :: this INTEGER :: nze nze = this%product_wm%datasize END FUNCTION dbcsr_mm_multrec_get_nze RECURSIVE SUBROUTINE sparse_multrec(this, left, right, mi, mf, ni, nf, ki, kf, & !! Performs recursive multiplication ai, af, a_index, bi, bf, b_index, & d) TYPE(dbcsr_mm_multrec_type), INTENT(INOUT) :: this TYPE(dbcsr_type), INTENT(IN) :: left, right INTEGER, INTENT(IN) :: mi, mf, ni, nf, ki, kf, ai, af INTEGER, DIMENSION(3, 1:af), INTENT(IN) :: a_index INTEGER, INTENT(IN) :: bi, bf INTEGER, DIMENSION(3, 1:bf), INTENT(IN) :: b_index INTEGER, INTENT(IN) :: d LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: acut, bcut, cut, K, M, N, s1 ! --------------------------------------------------------------------------- IF (dbg) THEN WRITE (*, '(I7,1X,5(A,2(1X,I7)))') d, " rm", mi, mf, ",", ni, nf, ",", ki, kf, "/", ai, af, ",", bi, bf END IF IF (.TRUE.) THEN IF (af .LT. ai .OR. bf .LT. bi .OR. mf .LT. mi .OR. nf .LT. ni .OR. kf .LT. ki) THEN IF (dbg) WRITE (*, *) "Empty" RETURN END IF END IF IF (af - ai + 1 <= dbcsr_cfg%multrec_limit%val .AND. bf - bi + 1 <= dbcsr_cfg%multrec_limit%val) THEN IF (af - ai + 1 .GT. 0 .AND. bf - bi + 1 .GT. 0) & CALL dbcsr_mm_csr_multiply(this%csr, left, right, & mi=mi, mf=mf, ni=ni, nf=nf, ki=ki, kf=kf, & ai=ai, af=af, & bi=bi, bf=bf, & m_sizes=this%m_sizes, n_sizes=this%n_sizes, k_sizes=this%k_sizes, & c_local_rows=this%c_local_rows, c_local_cols=this%c_local_cols, & c_has_symmetry=this%c_has_symmetry, keep_sparsity=this%keep_sparsity, & use_eps=this%use_eps, row_max_epss=this%row_max_epss, & flop=this%flop, & a_index=a_index, b_index=b_index, & a_norms=this%a_norms, b_norms=this%b_norms) RETURN END IF M = mf - mi + 1 N = nf - ni + 1 K = kf - ki + 1 IF (dbg) THEN WRITE (*, *) 'm,k,n', M, K, N END IF IF (M >= MAX(N, K)) cut = 1 IF (K >= MAX(N, M)) cut = 2 IF (N >= MAX(M, K)) cut = 3 SELECT CASE (cut) CASE (1) s1 = M/2 acut = find_cut_row(ai, af, a_index, mi + s1 - 1) CALL sparse_multrec(this, left, right, mi, mi + s1 - 1, ni, nf, ki, kf, & ai, acut - 1, a_index, bi, bf, b_index, d + 1) CALL sparse_multrec(this, left, right, mi + s1, mf, ni, nf, ki, kf, & acut, af, a_index, bi, bf, b_index, d + 1) CASE (2) s1 = K/2 acut = find_cut_col(ai, af, a_index, ki + s1 - 1) IF (dbg) THEN WRITE (*, *) N, s1, ni + s1 - 1, "/", ai, af, acut WRITE (*, '(3(I7))') a_index END IF bcut = find_cut_row(bi, bf, b_index, ki + s1 - 1) IF (dbg) THEN WRITE (*, *) N, s1, ni + s1 - 1, "/", bi, bf, bcut WRITE (*, '(3(I7))') b_index END IF CALL sparse_multrec(this, left, right, mi, mf, ni, nf, ki, ki + s1 - 1, & ai, acut - 1, a_index, bi, bcut - 1, b_index, d + 1) CALL sparse_multrec(this, left, right, mi, mf, ni, nf, ki + s1, kf, & acut, af, a_index, bcut, bf, b_index, d + 1) CASE (3) s1 = N/2 bcut = find_cut_col(bi, bf, b_index, ni + s1 - 1) IF (dbg) THEN WRITE (*, *) N, s1, ni + s1 - 1, "/", bi, bf, bcut WRITE (*, '(3(I7))') b_index END IF CALL sparse_multrec(this, left, right, mi, mf, ni, ni + s1 - 1, ki, kf, & ai, af, a_index, bi, bcut - 1, b_index, d + 1) CALL sparse_multrec(this, left, right, mi, mf, ni + s1, nf, ki, kf, & ai, af, a_index, bcut, bf, b_index, d + 1) END SELECT END SUBROUTINE sparse_multrec ! *************************************************************************************************** PURE FUNCTION find_cut_row(ai, af, a, val) RESULT(res) INTEGER, INTENT(IN) :: ai, af INTEGER, DIMENSION(3, 1:af), INTENT(IN) :: a INTEGER, INTENT(IN) :: val INTEGER :: res INTEGER :: i, ihigh, ilow ! do a log(N) search along the ordered index ilow = ai IF (a(1, ilow) > val) THEN res = ilow RETURN END IF ihigh = af IF (a(1, ihigh) <= val) THEN res = ihigh + 1 RETURN END IF DO IF (ihigh - ilow == 1) EXIT i = (ilow + ihigh)/2 IF (a(1, i) > val) THEN ihigh = i ELSE ilow = i END IF END DO res = ihigh ! the linear search version ! DO i=ai,af ! IF (a(i)%r>val) EXIT !ENDDO !res=i END FUNCTION find_cut_row ! *************************************************************************************************** PURE FUNCTION find_cut_col(ai, af, a, val) RESULT(res) INTEGER, INTENT(IN) :: ai, af INTEGER, DIMENSION(3, 1:af), INTENT(IN) :: a INTEGER, INTENT(IN) :: val INTEGER :: res INTEGER :: i, ihigh, ilow ! do a log(N) search along the ordered index ilow = ai IF (a(2, ilow) > val) THEN res = ilow RETURN END IF ihigh = af IF (a(2, ihigh) <= val) THEN res = ihigh + 1 RETURN END IF DO IF (ihigh - ilow == 1) EXIT i = (ilow + ihigh)/2 IF (a(2, i) > val) THEN ihigh = i ELSE ilow = i END IF END DO res = ihigh ! the linear search version ! DO i=ai,af ! IF (a(i)%c>val) EXIT !ENDDO !res=i END FUNCTION find_cut_col PURE SUBROUTINE remap_local2global(row_i, col_i, local_rows, local_cols, & first, last) !! Packs a globally-indexed array into a locally-indexed array. INTEGER, INTENT(in) :: last, first INTEGER, DIMENSION(:), INTENT(in) :: local_cols, local_rows INTEGER, DIMENSION(1:last), INTENT(inout) :: col_i, row_i INTEGER :: i DO i = first, last row_i(i) = local_rows(row_i(i)) col_i(i) = local_cols(col_i(i)) END DO END SUBROUTINE remap_local2global PURE SUBROUTINE local_filter_sp(full_data, nle, local_elements, local_data) !! Gathers the local elements from all data (full_data) for !! single precision elements. REAL(KIND=sp), DIMENSION(:), INTENT(IN) :: full_data INTEGER, INTENT(IN) :: nle INTEGER, DIMENSION(1:nle), INTENT(IN) :: local_elements REAL(KIND=sp), DIMENSION(1:nle), INTENT(OUT) :: local_data INTEGER :: l DO l = 1, SIZE(local_data) local_data(l) = full_data(local_elements(l)) END DO END SUBROUTINE local_filter_sp #:include '../data/dbcsr.fypp' #:for n, nametype1, base1, prec1, kind1, type1, dkind1, normname1 in inst_params_float SUBROUTINE multrec_filtering_${nametype1}$ (filter_eps, nblks, rowi, coli, blkp, & rbs, cbs, nze, DATA) !! Applying in-place filtering on the workspace. !! \brief Use Frobenius norm REAL(kind=real_8), INTENT(IN) :: filter_eps INTEGER, INTENT(INOUT) :: nblks, nze INTEGER, DIMENSION(1:nblks), INTENT(INOUT) :: rowi, coli, blkp INTEGER, DIMENSION(:), INTENT(IN) :: rbs, cbs ${type1}$, DIMENSION(:), & INTENT(INOUT) :: DATA INTEGER :: blk, lastblk, blk_nze, blk_p REAL(kind=real_8) :: nrm REAL(KIND=real_8), EXTERNAL :: DZNRM2, DDOT #if defined (__ACCELERATE) REAL(KIND=real_8), EXTERNAL :: SCNRM2, SDOT #else REAL(KIND=real_4), EXTERNAL :: SCNRM2, SDOT #endif REAL(kind=real_8) :: filter_eps_opt #:if nametype1 in ['d', 's'] ! Avoid square root filter_eps_opt = filter_eps**2 #:else filter_eps_opt = filter_eps #:endif lastblk = 0 nze = 0 ! DO blk = 1, nblks blk_p = blkp(blk) IF (blk_p .EQ. 0) CYCLE blk_nze = rbs(rowi(blk))*cbs(coli(blk)) IF (blk_nze .EQ. 0) CYCLE ! Skip empty blocks nrm = REAL(${normname1}$ (blk_nze, data(blk_p), 1, data(blk_p), 1)), KIND = real_8) IF (nrm .GE. filter_eps_opt) THEN ! Keep block lastblk = lastblk + 1 IF (lastblk .LT. blk) THEN rowi(lastblk) = rowi(blk) coli(lastblk) = coli(blk) blkp(lastblk) = blkp(blk) END IF nze = nze + blk_nze END IF END DO ! nblks = lastblk END SUBROUTINE multrec_filtering_${nametype1}$ #:endfor END MODULE dbcsr_mm_multrec ================================================ FILE: src/mm/dbcsr_mm_sched.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_mm_sched !! Fourth layer of the dbcsr matrix-matrix multiplication. !! It hides the differences between performing calculations on the !! accelerator device or on the CPU. !! Modification history: !! - 2010-02-23 Moved from dbcsr_operations !! - 2011-11 Moved parameter-stack processing routines to !! dbcsr_mm_methods. !! - 2013-01 extensive refactoring (Ole Schuett) USE dbcsr_block_operations, ONLY: dbcsr_data_clear USE dbcsr_config, ONLY: dbcsr_cfg, & default_resize_factor, & use_acc USE dbcsr_data_methods, ONLY: dbcsr_data_ensure_size, & dbcsr_data_get_size USE dbcsr_kinds, ONLY: int_4, int_8, real_8 USE dbcsr_mm_accdrv, ONLY: & dbcsr_mm_accdrv_barrier, dbcsr_mm_accdrv_dev2host_init, dbcsr_mm_accdrv_finalize, & dbcsr_mm_accdrv_init, dbcsr_mm_accdrv_lib_finalize, dbcsr_mm_accdrv_lib_init, & dbcsr_mm_accdrv_process, dbcsr_mm_accdrv_type USE dbcsr_mm_hostdrv, ONLY: dbcsr_mm_hostdrv_init, & dbcsr_mm_hostdrv_lib_finalize, & dbcsr_mm_hostdrv_lib_init, & dbcsr_mm_hostdrv_process, & dbcsr_mm_hostdrv_type USE dbcsr_mm_types, ONLY: p_a_first, & p_b_first, & p_c_first, & p_k, & p_m, & p_n, & stack_descriptor_type USE dbcsr_mpiwrap, ONLY: mp_bcast, & mp_environ, & mp_max, & mp_sum, mp_comm_type USE dbcsr_toollib, ONLY: sort USE dbcsr_types, ONLY: dbcsr_type, & dbcsr_work_type #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_sched' PUBLIC :: dbcsr_mm_sched_type PUBLIC :: dbcsr_mm_sched_lib_init, dbcsr_mm_sched_lib_finalize PUBLIC :: dbcsr_mm_sched_init, dbcsr_mm_sched_finalize PUBLIC :: dbcsr_mm_sched_print_statistics PUBLIC :: dbcsr_mm_sched_process PUBLIC :: dbcsr_mm_sched_begin_burst, dbcsr_mm_sched_end_burst PUBLIC :: dbcsr_mm_sched_barrier PUBLIC :: dbcsr_mm_sched_set_orig_datasize PUBLIC :: dbcsr_mm_sched_dev2host_init ! ************************************************************************************************** TYPE dbcsr_mm_sched_type PRIVATE TYPE(dbcsr_work_type), POINTER :: product_wm => Null() TYPE(dbcsr_mm_accdrv_type) :: accdrv = dbcsr_mm_accdrv_type() TYPE(dbcsr_mm_hostdrv_type) :: hostdrv = dbcsr_mm_hostdrv_type() LOGICAL :: avoid_accdrv = .FALSE. LOGICAL :: product_wm_cleared = .FALSE. LOGICAL :: keep_product_data = .TRUE. INTEGER :: product_wm_orig_datasize = -1 END TYPE dbcsr_mm_sched_type ! ************************************************************************************************** TYPE stats_type INTEGER(kind=int_8) :: cpu_num_stacks = 0 INTEGER(kind=int_8) :: smm_num_stacks = 0 INTEGER(kind=int_8) :: acc_num_stacks = 0 INTEGER(kind=int_8) :: cpu_flop = 0 INTEGER(kind=int_8) :: smm_flop = 0 INTEGER(kind=int_8) :: acc_flop = 0 INTEGER(kind=int_8) :: max_cpu_flop = 0 INTEGER(kind=int_8) :: max_smm_flop = 0 INTEGER(kind=int_8) :: max_acc_flop = 0 INTEGER(kind=int_8), DIMENSION(:, :), ALLOCATABLE :: num_mnk_stacks ! ensure that array-elements are on different cache lines INTEGER(kind=int_4), DIMENSION(64) :: padding = -1_int_4 END TYPE stats_type TYPE(stats_type), DIMENSION(:), ALLOCATABLE, TARGET, SAVE :: stats_per_thread !! Counters for each thread to collect statistics CONTAINS SUBROUTINE stats_init(stats) !! Initialize a stats_type TYPE(stats_type), INTENT(INOUT) :: stats ALLOCATE (stats%num_mnk_stacks(1, 10)) stats%num_mnk_stacks(1, :) = 0 ! entry for the default stack END SUBROUTINE stats_init SUBROUTINE dbcsr_mm_sched_lib_init() !! Initialize the library INTEGER :: ithread, nthreads nthreads = 1; ithread = 0 !$ nthreads = OMP_GET_NUM_THREADS(); ithread = OMP_GET_THREAD_NUM() !$OMP MASTER ALLOCATE (stats_per_thread(0:nthreads - 1)) !$OMP END MASTER !$OMP BARRIER CALL stats_init(stats_per_thread(ithread)) CALL dbcsr_mm_accdrv_lib_init() CALL dbcsr_mm_hostdrv_lib_init() END SUBROUTINE dbcsr_mm_sched_lib_init SUBROUTINE dbcsr_mm_sched_lib_finalize() !! Finalize the library and prints DBCSR statistics CALL dbcsr_mm_accdrv_lib_finalize() CALL dbcsr_mm_hostdrv_lib_finalize() !$OMP MASTER DEALLOCATE (stats_per_thread) !$OMP END MASTER END SUBROUTINE dbcsr_mm_sched_lib_finalize SUBROUTINE dbcsr_mm_sched_print_statistics(group, output_unit) !! Prints DBCSR statistics TYPE(mp_comm_type), INTENT(IN) :: group INTEGER, INTENT(IN) :: output_unit TYPE(stats_type) :: report ! Collect and output statistics --------------------------------------------- CALL stats_init(report) CALL stats_collect_from_threads(report) CALL stats_collect_from_ranks(report, group) CALL stats_print_report(report, output_unit) END SUBROUTINE dbcsr_mm_sched_print_statistics SUBROUTINE ensure_product_wm_cleared(this) !! Makes sure that the product_wm is cleared. TYPE(dbcsr_mm_sched_type), INTENT(INOUT) :: this INTEGER :: allocated_datasize, used_datasize IF (this%product_wm_cleared) RETURN ! The product's data_area could already contain some data. ! ( see: keep_product_data in dbcsr_operations.F ) ! But this data might not occupy all the allocated memory in the data_area. ! Since, we don't want to keep track of uninitialized memory we just zero it now. used_datasize = this%product_wm_orig_datasize allocated_datasize = dbcsr_data_get_size(this%product_wm%data_area) CALL dbcsr_data_clear(this%product_wm%data_area, lb=used_datasize + 1, ub=allocated_datasize) this%product_wm_cleared = .TRUE. END SUBROUTINE ensure_product_wm_cleared SUBROUTINE dbcsr_mm_sched_init(this, product_wm, nlayers, keep_product_data) !! Initializes a multiplication cycle for new set of C-blocks. TYPE(dbcsr_mm_sched_type), INTENT(INOUT) :: this TYPE(dbcsr_work_type), POINTER :: product_wm INTEGER, OPTIONAL :: nlayers LOGICAL, INTENT(IN) :: keep_product_data CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_sched_init' INTEGER :: handle CALL timeset(routineN, handle) this%keep_product_data = keep_product_data this%product_wm => product_wm ! Clearing the product_wm takes too long, we gonna do it later and ! return now to allow for MPI to progress. ! We just have to remember its datasize, in case it already contains data. this%product_wm_orig_datasize = this%product_wm%datasize CALL dbcsr_mm_hostdrv_init(this%hostdrv, product_wm) IF (use_acc()) & CALL dbcsr_mm_accdrv_init(this%accdrv, product_wm, nlayers, keep_product_data) CALL timestop(handle) END SUBROUTINE dbcsr_mm_sched_init SUBROUTINE dbcsr_mm_sched_finalize(this) !! Finalizes a multiplication cycle for a set of C-blocks. TYPE(dbcsr_mm_sched_type), INTENT(INOUT) :: this CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_sched_finalize' INTEGER :: handle CALL timeset(routineN, handle) ! Just in case dbcsr_mm_sched_process was never called (really needed?) CALL ensure_product_wm_cleared(this) !CALL dbcsr_mm_hostdrv_finalize(this%hostdrv) ! not needed IF (use_acc()) & CALL dbcsr_mm_accdrv_finalize(this%accdrv) CALL timestop(handle) END SUBROUTINE dbcsr_mm_sched_finalize SUBROUTINE dbcsr_mm_sched_dev2host_init(this) !! Finalizes a multiplication cycle for a set of C-blocks. TYPE(dbcsr_mm_sched_type), INTENT(INOUT) :: this CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_sched_dev2host_init' INTEGER :: handle CALL timeset(routineN, handle) IF (use_acc()) & CALL dbcsr_mm_accdrv_dev2host_init(this%accdrv) CALL timestop(handle) END SUBROUTINE dbcsr_mm_sched_dev2host_init SUBROUTINE dbcsr_mm_sched_begin_burst(this) !! Signal begin of a burst of calls to dbcsr_mm_sched_process. TYPE(dbcsr_mm_sched_type), INTENT(INOUT) :: this this%avoid_accdrv = .FALSE. END SUBROUTINE dbcsr_mm_sched_begin_burst SUBROUTINE dbcsr_mm_sched_end_burst() !! Signal end of a burst of calls to dbcsr_mm_sched_process. !nothing to do here END SUBROUTINE dbcsr_mm_sched_end_burst SUBROUTINE dbcsr_mm_sched_barrier() !! Signal that previous stacks should be processed first !CALL dbcsr_mm_hostdrv_barrier(this%hostdrv) ! not needed IF (use_acc()) & CALL dbcsr_mm_accdrv_barrier() END SUBROUTINE dbcsr_mm_sched_barrier SUBROUTINE dbcsr_mm_sched_process(this, left, right, stack_data, & stack_fillcount, stack_descr) !! Processes a given stack. TYPE(dbcsr_mm_sched_type), INTENT(INOUT) :: this TYPE(dbcsr_type), INTENT(IN) :: left, right INTEGER, DIMENSION(:, :), POINTER :: stack_data INTEGER, POINTER :: stack_fillcount TYPE(stack_descriptor_type), INTENT(IN) :: stack_descr INTEGER :: ithread, sp, stacked_datasize INTEGER(kind=int_8) :: flop_per_entry, total_flop LOGICAL :: success, generated_acc_untuned, used_smm TYPE(stats_type), POINTER :: mystats IF (stack_fillcount <= 0) & DBCSR_ABORT("dbcsr_mm_sched_process: got empty stack") ithread = 0 !$ ithread = OMP_GET_THREAD_NUM() mystats => stats_per_thread(ithread) CALL ensure_product_wm_cleared(this) stacked_datasize = this%product_wm%datasize CALL dbcsr_data_ensure_size(this%product_wm%data_area, stacked_datasize, & factor=default_resize_factor, zero_pad=.TRUE.) !!From here on there is no boundary checking due to assumed-SIZE-arguments. !!This is useful to check stack parameters, BUT it works only for kind=dp IF (.FALSE.) THEN DO sp = 1, stack_fillcount IF (stack_data(p_a_first, sp) > SIZE(left%data_area%d%r_dp)) & DBCSR_ABORT("left data out of range") IF (stack_data(p_b_first, sp) > SIZE(right%data_area%d%r_dp)) & DBCSR_ABORT("right data out of range") IF (stack_data(p_c_first, sp) > SIZE(this%product_wm%data_area%d%r_dp)) THEN WRITE (*, *) "blub: ", stack_data(p_c_first, sp), SIZE(this%product_wm%data_area%d%r_dp), & dbcsr_data_get_size(this%product_wm%data_area), stacked_datasize DBCSR_ABORT("product data out of range") END IF END DO END IF IF (.FALSE.) THEN ! Check if homogeneous stacks are indeed homogeneous IF (stack_descr%defined_mnk) THEN DO sp = 1, stack_fillcount IF (stack_data(p_m, sp) /= stack_descr%m) & DBCSR_ABORT("homogeneous stacks check failed") IF (stack_data(p_n, sp) /= stack_descr%n) & DBCSR_ABORT("homogeneous stacks check failed") IF (stack_data(p_k, sp) /= stack_descr%k) & DBCSR_ABORT("homogeneous stacks check failed") END DO END IF END IF ! Submitting the stack for processing ------------------------------------- flop_per_entry = INT(2, KIND=int_8)*stack_descr%max_m*stack_descr%max_n*stack_descr%max_k total_flop = stack_fillcount*flop_per_entry IF (use_acc() .AND. & flop_per_entry > dbcsr_cfg%accdrv_min_flop_process%val .AND. & (.NOT. this%avoid_accdrv) .AND. & (stack_descr%defined_mnk .OR. dbcsr_cfg%accdrv_do_inhomogenous%val)) THEN CALL dbcsr_mm_accdrv_process( & this%accdrv, & left, right, & params=stack_data, & stack_size=stack_fillcount, & stack_descr=stack_descr, & success=success, & generated_acc_untuned=generated_acc_untuned) IF (success) THEN ! update statistics mystats%acc_num_stacks = mystats%acc_num_stacks + 1 mystats%acc_flop = mystats%acc_flop + total_flop CALL stats_add(mystats, & m=stack_descr%m, n=stack_descr%n, k=stack_descr%k, & stacksize_acc=INT(stack_fillcount, kind=int_8), & generated_acc_untuned=generated_acc_untuned) RETURN ELSE this%avoid_accdrv = dbcsr_cfg%accdrv_avoid_after_busy%val END IF END IF !WRITE (*,*) "dbcsr_mm_sched_process: running hostdrv_process, stack_fillcount:", stack_fillcount CALL dbcsr_mm_hostdrv_process( & this%hostdrv, & left, right, & params=stack_data, & stack_size=stack_fillcount, & stack_descr=stack_descr, & success=success, & used_smm=used_smm) IF (.NOT. success) DBCSR_ABORT("dbcsr_mm_sched_process_stack failed") ! update statistics IF (used_smm) THEN mystats%smm_num_stacks = mystats%smm_num_stacks + 1 mystats%smm_flop = mystats%smm_flop + total_flop CALL stats_add(mystats, & m=stack_descr%m, n=stack_descr%n, k=stack_descr%k, & stacksize_smm=INT(stack_fillcount, kind=int_8)) ELSE mystats%cpu_num_stacks = mystats%cpu_num_stacks + 1 mystats%cpu_flop = mystats%cpu_flop + total_flop CALL stats_add(mystats, & m=stack_descr%m, n=stack_descr%n, k=stack_descr%k, & stacksize_cpu=INT(stack_fillcount, kind=int_8)) END IF END SUBROUTINE dbcsr_mm_sched_process SUBROUTINE dbcsr_mm_sched_set_orig_datasize(this, newsize) !! Change the datasize of the original workspace buffer TYPE(dbcsr_mm_sched_type), INTENT(INOUT) :: this INTEGER, INTENT(IN) :: newsize this%product_wm_orig_datasize = newsize END SUBROUTINE dbcsr_mm_sched_set_orig_datasize SUBROUTINE stats_add(stats, m, n, k, stacksize_cpu, stacksize_smm, stacksize_acc, & nstacks_cpu, nstacks_smm, nstacks_acc, generated_acc_untuned) !! Helper-routine used by dbcsr_mm_sched_process to supply statistics. TYPE(stats_type), INTENT(INOUT) :: stats INTEGER, INTENT(IN) :: m, n, k INTEGER(kind=int_8), OPTIONAL :: stacksize_cpu, stacksize_smm, & stacksize_acc, nstacks_cpu, & nstacks_smm, nstacks_acc LOGICAL, OPTIONAL :: generated_acc_untuned INTEGER :: i, s INTEGER(kind=int_8) :: my_nstacks_acc, my_nstacks_cpu, & my_nstacks_smm, my_stacksize_acc, & my_stacksize_cpu, my_stacksize_smm, & my_nstacks_acc_default INTEGER(kind=int_8), ALLOCATABLE, DIMENSION(:, :) :: tmp my_stacksize_cpu = 0 my_stacksize_smm = 0 my_stacksize_acc = 0 IF (PRESENT(stacksize_cpu)) my_stacksize_cpu = stacksize_cpu IF (PRESENT(stacksize_smm)) my_stacksize_smm = stacksize_smm IF (PRESENT(stacksize_acc)) my_stacksize_acc = stacksize_acc my_nstacks_cpu = MERGE(1, 0, my_stacksize_cpu > 0) my_nstacks_smm = MERGE(1, 0, my_stacksize_smm > 0) my_nstacks_acc = MERGE(1, 0, my_stacksize_acc > 0) my_nstacks_acc_default = 0 IF (PRESENT(nstacks_cpu)) my_nstacks_cpu = nstacks_cpu IF (PRESENT(nstacks_smm)) my_nstacks_smm = nstacks_smm IF (PRESENT(nstacks_acc)) my_nstacks_acc = nstacks_acc IF (PRESENT(generated_acc_untuned)) THEN IF (generated_acc_untuned) my_nstacks_acc_default = 1 END IF DO i = 1, SIZE(stats%num_mnk_stacks, 1) IF (stats%num_mnk_stacks(i, 1) == m .AND. & stats%num_mnk_stacks(i, 2) == n .AND. & stats%num_mnk_stacks(i, 3) == k) THEN stats%num_mnk_stacks(i, 4) = stats%num_mnk_stacks(i, 4) + my_stacksize_cpu stats%num_mnk_stacks(i, 5) = stats%num_mnk_stacks(i, 5) + my_stacksize_smm stats%num_mnk_stacks(i, 6) = stats%num_mnk_stacks(i, 6) + my_stacksize_acc stats%num_mnk_stacks(i, 7) = stats%num_mnk_stacks(i, 7) + my_nstacks_cpu stats%num_mnk_stacks(i, 8) = stats%num_mnk_stacks(i, 8) + my_nstacks_smm stats%num_mnk_stacks(i, 9) = stats%num_mnk_stacks(i, 9) + my_nstacks_acc stats%num_mnk_stacks(i, 10) = stats%num_mnk_stacks(i, 10) + my_nstacks_acc_default RETURN END IF END DO !not found, ok lets grow the list s = SIZE(stats%num_mnk_stacks, 1) ALLOCATE (tmp(s, 10)) tmp(:, :) = stats%num_mnk_stacks(:, :) DEALLOCATE (stats%num_mnk_stacks) ALLOCATE (stats%num_mnk_stacks(s + 1, 10)) stats%num_mnk_stacks(1:s, :) = tmp(:, :) stats%num_mnk_stacks(s + 1, 1) = m stats%num_mnk_stacks(s + 1, 2) = n stats%num_mnk_stacks(s + 1, 3) = k stats%num_mnk_stacks(s + 1, 4) = my_stacksize_cpu stats%num_mnk_stacks(s + 1, 5) = my_stacksize_smm stats%num_mnk_stacks(s + 1, 6) = my_stacksize_acc stats%num_mnk_stacks(s + 1, 7) = my_nstacks_cpu stats%num_mnk_stacks(s + 1, 8) = my_nstacks_smm stats%num_mnk_stacks(s + 1, 9) = my_nstacks_acc stats%num_mnk_stacks(s + 1, 10) = my_nstacks_acc_default DEALLOCATE (tmp) END SUBROUTINE stats_add SUBROUTINE stats_collect_from_threads(report) !! Collects statistics from all OpenMP-threads into report TYPE(stats_type), INTENT(INOUT) :: report INTEGER :: i, j, nthreads TYPE(stats_type), POINTER :: istats !$OMP PARALLEL DEFAULT(NONE) SHARED(nthreads) !$OMP MASTER nthreads = 1 !$ nthreads = OMP_GET_NUM_THREADS() !$OMP END MASTER !$OMP END PARALLEL DO i = 0, nthreads - 1 istats => stats_per_thread(i) report%cpu_num_stacks = report%cpu_num_stacks + istats%cpu_num_stacks report%smm_num_stacks = report%smm_num_stacks + istats%smm_num_stacks report%acc_num_stacks = report%acc_num_stacks + istats%acc_num_stacks report%acc_flop = report%acc_flop + istats%acc_flop report%smm_flop = report%smm_flop + istats%smm_flop report%cpu_flop = report%cpu_flop + istats%cpu_flop DO j = 1, SIZE(istats%num_mnk_stacks, 1) CALL stats_add(report, & m=INT(istats%num_mnk_stacks(j, 1), kind=int_4), & n=INT(istats%num_mnk_stacks(j, 2), kind=int_4), & k=INT(istats%num_mnk_stacks(j, 3), kind=int_4), & stacksize_cpu=istats%num_mnk_stacks(j, 4), & stacksize_smm=istats%num_mnk_stacks(j, 5), & stacksize_acc=istats%num_mnk_stacks(j, 6), & nstacks_cpu=istats%num_mnk_stacks(j, 7), & nstacks_smm=istats%num_mnk_stacks(j, 8), & nstacks_acc=istats%num_mnk_stacks(j, 9), & generated_acc_untuned=istats%num_mnk_stacks(j, 10) .GT. 0) END DO END DO END SUBROUTINE stats_collect_from_threads SUBROUTINE stats_collect_from_ranks(report, group) !! Collects statistics from all MPI-ranks TYPE(stats_type), INTENT(INOUT) :: report TYPE(mp_comm_type), INTENT(IN) :: group INTEGER :: i, myrank, nranks, sending_rank INTEGER, ALLOCATABLE, DIMENSION(:) :: mnk_collected INTEGER, DIMENSION(3) :: mnk !$OMP MASTER CALL mp_environ(nranks, myrank, group) report%max_acc_flop = report%acc_flop CALL mp_max(report%max_acc_flop, group) report%max_smm_flop = report%smm_flop CALL mp_max(report%max_smm_flop, group) report%max_cpu_flop = report%cpu_flop CALL mp_max(report%max_cpu_flop, group) CALL mp_sum(report%acc_flop, group) CALL mp_sum(report%smm_flop, group) CALL mp_sum(report%cpu_flop, group) CALL mp_sum(report%cpu_num_stacks, group) CALL mp_sum(report%smm_num_stacks, group) CALL mp_sum(report%acc_num_stacks, group) ! array mnk_collected is used as a logical-array, allows to use minloc ALLOCATE (mnk_collected(SIZE(report%num_mnk_stacks, 1))) mnk_collected = 0 ! init all to false ! broadcast stats of all mnk-combinations, which occurred on any mpi rank DO ! each rank with uncollected stats tries to become the sending_rank sending_rank = -1 IF (.NOT. ALL(mnk_collected == 1)) sending_rank = myrank CALL mp_max(sending_rank, group) IF (sending_rank < 0) EXIT ! every rank got all mnk collected IF (sending_rank == myrank) THEN i = MINLOC(mnk_collected, dim=1) mnk = INT(report%num_mnk_stacks(i, 1:3), kind=int_4) END IF CALL mp_bcast(msg=mnk, source=sending_rank, gid=group) CALL stats_add(report, m=mnk(1), n=mnk(2), k=mnk(3), stacksize_cpu=0_int_8, stacksize_acc=0_int_8) DO i = 1, SIZE(report%num_mnk_stacks, 1) IF (ALL(report%num_mnk_stacks(i, 1:3) == mnk)) THEN IF (i <= SIZE(mnk_collected)) mnk_collected(i) = 1 CALL mp_sum(report%num_mnk_stacks(i, 4:10), group) END IF END DO END DO !$OMP END MASTER END SUBROUTINE stats_collect_from_ranks SUBROUTINE stats_print_report(report, output_unit) !! Prints collected statistics TYPE(stats_type), INTENT(INOUT) :: report INTEGER, INTENT(IN) :: output_unit INTEGER :: i, j INTEGER(KIND=int_8) :: flops, total, total_flops_homo INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:) :: sort_key INTEGER(KIND=int_8), DIMENSION(3) :: flops_homo INTEGER, ALLOCATABLE, DIMENSION(:) :: sort_idx CHARACTER(LEN=4) :: generated_acc_untuned_label LOGICAL :: has_acc_untuned_kernel, & use_cpu_kernels IF (output_unit <= 0) RETURN WRITE (output_unit, "(1X,A,T45,A,T57,A,T68,A,T78,A)") "COUNTER", "TOTAL", "BLAS", "SMM", "ACC" !sorting stat entries by flops per multiplication ALLOCATE (sort_key(SIZE(report%num_mnk_stacks, 1) - 1)) sort_key(:) = 2*PRODUCT(report%num_mnk_stacks(2:, 1:3), DIM=2)*SUM(report%num_mnk_stacks(2:, 4:6), DIM=2) ALLOCATE (sort_idx(SIZE(sort_key))) CALL sort(sort_key, SIZE(sort_key), sort_idx) total_flops_homo = 0 flops_homo(:) = 0 has_acc_untuned_kernel = .FALSE. use_cpu_kernels = .FALSE. DO i = 1, SIZE(sort_idx) j = sort_idx(i) + 1 total = SUM(report%num_mnk_stacks(j, 4:6)) flops = 2*total*PRODUCT(report%num_mnk_stacks(j, 1:3)) total_flops_homo = total_flops_homo + flops flops_homo(:) = flops_homo(:) + 2*report%num_mnk_stacks(j, 4:6)*PRODUCT(report%num_mnk_stacks(j, 1:3)) IF (report%num_mnk_stacks(j, 10) .EQ. 0) THEN generated_acc_untuned_label = "" ELSE generated_acc_untuned_label = "(*)" has_acc_untuned_kernel = .TRUE. END IF IF (SUM(report%num_mnk_stacks(j, 4:5)) .GT. 0) THEN use_cpu_kernels = .TRUE. END IF WRITE (output_unit, "(A,I5,' x ',I5,' x ',I5,T30,I20,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'% ',A)") & " flops ", report%num_mnk_stacks(j, 1:3), & flops, & 100*REAL(report%num_mnk_stacks(j, 4:6))/REAL(MAX(INT(1, KIND=int_8), total)), & generated_acc_untuned_label END DO IF (has_acc_untuned_kernel) THEN CALL dbcsr_warn(__LOCATION__, & " (*) ACC Untuned kernels, consider to run the ACC tuning procedure for them") END IF IF (use_cpu_kernels .AND. use_acc()) THEN CALL dbcsr_warn(__LOCATION__, & " Some kernels are running on the CPU, consider to run the ACC tuning procedure for them") END IF total = report%cpu_flop + report%smm_flop + report%acc_flop WRITE (output_unit, "(A,T30,I20,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'%')") & " flops inhomo. stacks", total - total_flops_homo, & 100*REAL(report%cpu_flop - flops_homo(1))/REAL(MAX(INT(1, KIND=int_8), total - total_flops_homo)), & 100*REAL(report%smm_flop - flops_homo(2))/REAL(MAX(INT(1, KIND=int_8), total - total_flops_homo)), & 100*REAL(report%acc_flop - flops_homo(3))/REAL(MAX(INT(1, KIND=int_8), total - total_flops_homo)) WRITE (output_unit, "(A,T30,EN20.6,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'%')") & " flops total", REAL(total, KIND=real_8), & 100*REAL(report%cpu_flop)/REAL(MAX(INT(1, KIND=int_8), total)), & 100*REAL(report%smm_flop)/REAL(MAX(INT(1, KIND=int_8), total)), & 100*REAL(report%acc_flop)/REAL(MAX(INT(1, KIND=int_8), total)) total = report%max_cpu_flop + report%max_smm_flop + report%max_acc_flop WRITE (output_unit, "(A,T30,EN20.6,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'%')") & " flops max/rank", REAL(total, KIND=real_8), & 100*REAL(report%max_cpu_flop)/REAL(MAX(INT(1, KIND=int_8), total)), & 100*REAL(report%max_smm_flop)/REAL(MAX(INT(1, KIND=int_8), total)), & 100*REAL(report%max_acc_flop)/REAL(MAX(INT(1, KIND=int_8), total)) total = SUM(report%num_mnk_stacks(1, 4:6)) WRITE (output_unit, "(A,T30,I20,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'%')") & " matmuls inhomo. stacks", total, & 100*REAL(report%num_mnk_stacks(1, 4:6))/REAL(MAX(INT(1, KIND=int_8), total)) total = SUM(report%num_mnk_stacks(:, 4:6)) WRITE (output_unit, "(A,T30,I20,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'%')") & " matmuls total", total, & 100*REAL(SUM(report%num_mnk_stacks(:, 4:6), DIM=1))/REAL(MAX(INT(1, KIND=int_8), total)) total = report%cpu_num_stacks + report%smm_num_stacks + report%acc_num_stacks WRITE (output_unit, "(A,T30,I20,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'%')") & " number of processed stacks", total, & 100*REAL(report%cpu_num_stacks)/REAL(MAX(INT(1, KIND=int_8), total)), & 100*REAL(report%smm_num_stacks)/REAL(MAX(INT(1, KIND=int_8), total)), & 100*REAL(report%acc_num_stacks)/REAL(MAX(INT(1, KIND=int_8), total)) WRITE (output_unit, '(A,T51,F9.1,1X,F9.1,1X,F9.1)') " average stack size", & REAL(SUM(report%num_mnk_stacks(:, 4)))/REAL(MAX(INT(1, KIND=int_8), SUM(report%num_mnk_stacks(:, 7)))), & REAL(SUM(report%num_mnk_stacks(:, 5)))/REAL(MAX(INT(1, KIND=int_8), SUM(report%num_mnk_stacks(:, 8)))), & REAL(SUM(report%num_mnk_stacks(:, 6)))/REAL(MAX(INT(1, KIND=int_8), SUM(report%num_mnk_stacks(:, 9)))) END SUBROUTINE stats_print_report END MODULE dbcsr_mm_sched ================================================ FILE: src/mm/dbcsr_mm_types.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_mm_types !! Datatypes used by the dbcsr matrix-matrix multiplication machinery. !! Modification history: !! - 2013-01 reorganized code (Ole Schuett) IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_types' PUBLIC :: stack_descriptor_type ! Definitions for the members of a parameter stack. INTEGER, PARAMETER, PUBLIC :: dbcsr_ps_width = 7 INTEGER, PARAMETER, PUBLIC :: dbcsr_ps_acc_width = 3 INTEGER, PARAMETER, PUBLIC :: p_m = 1 INTEGER, PARAMETER, PUBLIC :: p_n = 2 INTEGER, PARAMETER, PUBLIC :: p_k = 3 INTEGER, PARAMETER, PUBLIC :: p_a_first = 4 INTEGER, PARAMETER, PUBLIC :: p_b_first = 5 INTEGER, PARAMETER, PUBLIC :: p_c_first = 6 INTEGER, PARAMETER, PUBLIC :: p_c_blk = 7 TYPE stack_descriptor_type INTEGER :: m = -1, n = -1, k = -1, max_m = -1, max_n = -1, max_k = -1 LOGICAL :: defined_mnk = .FALSE. END TYPE stack_descriptor_type END MODULE dbcsr_mm_types ================================================ FILE: src/mm/dbcsr_multiply_api.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_multiply_api USE dbcsr_data_methods, ONLY: dbcsr_scalar USE dbcsr_kinds, ONLY: int_8, & real_4, & real_8 USE dbcsr_methods, ONLY: dbcsr_get_data_type USE dbcsr_mm, ONLY: dbcsr_multiply_generic USE dbcsr_types, ONLY: dbcsr_type, & dbcsr_type_real_4, & dbcsr_type_real_8 #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_multiply_api' PUBLIC :: dbcsr_multiply INTERFACE dbcsr_multiply MODULE PROCEDURE dbcsr_multiply_generic MODULE PROCEDURE dbcsr_multiply_s, dbcsr_multiply_d, & dbcsr_multiply_c, dbcsr_multiply_z END INTERFACE CONTAINS SUBROUTINE dbcsr_multiply_s(transa, transb, & alpha, matrix_a, matrix_b, beta, matrix_c, & first_row, last_row, first_column, last_column, first_k, last_k, & retain_sparsity, filter_eps, & flop) CHARACTER(LEN=1), INTENT(IN) :: transa, transb REAL(KIND=real_4), INTENT(IN) :: alpha TYPE(dbcsr_type), INTENT(IN) :: matrix_a, matrix_b REAL(KIND=real_4), INTENT(IN) :: beta TYPE(dbcsr_type), INTENT(INOUT) :: matrix_c INTEGER, INTENT(IN), OPTIONAL :: first_row, last_row, first_column, & last_column, first_k, last_k LOGICAL, INTENT(IN), OPTIONAL :: retain_sparsity REAL(KIND=real_8), INTENT(IN), OPTIONAL :: filter_eps INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL :: flop CALL dbcsr_multiply_generic(transa, transb, & dbcsr_scalar(alpha), matrix_a, matrix_b, dbcsr_scalar(beta), matrix_c, & first_row, last_row, first_column, last_column, first_k, last_k, & retain_sparsity, & filter_eps=filter_eps, & flop=flop) END SUBROUTINE dbcsr_multiply_s SUBROUTINE dbcsr_multiply_d(transa, transb, & alpha, matrix_a, matrix_b, beta, matrix_c, & first_row, last_row, first_column, last_column, first_k, last_k, & retain_sparsity, filter_eps, & flop) CHARACTER(LEN=1), INTENT(IN) :: transa, transb REAL(KIND=real_8), INTENT(IN) :: alpha TYPE(dbcsr_type), INTENT(IN) :: matrix_a, matrix_b REAL(KIND=real_8), INTENT(IN) :: beta TYPE(dbcsr_type), INTENT(INOUT) :: matrix_c INTEGER, INTENT(IN), OPTIONAL :: first_row, last_row, first_column, & last_column, first_k, last_k LOGICAL, INTENT(IN), OPTIONAL :: retain_sparsity REAL(KIND=real_8), INTENT(IN), OPTIONAL :: filter_eps INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL :: flop IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_4 .AND. & dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_4 .AND. & dbcsr_get_data_type(matrix_c) .EQ. dbcsr_type_real_4) THEN CALL dbcsr_multiply_generic(transa, transb, & dbcsr_scalar(REAL(alpha, real_4)), matrix_a, matrix_b, & dbcsr_scalar(REAL(beta, real_4)), matrix_c, & first_row, last_row, first_column, last_column, first_k, last_k, & retain_sparsity, & filter_eps=filter_eps, & flop=flop) ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_8 .AND. & dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_8 .AND. & dbcsr_get_data_type(matrix_c) .EQ. dbcsr_type_real_8) THEN CALL dbcsr_multiply_generic(transa, transb, & dbcsr_scalar(alpha), matrix_a, matrix_b, dbcsr_scalar(beta), matrix_c, & first_row, last_row, first_column, last_column, first_k, last_k, & retain_sparsity, & filter_eps=filter_eps, & flop=flop) ELSE DBCSR_ABORT("This combination of data types NYI") END IF END SUBROUTINE dbcsr_multiply_d SUBROUTINE dbcsr_multiply_c(transa, transb, & alpha, matrix_a, matrix_b, beta, matrix_c, & first_row, last_row, first_column, last_column, first_k, last_k, & retain_sparsity, filter_eps, & flop) CHARACTER(LEN=1), INTENT(IN) :: transa, transb COMPLEX(KIND=real_4), INTENT(IN) :: alpha TYPE(dbcsr_type), INTENT(IN) :: matrix_a, matrix_b COMPLEX(KIND=real_4), INTENT(IN) :: beta TYPE(dbcsr_type), INTENT(INOUT) :: matrix_c INTEGER, INTENT(IN), OPTIONAL :: first_row, last_row, first_column, & last_column, first_k, last_k LOGICAL, INTENT(IN), OPTIONAL :: retain_sparsity REAL(KIND=real_8), INTENT(IN), OPTIONAL :: filter_eps INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL :: flop CALL dbcsr_multiply_generic(transa, transb, & dbcsr_scalar(alpha), matrix_a, matrix_b, dbcsr_scalar(beta), matrix_c, & first_row, last_row, first_column, last_column, first_k, last_k, & retain_sparsity, & filter_eps=filter_eps, & flop=flop) END SUBROUTINE dbcsr_multiply_c SUBROUTINE dbcsr_multiply_z(transa, transb, & alpha, matrix_a, matrix_b, beta, matrix_c, & first_row, last_row, first_column, last_column, first_k, last_k, & retain_sparsity, filter_eps, & flop) CHARACTER(LEN=1), INTENT(IN) :: transa, transb COMPLEX(KIND=real_8), INTENT(IN) :: alpha TYPE(dbcsr_type), INTENT(IN) :: matrix_a, matrix_b COMPLEX(KIND=real_8), INTENT(IN) :: beta TYPE(dbcsr_type), INTENT(INOUT) :: matrix_c INTEGER, INTENT(IN), OPTIONAL :: first_row, last_row, first_column, & last_column, first_k, last_k LOGICAL, INTENT(IN), OPTIONAL :: retain_sparsity REAL(KIND=real_8), INTENT(IN), OPTIONAL :: filter_eps INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL :: flop CALL dbcsr_multiply_generic(transa, transb, & dbcsr_scalar(alpha), matrix_a, matrix_b, dbcsr_scalar(beta), matrix_c, & first_row, last_row, first_column, last_column, first_k, last_k, & retain_sparsity, & filter_eps=filter_eps, & flop=flop) END SUBROUTINE dbcsr_multiply_z END MODULE dbcsr_multiply_api ================================================ FILE: src/mpi/PACKAGE ================================================ { "description": "wrappers of the mpi routines", "archive": "libdbcsr", "requires": ["../base", "../data", "../core"], "implicit": "MPI_.*", } ================================================ FILE: src/mpi/dbcsr_mp_methods.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_mp_methods USE dbcsr_methods, ONLY: dbcsr_mp_grid_remove, & dbcsr_mp_release USE dbcsr_mpiwrap, ONLY: mp_cart_create, & mp_cart_sub, & mp_comm_free, & mp_environ, & mp_cart_rank, & mp_dims_create, & mp_comm_null, mp_comm_type USE dbcsr_types, ONLY: dbcsr_mp_obj #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mp_methods' PUBLIC :: dbcsr_mp_new, dbcsr_mp_hold, dbcsr_mp_release, & dbcsr_mp_pgrid, dbcsr_mp_numnodes, dbcsr_mp_mynode, dbcsr_mp_group, & dbcsr_mp_new_transposed, dbcsr_mp_nprows, dbcsr_mp_npcols, & dbcsr_mp_myprow, dbcsr_mp_mypcol, & dbcsr_mp_my_row_group, dbcsr_mp_my_col_group, & dbcsr_mp_has_subgroups, dbcsr_mp_get_process, & dbcsr_mp_grid_setup, dbcsr_mp_grid_remove, & dbcsr_mp_init, dbcsr_mp_active, dbcsr_mp_make_env INTERFACE dbcsr_mp_new MODULE PROCEDURE dbcsr_mp_new_grid MODULE PROCEDURE dbcsr_mp_new_group END INTERFACE dbcsr_mp_new CONTAINS SUBROUTINE dbcsr_mp_init(mp_env) !! Initializes a new process grid TYPE(dbcsr_mp_obj), INTENT(OUT) :: mp_env NULLIFY (mp_env%mp) END SUBROUTINE dbcsr_mp_init FUNCTION dbcsr_mp_active(mp_env) RESULT(active) !! Checks whether this process is part of the message passing environment TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env LOGICAL :: active active = ASSOCIATED(mp_env%mp) END FUNCTION dbcsr_mp_active SUBROUTINE dbcsr_mp_new_grid(mp_env, mp_group, pgrid, mynode, & numnodes, myprow, mypcol, source) !! Creates new process grid TYPE(dbcsr_mp_obj), INTENT(OUT) :: mp_env !! multiprocessor environment TYPE(mp_comm_type), INTENT(IN) :: mp_group INTEGER, INTENT(IN) :: mynode !! my processor number INTEGER, DIMENSION(0:, 0:), INTENT(IN) :: pgrid !! process grid INTEGER, INTENT(IN), OPTIONAL :: numnodes, myprow, mypcol, source !! total number of processors (processes) INTEGER :: pcol, prow ! --------------------------------------------------------------------------- ALLOCATE (mp_env%mp) mp_env%mp%refcount = 1 ALLOCATE (mp_env%mp%pgrid(0:SIZE(pgrid, 1) - 1, 0:SIZE(pgrid, 2) - 1)) mp_env%mp%pgrid(:, :) = pgrid(:, :) mp_env%mp%mynode = mynode mp_env%mp%mp_group = mp_group mp_env%mp%source = 0 IF (PRESENT(source)) mp_env%mp%source = source IF (PRESENT(numnodes)) THEN mp_env%mp%numnodes = numnodes ELSE mp_env%mp%numnodes = SIZE(pgrid) END IF IF (PRESENT(myprow) .AND. PRESENT(mypcol)) THEN mp_env%mp%myprow = myprow mp_env%mp%mypcol = mypcol ELSE mp_env%mp%myprow = -33777 mp_env%mp%mypcol = -33777 column_loop: DO pcol = LBOUND(pgrid, 2), UBOUND(pgrid, 2) row_loop: DO prow = LBOUND(pgrid, 1), UBOUND(pgrid, 1) test_position: IF (pgrid(prow, pcol) .EQ. mynode) THEN mp_env%mp%myprow = prow mp_env%mp%mypcol = pcol EXIT column_loop END IF test_position END DO row_loop END DO column_loop END IF mp_env%mp%subgroups_defined = .FALSE. !call dbcsr_mp_grid_setup(mp_env) END SUBROUTINE dbcsr_mp_new_grid SUBROUTINE dbcsr_mp_new_group(mp_env, mp_group, pgrid) !! Creates a new dbcsr_mp_obj based on a input template TYPE(dbcsr_mp_obj), INTENT(OUT) :: mp_env TYPE(mp_comm_type), INTENT(IN) :: mp_group INTEGER, DIMENSION(:, :), OPTIONAL, POINTER :: pgrid !! Optional, if not provided group is assumed to be a 2D cartesian communicator INTEGER :: mynode, mypcol, myprow, numnodes, pcol, & prow INTEGER, DIMENSION(2) :: coord, mycoord, pdims INTEGER, DIMENSION(:, :), POINTER :: mypgrid LOGICAL, DIMENSION(2) :: periods CALL mp_environ(numnodes, mynode, mp_group) IF (PRESENT(pgrid)) THEN mypgrid => pgrid DBCSR_ASSERT(LBOUND(pgrid, 1) == 0 .AND. LBOUND(pgrid, 2) == 0) pdims(1) = SIZE(pgrid, 1) pdims(2) = SIZE(pgrid, 2) myprow = -1; mypcol = -1 outer: & DO prow = 0, pdims(1) - 1 DO pcol = 0, pdims(2) - 1 IF (pgrid(prow, pcol) == mynode) THEN myprow = prow mypcol = pcol EXIT outer END IF END DO END DO outer ELSE CALL mp_environ(mp_group, 2, pdims, mycoord, periods) DBCSR_ASSERT(pdims(1)*pdims(2) == numnodes) myprow = mycoord(1) mypcol = mycoord(2) ALLOCATE (mypgrid(0:pdims(1) - 1, 0:pdims(2) - 1)) DO prow = 0, pdims(1) - 1 DO pcol = 0, pdims(2) - 1 coord = (/prow, pcol/) CALL mp_cart_rank(mp_group, coord, mypgrid(prow, pcol)) END DO END DO END IF DBCSR_ASSERT(mynode == mypgrid(myprow, mypcol)) ! create the new mp environment CALL dbcsr_mp_new(mp_env, mp_group, mypgrid, & mynode=mynode, numnodes=numnodes, myprow=myprow, mypcol=mypcol) IF (.NOT. PRESENT(pgrid)) DEALLOCATE (mypgrid) END SUBROUTINE dbcsr_mp_new_group SUBROUTINE dbcsr_mp_grid_setup(mp_env) !! Sets up MPI cartesian process grid TYPE(dbcsr_mp_obj), INTENT(INOUT) :: mp_env !! multiprocessor environment INTEGER :: ndims INTEGER, DIMENSION(2) :: dims, my_pos LOGICAL, DIMENSION(2) :: remain TYPE(mp_comm_type) :: tmp_group ! --------------------------------------------------------------------------- IF (.NOT. mp_env%mp%subgroups_defined) THEN ! KG workaround. ! This will be deleted (replaced by code in mp_new). ndims = 2 dims(1:2) = (/SIZE(mp_env%mp%pgrid, 1), SIZE(mp_env%mp%pgrid, 2)/) CALL mp_cart_create(mp_env%mp%mp_group, ndims, & dims, my_pos, & tmp_group) IF (my_pos(1) .NE. mp_env%mp%myprow) & DBCSR_ABORT("Got different MPI process grid") IF (my_pos(2) .NE. mp_env%mp%mypcol) & DBCSR_ABORT("Got different MPI process grid") ! remain = (/.FALSE., .TRUE./) CALL mp_cart_sub(tmp_group, remain, mp_env%mp%prow_group) remain = (/.TRUE., .FALSE./) CALL mp_cart_sub(tmp_group, remain, mp_env%mp%pcol_group) CALL mp_comm_free(tmp_group) mp_env%mp%subgroups_defined = .TRUE. END IF END SUBROUTINE dbcsr_mp_grid_setup SUBROUTINE dbcsr_mp_make_env(mp_env, cart_group, mp_group, & nprocs, pgrid_dims) !! Creates a sane mp_obj from the given MPI comm that is not a cartesian one (hack) TYPE(dbcsr_mp_obj), INTENT(OUT) :: mp_env !! Message-passing environment object to create TYPE(mp_comm_type), INTENT(OUT) :: cart_group !! the created cartesian group (to be freed by the user) TYPE(mp_comm_type), INTENT(IN) :: mp_group !! MPI group INTEGER, INTENT(IN), OPTIONAL :: nprocs !! Number of processes INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: pgrid_dims !! Dimensions of MPI group CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mp_make_env' INTEGER :: error_handle, mynode, numnodes, pcol, & prow INTEGER, ALLOCATABLE, DIMENSION(:, :) :: pgrid INTEGER, DIMENSION(2) :: coord, myploc, npdims LOGICAL :: alive ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) CALL mp_environ(numnodes, mynode, mp_group) IF (PRESENT(nprocs)) THEN IF (nprocs > numnodes) & DBCSR_ABORT("Can not grow processes.") numnodes = nprocs END IF ! IF (PRESENT(pgrid_dims)) THEN npdims(:) = pgrid_dims ELSE npdims(:) = 0 CALL mp_dims_create(numnodes, npdims) END IF CALL mp_cart_create(mp_group, 2, npdims, myploc, cart_group) alive = cart_group .NE. mp_comm_null IF (alive) THEN CALL mp_environ(numnodes, mynode, cart_group) ALLOCATE (pgrid(0:npdims(1) - 1, 0:npdims(2) - 1)) DO prow = 0, npdims(1) - 1 DO pcol = 0, npdims(2) - 1 coord = (/prow, pcol/) CALL mp_cart_rank(cart_group, coord, pgrid(prow, pcol)) END DO END DO CALL dbcsr_mp_new(mp_env, cart_group, pgrid, & mynode, numnodes, & myprow=myploc(1), mypcol=myploc(2)) ELSE CALL dbcsr_mp_init(mp_env) END IF CALL timestop(error_handle) END SUBROUTINE dbcsr_mp_make_env PURE SUBROUTINE dbcsr_mp_hold(mp_env) !! Marks another use of the mp_env TYPE(dbcsr_mp_obj), INTENT(INOUT) :: mp_env !! multiprocessor environment mp_env%mp%refcount = mp_env%mp%refcount + 1 END SUBROUTINE dbcsr_mp_hold PURE FUNCTION dbcsr_mp_get_process(mp_env, prow, pcol) RESULT(process) TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER, INTENT(IN) :: prow, pcol INTEGER :: process process = mp_env%mp%pgrid(prow, pcol) END FUNCTION dbcsr_mp_get_process FUNCTION dbcsr_mp_pgrid(mp_env) RESULT(pgrid) TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER, DIMENSION(:, :), POINTER, CONTIGUOUS :: pgrid pgrid => mp_env%mp%pgrid END FUNCTION dbcsr_mp_pgrid PURE FUNCTION dbcsr_mp_numnodes(mp_env) RESULT(numnodes) TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER :: numnodes numnodes = mp_env%mp%numnodes END FUNCTION dbcsr_mp_numnodes PURE FUNCTION dbcsr_mp_mynode(mp_env) RESULT(mynode) TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER :: mynode mynode = mp_env%mp%mynode END FUNCTION dbcsr_mp_mynode PURE FUNCTION dbcsr_mp_group(mp_env) RESULT(mp_group) TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env TYPE(mp_comm_type) :: mp_group mp_group = mp_env%mp%mp_group END FUNCTION dbcsr_mp_group PURE FUNCTION dbcsr_mp_nprows(mp_env) RESULT(nprows) TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER :: nprows nprows = SIZE(mp_env%mp%pgrid, 1) END FUNCTION dbcsr_mp_nprows PURE FUNCTION dbcsr_mp_npcols(mp_env) RESULT(npcols) TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER :: npcols npcols = SIZE(mp_env%mp%pgrid, 2) END FUNCTION dbcsr_mp_npcols PURE FUNCTION dbcsr_mp_myprow(mp_env) RESULT(myprow) TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER :: myprow myprow = mp_env%mp%myprow END FUNCTION dbcsr_mp_myprow PURE FUNCTION dbcsr_mp_mypcol(mp_env) RESULT(mypcol) TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER :: mypcol mypcol = mp_env%mp%mypcol END FUNCTION dbcsr_mp_mypcol PURE FUNCTION dbcsr_mp_has_subgroups(mp_env) RESULT(has_subgroups) TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env LOGICAL :: has_subgroups has_subgroups = mp_env%mp%subgroups_defined END FUNCTION dbcsr_mp_has_subgroups PURE FUNCTION dbcsr_mp_my_row_group(mp_env) RESULT(row_group) TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env TYPE(mp_comm_type) :: row_group row_group = mp_env%mp%prow_group END FUNCTION dbcsr_mp_my_row_group PURE FUNCTION dbcsr_mp_my_col_group(mp_env) RESULT(col_group) TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env TYPE(mp_comm_type) :: col_group col_group = mp_env%mp%pcol_group END FUNCTION dbcsr_mp_my_col_group SUBROUTINE dbcsr_mp_new_transposed(mp_t, mp) !! Transposes a multiprocessor environment TYPE(dbcsr_mp_obj), INTENT(OUT) :: mp_t !! transposed multiprocessor environment TYPE(dbcsr_mp_obj), INTENT(IN) :: mp !! original multiprocessor environment CALL dbcsr_mp_new(mp_t, dbcsr_mp_group(mp), & TRANSPOSE(dbcsr_mp_pgrid(mp)), & dbcsr_mp_mynode(mp), dbcsr_mp_numnodes(mp), & dbcsr_mp_mypcol(mp), dbcsr_mp_myprow(mp)) END SUBROUTINE dbcsr_mp_new_transposed END MODULE dbcsr_mp_methods ================================================ FILE: src/mpi/dbcsr_mp_operations.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_mp_operations !! Wrappers to message passing calls. USE dbcsr_config, ONLY: has_MPI USE dbcsr_data_methods, ONLY: dbcsr_data_get_type USE dbcsr_mp_methods, ONLY: & dbcsr_mp_get_process, dbcsr_mp_grid_setup, dbcsr_mp_group, dbcsr_mp_has_subgroups, & dbcsr_mp_my_col_group, dbcsr_mp_my_row_group, dbcsr_mp_mynode, dbcsr_mp_mypcol, & dbcsr_mp_myprow, dbcsr_mp_npcols, dbcsr_mp_nprows, dbcsr_mp_numnodes, dbcsr_mp_pgrid USE dbcsr_ptr_util, ONLY: memory_copy USE dbcsr_types, ONLY: dbcsr_data_obj, & dbcsr_mp_obj, & dbcsr_type_complex_4, & dbcsr_type_complex_8, & dbcsr_type_int_4, & dbcsr_type_real_4, & dbcsr_type_real_8 USE dbcsr_kinds, ONLY: real_4, & real_8 USE dbcsr_mpiwrap, ONLY: & mp_allgather, mp_alltoall, mp_gatherv, mp_ibcast, mp_irecv, mp_iscatter, mp_isend, & mp_isendrecv, mp_rget, mp_sendrecv, mp_type_descriptor_type, mp_type_indexed_make_c, & mp_type_indexed_make_d, mp_type_indexed_make_r, mp_type_indexed_make_z, mp_type_make, & mp_waitall, mp_win_create, mp_comm_type, mp_request_type, mp_win_type #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mp_operations' ! MP routines PUBLIC :: hybrid_alltoall_s1, hybrid_alltoall_d1, & hybrid_alltoall_c1, hybrid_alltoall_z1, & hybrid_alltoall_i1, hybrid_alltoall_any PUBLIC :: dbcsr_allgatherv PUBLIC :: dbcsr_sendrecv_any PUBLIC :: dbcsr_isend_any, dbcsr_irecv_any PUBLIC :: dbcsr_win_create_any, dbcsr_rget_any, dbcsr_ibcast_any PUBLIC :: dbcsr_iscatterv_any, dbcsr_gatherv_any PUBLIC :: dbcsr_isendrecv_any ! Type helpers PUBLIC :: dbcsr_mp_type_from_anytype INTERFACE dbcsr_hybrid_alltoall MODULE PROCEDURE hybrid_alltoall_s1, hybrid_alltoall_d1, & hybrid_alltoall_c1, hybrid_alltoall_z1 MODULE PROCEDURE hybrid_alltoall_i1 MODULE PROCEDURE hybrid_alltoall_any END INTERFACE CONTAINS SUBROUTINE hybrid_alltoall_any(sb, scount, sdispl, & rb, rcount, rdispl, mp_env, most_ptp, remainder_ptp, no_hybrid) TYPE(dbcsr_data_obj), INTENT(IN) :: sb INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: scount, sdispl TYPE(dbcsr_data_obj), INTENT(INOUT) :: rb INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: rcount, rdispl TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env LOGICAL, INTENT(in), OPTIONAL :: most_ptp, remainder_ptp, no_hybrid CHARACTER(len=*), PARAMETER :: routineN = 'hybrid_alltoall_any' INTEGER :: error_handle ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) SELECT CASE (dbcsr_data_get_type(sb)) CASE (dbcsr_type_real_4) CALL hybrid_alltoall_s1(sb%d%r_sp, scount, sdispl, & rb%d%r_sp, rcount, rdispl, mp_env, & most_ptp, remainder_ptp, no_hybrid) CASE (dbcsr_type_real_8) CALL hybrid_alltoall_d1(sb%d%r_dp, scount, sdispl, & rb%d%r_dp, rcount, rdispl, mp_env, & most_ptp, remainder_ptp, no_hybrid) CASE (dbcsr_type_complex_4) CALL hybrid_alltoall_c1(sb%d%c_sp, scount, sdispl, & rb%d%c_sp, rcount, rdispl, mp_env, & most_ptp, remainder_ptp, no_hybrid) CASE (dbcsr_type_complex_8) CALL hybrid_alltoall_z1(sb%d%c_dp, scount, sdispl, & rb%d%c_dp, rcount, rdispl, mp_env, & most_ptp, remainder_ptp, no_hybrid) CASE default DBCSR_ABORT("Invalid data type") END SELECT CALL timestop(error_handle) END SUBROUTINE hybrid_alltoall_any SUBROUTINE hybrid_alltoall_i1(sb, scount, sdispl, & rb, rcount, rdispl, mp_env, most_ptp, remainder_ptp, no_hybrid) !! Row/column and global all-to-all !! !! Communicator selection !! Uses row and column communicators for row/column !! sends. Remaining sends are performed using the global !! communicator. Point-to-point isend/irecv are used if ptp is !! set, otherwise a alltoall collective call is issued. !! see mp_alltoall INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(in), & TARGET :: sb INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: scount, sdispl INTEGER, DIMENSION(:), CONTIGUOUS, & INTENT(INOUT), TARGET :: rb INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: rcount, rdispl TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env !! MP Environment LOGICAL, INTENT(IN), OPTIONAL :: most_ptp, remainder_ptp, & no_hybrid !! Use point-to-point for row/column; default is no !! Use point-to-point for remaining; default is no !! Use regular global collective; default is no INTEGER :: mynode, mypcol, myprow, nall_rr, nall_sr, ncol_rr, & ncol_sr, npcols, nprows, nrow_rr, nrow_sr, numnodes, dst, src, & prow, pcol, send_cnt, recv_cnt, tag, i INTEGER, ALLOCATABLE, DIMENSION(:) :: new_rcount, new_rdispl, new_scount, new_sdispl INTEGER, DIMENSION(:, :), POINTER :: pgrid LOGICAL :: most_collective, & remainder_collective, no_h INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: send_data_p, recv_data_p TYPE(dbcsr_mp_obj) :: mpe TYPE(mp_comm_type) :: all_group, grp TYPE(mp_request_type), ALLOCATABLE, DIMENSION(:) :: all_rr, all_sr, col_rr, col_sr, row_rr, row_sr IF (.NOT. dbcsr_mp_has_subgroups(mp_env)) THEN mpe = mp_env CALL dbcsr_mp_grid_setup(mpe) END IF most_collective = .TRUE. remainder_collective = .TRUE. no_h = .FALSE. IF (PRESENT(most_ptp)) most_collective = .NOT. most_ptp IF (PRESENT(remainder_ptp)) remainder_collective = .NOT. remainder_ptp IF (PRESENT(no_hybrid)) no_h = no_hybrid all_group = dbcsr_mp_group(mp_env) ! Don't use subcommunicators if they're not defined. no_h = no_h .OR. .NOT. dbcsr_mp_has_subgroups(mp_env) .OR. .NOT. has_MPI subgrouped: IF (mp_env%mp%subgroups_defined .AND. .NOT. no_h) THEN mynode = dbcsr_mp_mynode(mp_env) numnodes = dbcsr_mp_numnodes(mp_env) nprows = dbcsr_mp_nprows(mp_env) npcols = dbcsr_mp_npcols(mp_env) myprow = dbcsr_mp_myprow(mp_env) mypcol = dbcsr_mp_mypcol(mp_env) pgrid => dbcsr_mp_pgrid(mp_env) ALLOCATE (row_sr(0:npcols - 1)); nrow_sr = 0 ALLOCATE (row_rr(0:npcols - 1)); nrow_rr = 0 ALLOCATE (col_sr(0:nprows - 1)); ncol_sr = 0 ALLOCATE (col_rr(0:nprows - 1)); ncol_rr = 0 ALLOCATE (all_sr(0:numnodes - 1)); nall_sr = 0 ALLOCATE (all_rr(0:numnodes - 1)); nall_rr = 0 ALLOCATE (new_scount(numnodes), new_rcount(numnodes)) ALLOCATE (new_sdispl(numnodes), new_rdispl(numnodes)) IF (.NOT. remainder_collective) THEN CALL remainder_point_to_point() END IF IF (.NOT. most_collective) THEN CALL most_point_to_point() ELSE CALL most_alltoall() END IF IF (remainder_collective) THEN CALL remainder_alltoall() END IF ! Wait for all issued sends and receives. IF (.NOT. most_collective) THEN CALL mp_waitall(row_sr(0:nrow_sr - 1)) CALL mp_waitall(col_sr(0:ncol_sr - 1)) CALL mp_waitall(row_rr(0:nrow_rr - 1)) CALL mp_waitall(col_rr(0:ncol_rr - 1)) END IF IF (.NOT. remainder_collective) THEN CALL mp_waitall(all_sr(1:nall_sr)) CALL mp_waitall(all_rr(1:nall_rr)) END IF ELSE CALL mp_alltoall(sb, scount, sdispl, & rb, rcount, rdispl, & all_group) END IF subgrouped CONTAINS SUBROUTINE most_alltoall() DO pcol = 0, npcols - 1 new_scount(1 + pcol) = scount(1 + pgrid(myprow, pcol)) new_rcount(1 + pcol) = rcount(1 + pgrid(myprow, pcol)) new_sdispl(1 + pcol) = sdispl(1 + pgrid(myprow, pcol)) new_rdispl(1 + pcol) = rdispl(1 + pgrid(myprow, pcol)) END DO CALL mp_alltoall(sb, new_scount(1:npcols), new_sdispl(1:npcols), & rb, new_rcount(1:npcols), new_rdispl(1:npcols), & dbcsr_mp_my_row_group(mp_env)) DO prow = 0, nprows - 1 new_scount(1 + prow) = scount(1 + pgrid(prow, mypcol)) new_rcount(1 + prow) = rcount(1 + pgrid(prow, mypcol)) new_sdispl(1 + prow) = sdispl(1 + pgrid(prow, mypcol)) new_rdispl(1 + prow) = rdispl(1 + pgrid(prow, mypcol)) END DO CALL mp_alltoall(sb, new_scount(1:nprows), new_sdispl(1:nprows), & rb, new_rcount(1:nprows), new_rdispl(1:nprows), & dbcsr_mp_my_col_group(mp_env)) END SUBROUTINE most_alltoall SUBROUTINE most_point_to_point() ! Go through my prow and exchange. DO i = 0, npcols - 1 pcol = MOD(mypcol + i, npcols) grp = dbcsr_mp_my_row_group(mp_env) ! dst = dbcsr_mp_get_process(mp_env, myprow, pcol) send_cnt = scount(dst + 1) send_data_p => sb(1 + sdispl(dst + 1):1 + sdispl(dst + 1) + send_cnt - 1) tag = 4*mypcol IF (send_cnt .GT. 0) THEN CALL mp_isend(send_data_p, pcol, grp, row_sr(nrow_sr), tag) nrow_sr = nrow_sr + 1 END IF ! pcol = MODULO(mypcol - i, npcols) src = dbcsr_mp_get_process(mp_env, myprow, pcol) recv_cnt = rcount(src + 1) recv_data_p => rb(1 + rdispl(src + 1):1 + rdispl(src + 1) + recv_cnt - 1) tag = 4*pcol IF (recv_cnt .GT. 0) THEN CALL mp_irecv(recv_data_p, pcol, grp, row_rr(nrow_rr), tag) nrow_rr = nrow_rr + 1 END IF END DO ! go through my pcol and exchange DO i = 0, nprows - 1 prow = MOD(myprow + i, nprows) grp = dbcsr_mp_my_col_group(mp_env) ! dst = dbcsr_mp_get_process(mp_env, prow, mypcol) send_cnt = scount(dst + 1) IF (send_cnt .GT. 0) THEN send_data_p => sb(1 + sdispl(dst + 1):1 + sdispl(dst + 1) + send_cnt - 1) tag = 4*myprow + 1 CALL mp_isend(send_data_p, prow, grp, col_sr(ncol_sr), tag) ncol_sr = ncol_sr + 1 END IF ! prow = MODULO(myprow - i, nprows) src = dbcsr_mp_get_process(mp_env, prow, mypcol) recv_cnt = rcount(src + 1) IF (recv_cnt .GT. 0) THEN recv_data_p => rb(1 + rdispl(src + 1):1 + rdispl(src + 1) + recv_cnt - 1) tag = 4*prow + 1 CALL mp_irecv(recv_data_p, prow, grp, col_rr(ncol_rr), tag) ncol_rr = ncol_rr + 1 END IF END DO END SUBROUTINE most_point_to_point SUBROUTINE remainder_alltoall() new_scount(:) = scount(:) new_rcount(:) = rcount(:) DO prow = 0, nprows - 1 new_scount(1 + pgrid(prow, mypcol)) = 0 new_rcount(1 + pgrid(prow, mypcol)) = 0 END DO DO pcol = 0, npcols - 1 new_scount(1 + pgrid(myprow, pcol)) = 0 new_rcount(1 + pgrid(myprow, pcol)) = 0 END DO CALL mp_alltoall(sb, new_scount, sdispl, & rb, new_rcount, rdispl, all_group) END SUBROUTINE remainder_alltoall SUBROUTINE remainder_point_to_point() INTEGER :: col, row DO row = 0, nprows - 1 prow = MOD(row + myprow, nprows) IF (prow .EQ. myprow) CYCLE DO col = 0, npcols - 1 pcol = MOD(col + mypcol, npcols) IF (pcol .EQ. mypcol) CYCLE dst = dbcsr_mp_get_process(mp_env, prow, pcol) send_cnt = scount(dst + 1) IF (send_cnt .GT. 0) THEN tag = 4*mynode + 2 send_data_p => sb(1 + sdispl(dst + 1):1 + sdispl(dst + 1) + send_cnt - 1) CALL mp_isend(send_data_p, dst, all_group, all_sr(nall_sr + 1), tag) nall_sr = nall_sr + 1 END IF ! src = dbcsr_mp_get_process(mp_env, prow, pcol) recv_cnt = rcount(src + 1) IF (recv_cnt .GT. 0) THEN recv_data_p => rb(1 + rdispl(src + 1):1 + rdispl(src + 1) + recv_cnt - 1) tag = 4*src + 2 CALL mp_irecv(recv_data_p, src, all_group, all_rr(nall_rr + 1), tag) nall_rr = nall_rr + 1 END IF END DO END DO END SUBROUTINE remainder_point_to_point END SUBROUTINE hybrid_alltoall_i1 FUNCTION dbcsr_mp_type_from_anytype(data_area) RESULT(mp_type) !! Creates an MPI combined type from the given anytype. TYPE(dbcsr_data_obj), INTENT(IN) :: data_area !! Data area of any type TYPE(mp_type_descriptor_type) :: mp_type !! Type descriptor SELECT CASE (data_area%d%data_type) CASE (dbcsr_type_int_4) mp_type = mp_type_make(data_area%d%i4) CASE (dbcsr_type_real_4) mp_type = mp_type_make(data_area%d%r_sp) CASE (dbcsr_type_real_8) mp_type = mp_type_make(data_area%d%r_dp) CASE (dbcsr_type_complex_4) mp_type = mp_type_make(data_area%d%c_sp) CASE (dbcsr_type_complex_8) mp_type = mp_type_make(data_area%d%c_dp) END SELECT END FUNCTION dbcsr_mp_type_from_anytype SUBROUTINE dbcsr_sendrecv_any(msgin, dest, msgout, source, comm) !! sendrecv of encapsulated data. !! @note !! see mp_sendrecv !! @endnote TYPE(dbcsr_data_obj), INTENT(IN) :: msgin INTEGER, INTENT(IN) :: dest TYPE(dbcsr_data_obj), INTENT(INOUT) :: msgout INTEGER, INTENT(IN) :: source TYPE(mp_comm_type), INTENT(IN) :: comm IF (dbcsr_data_get_type(msgin) .NE. dbcsr_data_get_type(msgout)) & DBCSR_ABORT("Different data type for msgin and msgout") SELECT CASE (dbcsr_data_get_type(msgin)) CASE (dbcsr_type_real_4) CALL mp_sendrecv(msgin%d%r_sp, dest, msgout%d%r_sp, source, comm) CASE (dbcsr_type_real_8) CALL mp_sendrecv(msgin%d%r_dp, dest, msgout%d%r_dp, source, comm) CASE (dbcsr_type_complex_4) CALL mp_sendrecv(msgin%d%c_sp, dest, msgout%d%c_sp, source, comm) CASE (dbcsr_type_complex_8) CALL mp_sendrecv(msgin%d%c_dp, dest, msgout%d%c_dp, source, comm) CASE default DBCSR_ABORT("Incorrect data type") END SELECT END SUBROUTINE dbcsr_sendrecv_any SUBROUTINE dbcsr_isend_any(msgin, dest, comm, request, tag) !! Non-blocking send of encapsulated data. !! @note !! see mp_isend_iv !! @endnote TYPE(dbcsr_data_obj), INTENT(IN) :: msgin INTEGER, INTENT(IN) :: dest TYPE(mp_comm_type), INTENT(IN) :: comm TYPE(mp_request_type), INTENT(OUT) :: request INTEGER, INTENT(IN), OPTIONAL :: tag SELECT CASE (dbcsr_data_get_type(msgin)) CASE (dbcsr_type_real_4) CALL mp_isend(msgin%d%r_sp, dest, comm, request, tag) CASE (dbcsr_type_real_8) CALL mp_isend(msgin%d%r_dp, dest, comm, request, tag) CASE (dbcsr_type_complex_4) CALL mp_isend(msgin%d%c_sp, dest, comm, request, tag) CASE (dbcsr_type_complex_8) CALL mp_isend(msgin%d%c_dp, dest, comm, request, tag) CASE default DBCSR_ABORT("Incorrect data type") END SELECT END SUBROUTINE dbcsr_isend_any SUBROUTINE dbcsr_irecv_any(msgin, source, comm, request, tag) !! Non-blocking recv of encapsulated data. !! @note !! see mp_irecv_iv !! @endnote TYPE(dbcsr_data_obj), INTENT(IN) :: msgin INTEGER, INTENT(IN) :: source TYPE(mp_comm_type), INTENT(IN) :: comm TYPE(mp_request_type), INTENT(OUT) :: request INTEGER, INTENT(IN), OPTIONAL :: tag SELECT CASE (dbcsr_data_get_type(msgin)) CASE (dbcsr_type_real_4) CALL mp_irecv(msgin%d%r_sp, source, comm, request, tag) CASE (dbcsr_type_real_8) CALL mp_irecv(msgin%d%r_dp, source, comm, request, tag) CASE (dbcsr_type_complex_4) CALL mp_irecv(msgin%d%c_sp, source, comm, request, tag) CASE (dbcsr_type_complex_8) CALL mp_irecv(msgin%d%c_dp, source, comm, request, tag) CASE default DBCSR_ABORT("Incorrect data type") END SELECT END SUBROUTINE dbcsr_irecv_any SUBROUTINE dbcsr_win_create_any(base, comm, win) !! Window initialization function of encapsulated data. TYPE(dbcsr_data_obj), INTENT(IN) :: base TYPE(mp_comm_type), INTENT(IN) :: comm TYPE(mp_win_type), INTENT(OUT) :: win SELECT CASE (dbcsr_data_get_type(base)) CASE (dbcsr_type_real_4) CALL mp_win_create(base%d%r_sp, comm, win) CASE (dbcsr_type_real_8) CALL mp_win_create(base%d%r_dp, comm, win) CASE (dbcsr_type_complex_4) CALL mp_win_create(base%d%c_sp, comm, win) CASE (dbcsr_type_complex_8) CALL mp_win_create(base%d%c_dp, comm, win) CASE default DBCSR_ABORT("Incorrect data type") END SELECT END SUBROUTINE dbcsr_win_create_any SUBROUTINE dbcsr_rget_any(base, source, win, win_data, myproc, disp, request, & !! Single-sided Get function of encapsulated data. origin_datatype, target_datatype) TYPE(dbcsr_data_obj), INTENT(IN) :: base INTEGER, INTENT(IN) :: source TYPE(mp_win_type), INTENT(IN) :: win TYPE(dbcsr_data_obj), INTENT(IN) :: win_data INTEGER, INTENT(IN), OPTIONAL :: myproc, disp TYPE(mp_request_type), INTENT(OUT) :: request TYPE(mp_type_descriptor_type), INTENT(IN), & OPTIONAL :: origin_datatype, target_datatype IF (dbcsr_data_get_type(base) /= dbcsr_data_get_type(win_data)) & DBCSR_ABORT("Mismatch data type between buffer and window") SELECT CASE (dbcsr_data_get_type(base)) CASE (dbcsr_type_real_4) CALL mp_rget(base%d%r_sp, source, win, win_data%d%r_sp, myproc, & disp, request, origin_datatype, target_datatype) CASE (dbcsr_type_real_8) CALL mp_rget(base%d%r_dp, source, win, win_data%d%r_dp, myproc, & disp, request, origin_datatype, target_datatype) CASE (dbcsr_type_complex_4) CALL mp_rget(base%d%c_sp, source, win, win_data%d%c_sp, myproc, & disp, request, origin_datatype, target_datatype) CASE (dbcsr_type_complex_8) CALL mp_rget(base%d%c_dp, source, win, win_data%d%c_dp, myproc, & disp, request, origin_datatype, target_datatype) CASE default DBCSR_ABORT("Incorrect data type") END SELECT END SUBROUTINE dbcsr_rget_any SUBROUTINE dbcsr_ibcast_any(base, source, grp, request) !! Bcast function of encapsulated data. TYPE(dbcsr_data_obj), INTENT(IN) :: base INTEGER, INTENT(IN) :: source TYPE(mp_comm_type), INTENT(IN) :: grp TYPE(mp_request_type), INTENT(INOUT) :: request SELECT CASE (dbcsr_data_get_type(base)) CASE (dbcsr_type_real_4) CALL mp_ibcast(base%d%r_sp, source, grp, request) CASE (dbcsr_type_real_8) CALL mp_ibcast(base%d%r_dp, source, grp, request) CASE (dbcsr_type_complex_4) CALL mp_ibcast(base%d%c_sp, source, grp, request) CASE (dbcsr_type_complex_8) CALL mp_ibcast(base%d%c_dp, source, grp, request) CASE default DBCSR_ABORT("Incorrect data type") END SELECT END SUBROUTINE dbcsr_ibcast_any SUBROUTINE dbcsr_iscatterv_any(base, counts, displs, msg, recvcount, root, grp, request) !! Scatter function of encapsulated data. TYPE(dbcsr_data_obj), INTENT(IN) :: base INTEGER, DIMENSION(:), INTENT(IN), CONTIGUOUS :: counts, displs TYPE(dbcsr_data_obj), INTENT(INOUT) :: msg INTEGER, INTENT(IN) :: recvcount, root TYPE(mp_comm_type), INTENT(IN) :: grp TYPE(mp_request_type), INTENT(INOUT) :: request IF (dbcsr_data_get_type(base) .NE. dbcsr_data_get_type(msg)) & DBCSR_ABORT("Different data type for msgin and msgout") SELECT CASE (dbcsr_data_get_type(base)) CASE (dbcsr_type_real_4) CALL mp_iscatter(base%d%r_sp, counts, displs, msg%d%r_sp, recvcount, root, grp, request) CASE (dbcsr_type_real_8) CALL mp_iscatter(base%d%r_dp, counts, displs, msg%d%r_dp, recvcount, root, grp, request) CASE (dbcsr_type_complex_4) CALL mp_iscatter(base%d%c_sp, counts, displs, msg%d%c_sp, recvcount, root, grp, request) CASE (dbcsr_type_complex_8) CALL mp_iscatter(base%d%c_dp, counts, displs, msg%d%c_dp, recvcount, root, grp, request) CASE default DBCSR_ABORT("Incorrect data type") END SELECT END SUBROUTINE dbcsr_iscatterv_any SUBROUTINE dbcsr_gatherv_any(base, ub_base, msg, counts, displs, root, grp) !! Gather function of encapsulated data. TYPE(dbcsr_data_obj), INTENT(IN) :: base INTEGER, INTENT(IN) :: ub_base TYPE(dbcsr_data_obj), INTENT(INOUT) :: msg INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: counts, displs INTEGER, INTENT(IN) :: root TYPE(mp_comm_type), INTENT(IN) :: grp IF (dbcsr_data_get_type(base) .NE. dbcsr_data_get_type(msg)) & DBCSR_ABORT("Different data type for msgin and msgout") SELECT CASE (dbcsr_data_get_type(base)) CASE (dbcsr_type_real_4) CALL mp_gatherv(base%d%r_sp(:ub_base), msg%d%r_sp, counts, displs, root, grp) CASE (dbcsr_type_real_8) CALL mp_gatherv(base%d%r_dp(:ub_base), msg%d%r_dp, counts, displs, root, grp) CASE (dbcsr_type_complex_4) CALL mp_gatherv(base%d%c_sp(:ub_base), msg%d%c_sp, counts, displs, root, grp) CASE (dbcsr_type_complex_8) CALL mp_gatherv(base%d%c_dp(:ub_base), msg%d%c_dp, counts, displs, root, grp) CASE default DBCSR_ABORT("Incorrect data type") END SELECT END SUBROUTINE dbcsr_gatherv_any SUBROUTINE dbcsr_isendrecv_any(msgin, dest, msgout, source, grp, send_request, recv_request) !! Send/Recv function of encapsulated data. TYPE(dbcsr_data_obj), INTENT(IN) :: msgin INTEGER, INTENT(IN) :: dest TYPE(dbcsr_data_obj), INTENT(INOUT) :: msgout INTEGER, INTENT(IN) :: source TYPE(mp_comm_type), INTENT(IN) :: grp TYPE(mp_request_type), INTENT(OUT) :: send_request, recv_request IF (dbcsr_data_get_type(msgin) .NE. dbcsr_data_get_type(msgout)) & DBCSR_ABORT("Different data type for msgin and msgout") SELECT CASE (dbcsr_data_get_type(msgin)) CASE (dbcsr_type_real_4) CALL mp_isendrecv(msgin%d%r_sp, dest, & msgout%d%r_sp, source, & grp, send_request, recv_request) CASE (dbcsr_type_real_8) CALL mp_isendrecv(msgin%d%r_dp, dest, & msgout%d%r_dp, source, & grp, send_request, recv_request) CASE (dbcsr_type_complex_4) CALL mp_isendrecv(msgin%d%c_sp, dest, & msgout%d%c_sp, source, & grp, send_request, recv_request) CASE (dbcsr_type_complex_8) CALL mp_isendrecv(msgin%d%c_dp, dest, & msgout%d%c_dp, source, & grp, send_request, recv_request) CASE default DBCSR_ABORT("Incorrect data type") END SELECT END SUBROUTINE dbcsr_isendrecv_any SUBROUTINE dbcsr_allgatherv(send_data, scount, recv_data, recv_count, recv_displ, gid) !! Allgather of encapsulated data !! @note !! see mp_allgatherv_dv !! @endnote TYPE(dbcsr_data_obj), INTENT(IN) :: send_data INTEGER, INTENT(IN) :: scount TYPE(dbcsr_data_obj), INTENT(INOUT) :: recv_data INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: recv_count, recv_displ TYPE(mp_comm_type), INTENT(IN) :: gid IF (dbcsr_data_get_type(send_data) /= dbcsr_data_get_type(recv_data)) & DBCSR_ABORT("Data type mismatch") SELECT CASE (dbcsr_data_get_type(send_data)) CASE (dbcsr_type_real_4) CALL mp_allgather(send_data%d%r_sp(1:scount), recv_data%d%r_sp, & recv_count, recv_displ, gid) CASE (dbcsr_type_real_8) CALL mp_allgather(send_data%d%r_dp(1:scount), recv_data%d%r_dp, & recv_count, recv_displ, gid) CASE (dbcsr_type_complex_4) CALL mp_allgather(send_data%d%c_sp(1:scount), recv_data%d%c_sp, & recv_count, recv_displ, gid) CASE (dbcsr_type_complex_8) CALL mp_allgather(send_data%d%c_dp(1:scount), recv_data%d%c_dp, & recv_count, recv_displ, gid) CASE default DBCSR_ABORT("Invalid data type") END SELECT END SUBROUTINE dbcsr_allgatherv #:include '../data/dbcsr.fypp' #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float SUBROUTINE hybrid_alltoall_${nametype1}$1(sb, scount, sdispl, & rb, rcount, rdispl, mp_env, most_ptp, remainder_ptp, no_hybrid) !! Row/column and global all-to-all !! !! Communicator selection !! Uses row and column communicators for row/column !! sends. Remaining sends are performed using the global !! communicator. Point-to-point isend/irecv are used if ptp is !! set, otherwise a alltoall collective call is issued. !! see mp_alltoall ${type1}$, DIMENSION(:), & CONTIGUOUS, INTENT(in), TARGET :: sb INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: scount, sdispl ${type1}$, DIMENSION(:), & CONTIGUOUS, INTENT(INOUT), TARGET :: rb INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: rcount, rdispl TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env !! MP Environment LOGICAL, INTENT(in), OPTIONAL :: most_ptp, remainder_ptp, & no_hybrid !! Use point-to-point for row/column; default is no !! Use point-to-point for remaining; default is no !! Use regular global collective; default is no INTEGER :: mynode, mypcol, myprow, nall_rr, nall_sr, ncol_rr, & ncol_sr, npcols, nprows, nrow_rr, nrow_sr, numnodes, dst, src, & prow, pcol, send_cnt, recv_cnt, tag, i INTEGER, ALLOCATABLE, DIMENSION(:) :: new_rcount, new_rdispl, new_scount, new_sdispl INTEGER, DIMENSION(:, :), CONTIGUOUS, POINTER :: pgrid LOGICAL :: most_collective, & remainder_collective, no_h ${type1}$, DIMENSION(:), CONTIGUOUS, POINTER :: send_data_p, recv_data_p TYPE(dbcsr_mp_obj) :: mpe TYPE(mp_comm_type) :: all_group, grp TYPE(mp_request_type), ALLOCATABLE, DIMENSION(:) :: all_rr, all_sr, col_rr, col_sr, row_rr, row_sr IF (.NOT. dbcsr_mp_has_subgroups(mp_env)) THEN mpe = mp_env CALL dbcsr_mp_grid_setup(mpe) END IF most_collective = .TRUE. remainder_collective = .TRUE. no_h = .FALSE. IF (PRESENT(most_ptp)) most_collective = .NOT. most_ptp IF (PRESENT(remainder_ptp)) remainder_collective = .NOT. remainder_ptp IF (PRESENT(no_hybrid)) no_h = no_hybrid all_group = dbcsr_mp_group(mp_env) ! Don't use subcommunicators if they're not defined. no_h = no_h .OR. .NOT. dbcsr_mp_has_subgroups(mp_env) .OR. .NOT. has_MPI subgrouped: IF (mp_env%mp%subgroups_defined .AND. .NOT. no_h) THEN mynode = dbcsr_mp_mynode(mp_env) numnodes = dbcsr_mp_numnodes(mp_env) nprows = dbcsr_mp_nprows(mp_env) npcols = dbcsr_mp_npcols(mp_env) myprow = dbcsr_mp_myprow(mp_env) mypcol = dbcsr_mp_mypcol(mp_env) pgrid => dbcsr_mp_pgrid(mp_env) ALLOCATE (row_sr(0:npcols - 1)); nrow_sr = 0 ALLOCATE (row_rr(0:npcols - 1)); nrow_rr = 0 ALLOCATE (col_sr(0:nprows - 1)); ncol_sr = 0 ALLOCATE (col_rr(0:nprows - 1)); ncol_rr = 0 ALLOCATE (all_sr(0:numnodes - 1)); nall_sr = 0 ALLOCATE (all_rr(0:numnodes - 1)); nall_rr = 0 ALLOCATE (new_scount(numnodes), new_rcount(numnodes)) ALLOCATE (new_sdispl(numnodes), new_rdispl(numnodes)) IF (.NOT. remainder_collective) THEN CALL remainder_point_to_point() END IF IF (.NOT. most_collective) THEN CALL most_point_to_point() ELSE CALL most_alltoall() END IF IF (remainder_collective) THEN CALL remainder_alltoall() END IF DEALLOCATE (new_scount, new_rcount, new_sdispl, new_rdispl) ! Wait for all issued sends and receives. IF (.NOT. most_collective) THEN CALL mp_waitall(row_sr(0:nrow_sr - 1)) CALL mp_waitall(col_sr(0:ncol_sr - 1)) CALL mp_waitall(row_rr(0:nrow_rr - 1)) CALL mp_waitall(col_rr(0:ncol_rr - 1)) END IF DEALLOCATE (row_sr, row_rr, col_sr, col_rr) IF (.NOT. remainder_collective) THEN CALL mp_waitall(all_sr(1:nall_sr)) CALL mp_waitall(all_rr(1:nall_rr)) END IF DEALLOCATE (all_sr, all_rr) ELSE CALL mp_alltoall(sb, scount, sdispl, & rb, rcount, rdispl, & all_group) END IF subgrouped CONTAINS SUBROUTINE most_alltoall() DO pcol = 0, npcols - 1 new_scount(1 + pcol) = scount(1 + pgrid(myprow, pcol)) new_rcount(1 + pcol) = rcount(1 + pgrid(myprow, pcol)) new_sdispl(1 + pcol) = sdispl(1 + pgrid(myprow, pcol)) new_rdispl(1 + pcol) = rdispl(1 + pgrid(myprow, pcol)) END DO CALL mp_alltoall(sb, new_scount(1:npcols), new_sdispl(1:npcols), & rb, new_rcount(1:npcols), new_rdispl(1:npcols), & dbcsr_mp_my_row_group(mp_env)) DO prow = 0, nprows - 1 new_scount(1 + prow) = scount(1 + pgrid(prow, mypcol)) new_rcount(1 + prow) = rcount(1 + pgrid(prow, mypcol)) new_sdispl(1 + prow) = sdispl(1 + pgrid(prow, mypcol)) new_rdispl(1 + prow) = rdispl(1 + pgrid(prow, mypcol)) END DO CALL mp_alltoall(sb, new_scount(1:nprows), new_sdispl(1:nprows), & rb, new_rcount(1:nprows), new_rdispl(1:nprows), & dbcsr_mp_my_col_group(mp_env)) END SUBROUTINE most_alltoall SUBROUTINE most_point_to_point() ! Go through my prow and exchange. DO i = 0, npcols - 1 pcol = MOD(mypcol + i, npcols) grp = dbcsr_mp_my_row_group(mp_env) ! dst = dbcsr_mp_get_process(mp_env, myprow, pcol) send_cnt = scount(dst + 1) IF (send_cnt .GT. 0) THEN send_data_p => sb(1 + sdispl(dst + 1):1 + sdispl(dst + 1) + send_cnt - 1) IF (pcol .NE. mypcol) THEN tag = 4*mypcol CALL mp_isend(send_data_p, pcol, grp, row_sr(nrow_sr), tag) nrow_sr = nrow_sr + 1 END IF END IF ! pcol = MODULO(mypcol - i, npcols) src = dbcsr_mp_get_process(mp_env, myprow, pcol) recv_cnt = rcount(src + 1) IF (recv_cnt .GT. 0) THEN recv_data_p => rb(1 + rdispl(src + 1):1 + rdispl(src + 1) + recv_cnt - 1) IF (pcol .NE. mypcol) THEN tag = 4*pcol CALL mp_irecv(recv_data_p, pcol, grp, row_rr(nrow_rr), tag) nrow_rr = nrow_rr + 1 ELSE CALL memory_copy(recv_data_p, send_data_p, recv_cnt) END IF END IF END DO ! go through my pcol and exchange DO i = 0, nprows - 1 prow = MOD(myprow + i, nprows) grp = dbcsr_mp_my_col_group(mp_env) ! dst = dbcsr_mp_get_process(mp_env, prow, mypcol) send_cnt = scount(dst + 1) IF (send_cnt .GT. 0) THEN send_data_p => sb(1 + sdispl(dst + 1):1 + sdispl(dst + 1) + send_cnt - 1) IF (prow .NE. myprow) THEN tag = 4*myprow + 1 CALL mp_isend(send_data_p, prow, grp, col_sr(ncol_sr), tag) ncol_sr = ncol_sr + 1 END IF END IF ! prow = MODULO(myprow - i, nprows) src = dbcsr_mp_get_process(mp_env, prow, mypcol) recv_cnt = rcount(src + 1) IF (recv_cnt .GT. 0) THEN recv_data_p => rb(1 + rdispl(src + 1):1 + rdispl(src + 1) + recv_cnt - 1) IF (prow .NE. myprow) THEN tag = 4*prow + 1 CALL mp_irecv(recv_data_p, prow, grp, col_rr(ncol_rr), tag) ncol_rr = ncol_rr + 1 ELSE CALL memory_copy(recv_data_p, send_data_p, recv_cnt) END IF END IF END DO END SUBROUTINE most_point_to_point SUBROUTINE remainder_alltoall() new_scount(:) = scount(:) new_rcount(:) = rcount(:) DO prow = 0, nprows - 1 new_scount(1 + pgrid(prow, mypcol)) = 0 new_rcount(1 + pgrid(prow, mypcol)) = 0 END DO DO pcol = 0, npcols - 1 new_scount(1 + pgrid(myprow, pcol)) = 0 new_rcount(1 + pgrid(myprow, pcol)) = 0 END DO CALL mp_alltoall(sb, new_scount, sdispl, & rb, new_rcount, rdispl, all_group) END SUBROUTINE remainder_alltoall SUBROUTINE remainder_point_to_point() INTEGER :: col, row DO row = 0, nprows - 1 prow = MOD(row + myprow, nprows) IF (prow .EQ. myprow) CYCLE DO col = 0, npcols - 1 pcol = MOD(col + mypcol, npcols) IF (pcol .EQ. mypcol) CYCLE dst = dbcsr_mp_get_process(mp_env, prow, pcol) send_cnt = scount(dst + 1) IF (send_cnt .GT. 0) THEN send_data_p => sb(1 + sdispl(dst + 1):1 + sdispl(dst + 1) + send_cnt - 1) tag = 4*mynode + 2 CALL mp_isend(send_data_p, dst, all_group, all_sr(nall_sr + 1), tag) nall_sr = nall_sr + 1 END IF ! src = dbcsr_mp_get_process(mp_env, prow, pcol) recv_cnt = rcount(src + 1) IF (recv_cnt .GT. 0) THEN recv_data_p => rb(1 + rdispl(src + 1):1 + rdispl(src + 1) + recv_cnt - 1) tag = 4*src + 2 CALL mp_irecv(recv_data_p, src, all_group, all_rr(nall_rr + 1), tag) nall_rr = nall_rr + 1 END IF END DO END DO END SUBROUTINE remainder_point_to_point END SUBROUTINE hybrid_alltoall_${nametype1}$1 #:endfor END MODULE dbcsr_mp_operations ================================================ FILE: src/mpi/dbcsr_mpiwrap.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_mpiwrap !! Interface to the message passing library MPI USE ISO_C_BINDING, ONLY: C_F_POINTER, & C_PTR USE dbcsr_kinds, ONLY: & dp, int_4, int_4_size, int_8, int_8_size, real_4, real_4_size, real_8, & real_8_size USE dbcsr_machine, ONLY: m_abort, m_hostnm #include "base/dbcsr_base_uses.f90" #:include 'dbcsr_mpiwrap.fypp' #if defined(__parallel) && defined(__USE_MPI_F08) USE mpi_f08, ONLY: mpi_datatype, mpi_comm, mpi_request, mpi_win, mpi_file, mpi_info, mpi_status, mpi_group, MPI_ANY_TAG, & MPI_ANY_SOURCE, MPI_COMM_NULL, MPI_COMM_SELF, MPI_COMM_WORLD, MPI_REQUEST_NULL, MPI_WIN_NULL, & MPI_FILE_NULL, MPI_INFO_NULL, MPI_DATATYPE_NULL, MPI_STATUS_SIZE, MPI_PROC_NULL, & MPI_MAX_LIBRARY_VERSION_STRING, MPI_OFFSET_KIND, MPI_ADDRESS_KIND, MPI_MODE_CREATE, & MPI_MODE_RDONLY, MPI_MODE_WRONLY, MPI_MODE_RDWR, MPI_MODE_EXCL, MPI_MODE_APPEND, & MPI_MAX_ERROR_STRING, MPI_IDENT, MPI_CONGRUENT, MPI_SIMILAR, MPI_UNEQUAL, MPI_COMPLEX, MPI_DOUBLE_COMPLEX, & MPI_INTEGER, MPI_LOGICAL, MPI_DOUBLE_PRECISION, MPI_STATUS_IGNORE, MPI_TYPE_SIZE, MPI_FILE_READ_AT_ALL, & MPI_FILE_READ_AT, mpi_type_indexed, mpi_irecv, mpi_recv, mpi_isend, mpi_send, mpi_sendrecv, mpi_allreduce, & mpi_reduce, mpi_barrier, mpi_ibarrier, mpi_iallreduce, mpi_test, mpi_probe, mpi_wait, mpi_iprobe, & mpi_testany, mpi_testall, mpi_waitany, mpi_waitall, mpi_allgather, mpi_allgatherv, mpi_iallgather, & mpi_iallgatherv, mpi_gather, mpi_gatherv, mpi_scatter, mpi_scatterv, mpi_iscatterv, mpi_iscatter, & mpi_scan, mpi_alltoall, mpi_alltoallv, mpi_type_indexed, mpi_bcast, mpi_ibcast, mpi_group_free, & mpi_comm_free, mpi_comm_create, mpi_win_create, mpi_rget, mpi_free_mem, mpi_get_address, & MPI_FILE_WRITE_AT, MPI_FILE_WRITE_AT_ALL, mpi_comm_group, mpi_init, mpi_init_thread, mpi_bottom, & MPI_IN_PLACE, MPI_MIN, MPI_MAX, MPI_SUM, MPI_PROD, MPI_SOURCE, MPI_TAG, MPI_REAL, MPI_INTEGER8, & MPI_MODE_NOCHECK, MPI_CHARACTER, MPI_ERRORS_RETURN, MPI_2DOUBLE_PRECISION, MPI_MAXLOC, MPI_LOR, & MPI_MINLOC, MPI_SUCCESS, MPI_THREAD_FUNNELED #endif #if defined(__parallel) && ! defined(__USE_MPI_F08) USE mpi #endif ! subroutines: unfortunately, mpi implementations do not provide interfaces for all subroutines (problems with types and ranks explosion), ! we do not quite know what is in the module, so we can not include any.... ! to nevertheless get checking for what is included, we use the mpi module without use clause, getting all there is ! USE mpi, ONLY: mpi_allgather, mpi_allgatherv, mpi_alloc_mem, mpi_allreduce, mpi_alltoall, mpi_alltoallv, mpi_bcast,& ! mpi_cart_coords, mpi_cart_create, mpi_cart_get, mpi_cart_rank, mpi_cart_sub, mpi_dims_create, mpi_file_close,& ! mpi_file_get_size, mpi_file_open, mpi_file_read_at_all, mpi_file_read_at, mpi_file_write_at_all,& ! mpi_file_write_at, mpi_free_mem, mpi_gather, mpi_gatherv, mpi_get_address, mpi_group_translate_ranks, mpi_irecv,& ! mpi_isend, mpi_recv, mpi_reduce, mpi_reduce_scatter, mpi_rget, mpi_scatter, mpi_send,& ! mpi_sendrecv, mpi_sendrecv_replace, mpi_testany, mpi_waitall, mpi_waitany, mpi_win_create ! functions ! USE mpi, ONLY: mpi_wtime ! constants ! USE mpi, ONLY: MPI_DOUBLE_PRECISION, MPI_DOUBLE_COMPLEX, MPI_REAL, MPI_COMPLEX, MPI_ANY_TAG,& ! MPI_ANY_SOURCE, MPI_COMM_NULL, MPI_REQUEST_NULL, MPI_WIN_NULL, MPI_STATUS_SIZE, MPI_STATUS_IGNORE, MPI_STATUSES_IGNORE, & ! MPI_ADDRESS_KIND, MPI_OFFSET_KIND, MPI_MODE_CREATE, MPI_MODE_RDONLY, MPI_MODE_WRONLY,& ! MPI_MODE_RDWR, MPI_MODE_EXCL, MPI_COMM_SELF, MPI_COMM_WORLD, MPI_THREAD_FUNNELED,& ! MPI_ERRORS_RETURN, MPI_SUCCESS, MPI_MAX_PROCESSOR_NAME, MPI_MAX_ERROR_STRING, MPI_IDENT,& ! MPI_UNEQUAL, MPI_MAX, MPI_SUM, MPI_INFO_NULL, MPI_IN_PLACE, MPI_CONGRUENT, MPI_SIMILAR, MPI_MIN, MPI_SOURCE,& ! MPI_TAG, MPI_INTEGER8, MPI_INTEGER, MPI_MAXLOC, MPI_2INTEGER, MPI_MINLOC, MPI_LOGICAL, MPI_2DOUBLE_PRECISION,& ! MPI_LOR, MPI_CHARACTER, MPI_BOTTOM, MPI_MODE_NOCHECK, MPI_2REAL ! To simplify the transition between the old MPI module and the F08-style module, we introduce these macros to switch between the required handle types ! Unfortunately, Fortran does not offer something like typedef in C/C++ ! ! MPI_STATUS_ARRAY is a macro to provide the appropriate type of arrays of status variables because with mpi. ! ! MPI_STATUS_EXTRACT is a macro to provide an extraction method from the respective MPI_Status objects/ status arrays depending on the MPI library in use. ! Use it as " MPI_STATUS_EXTRACT()". ! The space before MPI_STATUS_EXTRACT is compulsory to allow the C-preprocessor to identify the macro. ! In Fortran, this space is ignored according to the standards. #if defined(__parallel) && defined(__USE_MPI_F08) #define MPI_DATA_TYPE TYPE(MPI_Datatype) #define MPI_COMM_TYPE TYPE(MPI_Comm) #define MPI_REQUEST_TYPE TYPE(MPI_Request) #define MPI_WIN_TYPE TYPE(MPI_Win) #define MPI_FILE_TYPE TYPE(MPI_File) #define MPI_INFO_TYPE TYPE(MPI_Info) #define MPI_STATUS_TYPE TYPE(MPI_Status) #define MPI_STATUS_TYPE_ARRAY(X) TYPE(MPI_Status),DIMENSION(X) #define MPI_GROUP_TYPE TYPE(MPI_Group) #define MPI_STATUS_EXTRACT(X) %X #else #define MPI_DATA_TYPE INTEGER #define MPI_COMM_TYPE INTEGER #define MPI_REQUEST_TYPE INTEGER #define MPI_WIN_TYPE INTEGER #define MPI_FILE_TYPE INTEGER #define MPI_INFO_TYPE INTEGER #define MPI_STATUS_TYPE INTEGER,DIMENSION(MPI_STATUS_SIZE) #define MPI_STATUS_TYPE_ARRAY(X) INTEGER,DIMENSION(MPI_STATUS_SIZE,X) #define MPI_GROUP_TYPE INTEGER #define MPI_STATUS_EXTRACT(X) (X) #endif IMPLICIT NONE PRIVATE ! parameters that might be needed #if defined(__parallel) LOGICAL, PARAMETER :: dbcsr_is_parallel = .TRUE. INTEGER, PARAMETER, PUBLIC :: mp_any_tag = MPI_ANY_TAG INTEGER, PARAMETER, PUBLIC :: mp_any_source = MPI_ANY_SOURCE MPI_COMM_TYPE, PARAMETER :: mp_comm_null_handle = MPI_COMM_NULL MPI_COMM_TYPE, PARAMETER :: mp_comm_self_handle = MPI_COMM_SELF MPI_COMM_TYPE, PARAMETER :: mp_comm_world_handle = MPI_COMM_WORLD MPI_REQUEST_TYPE, PARAMETER :: mp_request_null_handle = MPI_REQUEST_NULL MPI_WIN_TYPE, PARAMETER :: mp_win_null_handle = MPI_WIN_NULL MPI_FILE_TYPE, PARAMETER :: mp_file_null_handle = MPI_FILE_NULL MPI_INFO_TYPE, PARAMETER :: mp_info_null_handle = MPI_INFO_NULL MPI_DATA_TYPE, PARAMETER :: mp_datatype_null_handle = MPI_DATATYPE_NULL INTEGER, PARAMETER, PUBLIC :: mp_status_size = MPI_STATUS_SIZE INTEGER, PARAMETER, PUBLIC :: mp_proc_null = MPI_PROC_NULL ! Set max allocatable memory by MPI to 2 GiByte INTEGER(KIND=MPI_ADDRESS_KIND), PARAMETER, PRIVATE :: mp_max_memory_size = HUGE(INT(1, KIND=int_4)) INTEGER, PARAMETER, PUBLIC :: mp_max_library_version_string = MPI_MAX_LIBRARY_VERSION_STRING INTEGER, PARAMETER, PUBLIC :: file_offset = MPI_OFFSET_KIND INTEGER, PARAMETER, PUBLIC :: address_kind = MPI_ADDRESS_KIND INTEGER, PARAMETER, PUBLIC :: file_amode_create = MPI_MODE_CREATE INTEGER, PARAMETER, PUBLIC :: file_amode_rdonly = MPI_MODE_RDONLY INTEGER, PARAMETER, PUBLIC :: file_amode_wronly = MPI_MODE_WRONLY INTEGER, PARAMETER, PUBLIC :: file_amode_rdwr = MPI_MODE_RDWR INTEGER, PARAMETER, PUBLIC :: file_amode_excl = MPI_MODE_EXCL INTEGER, PARAMETER, PUBLIC :: file_amode_append = MPI_MODE_APPEND #else LOGICAL, PARAMETER :: dbcsr_is_parallel = .FALSE. INTEGER, PARAMETER, PUBLIC :: mp_any_tag = -1 INTEGER, PARAMETER, PUBLIC :: mp_any_source = -2 MPI_COMM_TYPE, PARAMETER :: mp_comm_null_handle = -3 MPI_COMM_TYPE, PARAMETER :: mp_comm_self_handle = -11 MPI_COMM_TYPE, PARAMETER :: mp_comm_world_handle = -12 MPI_REQUEST_TYPE, PARAMETER :: mp_request_null_handle = -4 MPI_WIN_TYPE, PARAMETER :: mp_win_null_handle = -5 MPI_FILE_TYPE, PARAMETER :: mp_file_null_handle = -6 MPI_INFO_TYPE, PARAMETER :: mp_info_null_handle = -7 MPI_DATA_TYPE, PARAMETER :: mp_datatype_null_handle = -13 INTEGER, PARAMETER, PUBLIC :: mp_status_size = -7 INTEGER, PARAMETER, PUBLIC :: mp_proc_null = -8 INTEGER, PARAMETER, PUBLIC :: mp_max_library_version_string = 1 INTEGER, PARAMETER, PUBLIC :: file_offset = int_8 INTEGER, PARAMETER, PUBLIC :: address_kind = int_8 INTEGER, PARAMETER, PUBLIC :: file_amode_create = 1 INTEGER, PARAMETER, PUBLIC :: file_amode_rdonly = 2 INTEGER, PARAMETER, PUBLIC :: file_amode_wronly = 4 INTEGER, PARAMETER, PUBLIC :: file_amode_rdwr = 8 INTEGER, PARAMETER, PUBLIC :: file_amode_excl = 64 INTEGER, PARAMETER, PUBLIC :: file_amode_append = 128 #endif ! MPI wrapper types (keep the handles private for to switch between serial mode/old mpi module and mpi_f08!) TYPE mp_comm_type PRIVATE MPI_COMM_TYPE :: handle = mp_comm_null_handle CONTAINS PROCEDURE, PUBLIC, PASS(comm), NON_OVERRIDABLE :: get_handle => mp_get_comm_handle PROCEDURE, PUBLIC, PASS(comm), NON_OVERRIDABLE :: set_handle => mp_set_comm_handle PROCEDURE, PRIVATE, PASS(comm1), NON_OVERRIDABLE :: mp_comm_op_eq GENERIC, PUBLIC :: OPERATOR(.EQ.) => mp_comm_op_eq PROCEDURE, PRIVATE, PASS(comm1), NON_OVERRIDABLE :: mp_comm_op_ne GENERIC, PUBLIC :: OPERATOR(.NE.) => mp_comm_op_ne END TYPE mp_comm_type TYPE mp_request_type PRIVATE MPI_REQUEST_TYPE :: handle = mp_request_null_handle CONTAINS PROCEDURE, PUBLIC, PASS(request), NON_OVERRIDABLE :: get_handle => mp_get_request_handle PROCEDURE, PUBLIC, PASS(request), NON_OVERRIDABLE :: set_handle => mp_set_request_handle PROCEDURE, PRIVATE, PASS(request1), NON_OVERRIDABLE :: mp_request_op_eq GENERIC, PUBLIC :: OPERATOR(.EQ.) => mp_request_op_eq PROCEDURE, PRIVATE, PASS(request1), NON_OVERRIDABLE :: mp_request_op_ne GENERIC, PUBLIC :: OPERATOR(.NE.) => mp_request_op_ne END TYPE mp_request_type TYPE mp_win_type PRIVATE MPI_WIN_TYPE :: handle = mp_win_null_handle CONTAINS PROCEDURE, PUBLIC, PASS(win), NON_OVERRIDABLE :: get_handle => mp_get_win_handle PROCEDURE, PUBLIC, PASS(win), NON_OVERRIDABLE :: set_handle => mp_set_win_handle PROCEDURE, PRIVATE, PASS(win1), NON_OVERRIDABLE :: mp_win_op_eq GENERIC, PUBLIC :: OPERATOR(.EQ.) => mp_win_op_eq PROCEDURE, PRIVATE, PASS(win1), NON_OVERRIDABLE :: mp_win_op_ne GENERIC, PUBLIC :: OPERATOR(.NE.) => mp_win_op_ne END TYPE mp_win_type TYPE mp_file_type PRIVATE MPI_FILE_TYPE :: handle = mp_file_null_handle CONTAINS PROCEDURE, PUBLIC, PASS(file), NON_OVERRIDABLE :: get_handle => mp_get_file_handle PROCEDURE, PUBLIC, PASS(file), NON_OVERRIDABLE :: set_handle => mp_set_file_handle PROCEDURE, PRIVATE, PASS(file1), NON_OVERRIDABLE :: mp_file_op_eq GENERIC, PUBLIC :: OPERATOR(.EQ.) => mp_file_op_eq PROCEDURE, PRIVATE, PASS(file1), NON_OVERRIDABLE :: mp_file_op_ne GENERIC, PUBLIC :: OPERATOR(.NE.) => mp_file_op_ne END TYPE mp_file_type TYPE mp_info_type PRIVATE MPI_INFO_TYPE :: handle = mp_info_null_handle CONTAINS PROCEDURE, PUBLIC, PASS(info), NON_OVERRIDABLE :: get_handle => mp_get_info_handle PROCEDURE, PUBLIC, PASS(info), NON_OVERRIDABLE :: set_handle => mp_set_info_handle PROCEDURE, PRIVATE, PASS(info1), NON_OVERRIDABLE :: mp_info_op_eq GENERIC, PUBLIC :: OPERATOR(.EQ.) => mp_info_op_eq PROCEDURE, PRIVATE, PASS(info1), NON_OVERRIDABLE :: mp_info_op_ne GENERIC, PUBLIC :: OPERATOR(.NE.) => mp_info_op_ne END TYPE mp_info_type ! The actual MPI wrapper constants TYPE(mp_comm_type), PARAMETER, PUBLIC :: mp_comm_null = mp_comm_type(mp_comm_null_handle) TYPE(mp_comm_type), PARAMETER, PUBLIC :: mp_comm_self = mp_comm_type(mp_comm_self_handle) TYPE(mp_comm_type), PARAMETER, PUBLIC :: mp_comm_world = mp_comm_type(mp_comm_world_handle) TYPE(mp_request_type), PARAMETER, PUBLIC :: mp_request_null = mp_request_type(mp_request_null_handle) TYPE(mp_win_type), PARAMETER, PUBLIC :: mp_win_null = mp_win_type(mp_win_null_handle) TYPE(mp_file_type), PARAMETER, PUBLIC :: mp_file_null = mp_file_type(mp_file_null_handle) TYPE(mp_info_type), PARAMETER, PUBLIC :: mp_info_null = mp_info_type(mp_info_null_handle) ! we need to fix this to a given number (crossing fingers) ! so that the serial code using Fortran stream IO and the MPI have the same sizes. INTEGER, PARAMETER, PUBLIC :: mpi_character_size = 1 INTEGER, PARAMETER, PUBLIC :: mpi_integer_size = 4 CHARACTER(LEN=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mpiwrap' #if defined(__parallel) ! internal reference counter used to debug communicator leaks INTEGER, PRIVATE, SAVE :: debug_comm_count = 0 #endif ! types PUBLIC :: mp_comm_type PUBLIC :: mp_request_type PUBLIC :: mp_win_type PUBLIC :: mp_file_type PUBLIC :: mp_info_type ! init and error PUBLIC :: mp_world_init, mp_world_finalize PUBLIC :: mp_get_comm_count PUBLIC :: mp_abort ! performance gathering PUBLIC :: mp_perf_env_type PUBLIC :: mp_perf_env_retain, mp_perf_env_release PUBLIC :: add_mp_perf_env, rm_mp_perf_env, get_mp_perf_env, describe_mp_perf_env PUBLIC :: has_mp_perf_env ! informational / generation of sub comms PUBLIC :: mp_environ, mp_comm_compare, mp_cart_coords, mp_rank_compare PUBLIC :: mp_cart_create, mp_dims_create, mp_cart_rank, mp_cart_sub, mp_comm_free PUBLIC :: mp_comm_dup, mp_comm_split, mp_comm_split_direct PUBLIC :: dbcsr_is_parallel PUBLIC :: mp_probe ! message passing PUBLIC :: mp_bcast, mp_sum, mp_sum_partial, mp_max, mp_maxloc, mp_minloc, mp_min, mp_prod, mp_sync PUBLIC :: mp_isync, mp_isum PUBLIC :: mp_gather, mp_alltoall, mp_sendrecv, mp_allgather, mp_iallgather PUBLIC :: mp_isend, mp_irecv, mp_ibcast PUBLIC :: mp_isendrecv, mp_wait, mp_waitall, mp_waitany, mp_testany PUBLIC :: mp_testall, mp_iscatter, mp_test PUBLIC :: mp_gatherv PUBLIC :: mp_send, mp_recv ! Memory management PUBLIC :: mp_allocate, mp_deallocate ! MPI re-ordering PUBLIC :: mp_reordering ! I/O PUBLIC :: mp_file_open, mp_file_close PUBLIC :: mp_file_delete PUBLIC :: mp_file_write_at PUBLIC :: mp_file_write_at_all, mp_file_read_at_all PUBLIC :: mp_file_get_size PUBLIC :: mp_file_get_position ! some 'advanced types' currently only used for dbcsr PUBLIC :: mp_type_descriptor_type PUBLIC :: mp_type_make PUBLIC :: mp_type_size ! one-sided communication PUBLIC :: mp_win_create, mp_win_free, mp_win_lock_all, & mp_win_unlock_all, mp_rget, mp_win_flush_all ! vector types PUBLIC :: mp_type_indexed_make_r, mp_type_indexed_make_d, & mp_type_indexed_make_c, mp_type_indexed_make_z, & mp_type_indexed_make_i, mp_type_indexed_make_l ! misc PUBLIC :: mp_get_library_version, mp_get_processor_name ! assumed to be private ! Interface declarations for non-data-oriented subroutines. INTERFACE mp_environ MODULE PROCEDURE mp_environ_l, mp_environ_c, mp_environ_c2 END INTERFACE INTERFACE mp_waitall MODULE PROCEDURE mp_waitall_1, mp_waitall_2 END INTERFACE INTERFACE mp_testall MODULE PROCEDURE mp_testall_tv END INTERFACE INTERFACE mp_test MODULE PROCEDURE mp_test_1 END INTERFACE INTERFACE mp_testany MODULE PROCEDURE mp_testany_1, mp_testany_2 END INTERFACE ! ! interfaces to deal easily with scalars / vectors / matrices / ... ! of the different types (integers, doubles, logicals, characters) ! INTERFACE mp_minloc MODULE PROCEDURE mp_minloc_dv END INTERFACE INTERFACE mp_maxloc MODULE PROCEDURE mp_maxloc_dv END INTERFACE $:gen_mp_iface('bcast', suffixes=['', 'v', 'm', '3'], extra_suffixes=['b', 'bv', 'av', 'am']) $:gen_mp_iface('ibcast', suffixes=['', 'v']) INTERFACE mp_sum MODULE PROCEDURE mp_sum_i, mp_sum_iv, mp_sum_im, mp_sum_im3, mp_sum_im4, & mp_sum_l, mp_sum_lv, mp_sum_lm, mp_sum_lm3, mp_sum_lm4, & mp_sum_r, mp_sum_rv, mp_sum_rm, mp_sum_rm3, mp_sum_rm4, & mp_sum_d, mp_sum_dv, mp_sum_dm, mp_sum_dm3, mp_sum_dm4, & mp_sum_c, mp_sum_cv, mp_sum_cm, mp_sum_cm3, mp_sum_cm4, & mp_sum_z, mp_sum_zv, mp_sum_zm, mp_sum_zm3, mp_sum_zm4, & mp_sum_root_iv, mp_sum_root_im, & mp_sum_root_lv, mp_sum_root_lm, & mp_sum_root_rv, mp_sum_root_rm, & mp_sum_root_dv, mp_sum_root_dm, & mp_sum_root_cv, mp_sum_root_cm, & mp_sum_root_zv, mp_sum_root_zm MODULE PROCEDURE mp_sum_b, mp_sum_bv END INTERFACE $:gen_mp_iface('isum', suffixes=['v'], extra_suffixes=['bv']) $:gen_mp_iface('sum_partial', suffixes=['m']) $:gen_mp_iface('max', suffixes=['', 'v']) $:gen_mp_iface('min', suffixes=['', 'v']) $:gen_mp_iface('prod') $:gen_mp_iface('gather', suffixes=['', 'm', 'v']) $:gen_mp_iface('gatherv', suffixes=['v']) INTERFACE mp_allgather !! @todo move allgatherv to a separate declaration MODULE PROCEDURE & mp_allgather_i, mp_allgather_i2, & mp_allgather_i12, mp_allgather_i23, mp_allgather_i34, & mp_allgather_i22, & mp_allgather_l, mp_allgather_l2, & mp_allgather_l12, mp_allgather_l23, mp_allgather_l34, & mp_allgather_l22, & mp_allgather_r, mp_allgather_r2, & mp_allgather_r12, mp_allgather_r23, mp_allgather_r34, & mp_allgather_r22, & mp_allgather_d, mp_allgather_d2, & mp_allgather_d12, mp_allgather_d23, mp_allgather_d34, & mp_allgather_d22, & mp_allgather_c, mp_allgather_c2, & mp_allgather_c12, mp_allgather_c23, mp_allgather_c34, & mp_allgather_c22, & mp_allgather_z, mp_allgather_z2, & mp_allgather_z12, mp_allgather_z23, mp_allgather_z34, & mp_allgather_z22, & mp_allgatherv_iv, & mp_allgatherv_lv, & mp_allgatherv_rv, & mp_allgatherv_dv, & mp_allgatherv_cv, & mp_allgatherv_zv END INTERFACE INTERFACE mp_iallgather MODULE PROCEDURE & mp_iallgather_i, mp_iallgather_l, & mp_iallgather_r, mp_iallgather_d, & mp_iallgather_c, mp_iallgather_z, & mp_iallgather_i11, mp_iallgather_l11, & mp_iallgather_r11, mp_iallgather_d11, & mp_iallgather_c11, mp_iallgather_z11, & mp_iallgather_i13, mp_iallgather_l13, & mp_iallgather_r13, mp_iallgather_d13, & mp_iallgather_c13, mp_iallgather_z13, & mp_iallgather_i22, mp_iallgather_l22, & mp_iallgather_r22, mp_iallgather_d22, & mp_iallgather_c22, mp_iallgather_z22, & mp_iallgather_i24, mp_iallgather_l24, & mp_iallgather_r24, mp_iallgather_d24, & mp_iallgather_c24, mp_iallgather_z24, & mp_iallgather_i33, mp_iallgather_l33, & mp_iallgather_r33, mp_iallgather_d33, & mp_iallgather_c33, mp_iallgather_z33, & mp_iallgatherv_iv, mp_iallgatherv_iv2, & mp_iallgatherv_lv, mp_iallgatherv_lv2, & mp_iallgatherv_rv, mp_iallgatherv_rv2, & mp_iallgatherv_dv, mp_iallgatherv_dv2, & mp_iallgatherv_cv, mp_iallgatherv_cv2, & mp_iallgatherv_zv, mp_iallgatherv_zv2 END INTERFACE INTERFACE mp_iscatter MODULE PROCEDURE mp_iscatter_i, & mp_iscatter_l, & mp_iscatter_r, & mp_iscatter_d, & mp_iscatter_c, & mp_iscatter_z, & mp_iscatter_iv2, & mp_iscatter_lv2, & mp_iscatter_rv2, & mp_iscatter_dv2, & mp_iscatter_cv2, & mp_iscatter_zv2, & mp_iscatterv_iv, & mp_iscatterv_lv, & mp_iscatterv_rv, & mp_iscatterv_dv, & mp_iscatterv_cv, & mp_iscatterv_zv END INTERFACE $:gen_mp_iface('alltoall', suffixes=['', '22', '44', '11v']) $:gen_mp_iface('send', suffixes=['', 'v']) $:gen_mp_iface('recv', suffixes=['', 'v']) $:gen_mp_iface('sendrecv', suffixes=['v', ]) $:gen_mp_iface('isendrecv', suffixes=['', 'v']) $:gen_mp_iface('isend', suffixes=['v', 'm2'], extra_suffixes=['bv', 'custom']) $:gen_mp_iface('irecv', suffixes=['v', 'm2'], extra_suffixes=['bv', 'custom']) $:gen_mp_iface('win_create', suffixes=['v']) $:gen_mp_iface('rget', suffixes=['v']) $:gen_mp_iface('allocate') $:gen_mp_iface('deallocate') $:gen_mp_iface('type_make', extra_suffixes=['struct']) $:gen_mp_iface('file_write_at', suffixes=['', 'v'], extra_suffixes=['ch']) $:gen_mp_iface('file_write_at_all', suffixes=['', 'v'], extra_suffixes=['ch']) $:gen_mp_iface('file_read_at_all', suffixes=['', 'v'], extra_suffixes=['ch']) #if defined(__parallel) $:gen_mp_iface('alloc_mem') $:gen_mp_iface('free_mem') #endif ! Type declarations TYPE mp_indexing_meta_type INTEGER, DIMENSION(:), POINTER :: index => NULL(), chunks => NULL() END TYPE mp_indexing_meta_type TYPE mp_type_descriptor_type MPI_DATA_TYPE :: type_handle = mp_datatype_null_handle INTEGER :: length = -1 #if defined(__parallel) INTEGER(kind=mpi_address_kind) :: base = -1_mpi_address_kind #endif INTEGER(kind=int_4), DIMENSION(:), POINTER :: data_i => NULL() INTEGER(kind=int_8), DIMENSION(:), POINTER :: data_l => NULL() REAL(kind=real_4), DIMENSION(:), POINTER :: data_r => NULL() REAL(kind=real_8), DIMENSION(:), POINTER :: data_d => NULL() COMPLEX(kind=real_4), DIMENSION(:), POINTER :: data_c => NULL() COMPLEX(kind=real_8), DIMENSION(:), POINTER :: data_z => NULL() TYPE(mp_type_descriptor_type), DIMENSION(:), POINTER :: subtype => NULL() INTEGER :: vector_descriptor(2) = -1 LOGICAL :: has_indexing = .FALSE. TYPE(mp_indexing_meta_type) :: index_descriptor = mp_indexing_meta_type() END TYPE mp_type_descriptor_type TYPE mp_file_indexing_meta_type INTEGER, DIMENSION(:), POINTER :: index => NULL() INTEGER(kind=address_kind), & DIMENSION(:), POINTER :: chunks => NULL() END TYPE mp_file_indexing_meta_type ! type internally used to store message passing performance indicators ! ************************************************************************************************** TYPE mp_perf_type CHARACTER(LEN=20) :: name = "" INTEGER :: count = -1 REAL(KIND=dp) :: msg_size = -1.0_dp END TYPE mp_perf_type INTEGER, PARAMETER :: MAX_PERF = 28 ! ************************************************************************************************** TYPE mp_perf_env_type !private INTEGER :: ref_count = -1, id_nr = -1 TYPE(mp_perf_type), DIMENSION(MAX_PERF) :: mp_perfs = mp_perf_type() END TYPE mp_perf_env_type ! ************************************************************************************************** TYPE mp_perf_env_p_type TYPE(mp_perf_env_type), POINTER :: mp_perf_env => Null() END TYPE mp_perf_env_p_type ! introduce a stack of mp_perfs, first index is the stack pointer, for convenience is replacing INTEGER, PARAMETER :: max_stack_size = 10 INTEGER :: stack_pointer = 0 ! target attribute needed as a hack around ifc 7.1 bug TYPE(mp_perf_env_p_type), DIMENSION(max_stack_size), TARGET, SAVE :: mp_perf_stack CHARACTER(LEN=20), PARAMETER :: sname(MAX_PERF) = & (/"MP_Group ", "MP_Bcast ", "MP_Allreduce ", & "MP_Gather ", "MP_Sync ", "MP_Alltoall ", & "MP_SendRecv ", "MP_ISendRecv ", "MP_Wait ", & "MP_comm_split ", "MP_ISend ", "MP_IRecv ", & "MP_Send ", "MP_Recv ", "MP_Memory ", & "MP_Put ", "MP_Get ", "MP_Fence ", & "MP_Win_Lock ", "MP_Win_Create ", "MP_Win_Free ", & "MP_IBcast ", "MP_IAllreduce ", "MP_IScatter ", & "MP_RGet ", "MP_Isync ", "MP_Read_All ", & "MP_Write_All "/) ! we make some assumptions on the length of INTEGERS, REALS and LOGICALS INTEGER, PARAMETER :: intlen = BIT_SIZE(0)/8 INTEGER, PARAMETER :: reallen = 8 INTEGER, PARAMETER :: loglen = BIT_SIZE(0)/8 INTEGER, PARAMETER :: charlen = 1 INTEGER, SAVE, PRIVATE :: last_mp_perf_env_id = 0 CONTAINS #:mute #:set types = ["comm", "request", "win", "file", "info"] #:endmute #:for type in types ELEMENTAL INTEGER FUNCTION mp_get_${type}$_handle(${type}$) CLASS(mp_${type}$_type), INTENT(IN) :: ${type}$ #if defined(__parallel) && defined(__USE_MPI_F08) mp_get_${type}$_handle = ${type}$%handle%mpi_val #else mp_get_${type}$_handle = ${type}$%handle #endif END FUNCTION mp_get_${type}$_handle ELEMENTAL SUBROUTINE mp_set_${type}$_handle(${type}$, handle) CLASS(mp_${type}$_type), INTENT(INOUT) :: ${type}$ INTEGER, INTENT(IN) :: handle #if defined(__parallel) && defined(__USE_MPI_F08) ${type}$%handle%mpi_val = handle #else ${type}$%handle = handle #endif END SUBROUTINE mp_set_${type}$_handle ELEMENTAL IMPURE LOGICAL FUNCTION mp_${type}$_op_eq(${type}$1, ${type}$2) CLASS(mp_${type}$_type), INTENT(IN) :: ${type}$1, ${type}$2 #if defined(__parallel) && defined(__USE_MPI_F08) mp_${type}$_op_eq = (${type}$1%handle%mpi_val .EQ. ${type}$2%handle%mpi_val) #else mp_${type}$_op_eq = (${type}$1%handle .EQ. ${type}$2%handle) #endif END FUNCTION mp_${type}$_op_eq ELEMENTAL IMPURE LOGICAL FUNCTION mp_${type}$_op_ne(${type}$1, ${type}$2) CLASS(mp_${type}$_type), INTENT(IN) :: ${type}$1, ${type}$2 #if defined(__parallel) && defined(__USE_MPI_F08) mp_${type}$_op_ne = (${type}$1%handle%mpi_val .NE. ${type}$2%handle%mpi_val) #else mp_${type}$_op_ne = (${type}$1%handle .NE. ${type}$2%handle) #endif END FUNCTION mp_${type}$_op_ne #:endfor SUBROUTINE mp_world_init(mp_comm) !! initializes the system default communicator !! @note !! should only be called once !! @endnote TYPE(mp_comm_type), INTENT(OUT) :: mp_comm !! [output] : handle of the default communicator #if defined(__parallel) INTEGER :: ierr !$ INTEGER :: provided_tsl !$ LOGICAL :: no_threading_support #if defined(__NO_MPI_THREAD_SUPPORT_CHECK) ! Hack that does not request or check MPI thread support level. ! User asserts that the MPI library will work correctly with ! threads. ! !$ no_threading_support = .TRUE. #else ! Does the right thing when using OpenMP: requests that the MPI ! library supports funneled mode and verifies that the MPI library ! provides that support. ! ! Developers: Only the master thread will ever make calls to the ! MPI library. ! !$ no_threading_support = .FALSE. #endif !$ IF (no_threading_support) THEN CALL mpi_init(ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_init @ mp_world_init") !$ ELSE !$OMP MASTER !$ CALL mpi_init_thread(MPI_THREAD_FUNNELED, provided_tsl, ierr) !$ IF (ierr /= 0) CALL mp_stop(ierr, "mpi_init_thread @ mp_world_init") !$ IF (provided_tsl .LT. MPI_THREAD_FUNNELED) THEN !$ CALL mp_stop(0, "MPI library does not support the requested level of threading (MPI_THREAD_FUNNELED).") !$ END IF !$OMP END MASTER !$ END IF CALL mpi_comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_set_errhandler @ mp_world_init") debug_comm_count = 1 #endif mp_comm = mp_comm_world CALL add_mp_perf_env() END SUBROUTINE mp_world_init FUNCTION mp_get_comm_count() !! Return the current number of communicators INTEGER :: mp_get_comm_count mp_get_comm_count = 0 #if defined(__parallel) mp_get_comm_count = debug_comm_count #endif END FUNCTION mp_get_comm_count SUBROUTINE mp_reordering(mp_comm, mp_new_comm, ranks_order) !! re-create the system default communicator with a different MPI !! rank order !! @note !! should only be called once, at very beginning of CP2K run !! @endnote TYPE(mp_comm_type), INTENT(IN) :: mp_comm !! [output] : handle of the default communicator TYPE(mp_comm_type), INTENT(out) :: mp_new_comm INTEGER, DIMENSION(:), CONTIGUOUS :: ranks_order CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_reordering' INTEGER :: handle, ierr #if defined(__parallel) MPI_GROUP_TYPE :: newgroup, oldgroup TYPE(mp_comm_type) :: newcomm #endif CALL timeset(routineN, handle) ierr = 0 #if defined(__parallel) CALL mpi_comm_group(mp_comm%handle, oldgroup, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_group @ "//routineN) CALL mpi_group_incl(oldgroup, SIZE(ranks_order), ranks_order, newgroup, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_group_incl @ "//routineN) CALL mpi_comm_create(mp_comm%handle, newgroup, newcomm%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_create @ "//routineN) CALL mpi_group_free(oldgroup, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_group_free @ "//routineN) CALL mpi_group_free(newgroup, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_group_free @ "//routineN) ! update the system default communicator mp_new_comm = newcomm debug_comm_count = debug_comm_count + 1 #else MARK_USED(ranks_order) mp_new_comm = mp_comm #endif CALL timestop(handle) END SUBROUTINE mp_reordering SUBROUTINE mp_world_finalize() !! finalizes the system default communicator #if defined(__parallel) INTEGER :: ierr CALL mpi_barrier(MPI_COMM_WORLD, ierr) ! call mpi directly to avoid 0 stack pointer CALL rm_mp_perf_env() IF (ierr /= 0) CALL mp_stop(ierr, "mpi_barrier @ mp_world_finalize") debug_comm_count = debug_comm_count - 1 IF (debug_comm_count .NE. 0) THEN ! A bug, we're leaking or double-freeing communicators. Needs to be fixed where the leak happens. ! Memory leak checking might be helpful to locate the culprit DBCSR_ABORT("mp_world_finalize: assert failed: leaking communicators") END IF CALL mpi_finalize(ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_finalize @ mp_world_finalize") #else CALL rm_mp_perf_env() #endif END SUBROUTINE mp_world_finalize ! all the following routines should work for a given communicator, not MPI_WORLD SUBROUTINE add_mp_perf_env(perf_env) !! start and stop the performance indicators !! for every call to start there has to be (exactly) one call to stop !! @note !! can be used to measure performance of a sub-part of a program. !! timings measured here will not show up in the outer start/stops !! Doesn't need a fresh communicator !! @endnote TYPE(mp_perf_env_type), OPTIONAL, POINTER :: perf_env stack_pointer = stack_pointer + 1 IF (stack_pointer > max_stack_size) THEN DBCSR_ABORT("stack_pointer too large : mpiwrap @ add_mp_perf_env") END IF NULLIFY (mp_perf_stack(stack_pointer)%mp_perf_env) IF (PRESENT(perf_env)) THEN mp_perf_stack(stack_pointer)%mp_perf_env => perf_env IF (ASSOCIATED(perf_env)) CALL mp_perf_env_retain(perf_env) END IF IF (.NOT. ASSOCIATED(mp_perf_stack(stack_pointer)%mp_perf_env)) THEN CALL mp_perf_env_create(mp_perf_stack(stack_pointer)%mp_perf_env) END IF END SUBROUTINE add_mp_perf_env SUBROUTINE mp_perf_env_create(perf_env) TYPE(mp_perf_env_type), OPTIONAL, POINTER :: perf_env INTEGER :: i, stat NULLIFY (perf_env) ALLOCATE (perf_env, stat=stat) IF (stat /= 0) THEN DBCSR_ABORT("allocation failed in mp_perf_env_create") END IF last_mp_perf_env_id = last_mp_perf_env_id + 1 perf_env%id_nr = last_mp_perf_env_id perf_env%ref_count = 1 DO i = 1, MAX_PERF perf_env%mp_perfs(i)%name = sname(i) perf_env%mp_perfs(i)%count = 0 perf_env%mp_perfs(i)%msg_size = 0.0_dp END DO END SUBROUTINE mp_perf_env_create SUBROUTINE mp_perf_env_release(perf_env) TYPE(mp_perf_env_type), POINTER :: perf_env IF (ASSOCIATED(perf_env)) THEN IF (perf_env%ref_count < 1) THEN DBCSR_ABORT("invalid ref_count: mpiwrap @ mp_perf_env_release") END IF perf_env%ref_count = perf_env%ref_count - 1 IF (perf_env%ref_count == 0) THEN DEALLOCATE (perf_env) END IF END IF NULLIFY (perf_env) END SUBROUTINE mp_perf_env_release SUBROUTINE mp_perf_env_retain(perf_env) TYPE(mp_perf_env_type), POINTER :: perf_env IF (.NOT. ASSOCIATED(perf_env)) THEN DBCSR_ABORT("unassociated perf_env: mpiwrap @ mp_perf_env_retain") END IF IF (perf_env%ref_count < 1) THEN DBCSR_ABORT("invalid ref_count: mpiwrap @ mp_perf_env_retain") END IF perf_env%ref_count = perf_env%ref_count + 1 END SUBROUTINE mp_perf_env_retain !.. reports the performance counters for the MPI run SUBROUTINE mp_perf_env_describe(perf_env, iw) TYPE(mp_perf_env_type), POINTER :: perf_env INTEGER, INTENT(IN) :: iw #if defined(__parallel) INTEGER :: i REAL(KIND=dp) :: vol #endif IF (.NOT. ASSOCIATED(perf_env)) THEN DBCSR_ABORT("unassociated perf_env : mpiwrap @ mp_perf_env_describe") END IF IF (perf_env%ref_count < 1) THEN DBCSR_ABORT("invalid perf_env%ref_count : mpiwrap @ mp_perf_env_describe") END IF #if defined(__parallel) IF (iw > 0) THEN WRITE (iw, '( " -", 77X, "-" )') WRITE (iw, '( " -", 21X, A, 21X, "-" )') ' DBCSR MESSAGE PASSING PERFORMANCE ' WRITE (iw, '( " -", 77X, "-" )') WRITE (iw, '( 1X, 79("-"))') WRITE (iw, '( A, A, A )') ' ROUTINE', ' CALLS ', & ' AVE VOLUME [Bytes]' DO i = 1, MAX_PERF IF (perf_env%mp_perfs(i)%count > 0) THEN vol = perf_env%mp_perfs(i)%msg_size/REAL(perf_env%mp_perfs(i)%count, KIND=dp) IF (vol < 1.0_dp) THEN WRITE (iw, '(1X,A15,T17,I10)') & ADJUSTL(perf_env%mp_perfs(i)%name), perf_env%mp_perfs(i)%count ELSE WRITE (iw, '(1X,A15,T17,I10,T40,F11.0)') & ADJUSTL(perf_env%mp_perfs(i)%name), perf_env%mp_perfs(i)%count, & vol END IF END IF END DO WRITE (iw, '( 1X, 79("-"))') END IF #else MARK_USED(iw) #endif END SUBROUTINE mp_perf_env_describe SUBROUTINE rm_mp_perf_env() IF (stack_pointer < 1) THEN DBCSR_ABORT("no perf_env in the stack : mpiwrap @ rm_mp_perf_env") END IF CALL mp_perf_env_release(mp_perf_stack(stack_pointer)%mp_perf_env) stack_pointer = stack_pointer - 1 END SUBROUTINE rm_mp_perf_env PURE FUNCTION has_mp_perf_env() RESULT(res) LOGICAL :: res res = .FALSE. IF (stack_pointer < 1) RETURN IF (.NOT. ASSOCIATED(mp_perf_stack(stack_pointer)%mp_perf_env)) RETURN res = .TRUE. END FUNCTION has_mp_perf_env FUNCTION get_mp_perf_env() RESULT(res) TYPE(mp_perf_env_type), POINTER :: res IF (stack_pointer < 1) THEN DBCSR_ABORT("no perf_env in the stack : mpiwrap @ get_mp_perf_env") END IF res => mp_perf_stack(stack_pointer)%mp_perf_env END FUNCTION get_mp_perf_env SUBROUTINE describe_mp_perf_env(scr) INTEGER, INTENT(in) :: scr TYPE(mp_perf_env_type), POINTER :: perf_env perf_env => get_mp_perf_env() CALL mp_perf_env_describe(perf_env, scr) END SUBROUTINE describe_mp_perf_env #if defined(__parallel) SUBROUTINE add_perf(perf_id, msg_size) !! adds the performance informations of one call INTEGER, INTENT(in) :: perf_id INTEGER, INTENT(in) :: msg_size TYPE(mp_perf_type), POINTER :: mp_perf IF (stack_pointer < 1) return IF (.NOT. ASSOCIATED(mp_perf_stack(stack_pointer)%mp_perf_env)) return mp_perf => mp_perf_stack(stack_pointer)%mp_perf_env%mp_perfs(perf_id) mp_perf%count = mp_perf%count + 1 mp_perf%msg_size = mp_perf%msg_size + REAL(msg_size, dp) END SUBROUTINE add_perf #endif SUBROUTINE mp_abort() !! globally stops all tasks !! this is intended to be low level, most of CP2K should call dbcsr_abort() INTEGER :: ierr ierr = 0 #if !defined(__NO_ABORT) #if defined(__parallel) CALL mpi_abort(MPI_COMM_WORLD, 1, ierr) #else CALL m_abort() #endif #endif ! this routine never returns and levels with non-zero exit code STOP 1 END SUBROUTINE mp_abort SUBROUTINE mp_stop(ierr, prg_code) !! stops *after an mpi error* translating the error code !! @note !! this function is private to mpiwrap.F !! @endnote INTEGER, INTENT(IN) :: ierr !! an error code * returned by an mpi call * CHARACTER(LEN=*) :: prg_code #if defined(__parallel) INTEGER :: istat, len CHARACTER(LEN=MPI_MAX_ERROR_STRING) :: error_string CHARACTER(LEN=MPI_MAX_ERROR_STRING + 512) :: full_error #else CHARACTER(LEN=512) :: full_error #endif #if defined(__parallel) CALL mpi_error_string(ierr, error_string, len, istat) WRITE (full_error, '(A,I0,A)') ' MPI error ', ierr, ' in '//TRIM(prg_code)//' : '//error_string(1:len) #else WRITE (full_error, '(A,I0,A)') ' MPI error (!?) ', ierr, ' in '//TRIM(prg_code) #endif DBCSR_ABORT(full_error) END SUBROUTINE mp_stop SUBROUTINE mp_sync(group) !! synchronizes with a barrier a given group of mpi tasks TYPE(mp_comm_type), INTENT(IN) :: group !! mpi communicator CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sync' INTEGER :: handle, ierr ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mpi_barrier(group%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_barrier @ "//routineN) #else MARK_USED(group) #endif CALL timestop(handle) END SUBROUTINE mp_sync SUBROUTINE mp_isync(group, request) !! synchronizes with a barrier a given group of mpi tasks TYPE(mp_comm_type), INTENT(IN) :: group !! mpi communicator TYPE(mp_request_type), INTENT(OUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isync' INTEGER :: handle, ierr ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mpi_ibarrier(group%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_ibarrier @ "//routineN) #else MARK_USED(group) request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_isync RECURSIVE SUBROUTINE mp_environ_l(numtask, taskid, groupid) !! returns number of tasks and task id for a given mpi group !! simple and cartesian version.. recursive needed in case of failing mpi_comm_rank. !! @note !! mp_world_setup is gone, use mp_environ instead (i.e. give a groupid explicitly) !! @endnote INTEGER, OPTIONAL, INTENT(OUT) :: numtask, taskid TYPE(mp_comm_type), INTENT(IN) :: groupid !! mpi communicator INTEGER :: ierr ierr = 0 IF (PRESENT(numtask)) numtask = 1 IF (PRESENT(taskid)) taskid = 0 #if defined(__parallel) IF (PRESENT(taskid)) THEN CALL mpi_comm_rank(groupid%handle, taskid, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_rank @ mp_environ_l") END IF IF (PRESENT(numtask)) THEN CALL mpi_comm_size(groupid%handle, numtask, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_size @ mp_environ_l") END IF #else MARK_USED(groupid) #endif END SUBROUTINE mp_environ_l SUBROUTINE mp_environ_c(numtask, dims, task_coor, groupid) INTEGER, INTENT(OUT) :: numtask, dims(2), & task_coor(2) TYPE(mp_comm_type), INTENT(IN) :: groupid INTEGER :: ierr #if defined(__parallel) LOGICAL, DIMENSION(2) :: periods #endif ierr = 0 numtask = 1 task_coor = 0 dims = 1 #if defined(__parallel) CALL mpi_comm_size(groupid%handle, numtask, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_size @ mp_environ_c") CALL mpi_cart_get(groupid%handle, 2, dims, periods, task_coor, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_cart_get @ mp_environ_c") #else MARK_USED(groupid) #endif END SUBROUTINE mp_environ_c SUBROUTINE mp_environ_c2(comm, ndims, dims, task_coor, periods) TYPE(mp_comm_type), INTENT(IN) :: comm INTEGER, INTENT(IN) :: ndims INTEGER, INTENT(OUT) :: dims(ndims), task_coor(ndims) LOGICAL, INTENT(out) :: periods(ndims) INTEGER :: ierr ierr = 0 task_coor = 0 dims = 1 periods = .FALSE. #if defined(__parallel) CALL mpi_cart_get(comm%handle, ndims, dims, periods, task_coor, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_cart_get @ mp_environ_c") #else MARK_USED(comm) #endif END SUBROUTINE mp_environ_c2 !..mp_cart_create SUBROUTINE mp_cart_create(comm_old, ndims, dims, pos, comm_cart) TYPE(mp_comm_type), INTENT(IN) :: comm_old INTEGER, INTENT(IN) :: ndims INTEGER, CONTIGUOUS, INTENT(INOUT) :: dims(:) INTEGER, CONTIGUOUS, INTENT(OUT) :: pos(:) TYPE(mp_comm_type), INTENT(OUT) :: comm_cart CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_cart_create' INTEGER :: handle, ierr, nodes #if defined(__parallel) LOGICAL, DIMENSION(1:ndims) :: period LOGICAL :: reorder #endif ierr = 0 CALL timeset(routineN, handle) nodes = 0 pos(1:ndims) = -1 comm_cart = comm_old #if defined(__parallel) CALL mpi_comm_size(comm_old%handle, nodes, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_size @ "//routineN) IF (ANY(dims == 0)) CALL mpi_dims_create(nodes, ndims, dims, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_dims_create @ "//routineN) ! FIX ME. Quick hack to avoid problems with realspace grids for compilers ! like IBM that actually reorder the processors when creating the new ! communicator reorder = .FALSE. period = .TRUE. CALL mpi_cart_create(comm_old%handle, ndims, dims, period, reorder, comm_cart%handle, & ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_cart_create @ "//routineN) IF (comm_cart /= MP_COMM_NULL) THEN debug_comm_count = debug_comm_count + 1 CALL mpi_cart_get(comm_cart%handle, ndims, dims, period, pos, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_cart_get @ "//routineN) END IF #else pos(1:ndims) = 0 dims = 1 comm_cart = mp_comm_self #endif CALL timestop(handle) END SUBROUTINE mp_cart_create !..mp_cart_coords SUBROUTINE mp_cart_coords(comm, rank, coords) TYPE(mp_comm_type), INTENT(IN) :: comm INTEGER, INTENT(IN) :: rank INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(OUT) :: coords INTEGER :: ierr, m ierr = 0 m = SIZE(coords) #if defined(__parallel) CALL mpi_cart_coords(comm%handle, rank, m, coords, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_cart_coords @ mp_cart_coords") #else coords = 0 MARK_USED(rank) MARK_USED(comm) #endif END SUBROUTINE mp_cart_coords !..mp_comm_compare SUBROUTINE mp_comm_compare(comm1, comm2, res) TYPE(mp_comm_type), INTENT(IN) :: comm1, comm2 INTEGER, INTENT(OUT) :: res CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_comm_compare' INTEGER :: handle, ierr, iout ierr = 0 CALL timeset(routineN, handle) iout = 0 res = 0 #if defined(__parallel) CALL mpi_comm_compare(comm1%handle, comm2%handle, iout, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_compare @ "//routineN) SELECT CASE (iout) CASE (MPI_IDENT) res = 0 CASE (MPI_CONGRUENT) res = 1 CASE (MPI_SIMILAR) res = 2 CASE (MPI_UNEQUAL) res = 3 CASE default res = 4 END SELECT #else MARK_USED(comm1) MARK_USED(comm2) #endif CALL timestop(handle) END SUBROUTINE mp_comm_compare !..mp_cart_sub SUBROUTINE mp_cart_sub(comm, rdim, sub_comm) TYPE(mp_comm_type), INTENT(IN) :: comm LOGICAL, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: rdim TYPE(mp_comm_type), INTENT(OUT) :: sub_comm CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_cart_sub' INTEGER :: handle, ierr ierr = 0 CALL timeset(routineN, handle) sub_comm = comm #if defined(__parallel) CALL mpi_cart_sub(comm%handle, rdim, sub_comm%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_cart_sub @ "//routineN) debug_comm_count = debug_comm_count + 1 #else MARK_USED(comm) MARK_USED(rdim) #endif CALL timestop(handle) END SUBROUTINE mp_cart_sub !..mp_comm_free SUBROUTINE mp_comm_free(comm) TYPE(mp_comm_type), INTENT(INOUT) :: comm CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_comm_free' INTEGER :: handle, ierr ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mpi_comm_free(comm%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_free @ "//routineN) debug_comm_count = debug_comm_count - 1 #else MARK_USED(comm) #endif CALL timestop(handle) END SUBROUTINE mp_comm_free !..mp_comm_dup SUBROUTINE mp_comm_dup(comm1, comm2) TYPE(mp_comm_type), INTENT(IN) :: comm1 TYPE(mp_comm_type), INTENT(OUT) :: comm2 CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_comm_dup' INTEGER :: handle, ierr ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mpi_comm_dup(comm1%handle, comm2%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_dup @ "//routineN) debug_comm_count = debug_comm_count + 1 #else comm2 = comm1 #endif CALL timestop(handle) END SUBROUTINE mp_comm_dup !..mp_rank_compare SUBROUTINE mp_rank_compare(comm1, comm2, rank) TYPE(mp_comm_type), INTENT(IN) :: comm1, comm2 INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(OUT) :: rank CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_rank_compare' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: i, n, n1, n2 INTEGER, ALLOCATABLE, DIMENSION(:) :: rin MPI_GROUP_TYPE :: g1, g2 #endif ierr = 0 CALL timeset(routineN, handle) rank = 0 #if defined(__parallel) CALL mpi_comm_size(comm1%handle, n1, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_size @ "//routineN) CALL mpi_comm_size(comm2%handle, n2, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_size @ "//routineN) n = MAX(n1, n2) CALL mpi_comm_group(comm1%handle, g1, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_group @ "//routineN) CALL mpi_comm_group(comm2%handle, g2, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_group @ "//routineN) ALLOCATE (rin(0:n - 1), STAT=ierr) IF (ierr /= 0) & DBCSR_ABORT("allocate @ "//routineN) DO i = 0, n - 1 rin(i) = i END DO CALL mpi_group_translate_ranks(g1, n, rin, g2, rank, ierr) IF (ierr /= 0) CALL mp_stop(ierr, & "mpi_group_translate_rank @ "//routineN) CALL mpi_group_free(g1, ierr) IF (ierr /= 0) & DBCSR_ABORT("group_free @ "//routineN) CALL mpi_group_free(g2, ierr) IF (ierr /= 0) & DBCSR_ABORT("group_free @ "//routineN) DEALLOCATE (rin) #else MARK_USED(comm1) MARK_USED(comm2) #endif CALL timestop(handle) END SUBROUTINE mp_rank_compare !..mp_dims_create SUBROUTINE mp_dims_create(nodes, dims) INTEGER, INTENT(IN) :: nodes INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(INOUT) :: dims CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_dims_create' INTEGER :: handle, ierr, ndim ierr = 0 CALL timeset(routineN, handle) ndim = SIZE(dims) #if defined(__parallel) IF (ANY(dims == 0)) CALL mpi_dims_create(nodes, ndim, dims, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_dims_create @ "//routineN) #else dims = 1 MARK_USED(nodes) #endif CALL timestop(handle) END SUBROUTINE mp_dims_create !..mp_cart_rank SUBROUTINE mp_cart_rank(group, pos, rank) TYPE(mp_comm_type), INTENT(IN) :: group INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: pos INTEGER, INTENT(OUT) :: rank INTEGER :: ierr ierr = 0 #if defined(__parallel) CALL mpi_cart_rank(group%handle, pos, rank, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_cart_rank @ mp_cart_rank") #else rank = 0 MARK_USED(group) MARK_USED(pos) #endif END SUBROUTINE mp_cart_rank SUBROUTINE mp_wait(request) !! waits for completion of the given request !! @note !! see isendrecv !! @endnote TYPE(mp_request_type), INTENT(inout) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_wait' INTEGER :: handle, ierr ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mpi_wait(request%handle, MPI_STATUS_IGNORE, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_wait @ "//routineN) #else MARK_USED(request) #endif CALL timestop(handle) END SUBROUTINE mp_wait SUBROUTINE mp_waitall_1(requests) !! waits for completion of the given requests !! @note !! see isendrecv !! @endnote TYPE(mp_request_type), DIMENSION(:), INTENT(inout) :: requests CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_waitall_1' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: count MPI_STATUS_TYPE_ARRAY(SIZE(requests)) :: status #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) count = SIZE(requests) CALL mpi_waitall_internal(count, requests, status, ierr) ! MPI_STATUSES_IGNORE openmpi workaround IF (ierr /= 0) CALL mp_stop(ierr, "mpi_waitall @ "//routineN) #else MARK_USED(requests) #endif CALL timestop(handle) END SUBROUTINE mp_waitall_1 SUBROUTINE mp_waitall_2(requests) !! waits for completion of the given requests TYPE(mp_request_type), DIMENSION(:, :), INTENT(inout) :: requests CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_waitall_2' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: count MPI_STATUS_TYPE_ARRAY(SIZE(requests)) :: status #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) count = SIZE(requests) CALL mpi_waitall_internal(count, requests, status, ierr) ! MPI_STATUSES_IGNORE openmpi workaround IF (ierr /= 0) CALL mp_stop(ierr, "mpi_waitall @ "//routineN) #else MARK_USED(requests) #endif CALL timestop(handle) END SUBROUTINE mp_waitall_2 #if defined(__parallel) SUBROUTINE mpi_waitall_internal(count, array_of_requests, array_of_statuses, ierr) !! wrapper needed to deal with interfaces as present in openmpi 1.8.1 !! the issue is with the rank or requests INTEGER, INTENT(in) :: count TYPE(mp_request_type), DIMENSION(count), INTENT(inout) :: array_of_requests MPI_STATUS_TYPE_ARRAY(*), INTENT(inout) :: array_of_statuses INTEGER, INTENT(out) :: ierr INTEGER :: i MPI_REQUEST_TYPE, DIMENSION(count) :: request_handles DO i = 1, count request_handles(i) = array_of_requests(i)%handle END DO CALL mpi_waitall(count, request_handles, array_of_statuses, ierr) DO i = 1, count array_of_requests(i)%handle = request_handles(i) END DO END SUBROUTINE mpi_waitall_internal #endif SUBROUTINE mp_waitany(requests, completed) !! waits for completion of any of the given requests TYPE(mp_request_type), DIMENSION(:), INTENT(inout) :: requests INTEGER, INTENT(out) :: completed CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_waitany' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: count, i MPI_REQUEST_TYPE, DIMENSION(SIZE(requests)) :: request_handles #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) count = SIZE(requests) DO i = 1, count request_handles(i) = requests(i)%handle END DO CALL mpi_waitany(count, request_handles, completed, MPI_STATUS_IGNORE, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_waitany @ "//routineN) DO i = 1, count requests(i)%handle = request_handles(i) END DO #else MARK_USED(requests) completed = 1 #endif CALL timestop(handle) END SUBROUTINE mp_waitany FUNCTION mp_testall_tv(requests) RESULT(flag) !! Tests for completion of the given requests. !! We use mpi_test so that we can use a single status. TYPE(mp_request_type), DIMENSION(:) :: requests !! the list of requests to test LOGICAL :: flag !! logical which determines if requests are complete INTEGER :: ierr #if defined(__parallel) INTEGER :: i LOGICAL, DIMENSION(:), ALLOCATABLE :: flags #endif ierr = 0 flag = .TRUE. #if defined(__parallel) ALLOCATE (flags(SIZE(requests))) DO i = 1, SIZE(requests) CALL mpi_test(requests(i)%handle, flags(i), MPI_STATUS_IGNORE, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_test @ mp_testall_tv") flag = flag .AND. flags(i) END DO DEALLOCATE (flags) #else requests = mp_request_null #endif END FUNCTION mp_testall_tv SUBROUTINE mp_test_1(request, flag) !! Tests for completion of the given request. TYPE(mp_request_type), INTENT(inout) :: request !! the request LOGICAL, INTENT(out) :: flag !! logical which determines if the request is completed INTEGER :: ierr ierr = 0 #if defined(__parallel) CALL mpi_test(request%handle, flag, MPI_STATUS_IGNORE, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_test @ mp_test_1") #else MARK_USED(request) flag = .TRUE. #endif END SUBROUTINE mp_test_1 SUBROUTINE mp_testany_1(requests, completed, flag) !! tests for completion of the given requests TYPE(mp_request_type), DIMENSION(:), INTENT(inout) :: requests INTEGER, INTENT(out), OPTIONAL :: completed LOGICAL, INTENT(out), OPTIONAL :: flag INTEGER :: ierr #if defined(__parallel) INTEGER :: completed_l, count LOGICAL :: flag_l #endif ierr = 0 #if defined(__parallel) count = SIZE(requests) CALL mpi_testany_internal(count, requests, completed_l, flag_l, MPI_STATUS_IGNORE, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_testany_1 @ mp_testany") IF (PRESENT(completed)) completed = completed_l IF (PRESENT(flag)) flag = flag_l #else MARK_USED(requests) IF (PRESENT(completed)) completed = 1 IF (PRESENT(flag)) flag = .TRUE. #endif END SUBROUTINE mp_testany_1 SUBROUTINE mp_testany_2(requests, completed, flag) !! tests for completion of the given requests TYPE(mp_request_type), DIMENSION(:, :), INTENT(inout) :: requests INTEGER, INTENT(out), OPTIONAL :: completed LOGICAL, INTENT(out), OPTIONAL :: flag INTEGER :: ierr #if defined(__parallel) INTEGER :: completed_l, count LOGICAL :: flag_l #endif ierr = 0 #if defined(__parallel) count = SIZE(requests) CALL mpi_testany_internal(count, requests, completed_l, flag_l, MPI_STATUS_IGNORE, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_testany_2 @ mp_testany") IF (PRESENT(completed)) completed = completed_l IF (PRESENT(flag)) flag = flag_l #else MARK_USED(requests) IF (PRESENT(completed)) completed = 1 IF (PRESENT(flag)) flag = .TRUE. #endif END SUBROUTINE mp_testany_2 #if defined(__parallel) SUBROUTINE mpi_testany_internal(count, array_of_requests, index, flag, status, ierr) !! wrapper needed to deal with interfaces as present in openmpi 1.8.1 !! the issue is with the rank or requests INTEGER, INTENT(in) :: count TYPE(mp_request_type), DIMENSION(count), INTENT(inout) :: array_of_requests INTEGER, INTENT(out) :: index LOGICAL, INTENT(out) :: flag MPI_STATUS_TYPE :: status INTEGER, INTENT(out) :: ierr INTEGER :: i MPI_REQUEST_TYPE, DIMENSION(count) :: request_handles DO i = 1, count request_handles(i) = array_of_requests(i)%handle END DO CALL mpi_testany(count, request_handles, index, flag, status, ierr) DO i = 1, count array_of_requests(i)%handle = request_handles(i) END DO END SUBROUTINE mpi_testany_internal #endif SUBROUTINE mp_comm_split_direct(comm, sub_comm, color, key) !! the direct way to split a communicator each color is a sub_comm, !! the rank order is accoring to the order in the orig comm TYPE(mp_comm_type), INTENT(in) :: comm TYPE(mp_comm_type), INTENT(OUT) :: sub_comm INTEGER, INTENT(in) :: color INTEGER, INTENT(in), OPTIONAL :: key CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_comm_split_direct' INTEGER :: handle, ierr, my_key ierr = 0 CALL timeset(routineN, handle) my_key = 0 #if defined(__parallel) IF (PRESENT(key)) my_key = key CALL mpi_comm_split(comm%handle, color, my_key, sub_comm%handle, ierr) debug_comm_count = debug_comm_count + 1 IF (ierr /= mpi_success) CALL mp_stop(ierr, routineN) #else CALL mp_comm_dup(comm, sub_comm) MARK_USED(color) MARK_USED(key) #endif CALL timestop(handle) END SUBROUTINE mp_comm_split_direct SUBROUTINE mp_comm_split(comm, sub_comm, ngroups, group_distribution, & subgroup_min_size, n_subgroups, group_partition, stride) !! splits the given communicator in group in subgroups trying to organize !! them in a way that the communication within each subgroup is !! efficient (but not necessarily the communication between subgroups) !! @note !! at least one of subgroup_min_size and n_subgroups is needed, !! the other default to the value needed to use most processors. !! if less cpus are present than needed for subgroup min size, n_subgroups, !! just one comm is created that contains all cpus !! @endnote TYPE(mp_comm_type), INTENT(in) :: comm !! the mpi communicator that you want to split TYPE(mp_comm_type), INTENT(out) :: sub_comm !! the communicator for the subgroup (created, needs to be freed later) INTEGER, INTENT(out) :: ngroups !! actual number of groups INTEGER, DIMENSION(0:) :: group_distribution !! input : allocated with array with the nprocs entries (0 .. nprocs-1) INTEGER, INTENT(in), OPTIONAL :: subgroup_min_size, n_subgroups !! the minimum size of the subgroup !! the number of subgroups wanted INTEGER, DIMENSION(0:), OPTIONAL :: group_partition !! n_subgroups sized array containing the number of cpus wanted per group. should match the total number of cpus (only used !! if present and associated) (0..ngroups-1) INTEGER, OPTIONAL :: stride !! create groups using a stride (default=1) through the ranks of the comm to be split. CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_comm_split', routineP = moduleN//':'//routineN INTEGER :: handle, ierr, mepos, nnodes #if defined(__parallel) INTEGER :: color, i, j, k, & my_subgroup_min_size, & istride, local_stride, irank INTEGER, DIMENSION(:), ALLOCATABLE :: rank_permutation #endif ierr = 0 CALL timeset(routineN, handle) ! actual number of groups IF (.NOT. PRESENT(subgroup_min_size) .AND. .NOT. PRESENT(n_subgroups)) THEN DBCSR_ABORT(routineP//" missing arguments") END IF IF (PRESENT(subgroup_min_size) .AND. PRESENT(n_subgroups)) THEN DBCSR_ABORT(routineP//" too many arguments") END IF CALL mp_environ(nnodes, mepos, comm) IF (UBOUND(group_distribution, 1) .NE. nnodes - 1) THEN DBCSR_ABORT(routineP//" group_distribution wrong bounds") END IF #if defined(__parallel) IF (PRESENT(subgroup_min_size)) THEN IF (subgroup_min_size < 0 .OR. subgroup_min_size > nnodes) THEN DBCSR_ABORT(routineP//" subgroup_min_size too small or too large") END IF ngroups = nnodes/subgroup_min_size my_subgroup_min_size = subgroup_min_size ELSE ! n_subgroups IF (n_subgroups <= 0) THEN DBCSR_ABORT(routineP//" n_subgroups too small") END IF IF (nnodes/n_subgroups > 0) THEN ! we have a least one cpu per group ngroups = n_subgroups ELSE ! well, only one group then ngroups = 1 END IF my_subgroup_min_size = nnodes/ngroups END IF ! rank_permutation: is a permutation of ranks, so that groups are not necessarily continuous in rank of the master group ! while the order is not critical (we only color ranks), it can e.g. be used to make groups that have just 1 rank per node ! (by setting stride equal to the number of mpi ranks per node), or by sharing a node between two groups (stride 2). ALLOCATE (rank_permutation(0:nnodes - 1)) local_stride = 1 IF (PRESENT(stride)) local_stride = stride k = 0 DO istride = 1, local_stride DO irank = istride - 1, nnodes - 1, local_stride rank_permutation(k) = irank k = k + 1 END DO END DO DO i = 0, nnodes - 1 group_distribution(rank_permutation(i)) = MIN(i/my_subgroup_min_size, ngroups - 1) END DO ! even the user gave a partition, see if we can use it to overwrite this choice IF (PRESENT(group_partition)) THEN IF (ALL(group_partition > 0) .AND. (SUM(group_partition) .EQ. nnodes) .AND. (ngroups == SIZE(group_partition))) THEN k = 0 DO i = 0, SIZE(group_partition) - 1 DO j = 1, group_partition(i) group_distribution(rank_permutation(k)) = i k = k + 1 END DO END DO ELSE ! just ignore silently as we have reasonable defaults. Probably a warning would not be to bad END IF END IF color = group_distribution(mepos) CALL mpi_comm_split(comm%handle, color, 0, sub_comm%handle, ierr) debug_comm_count = debug_comm_count + 1 IF (ierr /= mpi_success) CALL mp_stop(ierr, "in "//routineP//" split") #else CALL mp_comm_dup(comm, sub_comm) group_distribution(0) = 0 ngroups = 1 MARK_USED(stride) MARK_USED(group_partition) #endif CALL timestop(handle) END SUBROUTINE mp_comm_split SUBROUTINE mp_probe(source, comm, tag) !! probes for an incoming message with any tag INTEGER :: source !! the source of the possible incoming message, if MP_ANY_SOURCE it is a blocking one and return value is the source of the !! next incoming message if source is a different value it is a non-blocking probe retuning MP_ANY_SOURCE if there is no !! incoming message TYPE(mp_comm_type), INTENT(IN) :: comm !! the communicator INTEGER, INTENT(OUT) :: tag !! the tag of the incoming message CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_probe' INTEGER :: handle, ierr #if defined(__parallel) MPI_STATUS_TYPE :: status_single LOGICAL :: flag #endif ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) ierr = 0 #if defined(__parallel) IF (source .EQ. mp_any_source) THEN CALL mpi_probe(mp_any_source, mp_any_tag, comm%handle, status_single, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_probe @ "//routineN) source = status_single MPI_STATUS_EXTRACT(MPI_SOURCE) tag = status_single MPI_STATUS_EXTRACT(MPI_TAG) ELSE flag = .FALSE. CALL mpi_iprobe(source, mp_any_tag, comm%handle, flag, status_single, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_iprobe @ "//routineN) IF (flag .EQV. .FALSE.) THEN source = mp_any_source tag = -1 !status_single MPI_STATUS_EXTRACT(MPI_TAG) ! in case of flag==false status is undefined ELSE tag = status_single MPI_STATUS_EXTRACT(MPI_TAG) END IF END IF #else tag = -1 MARK_USED(comm) MARK_USED(source) #endif CALL timestop(handle) END SUBROUTINE mp_probe ! ************************************************************************************************** ! Here come the data routines with none of the standard data types. ! ************************************************************************************************** SUBROUTINE mp_bcast_b(msg, source, gid) LOGICAL :: msg INTEGER :: source TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_b' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = 1 #if defined(__parallel) CALL mpi_bcast(msg, msglen, MPI_LOGICAL, source, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_bcast @ "//routineN) CALL add_perf(perf_id=2, msg_size=msglen*loglen) #else MARK_USED(msg) MARK_USED(source) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_bcast_b SUBROUTINE mp_bcast_bv(msg, source, gid) LOGICAL, CONTIGUOUS :: msg(:) INTEGER :: source TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_bv' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) CALL mpi_bcast(msg, msglen, MPI_LOGICAL, source, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_bcast @ "//routineN) CALL add_perf(perf_id=2, msg_size=msglen*loglen) #else MARK_USED(source) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_bcast_bv SUBROUTINE mp_isend_bv(msgin, dest, comm, request, tag) !! Non-blocking send of logical vector data !! @note !! see mp_irecv_iv !! arrays can be pointers or assumed shape, but they must be contiguous! !! @endnote LOGICAL, DIMENSION(:), CONTIGUOUS :: msgin !! the input message INTEGER, INTENT(IN) :: dest !! the destination processor TYPE(mp_comm_type), INTENT(IN) :: comm !! the communicator object TYPE(mp_request_type), INTENT(out) :: request !! communication request index INTEGER, INTENT(in), OPTIONAL :: tag !! message tag CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isend_bv' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen, my_tag LOGICAL :: foo(1) #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) my_tag = 0 IF (PRESENT(tag)) my_tag = tag msglen = SIZE(msgin, 1) IF (msglen > 0) THEN CALL mpi_isend(msgin, msglen, MPI_LOGICAL, dest, my_tag, & comm%handle, request%handle, ierr) ELSE CALL mpi_isend(foo, msglen, MPI_LOGICAL, dest, my_tag, & comm%handle, request%handle, ierr) END IF IF (ierr /= 0) CALL mp_stop(ierr, "mpi_isend @ "//routineN) CALL add_perf(perf_id=11, msg_size=msglen*loglen) #else DBCSR_ABORT("mp_isend called in non parallel case") MARK_USED(msgin) MARK_USED(dest) MARK_USED(comm) MARK_USED(request) MARK_USED(tag) request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_isend_bv SUBROUTINE mp_irecv_bv(msgout, source, comm, request, tag) !! Non-blocking receive of logical vector data !! @note !! see mp_irecv_iv !! arrays can be pointers or assumed shape, but they must be contiguous! !! @endnote LOGICAL, DIMENSION(:), CONTIGUOUS :: msgout !! the received message INTEGER, INTENT(IN) :: source !! the source processor TYPE(mp_comm_type), INTENT(IN) :: comm !! the communicator object TYPE(mp_request_type), INTENT(out) :: request !! communication request index INTEGER, INTENT(in), OPTIONAL :: tag !! message tag CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_irecv_bv' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen, my_tag LOGICAL :: foo(1) #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) my_tag = 0 IF (PRESENT(tag)) my_tag = tag msglen = SIZE(msgout, 1) IF (msglen > 0) THEN CALL mpi_irecv(msgout, msglen, MPI_LOGICAL, source, my_tag, & comm%handle, request%handle, ierr) ELSE CALL mpi_irecv(foo, msglen, MPI_LOGICAL, source, my_tag, & comm%handle, request%handle, ierr) END IF IF (ierr /= 0) CALL mp_stop(ierr, "mpi_ircv @ "//routineN) CALL add_perf(perf_id=12, msg_size=msglen*loglen) #else DBCSR_ABORT("mp_irecv called in non parallel case") MARK_USED(msgout) MARK_USED(source) MARK_USED(comm) MARK_USED(request) MARK_USED(tag) request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_irecv_bv SUBROUTINE mp_bcast_av(msg, source, gid) CHARACTER(LEN=*) :: msg INTEGER :: source TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_av' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: i, msglen, numtask, taskid INTEGER, DIMENSION(:), ALLOCATABLE :: imsg #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mp_environ(numtask, taskid, gid) IF (taskid == source) msglen = LEN_TRIM(msg) CALL mp_bcast(msglen, source, gid) ! this is a workaround to avoid problems on the T3E ! at the moment we have a data alignment error when trying to ! broadcast characters on the T3E (not always!) ! JH 19/3/99 on galileo ! CALL mpi_bcast(msg,msglen,MPI_CHARACTER,source,gid,ierr) ALLOCATE (imsg(1:msglen)) DO i = 1, msglen imsg(i) = ICHAR(msg(i:i)) END DO CALL mpi_bcast(imsg, msglen, MPI_INTEGER, source, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_bcast @ "//routineN) msg = "" DO i = 1, msglen msg(i:i) = CHAR(imsg(i)) END DO DEALLOCATE (imsg) CALL add_perf(perf_id=2, msg_size=msglen*charlen) #else MARK_USED(msg) MARK_USED(source) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_bcast_av SUBROUTINE mp_bcast_am(msg, source, gid) CHARACTER(LEN=*) :: msg(:) INTEGER :: source TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_am' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: i, j, k, msglen, msgsiz, & numtask, taskid INTEGER, ALLOCATABLE :: imsg(:), imsglen(:) #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mp_environ(numtask, taskid, gid) msgsiz = SIZE(msg) ! Determine size of the minimum array of integers to broadcast the string ALLOCATE (imsglen(1:msgsiz)) DO j = 1, msgsiz IF (taskid == source) imsglen(j) = LEN_TRIM(msg(j)) END DO CALL mp_bcast(imsglen, source, gid) msglen = SUM(imsglen) ! this is a workaround to avoid problems on the T3E ! at the moment we have a data alignment error when trying to ! broadcast characters on the T3E (not always!) ! JH 19/3/99 on galileo ! CALL mpi_bcast(msg,msglen,MPI_CHARACTER,source,gid,ierr) ALLOCATE (imsg(1:msglen)) k = 0 DO j = 1, msgsiz DO i = 1, imsglen(j) k = k + 1 imsg(k) = ICHAR(msg(j) (i:i)) END DO END DO CALL mpi_bcast(imsg, msglen, MPI_INTEGER, source, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_bcast @ "//routineN) msg = "" k = 0 DO j = 1, msgsiz DO i = 1, imsglen(j) k = k + 1 msg(j) (i:i) = CHAR(imsg(k)) END DO END DO DEALLOCATE (imsg) DEALLOCATE (imsglen) CALL add_perf(perf_id=2, msg_size=msglen*charlen*msgsiz) #else MARK_USED(msg) MARK_USED(source) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_bcast_am SUBROUTINE mp_minloc_dv(msg, gid) !! Finds the location of the minimal element in a vector. !! !! MPI mapping !! mpi_allreduce with the MPI_MINLOC reduction function identifier !! !! Invalid data types !! This routine is invalid for (int_8) data! REAL(kind=real_8), CONTIGUOUS, INTENT(INOUT) :: msg(:) !! Find location of maximum element among these data (input). TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_minloc_dv' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen REAL(kind=real_8), ALLOCATABLE :: res(:) #endif ierr = 0 IF ("d" .EQ. "l" .AND. real_8 .EQ. int_8) THEN DBCSR_ABORT("Minimal location not available with long integers @ "//routineN) END IF CALL timeset(routineN, handle) #if defined(__parallel) msglen = SIZE(msg) ALLOCATE (res(1:msglen), STAT=ierr) IF (ierr /= 0) & DBCSR_ABORT("allocate @ "//routineN) CALL mpi_allreduce(msg, res, msglen/2, MPI_2DOUBLE_PRECISION, MPI_MINLOC, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allreduce @ "//routineN) msg = res DEALLOCATE (res) CALL add_perf(perf_id=3, msg_size=msglen*real_8_size) #else MARK_USED(msg) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_minloc_dv SUBROUTINE mp_maxloc_dv(msg, gid) !! Finds the location of the maximal element in a vector. !! !! MPI mapping !! mpi_allreduce with the MPI_MAXLOC reduction function identifier !! !! Invalid data types !! This routine is invalid for (int_8) data! REAL(kind=real_8), CONTIGUOUS, INTENT(INOUT) :: msg(:) !! Find location of maximum element among these data (input). TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_maxloc_dv' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen REAL(kind=real_8), ALLOCATABLE :: res(:) #endif ierr = 0 IF ("d" .EQ. "l" .AND. real_8 .EQ. int_8) THEN DBCSR_ABORT("Maximal location not available with long integers @ "//routineN) END IF CALL timeset(routineN, handle) #if defined(__parallel) msglen = SIZE(msg) ALLOCATE (res(1:msglen)) CALL mpi_allreduce(msg, res, msglen/2, MPI_2DOUBLE_PRECISION, MPI_MAXLOC, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allreduce @ "//routineN) msg = res DEALLOCATE (res) CALL add_perf(perf_id=3, msg_size=msglen*real_8_size) #else MARK_USED(msg) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_maxloc_dv SUBROUTINE mp_sum_b(msg, gid) !! Logical OR reduction !! !! MPI mapping !! mpi_allreduce LOGICAL, INTENT(INOUT) :: msg !! Datum to perform inclusive disjunction (input) and resultant inclusive disjunction (output) TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_b' INTEGER :: handle, ierr, msglen CALL timeset(routineN, handle) ierr = 0 msglen = 1 #if defined(__parallel) CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, MPI_LOGICAL, MPI_LOR, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allreduce @ "//routineN) #else MARK_USED(msg) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_sum_b SUBROUTINE mp_sum_bv(msg, gid) !! Logical OR reduction !! !! MPI mapping !! mpi_allreduce LOGICAL, DIMENSION(:), CONTIGUOUS, INTENT(INOUT) :: msg !! Datum to perform inclusive disjunction (input) and resultant inclusive disjunction (output) TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_bv' INTEGER :: handle, ierr, msglen CALL timeset(routineN, handle) ierr = 0 msglen = SIZE(msg) #if defined(__parallel) IF (msglen .GT. 0) THEN CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, MPI_LOGICAL, MPI_LOR, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allreduce @ "//routineN) END IF #else MARK_USED(msg) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_sum_bv SUBROUTINE mp_isum_bv(msg, gid, request) !! Logical OR reduction !! !! MPI mapping !! mpi_allreduce LOGICAL, DIMENSION(:), CONTIGUOUS, INTENT(INOUT) :: msg !! Datum to perform inclusive disjunction (input) and resultant inclusive disjunction (output) TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier TYPE(mp_request_type), INTENT(INOUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isum_bv' INTEGER :: handle, ierr, msglen CALL timeset(routineN, handle) ierr = 0 msglen = SIZE(msg) #if defined(__parallel) IF (msglen .GT. 0) THEN CALL mpi_iallreduce(MPI_IN_PLACE, msg, msglen, MPI_LOGICAL, MPI_LOR, gid%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_iallreduce @ "//routineN) ELSE request = mp_request_null END IF #else MARK_USED(msg) MARK_USED(gid) MARK_USED(request) #endif CALL timestop(handle) END SUBROUTINE mp_isum_bv SUBROUTINE mp_get_library_version(version, resultlen) !! Get Version of the MPI Library (MPI 3) CHARACTER(LEN=*), INTENT(OUT) :: version !! Version of the library, declared as CHARACTER(LEN=mp_max_library_version_string) INTEGER, INTENT(OUT) :: resultlen !! Length (in printable characters) of the result returned in version (integer) #if defined(__parallel) CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_get_library_version' INTEGER :: ierr ierr = 0 CALL mpi_get_library_version(version, resultlen, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_get_library_version @ "//routineN) #else version = '' resultlen = 0 #endif END SUBROUTINE mp_get_library_version SUBROUTINE mp_get_processor_name(procname, resultlen) !! Get a unique specifier for the actual (as opposed to virtual) node (MPI 2.1) CHARACTER(LEN=*), INTENT(OUT) :: procname !! Name of processor INTEGER, OPTIONAL, INTENT(OUT) :: resultlen !! Length (in characters) of procname (INTEGER) #if defined(__parallel) INTEGER :: namelen, ierr CALL mpi_get_processor_name(procname, namelen, ierr) IF (ierr .EQ. 0) THEN IF (PRESENT(resultlen)) resultlen = namelen ELSE #endif CALL m_hostnm(procname) IF (PRESENT(resultlen)) resultlen = LEN_TRIM(procname) #if defined(__parallel) END IF #endif END SUBROUTINE mp_get_processor_name SUBROUTINE mp_file_open(groupid, fh, filepath, amode_status, info) !! Opens a file !! !! MPI-I/O mapping mpi_file_open !! !! STREAM-I/O mapping OPEN TYPE(mp_comm_type), INTENT(IN) :: groupid !! message passing environment identifier TYPE(mp_file_type), INTENT(OUT) :: fh !! file handle (file storage unit) CHARACTER(LEN=*), INTENT(IN) :: filepath !! path to the file INTEGER, INTENT(IN) :: amode_status !! access mode TYPE(mp_info_type), INTENT(IN), OPTIONAL :: info !! info object INTEGER :: ierr, istat #if defined(__parallel) MPI_INFO_TYPE :: my_info #else CHARACTER(LEN=10) :: fstatus, fposition INTEGER :: amode, file_handle LOGICAL :: exists, is_open #endif ierr = 0 istat = 0 #if defined(__parallel) my_info = mpi_info_null IF (PRESENT(info)) my_info = info%handle CALL mpi_file_open(groupid%handle, filepath, amode_status, my_info, fh%handle, ierr) CALL mpi_file_set_errhandler(fh%handle, MPI_ERRORS_RETURN, ierr) IF (ierr .NE. 0) CALL mp_stop(ierr, "mpi_file_set_errhandler @ mp_file_open") #else MARK_USED(groupid) MARK_USED(info) amode = amode_status IF (amode .GT. file_amode_append) THEN fposition = "APPEND" amode = amode - file_amode_append ELSE fposition = "REWIND" END IF IF ((amode .EQ. file_amode_create) .OR. & (amode .EQ. file_amode_create + file_amode_wronly) .OR. & (amode .EQ. file_amode_create + file_amode_wronly + file_amode_excl)) THEN fstatus = "UNKNOWN" ELSE fstatus = "OLD" END IF ! Get a new unit number DO file_handle = 1, 999 INQUIRE (UNIT=file_handle, EXIST=exists, OPENED=is_open, IOSTAT=istat) IF (exists .AND. (.NOT. is_open) .AND. (istat == 0)) EXIT END DO fh%handle = file_handle OPEN (UNIT=fh%handle, FILE=filepath, STATUS=fstatus, ACCESS="STREAM", POSITION=fposition) #endif END SUBROUTINE mp_file_open SUBROUTINE mp_file_delete(filepath, info) !! Deletes a file. Auxiliary routine to emulate 'replace' action for mp_file_open. !! Only the master processor should call this routine. CHARACTER(LEN=*), INTENT(IN) :: filepath !! path to the file TYPE(mp_info_type), INTENT(IN), OPTIONAL :: info !! info object #if defined(__parallel) INTEGER :: ierr MPI_INFO_TYPE :: my_info LOGICAL :: exists #endif #if defined(__parallel) ierr = 0 my_info = mpi_info_null IF (PRESENT(info)) my_info = info%handle INQUIRE (FILE=filepath, EXIST=exists) IF (exists) CALL mpi_file_delete(filepath, my_info, ierr) IF (ierr .NE. 0) CALL mp_stop(ierr, "mpi_file_set_errhandler @ mp_file_delete") #else MARK_USED(filepath) MARK_USED(info) ! Explicit file delete not necessary, handled by subsequent call to open_file with action 'replace' #endif END SUBROUTINE mp_file_delete SUBROUTINE mp_file_close(fh) !! Closes a file !! !! MPI-I/O mapping mpi_file_close !! !! STREAM-I/O mapping CLOSE TYPE(mp_file_type), INTENT(INOUT) :: fh !! file handle (file storage unit) INTEGER :: ierr ierr = 0 #if defined(__parallel) CALL mpi_file_set_errhandler(fh%handle, MPI_ERRORS_RETURN, ierr) CALL mpi_file_close(fh%handle, ierr) IF (ierr .NE. 0) CALL mp_stop(ierr, "mpi_file_set_errhandler @ mp_file_close") #else CLOSE (fh%handle) #endif END SUBROUTINE mp_file_close SUBROUTINE mp_file_get_size(fh, file_size) !! Returns the file size !! !! MPI-I/O mapping mpi_file_get_size !! !! STREAM-I/O mapping INQUIRE TYPE(mp_file_type), INTENT(IN) :: fh !! file handle (file storage unit) INTEGER(kind=file_offset), INTENT(OUT) :: file_size !! the file size INTEGER :: ierr ierr = 0 #if defined(__parallel) CALL mpi_file_set_errhandler(fh%handle, MPI_ERRORS_RETURN, ierr) CALL mpi_file_get_size(fh%handle, file_size, ierr) IF (ierr .NE. 0) CALL mp_stop(ierr, "mpi_file_set_errhandler @ mp_file_get_size") #else INQUIRE (UNIT=fh%handle, SIZE=file_size) #endif END SUBROUTINE mp_file_get_size SUBROUTINE mp_file_get_position(fh, pos) !! Returns the file position !! !! MPI-I/O mapping mpi_file_get_position !! !! STREAM-I/O mapping INQUIRE TYPE(mp_file_type), INTENT(IN) :: fh !! file handle (file storage unit) INTEGER(kind=file_offset), INTENT(OUT) :: pos !! the file position INTEGER :: ierr ierr = 0 #if defined(__parallel) CALL mpi_file_set_errhandler(fh%handle, MPI_ERRORS_RETURN, ierr) CALL mpi_file_get_position(fh%handle, pos, ierr) IF (ierr .NE. 0) CALL mp_stop(ierr, "mpi_file_set_errhandler @ mp_file_get_position") #else INQUIRE (UNIT=fh%handle, POS=pos) #endif END SUBROUTINE mp_file_get_position SUBROUTINE mp_file_write_at_ch(fh, offset, msg) CHARACTER(LEN=*), INTENT(IN) :: msg TYPE(mp_file_type), INTENT(IN) :: fh INTEGER(kind=file_offset), INTENT(IN) :: offset #if defined(__parallel) CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_write_at_ch' INTEGER :: ierr CALL MPI_FILE_WRITE_AT(fh%handle, offset, msg, LEN(msg), MPI_CHARACTER, MPI_STATUS_IGNORE, ierr) IF (ierr .NE. 0) & DBCSR_ABORT("mpi_file_write_at_ch @ "//routineN) #else WRITE (UNIT=fh%handle, POS=offset + 1) msg #endif END SUBROUTINE mp_file_write_at_ch SUBROUTINE mp_file_write_at_all_ch(fh, offset, msg) CHARACTER(LEN=*), INTENT(IN) :: msg TYPE(mp_file_type), INTENT(IN) :: fh INTEGER(kind=file_offset), INTENT(IN) :: offset #if defined(__parallel) CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_write_at_all_ch' INTEGER :: ierr CALL MPI_FILE_WRITE_AT_ALL(fh%handle, offset, msg, LEN(msg), MPI_CHARACTER, MPI_STATUS_IGNORE, ierr) IF (ierr .NE. 0) & DBCSR_ABORT("mpi_file_write_at_all_ch @ "//routineN) #else WRITE (UNIT=fh%handle, POS=offset + 1) msg #endif END SUBROUTINE mp_file_write_at_all_ch SUBROUTINE mp_file_read_at_all_ch(fh, offset, msg) CHARACTER(LEN=*), INTENT(OUT) :: msg TYPE(mp_file_type), INTENT(IN) :: fh INTEGER(kind=file_offset), INTENT(IN) :: offset #if defined(__parallel) CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_read_at_all_ch' INTEGER :: ierr CALL MPI_FILE_READ_AT_ALL(fh%handle, offset, msg, LEN(msg), MPI_CHARACTER, MPI_STATUS_IGNORE, ierr) IF (ierr .NE. 0) & DBCSR_ABORT("mpi_file_read_at_all_ch @ "//routineN) #else READ (UNIT=fh%handle, POS=offset + 1) msg #endif END SUBROUTINE mp_file_read_at_all_ch SUBROUTINE mp_type_size(type_descriptor, type_size) !! Returns the size of a data type in bytes !! !! MPI mapping !! mpi_type_size TYPE(mp_type_descriptor_type), INTENT(IN) :: type_descriptor !! data type INTEGER, INTENT(OUT) :: type_size !! size of the data type #if defined(__parallel) CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_type_size' INTEGER :: ierr ierr = 0 CALL MPI_TYPE_SIZE(type_descriptor%type_handle, type_size, ierr) IF (ierr .NE. 0) & DBCSR_ABORT("mpi_type_size @ "//routineN) #else SELECT CASE (type_descriptor%type_handle) CASE (1) type_size = real_4_size CASE (3) type_size = real_8_size CASE (5) type_size = 2*real_4_size CASE (7) type_size = 2*real_8_size END SELECT #endif END SUBROUTINE mp_type_size FUNCTION mp_type_make_struct(subtypes, & vector_descriptor, index_descriptor) & RESULT(type_descriptor) TYPE(mp_type_descriptor_type), & DIMENSION(:), INTENT(IN) :: subtypes INTEGER, DIMENSION(2), INTENT(IN), & OPTIONAL :: vector_descriptor TYPE(mp_indexing_meta_type), & INTENT(IN), OPTIONAL :: index_descriptor TYPE(mp_type_descriptor_type) :: type_descriptor CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_type_make_struct' INTEGER :: i, ierr, n #if defined(__parallel) INTEGER(kind=mpi_address_kind), & ALLOCATABLE, DIMENSION(:) :: displacements #endif INTEGER, DIMENSION(SIZE(subtypes)) :: lengths MPI_DATA_TYPE, DIMENSION(SIZE(subtypes)) :: old_types ierr = 0 n = SIZE(subtypes) !type_descriptor%mpi_type_handle = MPI_DATATYPE_NULL type_descriptor%length = 1 #if defined(__parallel) CALL mpi_get_address(MPI_BOTTOM, type_descriptor%base, ierr) IF (ierr /= 0) & DBCSR_ABORT("MPI_get_address @ "//routineN) ALLOCATE (displacements(n)) #endif type_descriptor%vector_descriptor(1:2) = 1 type_descriptor%has_indexing = .FALSE. ALLOCATE (type_descriptor%subtype(n)) type_descriptor%subtype(:) = subtypes(:) DO i = 1, SIZE(subtypes) #if defined(__parallel) displacements(i) = subtypes(i)%base #endif old_types(i) = subtypes(i)%type_handle lengths(i) = subtypes(i)%length END DO #if defined(__parallel) CALL MPI_Type_create_struct(n, & lengths, displacements, old_types, & type_descriptor%type_handle, ierr) IF (ierr /= 0) & DBCSR_ABORT("MPI_Type_create_struct @ "//routineN) CALL MPI_Type_commit(type_descriptor%type_handle, ierr) IF (ierr /= 0) & DBCSR_ABORT("MPI_Type_commit @ "//routineN) #endif IF (PRESENT(vector_descriptor) .OR. PRESENT(index_descriptor)) THEN DBCSR_ABORT(routineN//" Vectors and indices NYI") END IF END FUNCTION mp_type_make_struct RECURSIVE SUBROUTINE mp_type_free_m(type_descriptor) TYPE(mp_type_descriptor_type), INTENT(inout) :: type_descriptor CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_type_free_m' INTEGER :: handle, i, ierr CALL timeset(routineN, handle) ierr = 0 ! If the subtype is associated, then it's a user-defined data type. IF (ASSOCIATED(type_descriptor%subtype)) THEN DO i = 1, SIZE(type_descriptor%subtype) CALL mp_type_free_m(type_descriptor%subtype(i)) END DO DEALLOCATE (type_descriptor%subtype) END IF #if defined(__parallel) CALL MPI_Type_free(type_descriptor%type_handle, ierr) IF (ierr /= 0) & DBCSR_ABORT("MPI_Type_free @ "//routineN) #endif CALL timestop(handle) END SUBROUTINE mp_type_free_m SUBROUTINE mp_isend_custom(msgin, dest, comm, request, tag) !! Non-blocking send of custom type TYPE(mp_type_descriptor_type), INTENT(IN) :: msgin INTEGER, INTENT(IN) :: dest TYPE(mp_comm_type), INTENT(IN) :: comm TYPE(mp_request_type), INTENT(out) :: request INTEGER, INTENT(in), OPTIONAL :: tag INTEGER :: ierr #if defined(__parallel) CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isend_custom' INTEGER :: my_tag my_tag = 0 IF (PRESENT(tag)) my_tag = tag ierr = 0 CALL mpi_isend(MPI_BOTTOM, 1, msgin%type_handle, dest, my_tag, & comm%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_isend @ "//routineN) #else MARK_USED(msgin) MARK_USED(dest) MARK_USED(comm) MARK_USED(request) MARK_USED(tag) ierr = 1 request = mp_request_null CALL mp_stop(ierr, "mp_isend called in non parallel case") #endif END SUBROUTINE mp_isend_custom SUBROUTINE mp_irecv_custom(msgout, source, comm, request, tag) !! Non-blocking receive of vector data TYPE(mp_type_descriptor_type), INTENT(INOUT) :: msgout INTEGER, INTENT(IN) :: source TYPE(mp_comm_type), INTENT(IN) :: comm TYPE(mp_request_type), INTENT(out) :: request INTEGER, INTENT(in), OPTIONAL :: tag INTEGER :: ierr #if defined(__parallel) CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_irecv_custom' INTEGER :: my_tag ierr = 0 my_tag = 0 IF (PRESENT(tag)) my_tag = tag CALL mpi_irecv(MPI_BOTTOM, 1, msgout%type_handle, source, my_tag, & comm%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_irecv @ "//routineN) #else MARK_USED(msgout) MARK_USED(source) MARK_USED(comm) MARK_USED(request) MARK_USED(tag) ierr = 1 request = mp_request_null DBCSR_ABORT("mp_irecv called in non parallel case") #endif END SUBROUTINE mp_irecv_custom SUBROUTINE mp_win_free(win) !! Window free TYPE(mp_win_type), INTENT(INOUT) :: win CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_win_free' INTEGER :: handle, ierr ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mpi_win_free(win%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_win_free @ "//routineN) #else MARK_USED(win) win = mp_win_null #endif CALL timestop(handle) END SUBROUTINE mp_win_free SUBROUTINE mp_win_flush_all(win) !! Window flush TYPE(mp_win_type), INTENT(IN) :: win CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_win_flush_all' INTEGER :: handle, ierr ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mpi_win_flush_all(win%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_win_flush_all @ "//routineN) #else MARK_USED(win) #endif CALL timestop(handle) END SUBROUTINE mp_win_flush_all SUBROUTINE mp_win_lock_all(win) !! Window lock TYPE(mp_win_type), INTENT(INOUT) :: win CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_win_lock_all' INTEGER :: handle, ierr ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mpi_win_lock_all(MPI_MODE_NOCHECK, win%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_win_lock_all @ "//routineN) #else MARK_USED(win) #endif CALL timestop(handle) END SUBROUTINE mp_win_lock_all SUBROUTINE mp_win_unlock_all(win) !! Window lock TYPE(mp_win_type), INTENT(INOUT) :: win CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_win_unlock_all' INTEGER :: handle, ierr ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mpi_win_unlock_all(win%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_win_unlock_all @ "//routineN) #else MARK_USED(win) #endif CALL timestop(handle) END SUBROUTINE mp_win_unlock_all #:for nametype1, type1, mpi_type1, mpi_2type1, kind1, bytes1, handle1, zero1, one1 in inst_params SUBROUTINE mp_alltoall_${nametype1}$11v(sb, scount, sdispl, rb, rcount, rdispl, group) !! All-to-all data exchange, rank-1 data of different sizes !! !! MPI mapping !! mpi_alltoallv !! !! Array sizes !! The scount, rcount, and the sdispl and rdispl arrays have a !! size equal to the number of processes. !! !! Offsets !! Values in sdispl and rdispl start with 0. ${type1}$, CONTIGUOUS, INTENT(IN) :: sb(:) !! Data to send INTEGER, CONTIGUOUS, INTENT(IN) :: scount(:), sdispl(:) !! Data counts for data sent to other processes !! Respective data offsets for data sent to process ${type1}$, CONTIGUOUS, INTENT(INOUT) :: rb(:) !! Buffer into which to receive data INTEGER, CONTIGUOUS, INTENT(IN) :: rcount(:), rdispl(:) !! Data counts for data received from other processes !! Respective data offsets for data received from other processes TYPE(mp_comm_type), INTENT(IN) :: group !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_alltoall_${nametype1}$11v' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen #else INTEGER :: i #endif CALL timeset(routineN, handle) ierr = 0 #if defined(__parallel) CALL mpi_alltoallv(sb, scount, sdispl, ${mpi_type1}$, & rb, rcount, rdispl, ${mpi_type1}$, group%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_alltoallv @ "//routineN) msglen = SUM(scount) + SUM(rcount) CALL add_perf(perf_id=6, msg_size=msglen*${bytes1}$) #else MARK_USED(group) MARK_USED(scount) MARK_USED(sdispl) !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(i) SHARED(rcount,rdispl,sdispl,rb,sb) DO i = 1, rcount(1) rb(rdispl(1) + i) = sb(sdispl(1) + i) END DO #endif CALL timestop(handle) END SUBROUTINE mp_alltoall_${nametype1}$11v SUBROUTINE mp_alltoall_${nametype1}$ (sb, rb, count, group) !! All-to-all data exchange, rank 1 arrays, equal sizes !! !! Index meaning !! !! The first two indices specify the data while the last index counts !! the processes !! !! Sizes of ranks !! All processes have the same data size. !! !! MPI mapping !! mpi_alltoall ${type1}$, CONTIGUOUS, INTENT(IN) :: sb(:) !! array with data to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: rb(:) !! array into which data is received INTEGER, INTENT(IN) :: count !! number of elements to send/receive (product of the extents of the first two dimensions) TYPE(mp_comm_type), INTENT(IN) :: group !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_alltoall_${nametype1}$' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen, np #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mpi_alltoall(sb, count, ${mpi_type1}$, & rb, count, ${mpi_type1}$, group%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_alltoall @ "//routineN) CALL mpi_comm_size(group%handle, np, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_size @ "//routineN) msglen = 2*count*np CALL add_perf(perf_id=6, msg_size=msglen*${bytes1}$) #else MARK_USED(count) MARK_USED(group) rb = sb #endif CALL timestop(handle) END SUBROUTINE mp_alltoall_${nametype1}$ SUBROUTINE mp_alltoall_${nametype1}$22(sb, rb, count, group) !! All-to-all data exchange, rank-2 arrays, equal sizes !! @note !! see mp_alltoall_${nametype1}$ !! @endnote ${type1}$, CONTIGUOUS, INTENT(IN) :: sb(:, :) ${type1}$, CONTIGUOUS, INTENT(OUT) :: rb(:, :) INTEGER, INTENT(IN) :: count TYPE(mp_comm_type), INTENT(IN) :: group CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_alltoall_${nametype1}$22' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen, np #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mpi_alltoall(sb, count, ${mpi_type1}$, & rb, count, ${mpi_type1}$, group%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_alltoall @ "//routineN) CALL mpi_comm_size(group%handle, np, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_size @ "//routineN) msglen = 2*SIZE(sb)*np CALL add_perf(perf_id=6, msg_size=msglen*${bytes1}$) #else MARK_USED(count) MARK_USED(group) rb = sb #endif CALL timestop(handle) END SUBROUTINE mp_alltoall_${nametype1}$22 SUBROUTINE mp_alltoall_${nametype1}$44(sb, rb, count, group) !! All-to-all data exchange, rank 4 data, equal sizes !! @note !! see mp_alltoall_${nametype1}$ !! @endnote ${type1}$, DIMENSION(:, :, :, :), CONTIGUOUS, & INTENT(IN) :: sb ${type1}$, DIMENSION(:, :, :, :), CONTIGUOUS, & INTENT(OUT) :: rb INTEGER, INTENT(IN) :: count TYPE(mp_comm_type), INTENT(IN) :: group CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_alltoall_${nametype1}$44' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen, np #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mpi_alltoall(sb, count, ${mpi_type1}$, & rb, count, ${mpi_type1}$, group%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_alltoall @ "//routineN) CALL mpi_comm_size(group%handle, np, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_size @ "//routineN) msglen = 2*count*np CALL add_perf(perf_id=6, msg_size=msglen*${bytes1}$) #else MARK_USED(count) MARK_USED(group) rb = sb #endif CALL timestop(handle) END SUBROUTINE mp_alltoall_${nametype1}$44 SUBROUTINE mp_send_${nametype1}$ (msg, dest, tag, gid) !! Send one datum to another process !! !! MPI mapping !! mpi_send ${type1}$ :: msg !! Scalar to send INTEGER :: dest, tag !! Destination process !! Transfer identifier TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_send_${nametype1}$' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = 1 #if defined(__parallel) CALL mpi_send(msg, msglen, ${mpi_type1}$, dest, tag, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_send @ "//routineN) CALL add_perf(perf_id=13, msg_size=msglen*${bytes1}$) #else MARK_USED(msg) MARK_USED(dest) MARK_USED(tag) MARK_USED(gid) ! only defined in parallel DBCSR_ABORT("not in parallel mode") #endif CALL timestop(handle) END SUBROUTINE mp_send_${nametype1}$ SUBROUTINE mp_send_${nametype1}$v(msg, dest, tag, gid) !! Send rank-1 data to another process !! @note !! see mp_send_${nametype1}$ !! @endnote ${type1}$, CONTIGUOUS :: msg(:) !! Rank-1 data to send INTEGER :: dest, tag TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_send_${nametype1}$v' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) CALL mpi_send(msg, msglen, ${mpi_type1}$, dest, tag, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_send @ "//routineN) CALL add_perf(perf_id=13, msg_size=msglen*${bytes1}$) #else MARK_USED(msg) MARK_USED(dest) MARK_USED(tag) MARK_USED(gid) ! only defined in parallel DBCSR_ABORT("not in parallel mode") #endif CALL timestop(handle) END SUBROUTINE mp_send_${nametype1}$v SUBROUTINE mp_recv_${nametype1}$ (msg, source, tag, gid) !! Receive one datum from another process !! !! MPI mapping !! mpi_send ${type1}$, INTENT(INOUT) :: msg !! Place received data into this variable INTEGER, INTENT(INOUT) :: source, tag !! Process to receive from !! Transfer identifier TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_recv_${nametype1}$' INTEGER :: handle, ierr, msglen #if defined(__parallel) MPI_STATUS_TYPE :: status #endif ierr = 0 CALL timeset(routineN, handle) msglen = 1 #if defined(__parallel) CALL mpi_recv(msg, msglen, ${mpi_type1}$, source, tag, gid%handle, status, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_recv @ "//routineN) CALL add_perf(perf_id=14, msg_size=msglen*${bytes1}$) source = status MPI_STATUS_EXTRACT(MPI_SOURCE) tag = status MPI_STATUS_EXTRACT(MPI_TAG) #else MARK_USED(msg) MARK_USED(source) MARK_USED(tag) MARK_USED(gid) ! only defined in parallel DBCSR_ABORT("not in parallel mode") #endif CALL timestop(handle) END SUBROUTINE mp_recv_${nametype1}$ SUBROUTINE mp_recv_${nametype1}$v(msg, source, tag, gid) !! Receive rank-1 data from another process !! @note !! see mp_recv_${nametype1}$ !! @endnote ${type1}$, CONTIGUOUS, INTENT(INOUT) :: msg(:) !! Place received data into this rank-1 array INTEGER, INTENT(INOUT) :: source, tag TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_recv_${nametype1}$v' INTEGER :: handle, ierr, msglen #if defined(__parallel) MPI_STATUS_TYPE :: status #endif ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) CALL mpi_recv(msg, msglen, ${mpi_type1}$, source, tag, gid%handle, status, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_recv @ "//routineN) CALL add_perf(perf_id=14, msg_size=msglen*${bytes1}$) source = status MPI_STATUS_EXTRACT(MPI_SOURCE) tag = status MPI_STATUS_EXTRACT(MPI_TAG) #else MARK_USED(msg) MARK_USED(source) MARK_USED(tag) MARK_USED(gid) ! only defined in parallel DBCSR_ABORT("not in parallel mode") #endif CALL timestop(handle) END SUBROUTINE mp_recv_${nametype1}$v SUBROUTINE mp_bcast_${nametype1}$ (msg, source, gid) !! Broadcasts a datum to all processes. !! !! MPI mapping !! mpi_bcast ${type1}$ :: msg !! Datum to broadcast INTEGER :: source !! Processes which broadcasts TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_${nametype1}$' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = 1 #if defined(__parallel) CALL mpi_bcast(msg, msglen, ${mpi_type1}$, source, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_bcast @ "//routineN) CALL add_perf(perf_id=2, msg_size=msglen*${bytes1}$) #else MARK_USED(msg) MARK_USED(source) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_bcast_${nametype1}$ SUBROUTINE mp_ibcast_${nametype1}$ (msg, source, gid, request) !! Broadcasts a datum to all processes. !! !! MPI mapping !! mpi_bcast ${type1}$ :: msg !! Datum to broadcast INTEGER :: source !! Processes which broadcasts TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier TYPE(mp_request_type), INTENT(INOUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_ibcast_${nametype1}$' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = 1 #if defined(__parallel) CALL mpi_ibcast(msg, msglen, ${mpi_type1}$, source, gid%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_ibcast @ "//routineN) CALL add_perf(perf_id=22, msg_size=msglen*${bytes1}$) #else MARK_USED(msg) MARK_USED(source) MARK_USED(gid) request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_ibcast_${nametype1}$ SUBROUTINE mp_bcast_${nametype1}$v(msg, source, gid) !! Broadcasts rank-1 data to all processes !! @note !! see mp_bcast_${nametype1}$1 !! @endnote ${type1}$, CONTIGUOUS :: msg(:) !! Data to broadcast INTEGER :: source TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_${nametype1}$v' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) CALL mpi_bcast(msg, msglen, ${mpi_type1}$, source, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_bcast @ "//routineN) CALL add_perf(perf_id=2, msg_size=msglen*${bytes1}$) #else MARK_USED(source) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_bcast_${nametype1}$v SUBROUTINE mp_ibcast_${nametype1}$v(msg, source, gid, request) !! Broadcasts rank-1 data to all processes !! @note !! see mp_bcast_${nametype1}$1 !! @endnote ${type1}$, CONTIGUOUS :: msg(:) !! Data to broadcast INTEGER :: source TYPE(mp_comm_type), INTENT(IN) :: gid TYPE(mp_request_type), INTENT(INOUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_ibcast_${nametype1}$v' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) CALL mpi_ibcast(msg, msglen, ${mpi_type1}$, source, gid%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_ibcast @ "//routineN) CALL add_perf(perf_id=22, msg_size=msglen*${bytes1}$) #else MARK_USED(source) MARK_USED(gid) request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_ibcast_${nametype1}$v SUBROUTINE mp_bcast_${nametype1}$m(msg, source, gid) !! Broadcasts rank-2 data to all processes !! @note !! see mp_bcast_${nametype1}$1 !! @endnote ${type1}$, CONTIGUOUS :: msg(:, :) !! Data to broadcast INTEGER :: source TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_im' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) CALL mpi_bcast(msg, msglen, ${mpi_type1}$, source, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_bcast @ "//routineN) CALL add_perf(perf_id=2, msg_size=msglen*${bytes1}$) #else MARK_USED(source) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_bcast_${nametype1}$m SUBROUTINE mp_bcast_${nametype1}$3(msg, source, gid) !! Broadcasts rank-3 data to all processes !! @note !! see mp_bcast_${nametype1}$1 !! @endnote ${type1}$, CONTIGUOUS :: msg(:, :, :) !! Data to broadcast INTEGER :: source TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_${nametype1}$3' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) CALL mpi_bcast(msg, msglen, ${mpi_type1}$, source, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_bcast @ "//routineN) CALL add_perf(perf_id=2, msg_size=msglen*${bytes1}$) #else MARK_USED(source) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_bcast_${nametype1}$3 SUBROUTINE mp_sum_${nametype1}$ (msg, gid) !! Sums a datum from all processes with result left on all processes. !! !! MPI mapping !! mpi_allreduce ${type1}$, INTENT(INOUT) :: msg !! Datum to sum (input) and result (output) TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_${nametype1}$' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = 1 #if defined(__parallel) CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_SUM, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allreduce @ "//routineN) CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$) #else MARK_USED(msg) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_sum_${nametype1}$ SUBROUTINE mp_sum_${nametype1}$v(msg, gid) !! Element-wise sum of a rank-1 array on all processes. !! @note !! see mp_sum_${nametype1}$ !! @endnote ${type1}$, CONTIGUOUS, INTENT(INOUT) :: msg(:) !! Vector to sum and result TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_${nametype1}$v' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) msglen = SIZE(msg) IF (msglen > 0) THEN CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_SUM, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allreduce @ "//routineN) END IF CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$) #else MARK_USED(msg) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_sum_${nametype1}$v SUBROUTINE mp_isum_${nametype1}$v(msg, gid, request) !! Element-wise sum of a rank-1 array on all processes. !! @note !! see mp_sum_${nametype1}$ !! @endnote ${type1}$, CONTIGUOUS, INTENT(INOUT) :: msg(:) !! Vector to sum and result TYPE(mp_comm_type), INTENT(IN) :: gid TYPE(mp_request_type), INTENT(INOUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isum_${nametype1}$v' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) msglen = SIZE(msg) IF (msglen > 0) THEN CALL mpi_iallreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_SUM, gid%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_iallreduce @ "//routineN) ELSE request = mp_request_null END IF CALL add_perf(perf_id=23, msg_size=msglen*${bytes1}$) #else MARK_USED(msg) MARK_USED(gid) request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_isum_${nametype1}$v SUBROUTINE mp_sum_${nametype1}$m(msg, gid) !! Element-wise sum of a rank-2 array on all processes. !! @note !! see mp_sum_${nametype1}$ !! @endnote ${type1}$, CONTIGUOUS, INTENT(INOUT) :: msg(:, :) !! Matrix to sum and result TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_${nametype1}$m' INTEGER :: handle, ierr #if defined(__parallel) INTEGER, PARAMETER :: max_msg = 2**25 INTEGER :: m1, msglen, step, msglensum #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) ! chunk up the call so that message sizes are limited, to avoid overflows in mpich triggered in large rpa calcs step = MAX(1, SIZE(msg, 2)/MAX(1, SIZE(msg)/max_msg)) msglensum = 0 DO m1 = LBOUND(msg, 2), UBOUND(msg, 2), step msglen = SIZE(msg, 1)*(MIN(UBOUND(msg, 2), m1 + step - 1) - m1 + 1) msglensum = msglensum + msglen IF (msglen > 0) THEN CALL mpi_allreduce(MPI_IN_PLACE, msg(LBOUND(msg, 1), m1), msglen, ${mpi_type1}$, MPI_SUM, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allreduce @ "//routineN) END IF END DO CALL add_perf(perf_id=3, msg_size=msglensum*${bytes1}$) #else MARK_USED(msg) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_sum_${nametype1}$m SUBROUTINE mp_sum_${nametype1}$m3(msg, gid) !! Element-wise sum of a rank-3 array on all processes. !! @note !! see mp_sum_${nametype1}$ !! @endnote ${type1}$, CONTIGUOUS, INTENT(INOUT) :: msg(:, :, :) !! Array to sum and result TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_${nametype1}$m3' INTEGER :: handle, ierr, & msglen ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) IF (msglen > 0) THEN CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_SUM, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allreduce @ "//routineN) END IF CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$) #else MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_sum_${nametype1}$m3 SUBROUTINE mp_sum_${nametype1}$m4(msg, gid) !! Element-wise sum of a rank-4 array on all processes. !! @note !! see mp_sum_${nametype1}$ !! @endnote ${type1}$, CONTIGUOUS, INTENT(INOUT) :: msg(:, :, :, :) !! Array to sum and result TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_${nametype1}$m4' INTEGER :: handle, ierr, & msglen ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) IF (msglen > 0) THEN CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_SUM, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allreduce @ "//routineN) END IF CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$) #else MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_sum_${nametype1}$m4 SUBROUTINE mp_sum_root_${nametype1}$v(msg, root, gid) !! Element-wise sum of data from all processes with result left only on !! one. !! !! MPI mapping !! mpi_reduce ${type1}$, CONTIGUOUS, INTENT(INOUT) :: msg(:) !! Vector to sum (input) and (only on process root) result (output) INTEGER, INTENT(IN) :: root TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_root_${nametype1}$v' INTEGER :: handle, ierr, msglen #if defined(__parallel) INTEGER :: m1, taskid ${type1}$, ALLOCATABLE :: res(:) #endif ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) CALL mpi_comm_rank(gid%handle, taskid, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_rank @ "//routineN) IF (msglen > 0) THEN m1 = SIZE(msg, 1) ALLOCATE (res(m1)) CALL mpi_reduce(msg, res, msglen, ${mpi_type1}$, MPI_SUM, & root, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_reduce @ "//routineN) IF (taskid == root) THEN msg = res END IF DEALLOCATE (res) END IF CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$) #else MARK_USED(root) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_sum_root_${nametype1}$v SUBROUTINE mp_sum_root_${nametype1}$m(msg, root, gid) !! Element-wise sum of data from all processes with result left only on !! one. !! @note !! see mp_sum_root_${nametype1}$v !! @endnote ${type1}$, CONTIGUOUS, INTENT(INOUT) :: msg(:, :) !! Matrix to sum (input) and (only on process root) result (output) INTEGER, INTENT(IN) :: root TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_root_rm' INTEGER :: handle, ierr, msglen #if defined(__parallel) INTEGER :: m1, m2, taskid ${type1}$, ALLOCATABLE :: res(:, :) #endif ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) CALL mpi_comm_rank(gid%handle, taskid, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_rank @ "//routineN) IF (msglen > 0) THEN m1 = SIZE(msg, 1) m2 = SIZE(msg, 2) ALLOCATE (res(m1, m2)) CALL mpi_reduce(msg, res, msglen, ${mpi_type1}$, MPI_SUM, root, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_reduce @ "//routineN) IF (taskid == root) THEN msg = res END IF DEALLOCATE (res) END IF CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$) #else MARK_USED(root) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_sum_root_${nametype1}$m SUBROUTINE mp_sum_partial_${nametype1}$m(msg, res, gid) !! Partial sum of data from all processes with result on each process. ${type1}$, CONTIGUOUS, INTENT(IN) :: msg(:, :) !! Matrix to sum (input) ${type1}$, CONTIGUOUS, INTENT(OUT) :: res(:, :) !! Matrix containing result (output) TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_partial_${nametype1}$m' INTEGER :: handle, ierr, msglen #if defined(__parallel) INTEGER :: taskid #endif ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) CALL mpi_comm_rank(gid%handle, taskid, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_rank @ "//routineN) IF (msglen > 0) THEN CALL mpi_scan(msg, res, msglen, ${mpi_type1}$, MPI_SUM, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_scan @ "//routineN) END IF CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$) ! perf_id is same as for other summation routines #else res = msg MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_sum_partial_${nametype1}$m SUBROUTINE mp_max_${nametype1}$ (msg, gid) !! Finds the maximum of a datum with the result left on all processes. !! !! MPI mapping !! mpi_allreduce ${type1}$, INTENT(INOUT) :: msg !! Find maximum among these data (input) and maximum (output) TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_max_${nametype1}$' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = 1 #if defined(__parallel) CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_MAX, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allreduce @ "//routineN) CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$) #else MARK_USED(msg) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_max_${nametype1}$ SUBROUTINE mp_max_${nametype1}$v(msg, gid) !! Finds the element-wise maximum of a vector with the result left on !! all processes. !! @note !! see mp_max_${nametype1}$ !! @endnote ${type1}$, CONTIGUOUS, INTENT(INOUT) :: msg(:) !! Find maximum among these data (input) and maximum (output) TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_max_${nametype1}$v' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_MAX, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allreduce @ "//routineN) CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$) #else MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_max_${nametype1}$v SUBROUTINE mp_min_${nametype1}$ (msg, gid) !! Finds the minimum of a datum with the result left on all processes. !! !! MPI mapping !! mpi_allreduce ${type1}$, INTENT(INOUT) :: msg !! Find minimum among these data (input) and maximum (output) TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_min_${nametype1}$' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = 1 #if defined(__parallel) CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_MIN, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allreduce @ "//routineN) CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$) #else MARK_USED(msg) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_min_${nametype1}$ SUBROUTINE mp_min_${nametype1}$v(msg, gid) !! Finds the element-wise minimum of vector with the result left on !! all processes. !! !! MPI mapping !! mpi_allreduce !! @note !! see mp_min_${nametype1}$ !! @endnote ${type1}$, CONTIGUOUS, INTENT(INOUT) :: msg(:) !! Find minimum among these data (input) and maximum (output) TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_min_${nametype1}$v' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_MIN, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allreduce @ "//routineN) CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$) #else MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_min_${nametype1}$v SUBROUTINE mp_prod_${nametype1}$ (msg, gid) !! Multiplies a set of numbers scattered across a number of processes, !! then replicates the result. !! !! MPI mapping !! mpi_allreduce ${type1}$, INTENT(INOUT) :: msg !! a number to multiply (input) and result (output) TYPE(mp_comm_type), INTENT(IN) :: gid !! message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_${nametype1}$' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = 1 #if defined(__parallel) CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_PROD, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allreduce @ "//routineN) CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$) #else MARK_USED(msg) MARK_USED(gid) #endif CALL timestop(handle) END SUBROUTINE mp_prod_${nametype1}$ SUBROUTINE mp_iscatter_${nametype1}$ (msg_scatter, msg, root, gid, request) !! Scatters data from one processes to all others !! !! MPI mapping !! mpi_scatter ${type1}$, CONTIGUOUS, INTENT(IN) :: msg_scatter(:) !! Data to scatter (for root process) ${type1}$, INTENT(INOUT) :: msg INTEGER, INTENT(IN) :: root !! Process which scatters data TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier TYPE(mp_request_type), INTENT(INOUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iscatter_${nametype1}$' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = 1 #if defined(__parallel) CALL mpi_iscatter(msg_scatter, msglen, ${mpi_type1}$, msg, & msglen, ${mpi_type1}$, root, gid%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_iscatter @ "//routineN) CALL add_perf(perf_id=24, msg_size=1*${bytes1}$) #else MARK_USED(root) MARK_USED(gid) msg = msg_scatter(1) request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_iscatter_${nametype1}$ SUBROUTINE mp_iscatter_${nametype1}$v2(msg_scatter, msg, root, gid, request) !! Scatters data from one processes to all others !! !! MPI mapping !! mpi_scatter ${type1}$, CONTIGUOUS, INTENT(IN) :: msg_scatter(:, :) !! Data to scatter (for root process) ${type1}$, CONTIGUOUS, INTENT(INOUT) :: msg(:) INTEGER, INTENT(IN) :: root !! Process which scatters data TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier TYPE(mp_request_type), INTENT(INOUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iscatter_${nametype1}$v2' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) CALL mpi_iscatter(msg_scatter, msglen, ${mpi_type1}$, msg, & msglen, ${mpi_type1}$, root, gid%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_iscatter @ "//routineN) CALL add_perf(perf_id=24, msg_size=1*${bytes1}$) #else MARK_USED(root) MARK_USED(gid) msg(:) = msg_scatter(:, 1) request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_iscatter_${nametype1}$v2 SUBROUTINE mp_iscatterv_${nametype1}$v(msg_scatter, sendcounts, displs, msg, recvcount, root, gid, request) !! Scatters data from one processes to all others !! !! MPI mapping !! mpi_scatter ${type1}$, CONTIGUOUS, INTENT(IN) :: msg_scatter(:) !! Data to scatter (for root process) INTEGER, CONTIGUOUS, INTENT(IN) :: sendcounts(:), displs(:) ${type1}$, CONTIGUOUS, INTENT(INOUT) :: msg(:) INTEGER, INTENT(IN) :: recvcount, root !! Process which scatters data TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier TYPE(mp_request_type), INTENT(INOUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iscatterv_${nametype1}$v' INTEGER :: handle, ierr ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mpi_iscatterv(msg_scatter, sendcounts, displs, ${mpi_type1}$, msg, & recvcount, ${mpi_type1}$, root, gid%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_iscatterv @ "//routineN) CALL add_perf(perf_id=24, msg_size=1*${bytes1}$) #else MARK_USED(sendcounts) MARK_USED(displs) MARK_USED(recvcount) MARK_USED(root) MARK_USED(gid) msg(1:recvcount) = msg_scatter(1 + displs(1):1 + displs(1) + sendcounts(1)) request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_iscatterv_${nametype1}$v SUBROUTINE mp_gather_${nametype1}$ (msg, msg_gather, root, gid) !! Gathers a datum from all processes to one !! !! MPI mapping !! mpi_gather ${type1}$, INTENT(IN) :: msg !! Datum to send to root ${type1}$, CONTIGUOUS, INTENT(OUT) :: msg_gather(:) !! Received data (on root) INTEGER, INTENT(IN) :: root !! Process which gathers the data TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_gather_${nametype1}$' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = 1 #if defined(__parallel) CALL mpi_gather(msg, msglen, ${mpi_type1}$, msg_gather, & msglen, ${mpi_type1}$, root, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_gather @ "//routineN) CALL add_perf(perf_id=4, msg_size=msglen*${bytes1}$) #else MARK_USED(root) MARK_USED(gid) msg_gather(1) = msg #endif CALL timestop(handle) END SUBROUTINE mp_gather_${nametype1}$ SUBROUTINE mp_gather_${nametype1}$v(msg, msg_gather, root, gid) !! Gathers data from all processes to one !! !! Data length !! All data (msg) is equal-sized !! !! MPI mapping !! mpi_gather !! @note !! see mp_gather_${nametype1}$ !! @endnote ${type1}$, CONTIGUOUS, INTENT(IN) :: msg(:) !! Datum to send to root ${type1}$, CONTIGUOUS, INTENT(OUT) :: msg_gather(:) INTEGER, INTENT(IN) :: root TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_gather_${nametype1}$v' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) CALL mpi_gather(msg, msglen, ${mpi_type1}$, msg_gather, & msglen, ${mpi_type1}$, root, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_gather @ "//routineN) CALL add_perf(perf_id=4, msg_size=msglen*${bytes1}$) #else MARK_USED(root) MARK_USED(gid) msg_gather = msg #endif CALL timestop(handle) END SUBROUTINE mp_gather_${nametype1}$v SUBROUTINE mp_gather_${nametype1}$m(msg, msg_gather, root, gid) !! Gathers data from all processes to one !! !! Data length !! All data (msg) is equal-sized !! !! MPI mapping !! mpi_gather !! @note !! see mp_gather_${nametype1}$ !! @endnote ${type1}$, CONTIGUOUS, INTENT(IN) :: msg(:, :) !! Datum to send to root ${type1}$, CONTIGUOUS, INTENT(OUT) :: msg_gather(:, :) INTEGER, INTENT(IN) :: root TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_gather_${nametype1}$m' INTEGER :: handle, ierr, msglen ierr = 0 CALL timeset(routineN, handle) msglen = SIZE(msg) #if defined(__parallel) CALL mpi_gather(msg, msglen, ${mpi_type1}$, msg_gather, & msglen, ${mpi_type1}$, root, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_gather @ "//routineN) CALL add_perf(perf_id=4, msg_size=msglen*${bytes1}$) #else MARK_USED(root) MARK_USED(gid) msg_gather = msg #endif CALL timestop(handle) END SUBROUTINE mp_gather_${nametype1}$m SUBROUTINE mp_gatherv_${nametype1}$v(sendbuf, recvbuf, recvcounts, displs, root, comm) !! Gathers data from all processes to one. !! !! Data length !! Data can have different lengths !! !! Offsets !! Offsets start at 0 !! !! MPI mapping !! mpi_gather ${type1}$, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: sendbuf !! Data to send to root ${type1}$, DIMENSION(:), CONTIGUOUS, INTENT(OUT) :: recvbuf !! Received data (on root) INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: recvcounts, displs !! Sizes of data received from processes !! Offsets of data received from processes INTEGER, INTENT(IN) :: root !! Process which gathers the data TYPE(mp_comm_type), INTENT(IN) :: comm !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_gatherv_${nametype1}$v' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: sendcount #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) sendcount = SIZE(sendbuf) CALL mpi_gatherv(sendbuf, sendcount, ${mpi_type1}$, & recvbuf, recvcounts, displs, ${mpi_type1}$, & root, comm%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_gatherv @ "//routineN) CALL add_perf(perf_id=4, & msg_size=sendcount*${bytes1}$) #else MARK_USED(recvcounts) MARK_USED(root) MARK_USED(comm) recvbuf(1 + displs(1):) = sendbuf #endif CALL timestop(handle) END SUBROUTINE mp_gatherv_${nametype1}$v SUBROUTINE mp_allgather_${nametype1}$ (msgout, msgin, gid) !! Gathers a datum from all processes and all processes receive the !! same data !! !! Data size !! All processes send equal-sized data !! !! MPI mapping !! mpi_allgather ${type1}$, INTENT(IN) :: msgout !! Datum to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:) !! Received data TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allgather_${nametype1}$' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: rcount, scount #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) scount = 1 rcount = 1 CALL MPI_ALLGATHER(msgout, scount, ${mpi_type1}$, & msgin, rcount, ${mpi_type1}$, & gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allgather @ "//routineN) #else MARK_USED(gid) msgin = msgout #endif CALL timestop(handle) END SUBROUTINE mp_allgather_${nametype1}$ SUBROUTINE mp_allgather_${nametype1}$2(msgout, msgin, gid) !! Gathers a datum from all processes and all processes receive the !! same data !! !! Data size !! All processes send equal-sized data !! !! MPI mapping !! mpi_allgather ${type1}$, INTENT(IN) :: msgout !! Datum to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:, :) !! Received data TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allgather_${nametype1}$2' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: rcount, scount #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) scount = 1 rcount = 1 CALL MPI_ALLGATHER(msgout, scount, ${mpi_type1}$, & msgin, rcount, ${mpi_type1}$, & gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allgather @ "//routineN) #else MARK_USED(gid) msgin = msgout #endif CALL timestop(handle) END SUBROUTINE mp_allgather_${nametype1}$2 SUBROUTINE mp_iallgather_${nametype1}$ (msgout, msgin, gid, request) !! Gathers a datum from all processes and all processes receive the !! same data !! !! Data size !! All processes send equal-sized data !! !! MPI mapping !! mpi_allgather ${type1}$, INTENT(IN) :: msgout !! Datum to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:) !! Received data TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier TYPE(mp_request_type), INTENT(INOUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgather_${nametype1}$' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: rcount, scount #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) scount = 1 rcount = 1 CALL MPI_IALLGATHER(msgout, scount, ${mpi_type1}$, & msgin, rcount, ${mpi_type1}$, & gid%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_iallgather @ "//routineN) #else MARK_USED(gid) msgin = msgout request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_iallgather_${nametype1}$ SUBROUTINE mp_allgather_${nametype1}$12(msgout, msgin, gid) !! Gathers vector data from all processes and all processes receive the !! same data !! !! Data size !! All processes send equal-sized data !! !! Ranks !! The last rank counts the processes !! !! MPI mapping !! mpi_allgather ${type1}$, CONTIGUOUS, INTENT(IN) :: msgout(:) !! Rank-1 data to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:, :) !! Received data TYPE(mp_comm_type), INTENT(IN) :: gid !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allgather_${nametype1}$12' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: rcount, scount #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) scount = SIZE(msgout(:)) rcount = scount CALL MPI_ALLGATHER(msgout, scount, ${mpi_type1}$, & msgin, rcount, ${mpi_type1}$, & gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allgather @ "//routineN) #else MARK_USED(gid) msgin(:, 1) = msgout(:) #endif CALL timestop(handle) END SUBROUTINE mp_allgather_${nametype1}$12 SUBROUTINE mp_allgather_${nametype1}$23(msgout, msgin, gid) !! Gathers matrix data from all processes and all processes receive the !! same data !! @note !! see mp_allgather_${nametype1}$12 !! @endnote ${type1}$, CONTIGUOUS, INTENT(IN) :: msgout(:, :) !! Rank-2 data to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:, :, :) TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allgather_${nametype1}$23' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: rcount, scount #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) scount = SIZE(msgout(:, :)) rcount = scount CALL MPI_ALLGATHER(msgout, scount, ${mpi_type1}$, & msgin, rcount, ${mpi_type1}$, & gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allgather @ "//routineN) #else MARK_USED(gid) msgin(:, :, 1) = msgout(:, :) #endif CALL timestop(handle) END SUBROUTINE mp_allgather_${nametype1}$23 SUBROUTINE mp_allgather_${nametype1}$34(msgout, msgin, gid) !! Gathers rank-3 data from all processes and all processes receive the !! same data !! @note !! see mp_allgather_${nametype1}$12 !! @endnote ${type1}$, CONTIGUOUS, INTENT(IN) :: msgout(:, :, :) !! Rank-3 data to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:, :, :, :) TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allgather_${nametype1}$34' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: rcount, scount #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) scount = SIZE(msgout(:, :, :)) rcount = scount CALL MPI_ALLGATHER(msgout, scount, ${mpi_type1}$, & msgin, rcount, ${mpi_type1}$, & gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allgather @ "//routineN) #else MARK_USED(gid) msgin(:, :, :, 1) = msgout(:, :, :) #endif CALL timestop(handle) END SUBROUTINE mp_allgather_${nametype1}$34 SUBROUTINE mp_allgather_${nametype1}$22(msgout, msgin, gid) !! Gathers rank-2 data from all processes and all processes receive the !! same data !! @note !! see mp_allgather_${nametype1}$12 !! @endnote ${type1}$, CONTIGUOUS, INTENT(IN) :: msgout(:, :) !! Rank-2 data to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:, :) TYPE(mp_comm_type), INTENT(IN) :: gid CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allgather_${nametype1}$22' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: rcount, scount #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) scount = SIZE(msgout(:, :)) rcount = scount CALL MPI_ALLGATHER(msgout, scount, ${mpi_type1}$, & msgin, rcount, ${mpi_type1}$, & gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allgather @ "//routineN) #else MARK_USED(gid) msgin(:, :) = msgout(:, :) #endif CALL timestop(handle) END SUBROUTINE mp_allgather_${nametype1}$22 SUBROUTINE mp_iallgather_${nametype1}$11(msgout, msgin, gid, request) !! Gathers rank-1 data from all processes and all processes receive the !! same data !! @note !! see mp_allgather_${nametype1}$11 !! @endnote ${type1}$, CONTIGUOUS, INTENT(IN) :: msgout(:) !! Rank-1 data to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:) TYPE(mp_comm_type), INTENT(IN) :: gid TYPE(mp_request_type), INTENT(OUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgather_${nametype1}$11' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: rcount, scount #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) scount = SIZE(msgout(:)) rcount = scount CALL MPI_IALLGATHER(msgout, scount, ${mpi_type1}$, & msgin, rcount, ${mpi_type1}$, & gid%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_iallgather @ "//routineN) #else MARK_USED(gid) msgin = msgout request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_iallgather_${nametype1}$11 SUBROUTINE mp_iallgather_${nametype1}$13(msgout, msgin, gid, request) !! Gathers rank-2 data from all processes and all processes receive the !! same data !! @note !! see mp_allgather_${nametype1}$12 !! @endnote ${type1}$, CONTIGUOUS, INTENT(IN) :: msgout(:) !! Rank-2 data to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:, :, :) TYPE(mp_comm_type), INTENT(IN) :: gid TYPE(mp_request_type), INTENT(OUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgather_${nametype1}$13' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: rcount, scount #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) scount = SIZE(msgout(:)) rcount = scount CALL MPI_IALLGATHER(msgout, scount, ${mpi_type1}$, & msgin, rcount, ${mpi_type1}$, & gid%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_iallgather @ "//routineN) #else MARK_USED(gid) msgin(:, 1, 1) = msgout(:) request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_iallgather_${nametype1}$13 SUBROUTINE mp_iallgather_${nametype1}$22(msgout, msgin, gid, request) !! Gathers rank-2 data from all processes and all processes receive the !! same data !! @note !! see mp_allgather_${nametype1}$12 !! @endnote ${type1}$, CONTIGUOUS, INTENT(IN) :: msgout(:, :) !! Rank-2 data to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:, :) TYPE(mp_comm_type), INTENT(IN) :: gid TYPE(mp_request_type), INTENT(OUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgather_${nametype1}$22' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: rcount, scount #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) scount = SIZE(msgout(:, :)) rcount = scount CALL MPI_IALLGATHER(msgout, scount, ${mpi_type1}$, & msgin, rcount, ${mpi_type1}$, & gid%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_iallgather @ "//routineN) #else MARK_USED(gid) msgin(:, :) = msgout(:, :) request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_iallgather_${nametype1}$22 SUBROUTINE mp_iallgather_${nametype1}$24(msgout, msgin, gid, request) !! Gathers rank-2 data from all processes and all processes receive the !! same data !! @note !! see mp_allgather_${nametype1}$12 !! @endnote ${type1}$, CONTIGUOUS, INTENT(IN) :: msgout(:, :) !! Rank-2 data to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:, :, :, :) TYPE(mp_comm_type), INTENT(IN) :: gid TYPE(mp_request_type), INTENT(OUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgather_${nametype1}$24' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: rcount, scount #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) scount = SIZE(msgout(:, :)) rcount = scount CALL MPI_IALLGATHER(msgout, scount, ${mpi_type1}$, & msgin, rcount, ${mpi_type1}$, & gid%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_iallgather @ "//routineN) #else MARK_USED(gid) msgin(:, :, 1, 1) = msgout(:, :) request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_iallgather_${nametype1}$24 SUBROUTINE mp_iallgather_${nametype1}$33(msgout, msgin, gid, request) !! Gathers rank-3 data from all processes and all processes receive the !! same data !! @note !! see mp_allgather_${nametype1}$12 !! @endnote ${type1}$, CONTIGUOUS, INTENT(IN) :: msgout(:, :, :) !! Rank-3 data to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:, :, :) TYPE(mp_comm_type), INTENT(IN) :: gid TYPE(mp_request_type), INTENT(OUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgather_${nametype1}$33' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: rcount, scount #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) scount = SIZE(msgout(:, :, :)) rcount = scount CALL MPI_IALLGATHER(msgout, scount, ${mpi_type1}$, & msgin, rcount, ${mpi_type1}$, & gid%handle, request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_iallgather @ "//routineN) #else MARK_USED(gid) msgin(:, :, :) = msgout(:, :, :) request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_iallgather_${nametype1}$33 SUBROUTINE mp_allgatherv_${nametype1}$v(msgout, msgin, rcount, rdispl, gid) !! Gathers vector data from all processes and all processes receive the !! same data !! !! Data size !! Processes can send different-sized data !! !! Ranks !! The last rank counts the processes !! !! Offsets !! Offsets are from 0 !! !! MPI mapping !! mpi_allgather ${type1}$, CONTIGUOUS, INTENT(IN) :: msgout(:) !! Rank-1 data to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:) !! Received data INTEGER, CONTIGUOUS, INTENT(IN) :: rcount(:), rdispl(:) TYPE(mp_comm_type), INTENT(IN) :: gid !! Size of sent data for every process !! Offset of sent data for every process !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allgatherv_${nametype1}$v' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: scount #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) scount = SIZE(msgout) CALL MPI_ALLGATHERV(msgout, scount, ${mpi_type1}$, msgin, rcount, & rdispl, ${mpi_type1}$, gid%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_allgatherv @ "//routineN) #else MARK_USED(rcount) MARK_USED(rdispl) MARK_USED(gid) msgin = msgout #endif CALL timestop(handle) END SUBROUTINE mp_allgatherv_${nametype1}$v SUBROUTINE mp_iallgatherv_${nametype1}$v(msgout, msgin, rcount, rdispl, gid, request) !! Gathers vector data from all processes and all processes receive the !! same data !! !! Data size !! Processes can send different-sized data !! !! Ranks !! The last rank counts the processes !! !! Offsets !! Offsets are from 0 !! !! MPI mapping !! mpi_allgather ${type1}$, CONTIGUOUS, INTENT(IN) :: msgout(:) !! Rank-1 data to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:) !! Received data INTEGER, CONTIGUOUS, INTENT(IN) :: rcount(:), rdispl(:) TYPE(mp_comm_type), INTENT(IN) :: gid !! Size of sent data for every process !! Offset of sent data for every process !! Message passing environment identifier TYPE(mp_request_type), INTENT(INOUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgatherv_${nametype1}$v' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: scount, rsize #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) scount = SIZE(msgout) rsize = SIZE(rcount) CALL mp_iallgatherv_${nametype1}$v_internal(msgout, scount, msgin, rsize, rcount, & rdispl, gid, request, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_iallgatherv @ "//routineN) #else MARK_USED(rcount) MARK_USED(rdispl) MARK_USED(gid) msgin = msgout request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_iallgatherv_${nametype1}$v SUBROUTINE mp_iallgatherv_${nametype1}$v2(msgout, msgin, rcount, rdispl, gid, request) !! Gathers vector data from all processes and all processes receive the !! same data !! !! Data size !! Processes can send different-sized data !! !! Ranks !! The last rank counts the processes !! !! Offsets !! Offsets are from 0 !! !! MPI mapping !! mpi_allgather ${type1}$, CONTIGUOUS, INTENT(IN) :: msgout(:) !! Rank-1 data to send ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:) !! Received data INTEGER, CONTIGUOUS, INTENT(IN) :: rcount(:, :), rdispl(:, :) TYPE(mp_comm_type), INTENT(IN) :: gid !! Size of sent data for every process !! Offset of sent data for every process !! Message passing environment identifier TYPE(mp_request_type), INTENT(INOUT) :: request CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgatherv_${nametype1}$v2' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: scount, rsize #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) scount = SIZE(msgout) rsize = SIZE(rcount) CALL mp_iallgatherv_${nametype1}$v_internal(msgout, scount, msgin, rsize, rcount, & rdispl, gid, request, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_iallgatherv @ "//routineN) #else MARK_USED(rcount) MARK_USED(rdispl) MARK_USED(gid) msgin = msgout request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_iallgatherv_${nametype1}$v2 #if defined(__parallel) SUBROUTINE mp_iallgatherv_${nametype1}$v_internal(msgout, scount, msgin, rsize, rcount, rdispl, gid, request, ierr) !! wrapper needed to deal with interfaces as present in openmpi 1.8.1 !! the issue is with the rank of rcount and rdispl ${type1}$, CONTIGUOUS, INTENT(IN) :: msgout(:) ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgin(:) INTEGER, INTENT(IN) :: rsize INTEGER, INTENT(IN) :: rcount(rsize), rdispl(rsize), scount TYPE(mp_comm_type), INTENT(IN) :: gid TYPE(mp_request_type), INTENT(INOUT) :: request INTEGER, INTENT(INOUT) :: ierr CALL MPI_IALLGATHERV(msgout, scount, ${mpi_type1}$, msgin, rcount, & rdispl, ${mpi_type1}$, gid%handle, request%handle, ierr) END SUBROUTINE mp_iallgatherv_${nametype1}$v_internal #endif SUBROUTINE mp_sendrecv_${nametype1}$v(msgin, dest, msgout, source, comm) !! Sends and receives vector data ${type1}$, CONTIGUOUS, INTENT(IN) :: msgin(:) !! Data to send INTEGER, INTENT(IN) :: dest !! Process to send data to ${type1}$, CONTIGUOUS, INTENT(OUT) :: msgout(:) !! Received data INTEGER, INTENT(IN) :: source !! Process from which to receive TYPE(mp_comm_type), INTENT(IN) :: comm !! Message passing environment identifier CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sendrecv_${nametype1}$v' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen_in, msglen_out, & recv_tag, send_tag #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) msglen_in = SIZE(msgin) msglen_out = SIZE(msgout) send_tag = 0 ! cannot think of something better here, this might be dangerous recv_tag = 0 ! cannot think of something better here, this might be dangerous CALL mpi_sendrecv(msgin, msglen_in, ${mpi_type1}$, dest, send_tag, msgout, & msglen_out, ${mpi_type1}$, source, recv_tag, comm%handle, MPI_STATUS_IGNORE, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_sendrecv @ "//routineN) CALL add_perf(perf_id=7, & msg_size=(msglen_in + msglen_out)*${bytes1}$/2) #else MARK_USED(dest) MARK_USED(source) MARK_USED(comm) msgout = msgin #endif CALL timestop(handle) END SUBROUTINE mp_sendrecv_${nametype1}$v SUBROUTINE mp_isendrecv_${nametype1}$ (msgin, dest, msgout, source, comm, send_request, & recv_request, tag) !! Non-blocking send and receive of a scalar !! !! Implementation !! Calls mpi_isend and mpi_irecv. ${type1}$ :: msgin !! Scalar data to send INTEGER, INTENT(IN) :: dest !! Which process to send to ${type1}$ :: msgout !! Receive data into this pointer INTEGER, INTENT(IN) :: source !! Process to receive from TYPE(mp_comm_type), INTENT(IN) :: comm !! Message passing environment identifier TYPE(mp_request_type), INTENT(out) :: send_request, recv_request !! Request handle for the send !! Request handle for the receive INTEGER, INTENT(in), OPTIONAL :: tag !! tag to differentiate requests CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isendrecv_${nametype1}$' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: my_tag #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) my_tag = 0 IF (PRESENT(tag)) my_tag = tag CALL mpi_irecv(msgout, 1, ${mpi_type1}$, source, my_tag, & comm%handle, recv_request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_irecv @ "//routineN) CALL mpi_isend(msgin, 1, ${mpi_type1}$, dest, my_tag, & comm%handle, send_request%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_isend @ "//routineN) CALL add_perf(perf_id=8, msg_size=2*${bytes1}$) #else MARK_USED(dest) MARK_USED(source) MARK_USED(comm) MARK_USED(tag) send_request = mp_request_null recv_request = mp_request_null msgout = msgin #endif CALL timestop(handle) END SUBROUTINE mp_isendrecv_${nametype1}$ SUBROUTINE mp_isendrecv_${nametype1}$v(msgin, dest, msgout, source, comm, send_request, & recv_request, tag) !! Non-blocking send and receive of a vector !! !! Implementation !! Calls mpi_isend and mpi_irecv. !! @note !! arrays can be pointers or assumed shape, but they must be contiguous! !! @endnote ${type1}$, CONTIGUOUS, DIMENSION(:) :: msgin !! Vector data to send INTEGER, INTENT(IN) :: dest !! Which process to send to ${type1}$, CONTIGUOUS, DIMENSION(:) :: msgout !! Receive data into this pointer INTEGER, INTENT(IN) :: source !! Process to receive from TYPE(mp_comm_type), INTENT(IN) :: comm !! Message passing environment identifier TYPE(mp_request_type), INTENT(out) :: send_request, recv_request !! Request handle for the send !! Request handle for the receive INTEGER, INTENT(in), OPTIONAL :: tag !! tag to differentiate requests CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isendrecv_${nametype1}$v' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen, my_tag ${type1}$ :: foo #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) my_tag = 0 IF (PRESENT(tag)) my_tag = tag msglen = SIZE(msgout, 1) IF (msglen > 0) THEN CALL mpi_irecv(msgout, msglen, ${mpi_type1}$, source, my_tag, & comm%handle, recv_request%handle, ierr) ELSE CALL mpi_irecv(foo, msglen, ${mpi_type1}$, source, my_tag, & comm%handle, recv_request%handle, ierr) END IF IF (ierr /= 0) CALL mp_stop(ierr, "mpi_irecv @ "//routineN) msglen = SIZE(msgin, 1) IF (msglen > 0) THEN CALL mpi_isend(msgin, msglen, ${mpi_type1}$, dest, my_tag, & comm%handle, send_request%handle, ierr) ELSE CALL mpi_isend(foo, msglen, ${mpi_type1}$, dest, my_tag, & comm%handle, send_request%handle, ierr) END IF IF (ierr /= 0) CALL mp_stop(ierr, "mpi_isend @ "//routineN) msglen = (msglen + SIZE(msgout, 1) + 1)/2 CALL add_perf(perf_id=8, msg_size=msglen*${bytes1}$) #else MARK_USED(dest) MARK_USED(source) MARK_USED(comm) MARK_USED(tag) send_request = mp_request_null recv_request = mp_request_null msgout = msgin #endif CALL timestop(handle) END SUBROUTINE mp_isendrecv_${nametype1}$v SUBROUTINE mp_isend_${nametype1}$v(msgin, dest, comm, request, tag) !! Non-blocking send of vector data !! @note !! see mp_isendrecv_${nametype1}$v !! arrays can be pointers or assumed shape, but they must be contiguous! !! @endnote ${type1}$, CONTIGUOUS, DIMENSION(:) :: msgin INTEGER, INTENT(IN) :: dest TYPE(mp_comm_type), INTENT(IN) :: comm TYPE(mp_request_type), INTENT(out) :: request INTEGER, INTENT(in), OPTIONAL :: tag CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isend_${nametype1}$v' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen, my_tag ${type1}$ :: foo(1) #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) my_tag = 0 IF (PRESENT(tag)) my_tag = tag msglen = SIZE(msgin) IF (msglen > 0) THEN CALL mpi_isend(msgin, msglen, ${mpi_type1}$, dest, my_tag, & comm%handle, request%handle, ierr) ELSE CALL mpi_isend(foo, msglen, ${mpi_type1}$, dest, my_tag, & comm%handle, request%handle, ierr) END IF IF (ierr /= 0) CALL mp_stop(ierr, "mpi_isend @ "//routineN) CALL add_perf(perf_id=11, msg_size=msglen*${bytes1}$) #else MARK_USED(msgin) MARK_USED(dest) MARK_USED(comm) MARK_USED(request) MARK_USED(tag) ierr = 1 request = mp_request_null CALL mp_stop(ierr, "mp_isend called in non parallel case") #endif CALL timestop(handle) END SUBROUTINE mp_isend_${nametype1}$v SUBROUTINE mp_isend_${nametype1}$m2(msgin, dest, comm, request, tag) !! Non-blocking send of matrix data !! @note !! see mp_isendrecv_${nametype1}$v !! see mp_isend_${nametype1}$v !! arrays can be pointers or assumed shape, but they must be contiguous! !! @endnote ${type1}$, DIMENSION(:, :), CONTIGUOUS :: msgin INTEGER, INTENT(IN) :: dest TYPE(mp_comm_type), INTENT(IN) :: comm TYPE(mp_request_type), INTENT(out) :: request INTEGER, INTENT(in), OPTIONAL :: tag CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isend_${nametype1}$m2' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen, my_tag ${type1}$ :: foo(1) #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) my_tag = 0 IF (PRESENT(tag)) my_tag = tag msglen = SIZE(msgin, 1)*SIZE(msgin, 2) IF (msglen > 0) THEN CALL mpi_isend(msgin, msglen, ${mpi_type1}$, dest, my_tag, & comm%handle, request%handle, ierr) ELSE CALL mpi_isend(foo, msglen, ${mpi_type1}$, dest, my_tag, & comm%handle, request%handle, ierr) END IF IF (ierr /= 0) CALL mp_stop(ierr, "mpi_isend @ "//routineN) CALL add_perf(perf_id=11, msg_size=msglen*${bytes1}$) #else MARK_USED(msgin) MARK_USED(dest) MARK_USED(comm) MARK_USED(request) MARK_USED(tag) ierr = 1 request = mp_request_null CALL mp_stop(ierr, "mp_isend called in non parallel case") #endif CALL timestop(handle) END SUBROUTINE mp_isend_${nametype1}$m2 SUBROUTINE mp_irecv_${nametype1}$v(msgout, source, comm, request, tag) !! Non-blocking receive of vector data !! @note !! see mp_isendrecv_${nametype1}$v !! arrays can be pointers or assumed shape, but they must be contiguous! !! @endnote ${type1}$, CONTIGUOUS, DIMENSION(:) :: msgout INTEGER, INTENT(IN) :: source TYPE(mp_comm_type), INTENT(IN) :: comm TYPE(mp_request_type), INTENT(out) :: request INTEGER, INTENT(in), OPTIONAL :: tag CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_irecv_${nametype1}$v' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen, my_tag ${type1}$ :: foo(1) #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) my_tag = 0 IF (PRESENT(tag)) my_tag = tag msglen = SIZE(msgout) IF (msglen > 0) THEN CALL mpi_irecv(msgout, msglen, ${mpi_type1}$, source, my_tag, & comm%handle, request%handle, ierr) ELSE CALL mpi_irecv(foo, msglen, ${mpi_type1}$, source, my_tag, & comm%handle, request%handle, ierr) END IF IF (ierr /= 0) CALL mp_stop(ierr, "mpi_irecv @ "//routineN) CALL add_perf(perf_id=12, msg_size=msglen*${bytes1}$) #else DBCSR_ABORT("mp_irecv called in non parallel case") MARK_USED(msgout) MARK_USED(source) MARK_USED(comm) MARK_USED(request) MARK_USED(tag) request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_irecv_${nametype1}$v SUBROUTINE mp_irecv_${nametype1}$m2(msgout, source, comm, request, tag) !! Non-blocking receive of matrix data !! @note !! see mp_isendrecv_${nametype1}$v !! see mp_irecv_${nametype1}$v !! arrays can be pointers or assumed shape, but they must be contiguous! !! @endnote ${type1}$, DIMENSION(:, :), CONTIGUOUS :: msgout INTEGER, INTENT(IN) :: source TYPE(mp_comm_type), INTENT(IN) :: comm TYPE(mp_request_type), INTENT(out) :: request INTEGER, INTENT(in), OPTIONAL :: tag CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_irecv_${nametype1}$m2' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen, my_tag ${type1}$ :: foo(1) #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) my_tag = 0 IF (PRESENT(tag)) my_tag = tag msglen = SIZE(msgout, 1)*SIZE(msgout, 2) IF (msglen > 0) THEN CALL mpi_irecv(msgout, msglen, ${mpi_type1}$, source, my_tag, & comm%handle, request%handle, ierr) ELSE CALL mpi_irecv(foo, msglen, ${mpi_type1}$, source, my_tag, & comm%handle, request%handle, ierr) END IF IF (ierr /= 0) CALL mp_stop(ierr, "mpi_irecv @ "//routineN) CALL add_perf(perf_id=12, msg_size=msglen*${bytes1}$) #else MARK_USED(msgout) MARK_USED(source) MARK_USED(comm) MARK_USED(request) MARK_USED(tag) request = mp_request_null DBCSR_ABORT("mp_irecv called in non parallel case") #endif CALL timestop(handle) END SUBROUTINE mp_irecv_${nametype1}$m2 SUBROUTINE mp_win_create_${nametype1}$v(base, comm, win) !! Window initialization function for vector data !! @note !! arrays can be pointers or assumed shape, but they must be contiguous! !! @endnote ${type1}$, CONTIGUOUS, DIMENSION(:) :: base TYPE(mp_comm_type), INTENT(IN) :: comm TYPE(mp_win_type), INTENT(OUT) :: win CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_win_create_${nametype1}$v' INTEGER :: ierr, handle #if defined(__parallel) INTEGER(kind=mpi_address_kind) :: len ${type1}$ :: foo(1) #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) len = SIZE(base)*${bytes1}$ IF (len > 0) THEN CALL mpi_win_create(base, len, ${bytes1}$, MPI_INFO_NULL, comm%handle, win%handle, ierr) ELSE CALL mpi_win_create(foo, len, ${bytes1}$, MPI_INFO_NULL, comm%handle, win%handle, ierr) END IF IF (ierr /= 0) CALL mp_stop(ierr, "mpi_win_create @ "//routineN) #else MARK_USED(base) MARK_USED(comm) win = mp_win_null #endif CALL timestop(handle) END SUBROUTINE mp_win_create_${nametype1}$v SUBROUTINE mp_rget_${nametype1}$v(base, source, win, win_data, myproc, disp, request, & origin_datatype, target_datatype) !! Single-sided get function for vector data !! @note !! arrays can be pointers or assumed shape, but they must be contiguous! !! @endnote ${type1}$, CONTIGUOUS, DIMENSION(:) :: base INTEGER, INTENT(IN) :: source TYPE(mp_win_type), INTENT(IN) :: win ${type1}$, CONTIGUOUS, DIMENSION(:) :: win_data INTEGER, INTENT(IN), OPTIONAL :: myproc, disp TYPE(mp_request_type), INTENT(OUT) :: request TYPE(mp_type_descriptor_type), INTENT(IN), OPTIONAL :: origin_datatype, target_datatype CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_rget_${nametype1}$v' INTEGER :: ierr, handle #if defined(__parallel) INTEGER :: len, & origin_len, target_len LOGICAL :: do_local_copy INTEGER(kind=mpi_address_kind) :: disp_aint MPI_DATA_TYPE :: handle_origin_datatype, handle_target_datatype #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) len = SIZE(base) disp_aint = 0 IF (PRESENT(disp)) THEN disp_aint = INT(disp, KIND=mpi_address_kind) END IF handle_origin_datatype = ${mpi_type1}$ origin_len = len IF (PRESENT(origin_datatype)) THEN handle_origin_datatype = origin_datatype%type_handle origin_len = 1 END IF handle_target_datatype = ${mpi_type1}$ target_len = len IF (PRESENT(target_datatype)) THEN handle_target_datatype = target_datatype%type_handle target_len = 1 END IF IF (len > 0) THEN do_local_copy = .FALSE. #if !defined(__DBCSR_DISABLE_RMA_LOCAL_COPY) IF (PRESENT(myproc) .AND. .NOT. PRESENT(origin_datatype) .AND. .NOT. PRESENT(target_datatype)) THEN IF (myproc .EQ. source) do_local_copy = .TRUE. END IF #else MARK_USED(myproc) #endif IF (do_local_copy) THEN base(:) = win_data(disp_aint + 1:disp_aint + len) request = mp_request_null ierr = 0 ELSE CALL mpi_rget(base, origin_len, handle_origin_datatype, source, disp_aint, & target_len, handle_target_datatype, win%handle, request%handle, ierr) END IF ELSE request = mp_request_null ierr = 0 END IF IF (ierr /= 0) CALL mp_stop(ierr, "mpi_rget @ "//routineN) CALL add_perf(perf_id=25, msg_size=SIZE(base)*${bytes1}$) #else MARK_USED(source) MARK_USED(win) MARK_USED(myproc) MARK_USED(origin_datatype) MARK_USED(target_datatype) request = mp_request_null ! IF (PRESENT(disp)) THEN base(:) = win_data(disp + 1:disp + SIZE(base)) ELSE base(:) = win_data(:SIZE(base)) END IF #endif CALL timestop(handle) END SUBROUTINE mp_rget_${nametype1}$v ! ***************************************************************************** ! *************************************************************************** FUNCTION mp_type_indexed_make_${nametype1}$ (count, lengths, displs) & RESULT(type_descriptor) INTEGER, INTENT(IN) :: count INTEGER, DIMENSION(1:count), INTENT(IN), TARGET :: lengths, displs TYPE(mp_type_descriptor_type) :: type_descriptor CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_type_indexed_make_${nametype1}$' INTEGER :: ierr, handle ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mpi_type_indexed(count, lengths, displs, ${mpi_type1}$, & type_descriptor%type_handle, ierr) IF (ierr /= 0) & DBCSR_ABORT("MPI_Type_Indexed @ "//routineN) CALL mpi_type_commit(type_descriptor%type_handle, ierr) IF (ierr /= 0) & DBCSR_ABORT("MPI_Type_commit @ "//routineN) #else type_descriptor%type_handle = ${handle1}$ #endif type_descriptor%length = count NULLIFY (type_descriptor%subtype) type_descriptor%vector_descriptor(1:2) = 1 type_descriptor%has_indexing = .TRUE. type_descriptor%index_descriptor%index => lengths type_descriptor%index_descriptor%chunks => displs CALL timestop(handle) END FUNCTION mp_type_indexed_make_${nametype1}$ SUBROUTINE mp_allocate_${nametype1}$ (DATA, len, stat) !! Allocates special parallel memory ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: DATA !! pointer to integer array to allocate INTEGER, INTENT(IN) :: len !! number of integers to allocate INTEGER, INTENT(OUT), OPTIONAL :: stat !! allocation status result CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allocate_${nametype1}$' INTEGER :: ierr, handle CALL timeset(routineN, handle) ierr = 0 #if defined(__parallel) NULLIFY (DATA) CALL mp_alloc_mem(DATA, len, stat=ierr) IF (ierr /= 0 .AND. .NOT. PRESENT(stat)) & CALL mp_stop(ierr, "mpi_alloc_mem @ "//routineN) #else ALLOCATE (DATA(len), stat=ierr) IF (ierr /= 0 .AND. .NOT. PRESENT(stat)) & CALL mp_stop(ierr, "ALLOCATE @ "//routineN) #endif IF (PRESENT(stat)) stat = ierr CALL timestop(handle) END SUBROUTINE mp_allocate_${nametype1}$ SUBROUTINE mp_deallocate_${nametype1}$ (DATA, stat) !! Deallocates special parallel memory ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: DATA !! pointer to special memory to deallocate INTEGER, INTENT(OUT), OPTIONAL :: stat CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_deallocate_${nametype1}$' INTEGER :: ierr, handle CALL timeset(routineN, handle) ierr = 0 #if defined(__parallel) CALL mp_free_mem(DATA, ierr) IF (PRESENT(stat)) THEN stat = ierr ELSE IF (ierr /= 0) CALL mp_stop(ierr, "mpi_free_mem @ "//routineN) END IF NULLIFY (DATA) #else DEALLOCATE (DATA) IF (PRESENT(stat)) stat = 0 #endif CALL timestop(handle) END SUBROUTINE mp_deallocate_${nametype1}$ SUBROUTINE mp_file_write_at_${nametype1}$v(fh, offset, msg, msglen) !! (parallel) Blocking individual file write using explicit offsets !! (serial) Unformatted stream write !! !! MPI-I/O mapping mpi_file_write_at !! !! STREAM-I/O mapping WRITE ${type1}$, INTENT(IN) :: msg(:) !! data to be written to the file TYPE(mp_file_type), INTENT(IN) :: fh !! file handle (file storage unit) INTEGER, INTENT(IN), OPTIONAL :: msglen !! number of the elements of data INTEGER(kind=file_offset), INTENT(IN) :: offset !! file offset (position) INTEGER :: msg_len msg_len = SIZE(msg) IF (PRESENT(msglen)) msg_len = msglen #if defined(__parallel) BLOCK CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_write_at_${nametype1}$v' INTEGER :: ierr ierr = 0 CALL MPI_FILE_WRITE_AT(fh%handle, offset, msg, msg_len, ${mpi_type1}$, MPI_STATUS_IGNORE, ierr) IF (ierr .NE. 0) & DBCSR_ABORT("mpi_file_write_at_${nametype1}$v @ "//routineN) END BLOCK #else WRITE (UNIT=fh%handle, POS=offset + 1) msg(1:msg_len) #endif END SUBROUTINE mp_file_write_at_${nametype1}$v ! ***************************************************************************** ! ***************************************************************************** SUBROUTINE mp_file_write_at_${nametype1}$ (fh, offset, msg) ${type1}$, INTENT(IN) :: msg TYPE(mp_file_type), INTENT(IN) :: fh INTEGER(kind=file_offset), INTENT(IN) :: offset #if defined(__parallel) CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_write_at_${nametype1}$' INTEGER :: ierr ierr = 0 CALL MPI_FILE_WRITE_AT(fh%handle, offset, msg, 1, ${mpi_type1}$, MPI_STATUS_IGNORE, ierr) IF (ierr .NE. 0) & DBCSR_ABORT("mpi_file_write_at_${nametype1}$ @ "//routineN) #else WRITE (UNIT=fh%handle, POS=offset + 1) msg #endif END SUBROUTINE mp_file_write_at_${nametype1}$ SUBROUTINE mp_file_write_at_all_${nametype1}$v(fh, offset, msg, msglen) !! (parallel) Blocking collective file write using explicit offsets !! (serial) Unformatted stream write !! !! MPI-I/O mapping mpi_file_write_at_all !! !! STREAM-I/O mapping WRITE ${type1}$, INTENT(IN) :: msg(:) TYPE(mp_file_type), INTENT(IN) :: fh INTEGER, INTENT(IN), OPTIONAL :: msglen INTEGER :: msg_len INTEGER(kind=file_offset), INTENT(IN) :: offset msg_len = SIZE(msg) IF (PRESENT(msglen)) msg_len = msglen #if defined(__parallel) BLOCK CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_write_at_all_${nametype1}$v' INTEGER :: ierr ierr = 0 CALL MPI_FILE_WRITE_AT_ALL(fh%handle, offset, msg, msg_len, ${mpi_type1}$, MPI_STATUS_IGNORE, ierr) IF (ierr .NE. 0) & DBCSR_ABORT("mpi_file_write_at_all_${nametype1}$v @ "//routineN) END BLOCK #else WRITE (UNIT=fh%handle, POS=offset + 1) msg(1:msg_len) #endif END SUBROUTINE mp_file_write_at_all_${nametype1}$v ! ***************************************************************************** ! ***************************************************************************** SUBROUTINE mp_file_write_at_all_${nametype1}$ (fh, offset, msg) ${type1}$, INTENT(IN) :: msg TYPE(mp_file_type), INTENT(IN) :: fh INTEGER(kind=file_offset), INTENT(IN) :: offset #if defined(__parallel) CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_write_at_all_${nametype1}$' INTEGER :: ierr ierr = 0 CALL MPI_FILE_WRITE_AT_ALL(fh%handle, offset, msg, 1, ${mpi_type1}$, MPI_STATUS_IGNORE, ierr) IF (ierr .NE. 0) & DBCSR_ABORT("mpi_file_write_at_all_${nametype1}$ @ "//routineN) #else WRITE (UNIT=fh%handle, POS=offset + 1) msg #endif END SUBROUTINE mp_file_write_at_all_${nametype1}$ ! ***************************************************************************** ! ***************************************************************************** SUBROUTINE mp_file_read_at_all_${nametype1}$v(fh, offset, msg, msglen) !! (parallel) Blocking collective file read using explicit offsets !! (serial) Unformatted stream read !! !! MPI-I/O mapping mpi_file_read_at_all !! !! STREAM-I/O mapping READ ${type1}$, INTENT(OUT) :: msg(:) TYPE(mp_file_type), INTENT(IN) :: fh INTEGER, INTENT(IN), OPTIONAL :: msglen INTEGER(kind=file_offset), INTENT(IN) :: offset INTEGER :: msg_len msg_len = SIZE(msg) IF (PRESENT(msglen)) msg_len = msglen #if defined(__parallel) BLOCK CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_read_at_all_${nametype1}$v' INTEGER :: ierr ierr = 0 CALL MPI_FILE_READ_AT_ALL(fh%handle, offset, msg, msg_len, ${mpi_type1}$, MPI_STATUS_IGNORE, ierr) IF (ierr .NE. 0) & DBCSR_ABORT("mpi_file_read_at_all_${nametype1}$v @ "//routineN) END BLOCK #else READ (UNIT=fh%handle, POS=offset + 1) msg(1:msg_len) #endif END SUBROUTINE mp_file_read_at_all_${nametype1}$v ! ***************************************************************************** ! ***************************************************************************** SUBROUTINE mp_file_read_at_all_${nametype1}$ (fh, offset, msg) ${type1}$, INTENT(OUT) :: msg TYPE(mp_file_type), INTENT(IN) :: fh INTEGER(kind=file_offset), INTENT(IN) :: offset #if defined(__parallel) CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_read_at_all_${nametype1}$' INTEGER :: ierr ierr = 0 CALL MPI_FILE_READ_AT_ALL(fh%handle, offset, msg, 1, ${mpi_type1}$, MPI_STATUS_IGNORE, ierr) IF (ierr .NE. 0) & DBCSR_ABORT("mpi_file_read_at_all_${nametype1}$ @ "//routineN) #else READ (UNIT=fh%handle, POS=offset + 1) msg #endif END SUBROUTINE mp_file_read_at_all_${nametype1}$ ! ***************************************************************************** ! ***************************************************************************** FUNCTION mp_type_make_${nametype1}$ (ptr, & vector_descriptor, index_descriptor) & RESULT(type_descriptor) ${type1}$, DIMENSION(:), POINTER :: ptr INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL :: vector_descriptor TYPE(mp_indexing_meta_type), INTENT(IN), OPTIONAL :: index_descriptor TYPE(mp_type_descriptor_type) :: type_descriptor CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_type_make_${nametype1}$' INTEGER :: ierr ierr = 0 NULLIFY (type_descriptor%subtype) type_descriptor%length = SIZE(ptr) #if defined(__parallel) type_descriptor%type_handle = ${mpi_type1}$ CALL MPI_Get_address(ptr, type_descriptor%base, ierr) IF (ierr /= 0) & DBCSR_ABORT("MPI_Get_address @ "//routineN) #else type_descriptor%type_handle = ${handle1}$ #endif type_descriptor%vector_descriptor(1:2) = 1 type_descriptor%has_indexing = .FALSE. type_descriptor%data_${nametype1}$ => ptr IF (PRESENT(vector_descriptor) .OR. PRESENT(index_descriptor)) THEN DBCSR_ABORT(routineN//": Vectors and indices NYI") END IF END FUNCTION mp_type_make_${nametype1}$ #if defined(__parallel) SUBROUTINE mp_alloc_mem_${nametype1}$ (DATA, len, stat) !! Allocates an array, using MPI_ALLOC_MEM ... this is hackish !! as the Fortran version returns an integer, which we take to be a C_PTR ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: DATA !! data array to allocate INTEGER, INTENT(IN) :: len !! length (in data elements) of data array allocation INTEGER, INTENT(OUT), OPTIONAL :: stat !! allocation status result INTEGER :: size, ierr, length, & mp_res INTEGER(KIND=MPI_ADDRESS_KIND) :: mp_size TYPE(C_PTR) :: mp_baseptr MPI_INFO_TYPE :: mp_info length = MAX(len, 1) CALL MPI_TYPE_SIZE(${mpi_type1}$, size, ierr) mp_size = INT(length, KIND=MPI_ADDRESS_KIND)*size IF (mp_size .GT. mp_max_memory_size) THEN DBCSR_ABORT("MPI cannot allocate more than 2 GiByte") END IF mp_info = MPI_INFO_NULL CALL MPI_ALLOC_MEM(mp_size, mp_info, mp_baseptr, mp_res) CALL C_F_POINTER(mp_baseptr, DATA, (/length/)) IF (PRESENT(stat)) stat = mp_res END SUBROUTINE mp_alloc_mem_${nametype1}$ #endif #if defined(__parallel) SUBROUTINE mp_free_mem_${nametype1}$ (DATA, stat) !! Deallocates am array, ... this is hackish !! as the Fortran version takes an integer, which we hope to get by reference ${type1}$, DIMENSION(:), & POINTER, CONTIGUOUS :: DATA !! data array to allocate INTEGER, INTENT(OUT), OPTIONAL :: stat !! allocation status result INTEGER :: mp_res CALL MPI_FREE_MEM(DATA, mp_res) IF (PRESENT(stat)) stat = mp_res END SUBROUTINE mp_free_mem_${nametype1}$ #endif #:endfor END MODULE dbcsr_mpiwrap ================================================ FILE: src/mpi/dbcsr_mpiwrap.fypp ================================================ #!--------------------------------------------------------------------------------------------------! #! Copyright (C) by the DBCSR developers group - All rights reserved ! #! This file is part of the DBCSR library. ! #! ! #! For information on the license, see the LICENSE file. ! #! For further information please visit https://dbcsr.cp2k.org ! #! SPDX-License-Identifier: GPL-2.0+ ! #!--------------------------------------------------------------------------------------------------! #:mute #:set nametype1 = ['i', 'l', 'd', 'r', 'z', 'c'] #:set type1 = ['INTEGER(KIND=int_4)', 'INTEGER(KIND=int_8)', 'REAL(kind=real_8)', 'REAL(kind=real_4)', 'COMPLEX(kind=real_8)', 'COMPLEX(kind=real_4)'] #:set mpi_type1 = ['MPI_INTEGER', 'MPI_INTEGER8', 'MPI_DOUBLE_PRECISION', 'MPI_REAL', 'MPI_DOUBLE_COMPLEX', 'MPI_COMPLEX'] #:set mpi_2type1 = ['MPI_2INTEGER', 'MPI_INTEGER8', 'MPI_2DOUBLE_PRECISION', 'MPI_2REAL', 'MPI_2DOUBLE_COMPLEX', 'MPI_2COMPLEX'] #:set kind1 = ['int_4', 'int_8', 'real_8', 'real_4', 'real_8', 'real_4'] #:set bytes1 = ['int_4_size','int_8_size','real_8_size','real_4_size','(2*real_8_size)','(2*real_4_size)'] #:set handle1 = ['17', '19', '3', '1', '7', '5'] #:set zero1 = ['0_int_4', '0_int_8', '0.0_real_8', '0.0_real_4', 'CMPLX(0.0, 0.0, real_8)', 'CMPLX(0.0, 0.0, real_4)'] #:set one1 = ['1_int_4', '1_int_8', '1.0_real_8', '1.0_real_4', 'CMPLX(1.0, 0.0, real_8)', 'CMPLX(1.0, 0.0, real_4)'] #:set inst_params = list(zip(nametype1, type1, mpi_type1, mpi_2type1, kind1, bytes1, handle1, zero1, one1)) #! Generate interface declarations using the cartesian combination of nametypes and suffixes, and extra_suffixes #:def gen_mp_iface(basename, nametypes=nametype1, suffixes=[''], extra_suffixes=[]) INTERFACE mp_${basename}$ MODULE PROCEDURE ${', '.join(['mp_{}_{}{}'.format(basename, nt, su) for nt in nametypes for su in suffixes] + ['mp_{}_{}'.format(basename, su) for su in extra_suffixes])}$ END INTERFACE #:enddef #:endmute ================================================ FILE: src/ops/PACKAGE ================================================ { "description": "High level DBCSR operations", "archive": "libdbcsr", "requires": ["../acc", "../mpi", "../data", "../base", "../dist", "../block", "../utils", "../core", "../mm", "../work"], } ================================================ FILE: src/ops/dbcsr_csr_conversions.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_csr_conversions !! DBCSR to CSR matrix format conversion USE dbcsr_block_access, ONLY: dbcsr_put_block USE dbcsr_data_methods, ONLY: dbcsr_data_clear_pointer, & dbcsr_data_init, & dbcsr_data_new, & dbcsr_data_release USE dbcsr_data_types, ONLY: dbcsr_type_complex_4, & dbcsr_type_complex_8, & dbcsr_type_real_4, & dbcsr_type_real_8, & dbcsr_type_real_default USE dbcsr_dist_methods, ONLY: dbcsr_distribution_col_dist, & dbcsr_distribution_mp, & dbcsr_distribution_new, & dbcsr_distribution_release USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left, & dbcsr_iterator_next_block, & dbcsr_iterator_start, & dbcsr_iterator_stop USE dbcsr_kinds, ONLY: default_string_length, & dp, & int_8, & real_4, & real_8, & sp USE dbcsr_methods, ONLY: & dbcsr_col_block_sizes, dbcsr_distribution, dbcsr_get_data_type, dbcsr_get_num_blocks, & dbcsr_get_nze, dbcsr_has_symmetry, dbcsr_name, dbcsr_nblkcols_total, dbcsr_nblkrows_total, & dbcsr_nfullrows_local, dbcsr_release, dbcsr_row_block_sizes, dbcsr_valid_index USE dbcsr_mp_methods, ONLY: dbcsr_mp_group, & dbcsr_mp_mynode, & dbcsr_mp_new, & dbcsr_mp_numnodes, & dbcsr_mp_release USE dbcsr_mpiwrap, ONLY: mp_environ, & mp_gather, & mp_recv, & mp_send, & mp_sum, mp_comm_type USE dbcsr_operations, ONLY: dbcsr_copy, & dbcsr_get_info, & dbcsr_set USE dbcsr_transformations, ONLY: dbcsr_complete_redistribute, & dbcsr_desymmetrize_deep USE dbcsr_types, ONLY: dbcsr_data_obj, & dbcsr_distribution_obj, & dbcsr_iterator, & dbcsr_mp_obj, & dbcsr_type USE dbcsr_work_operations, ONLY: dbcsr_create #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_csr_conversions' LOGICAL, PARAMETER, PRIVATE :: careful_mod = .FALSE. INTEGER, PARAMETER, PUBLIC :: csr_dbcsr_blkrow_dist = 1, csr_eqrow_ceil_dist = 2, csr_eqrow_floor_dist = 3 TYPE csr_mapping_data !! Mapping data relating local CSR indices to local indices of a block-row !! distributed (BRD) DBCSR matrix, and containing the block structure !! of the original DBCSR matrix from which the CSR matrix was created. PRIVATE INTEGER, DIMENSION(:), POINTER :: csr_to_brd_ind => NULL(), & brd_to_csr_ind => NULL() !! csr_to_brd_ind(csr_ind) gives the location of a matrix element with CSR index csr_ind (location in nzval_local) inside !! the data_area of the corresponding BRD matrix. If an element of the DBCSR matrix is treated as 0 in the CSR format, the !! index of this value is not in csr_to_brd_ind. !! same as csr_to_brd_ind but inverse mapping. If a given DBCSR index dbcsr_ind points to a zero element, then !! brd_to_csr_ind(dbcsr_ind) is -1. TYPE(dbcsr_type) :: brd_mat = dbcsr_type() !! DBCSR BRD matrix acting as an intermediate step in any conversion from and to DBCSR format. LOGICAL :: has_dbcsr_block_data = .FALSE. !! whether dbcsr_* fields are defined INTEGER :: dbcsr_nblkcols_total = -1, & dbcsr_nblkrows_total = -1, & dbcsr_nblks_local = -1 !! data from original DBCSR matrix (not block-row distributed), !! representing the original block structure. INTEGER, DIMENSION(:), POINTER :: dbcsr_row_p => NULL(), dbcsr_col_i => NULL(), & dbcsr_row_blk_size => NULL(), dbcsr_col_blk_size => NULL() !! data from original DBCSR matrix (not block-row distributed), !! representing the original block structure. END TYPE TYPE csr_data_area_type !! Data type of CSR matrices REAL(KIND=real_4), DIMENSION(:), POINTER :: r_sp => Null() !! real, single precision data array REAL(KIND=real_8), DIMENSION(:), POINTER :: r_dp => Null() !! real, double precision data array COMPLEX(KIND=real_4), DIMENSION(:), POINTER :: c_sp => Null() !! complex, double precision data array COMPLEX(KIND=real_8), DIMENSION(:), POINTER :: c_dp => Null() INTEGER :: data_type = -1 !! data type of CSR matrix END TYPE TYPE csr_type !! Type for CSR matrices INTEGER :: nrows_total = -1, ncols_total = -1, & nze_local = -1, nrows_local = -1 !! total number of rows !! total number of columns !! local number of nonzero elements !! local number of rows TYPE(mp_comm_type) :: mp_group = mp_comm_type() !! message-passing group ID INTEGER(KIND=int_8) :: nze_total = -1_int_8 !! total number of nonzero elements INTEGER, DIMENSION(:), POINTER :: rowptr_local => NULL(), & colind_local => NULL(), & nzerow_local => NULL() !! indices of elements inside nzval_local starting a row !! column indices of elements inside nzval_local TYPE(csr_data_area_type) :: nzval_local = csr_data_area_type() !! values of local non-zero elements, row-wise ordering. TYPE(csr_mapping_data) :: dbcsr_mapping = csr_mapping_data() !! mapping data relating indices of nzval_local to indices of a block-row distributed DBCSR matrix LOGICAL :: has_mapping = .FALSE. !! whether dbcsr_mapping is defined LOGICAL :: valid = .FALSE. !! whether essential data (excluding dbcsr_mapping) is completely allocated LOGICAL :: has_indices = .FALSE. !! whether rowptr_local and colind_local are defined END TYPE csr_type TYPE csr_p_type TYPE(csr_type), POINTER :: csr_mat => NULL() END TYPE csr_p_type PUBLIC :: csr_type, csr_p_type, convert_csr_to_dbcsr, & csr_create_from_dbcsr, & csr_destroy, & convert_dbcsr_to_csr, & csr_create_new, csr_create_template, & csr_print_sparsity, dbcsr_to_csr_filter, & csr_write INTERFACE csr_create MODULE PROCEDURE csr_create_new, csr_create_template END INTERFACE CONTAINS SUBROUTINE csr_create_new(csr_mat, nrows_total, ncols_total, nze_total, & nze_local, nrows_local, mp_group, data_type) !! Create a new CSR matrix and allocate all internal data (excluding dbcsr_mapping) TYPE(csr_type), INTENT(OUT) :: csr_mat !! CSR matrix to return INTEGER, INTENT(IN) :: nrows_total, ncols_total !! total number of rows !! total number of columns INTEGER(KIND=int_8) :: nze_total !! total number of non-zero elements INTEGER, INTENT(IN) :: nze_local, nrows_local !! local number of non-zero elements !! local number of rows TYPE(mp_comm_type), INTENT(IN) :: mp_group INTEGER, INTENT(IN), OPTIONAL :: data_type !! data type of the CSR matrix (default real double prec.) CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_create_new' INTEGER :: handle CALL timeset(routineN, handle) IF (nrows_total .LT. nrows_local) & DBCSR_ABORT("local number of rows must not exceed total number of rows") IF (nze_total .LT. nze_local) CALL dbcsr_abort(__LOCATION__, "local number of non-zero "// & "elements must not exceed total number of non-zero elements") IF (INT(nrows_total, kind=int_8)*INT(ncols_total, kind=int_8) .LT. nze_total) & DBCSR_ABORT("Total number of non-zero elements must not exceed total matrix size") IF (INT(nrows_local, kind=int_8)*INT(ncols_total, kind=int_8) .LT. nze_local) & DBCSR_ABORT("Local number of non-zero elements must not exceed local matrix size") csr_mat%ncols_total = ncols_total csr_mat%nrows_total = nrows_total csr_mat%nze_total = nze_total csr_mat%nze_local = nze_local ALLOCATE (csr_mat%colind_local(nze_local)) csr_mat%nrows_local = nrows_local ALLOCATE (csr_mat%rowptr_local(nrows_local + 1)) ALLOCATE (csr_mat%nzerow_local(nrows_local)) IF (PRESENT(data_type)) THEN csr_mat%nzval_local%data_type = data_type ELSE csr_mat%nzval_local%data_type = dbcsr_type_real_default END IF SELECT CASE (csr_mat%nzval_local%data_type) CASE (dbcsr_type_real_4) ALLOCATE (csr_mat%nzval_local%r_sp(nze_local)) CASE (dbcsr_type_real_8) ALLOCATE (csr_mat%nzval_local%r_dp(nze_local)) CASE (dbcsr_type_complex_4) ALLOCATE (csr_mat%nzval_local%c_sp(nze_local)) CASE (dbcsr_type_complex_8) ALLOCATE (csr_mat%nzval_local%c_dp(nze_local)) CASE DEFAULT DBCSR_ABORT("Invalid matrix type") END SELECT csr_mat%mp_group = mp_group csr_mat%valid = .TRUE. csr_mat%has_mapping = .FALSE. csr_mat%has_indices = .FALSE. CALL timestop(handle) END SUBROUTINE csr_create_new SUBROUTINE csr_create_template(matrix_b, matrix_a) !! Create a new CSR matrix and allocate all internal data using !! an existing CSR matrix. Copies the indices but no actual matrix data. TYPE(csr_type), INTENT(OUT) :: matrix_b !! Target CSR matrix TYPE(csr_type), INTENT(IN) :: matrix_a !! Source CSR matrix CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_create_template' INTEGER :: handle TYPE(csr_mapping_data) :: map CALL timeset(routineN, handle) IF (.NOT. matrix_a%valid) & DBCSR_ABORT("Source CSR matrix must be created.") CALL csr_create_new(matrix_b, matrix_a%nrows_total, matrix_a%ncols_total, & matrix_a%nze_total, matrix_a%nze_local, matrix_a%nrows_local, & matrix_a%mp_group, matrix_a%nzval_local%data_type) matrix_b%mp_group = matrix_a%mp_group matrix_b%has_mapping = matrix_a%has_mapping matrix_b%has_indices = matrix_a%has_indices IF (matrix_a%has_indices) THEN matrix_b%rowptr_local = matrix_a%rowptr_local matrix_b%nzerow_local = matrix_a%nzerow_local matrix_b%colind_local = matrix_a%colind_local END IF IF (matrix_a%has_mapping) THEN map = matrix_a%dbcsr_mapping ALLOCATE (matrix_b%dbcsr_mapping%csr_to_brd_ind(SIZE(map%csr_to_brd_ind))) ALLOCATE (matrix_b%dbcsr_mapping%brd_to_csr_ind(SIZE(map%brd_to_csr_ind))) matrix_b%dbcsr_mapping%csr_to_brd_ind = map%csr_to_brd_ind matrix_b%dbcsr_mapping%brd_to_csr_ind = map%brd_to_csr_ind matrix_b%dbcsr_mapping%has_dbcsr_block_data = map%has_dbcsr_block_data IF (matrix_b%dbcsr_mapping%has_dbcsr_block_data) THEN matrix_b%dbcsr_mapping%dbcsr_nblkcols_total = map%dbcsr_nblkcols_total matrix_b%dbcsr_mapping%dbcsr_nblkrows_total = map%dbcsr_nblkrows_total ALLOCATE (matrix_b%dbcsr_mapping%dbcsr_row_blk_size(map%dbcsr_nblkrows_total)) ALLOCATE (matrix_b%dbcsr_mapping%dbcsr_col_blk_size(map%dbcsr_nblkcols_total)) ALLOCATE (matrix_b%dbcsr_mapping%dbcsr_row_p(map%dbcsr_nblkrows_total + 1)) ALLOCATE (matrix_b%dbcsr_mapping%dbcsr_col_i(map%dbcsr_nblks_local)) matrix_b%dbcsr_mapping%dbcsr_nblks_local = map%dbcsr_nblks_local matrix_b%dbcsr_mapping%dbcsr_row_p = map%dbcsr_row_p matrix_b%dbcsr_mapping%dbcsr_col_i = map%dbcsr_col_i matrix_b%dbcsr_mapping%dbcsr_row_blk_size = map%dbcsr_row_blk_size matrix_b%dbcsr_mapping%dbcsr_col_blk_size = map%dbcsr_col_blk_size END IF CALL dbcsr_copy(matrix_b%dbcsr_mapping%brd_mat, map%brd_mat) matrix_b%valid = .TRUE. END IF CALL timestop(handle) END SUBROUTINE csr_create_template SUBROUTINE csr_create_nzerow(csr_mat, nzerow) !! create a vector containing the number of non-zero elements in each !! row of a CSR matrix TYPE(csr_type), INTENT(IN) :: csr_mat !! CSR matrix INTEGER, DIMENSION(:), INTENT(INOUT), POINTER :: nzerow !! number of non-zero elements in each row CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_create_nzerow' INTEGER :: handle, k CALL timeset(routineN, handle) IF (.NOT. csr_mat%valid) & DBCSR_ABORT("CSR matrix must be created.") DO k = 1, csr_mat%nrows_local nzerow(k) = csr_mat%rowptr_local(k + 1) - csr_mat%rowptr_local(k) END DO CALL timestop(handle) END SUBROUTINE csr_create_nzerow SUBROUTINE csr_destroy(csr_mat) !! destroy a CSR matrix TYPE(csr_type), INTENT(INOUT) :: csr_mat CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_destroy' INTEGER :: handle TYPE(csr_mapping_data) :: map CALL timeset(routineN, handle) IF (.NOT. csr_mat%valid) & DBCSR_ABORT("CSR matrix must be created before destroying it.") IF (ASSOCIATED(csr_mat%rowptr_local)) DEALLOCATE (csr_mat%rowptr_local) IF (ASSOCIATED(csr_mat%nzerow_local)) DEALLOCATE (csr_mat%nzerow_local) IF (ASSOCIATED(csr_mat%colind_local)) DEALLOCATE (csr_mat%colind_local) IF (csr_mat%has_mapping) THEN map = csr_mat%dbcsr_mapping IF (ASSOCIATED(map%csr_to_brd_ind)) & DEALLOCATE (map%csr_to_brd_ind) IF (ASSOCIATED(map%brd_to_csr_ind)) & DEALLOCATE (map%brd_to_csr_ind) IF (ASSOCIATED(map%dbcsr_row_blk_size)) & DEALLOCATE (map%dbcsr_row_blk_size) IF (ASSOCIATED(map%dbcsr_col_blk_size)) & DEALLOCATE (map%dbcsr_col_blk_size) IF (ASSOCIATED(map%dbcsr_row_p)) & DEALLOCATE (map%dbcsr_row_p) IF (ASSOCIATED(map%dbcsr_col_i)) & DEALLOCATE (map%dbcsr_col_i) CALL dbcsr_release(map%brd_mat) END IF IF (ASSOCIATED(csr_mat%nzval_local%r_dp)) & DEALLOCATE (csr_mat%nzval_local%r_dp) IF (ASSOCIATED(csr_mat%nzval_local%r_sp)) & DEALLOCATE (csr_mat%nzval_local%r_sp) IF (ASSOCIATED(csr_mat%nzval_local%c_sp)) & DEALLOCATE (csr_mat%nzval_local%c_sp) IF (ASSOCIATED(csr_mat%nzval_local%c_dp)) & DEALLOCATE (csr_mat%nzval_local%c_dp) csr_mat%has_mapping = .FALSE. csr_mat%valid = .FALSE. csr_mat%dbcsr_mapping%has_dbcsr_block_data = .FALSE. csr_mat%has_indices = .FALSE. csr_mat%nzval_local%data_type = -1 CALL timestop(handle) END SUBROUTINE csr_destroy SUBROUTINE csr_create_from_brd(brd_mat, csr_mat, csr_sparsity_brd) !! Allocate the internals of a CSR matrix using data from a block-row !! distributed DBCSR matrix TYPE(dbcsr_type), INTENT(IN) :: brd_mat !! block-row-distributed DBCSR matrix TYPE(csr_type), INTENT(OUT) :: csr_mat !! CSR matrix TYPE(dbcsr_type), INTENT(IN) :: csr_sparsity_brd !! BRD matrix representing sparsity pattern of CSR matrix CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_create_from_brd' INTEGER :: data_type, handle, & nfullcols_total, nfullrows, & nfullrows_total, nze_local INTEGER(KIND=int_8) :: nze_total INTEGER, DIMENSION(:), POINTER :: cdist, csr_index, dbcsr_index TYPE(dbcsr_distribution_obj) :: dist_current TYPE(mp_comm_type) :: mp_group CALL timeset(routineN, handle) NULLIFY (dbcsr_index, csr_index, cdist) dist_current = dbcsr_distribution(brd_mat) mp_group = dbcsr_mp_group(dbcsr_distribution_mp(dist_current)) cdist => dbcsr_distribution_col_dist(dist_current) IF (ANY(cdist .NE. 0)) & DBCSR_ABORT("DBCSR matrix not block-row distributed.") ! Calculate mapping between BRD and CSR indices CALL csr_get_dbcsr_mapping(brd_mat, dbcsr_index, csr_index, nze_local, & csr_sparsity_brd) CALL dbcsr_get_info(brd_mat, nfullrows_total=nfullrows_total, & nfullcols_total=nfullcols_total) ! Sum up local number of non-zero elements to get total number nze_total = nze_local CALL mp_sum(nze_total, mp_group) nfullrows = dbcsr_nfullrows_local(brd_mat) data_type = dbcsr_get_data_type(brd_mat) ! Allocate CSR matrix CALL csr_create_new(csr_mat, nfullrows_total, nfullcols_total, nze_total, & nze_local, nfullrows, mp_group, data_type) csr_mat%dbcsr_mapping%brd_to_csr_ind => csr_index csr_mat%dbcsr_mapping%csr_to_brd_ind => dbcsr_index csr_mat%has_mapping = .TRUE. csr_mat%dbcsr_mapping%brd_mat = brd_mat CALL timestop(handle) END SUBROUTINE csr_create_from_brd SUBROUTINE csr_get_dbcsr_mapping(brd_mat, dbcsr_index, csr_index, csr_nze_local, & csr_sparsity_brd) !! create the mapping information between a block-row distributed DBCSR !! matrix and the corresponding CSR matrix TYPE(dbcsr_type), INTENT(IN) :: brd_mat !! the block-row distributed DBCSR matrix INTEGER, DIMENSION(:), INTENT(OUT), POINTER :: dbcsr_index, csr_index !! csr to dbcsr index mapping !! dbcsr to csr index mapping INTEGER, INTENT(OUT) :: csr_nze_local !! number of local non-zero elements TYPE(dbcsr_type), INTENT(IN) :: csr_sparsity_brd !! sparsity of CSR matrix represented in BRD format CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_get_dbcsr_mapping' INTEGER :: blk, blkcol, blkrow, col_blk_size, csr_ind, data_type, dbcsr_ind, el_sum, & fullcol_sum_blkrow, handle, l, m, n, nblkrows_total, nze, prev_blk, prev_blkrow, & prev_row_blk_size, row_blk_offset, row_blk_size INTEGER, ALLOCATABLE, DIMENSION(:) :: csr_nze, nfullcol_blkrow INTEGER, DIMENSION(:), POINTER :: dbcsr_index_nozeroes LOGICAL :: tr TYPE(dbcsr_iterator) :: iter CALL timeset(routineN, handle) m = 0 dbcsr_ind = 0 fullcol_sum_blkrow = 0 NULLIFY (dbcsr_index, csr_index) CALL dbcsr_get_info(brd_mat, nblkrows_total=nblkrows_total) nze = dbcsr_get_nze(brd_mat) ALLOCATE (nfullcol_blkrow(nblkrows_total)) ALLOCATE (dbcsr_index(nze)) ALLOCATE (csr_index(nze)) CALL dbcsr_iterator_start(iter, brd_mat, read_only=.TRUE.) nfullcol_blkrow = 0 ! number of non-zero full columns in each block row prev_blk = 0 DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, blkrow, blkcol, blk, transposed=tr, & col_size=col_blk_size) IF (blk /= prev_blk + 1) & DBCSR_ABORT("iterator is required to traverse the blocks in a row-wise fashion") prev_blk = blk nfullcol_blkrow(blkrow) = nfullcol_blkrow(blkrow) + col_blk_size IF (tr) & DBCSR_ABORT("DBCSR block data must not be transposed") END DO CALL dbcsr_iterator_stop(iter) el_sum = 0 ! number of elements above current block row prev_blkrow = 0 ! store number and size of previous block row prev_row_blk_size = 0 CALL dbcsr_iterator_start(iter, brd_mat, read_only=.TRUE.) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, blkrow, blkcol, blk, transposed=tr, & row_size=row_blk_size, col_size=col_blk_size, row_offset=row_blk_offset) IF (blkrow .GT. prev_blkrow) THEN ! new block row IF (prev_blkrow .GT. 0) THEN el_sum = el_sum + nfullcol_blkrow(prev_blkrow)*prev_row_blk_size END IF ! number of non-zero full columns on the left of current block: fullcol_sum_blkrow = 0 dbcsr_ind = el_sum END IF DO n = 1, col_blk_size !nr of columns DO m = 1, row_blk_size !nr of rows dbcsr_ind = dbcsr_ind + 1 csr_ind = (m - 1)*nfullcol_blkrow(blkrow) + fullcol_sum_blkrow + n + el_sum dbcsr_index(csr_ind) = dbcsr_ind csr_index(dbcsr_ind) = csr_ind END DO END DO fullcol_sum_blkrow = fullcol_sum_blkrow + col_blk_size prev_blkrow = blkrow prev_row_blk_size = row_blk_size END DO CALL dbcsr_iterator_stop(iter) ! remove BRD zero elements from CSR format data_type = dbcsr_get_data_type(csr_sparsity_brd) ALLOCATE (csr_nze(nze)) SELECT CASE (data_type) CASE (dbcsr_type_real_4) csr_nze(:) = INT(csr_sparsity_brd%data_area%d%r_sp(1:nze)) CASE (dbcsr_type_real_8) csr_nze(:) = INT(csr_sparsity_brd%data_area%d%r_dp(1:nze)) CASE DEFAULT DBCSR_ABORT("CSR sparsity matrix must have a real datatype") END SELECT IF (ANY(csr_nze .EQ. 0)) THEN ALLOCATE (dbcsr_index_nozeroes(SUM(csr_nze))) m = 0 ! csr index if zeroes are excluded from CSR data DO l = 1, nze ! csr index if zeroes are included in CSR data IF (csr_nze(dbcsr_index(l)) .EQ. 0) THEN csr_index(dbcsr_index(l)) = -1 ELSE m = m + 1 dbcsr_index_nozeroes(m) = dbcsr_index(l) csr_index(dbcsr_index(l)) = m END IF END DO DEALLOCATE (dbcsr_index) dbcsr_index => dbcsr_index_nozeroes END IF IF (ANY(csr_nze .EQ. 0)) THEN csr_nze_local = m ELSE csr_nze_local = nze END IF CALL timestop(handle) END SUBROUTINE csr_get_dbcsr_mapping SUBROUTINE convert_csr_to_brd(brd_mat, csr_mat) !! Copies data from a CSR matrix to a block-row distributed DBCSR matrix. !! The DBCSR matrix must have a block structure consistent with the CSR matrix. TYPE(dbcsr_type), INTENT(INOUT) :: brd_mat !! block-row distributed DBCSR matrix TYPE(csr_type), INTENT(IN) :: csr_mat !! CSR matrix CHARACTER(LEN=*), PARAMETER :: routineN = 'convert_csr_to_brd' INTEGER :: data_type, handle, ind, k, nze CALL timeset(routineN, handle) data_type = dbcsr_get_data_type(brd_mat) nze = dbcsr_get_nze(brd_mat) CALL dbcsr_data_release(brd_mat%data_area) CALL dbcsr_data_new(brd_mat%data_area, data_type, nze) SELECT CASE (data_type) CASE (dbcsr_type_real_4) brd_mat%data_area%d%r_sp(1:nze) = 0.0_sp CASE (dbcsr_type_real_8) brd_mat%data_area%d%r_dp(1:nze) = 0.0_dp CASE (dbcsr_type_complex_4) brd_mat%data_area%d%c_sp(1:nze) = 0.0_sp CASE (dbcsr_type_complex_8) brd_mat%data_area%d%c_dp(1:nze) = 0.0_dp END SELECT DO k = 1, csr_mat%nze_local ind = csr_mat%dbcsr_mapping%csr_to_brd_ind(k) SELECT CASE (data_type) CASE (dbcsr_type_real_4) brd_mat%data_area%d%r_sp(ind) = csr_mat%nzval_local%r_sp(k) CASE (dbcsr_type_real_8) brd_mat%data_area%d%r_dp(ind) = csr_mat%nzval_local%r_dp(k) CASE (dbcsr_type_complex_4) brd_mat%data_area%d%c_sp(ind) = csr_mat%nzval_local%c_sp(k) CASE (dbcsr_type_complex_8) brd_mat%data_area%d%c_dp(ind) = csr_mat%nzval_local%c_dp(k) END SELECT END DO CALL timestop(handle) END SUBROUTINE convert_csr_to_brd SUBROUTINE convert_brd_to_csr(brd_mat, csr_mat) !! Convert a block-row distributed DBCSR matrix to a CSR matrix !! The DBCSR matrix must have a block structure consistent with the CSR matrix. TYPE(dbcsr_type), INTENT(IN) :: brd_mat !! block-row distributed DBCSR matrix TYPE(csr_type), INTENT(INOUT) :: csr_mat !! CSR matrix CHARACTER(LEN=*), PARAMETER :: routineN = 'convert_brd_to_csr' INTEGER :: blk, blkcol, blkrow, col_blk_offset, col_blk_size, csr_ind, data_type, dbcsr_ind, & el_sum, handle, ind_blk_data, k, local_row_ind, m, n, nblkrows_total, node_row_offset, & prev_blkrow, prev_row_blk_size, row_blk_offset, row_blk_size INTEGER, ALLOCATABLE, DIMENSION(:) :: nfullcol_blkrow INTEGER, DIMENSION(:), POINTER :: colind, csr_index, dbcsr_index, nzerow, & rowptr LOGICAL :: new_ind, tr TYPE(dbcsr_data_obj) :: block TYPE(dbcsr_iterator) :: iter CALL timeset(routineN, handle) local_row_ind = 0 dbcsr_ind = 0 node_row_offset = 0 NULLIFY (rowptr, colind, dbcsr_index, csr_index) dbcsr_index => csr_mat%dbcsr_mapping%csr_to_brd_ind csr_index => csr_mat%dbcsr_mapping%brd_to_csr_ind ! CSR indices are not recalculated if indices are already defined new_ind = .NOT. (csr_mat%has_indices) IF (.NOT. csr_mat%has_mapping) & DBCSR_ABORT("DBCSR mapping of CSR matrix must be defined") ! Calculate mapping between CSR matrix and DBCSR matrix if not yet defined !IF (.NOT. csr_mat%has_mapping ) THEN ! CALL csr_get_dbcsr_mapping (brd_mat, dbcsr_index, csr_index, nze) !ENDIF CALL dbcsr_get_info(brd_mat, nblkrows_total=nblkrows_total) ALLOCATE (nfullcol_blkrow(nblkrows_total)) ! iteration over blocks without touching data, ! in order to get number of non-zero full columns in each block row CALL dbcsr_iterator_start(iter, brd_mat, read_only=.TRUE.) blkrow = 0 nfullcol_blkrow = 0 ! number of non-zero full columns in each block row data_type = dbcsr_get_data_type(brd_mat) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, blkrow, blkcol, blk, col_size=col_blk_size, & row_offset=row_blk_offset) nfullcol_blkrow(blkrow) = nfullcol_blkrow(blkrow) + col_blk_size IF (blk .EQ. 1) THEN node_row_offset = row_blk_offset END IF END DO CALL dbcsr_iterator_stop(iter) ! Copy data from BRD matrix to CSR matrix and calculate CSR indices prev_blkrow = 0 prev_row_blk_size = 0 el_sum = 0 ! number of elements above current block row colind => csr_mat%colind_local rowptr => csr_mat%rowptr_local nzerow => csr_mat%nzerow_local CALL dbcsr_data_init(block) CALL dbcsr_data_new(block, data_type) CALL dbcsr_iterator_start(iter, brd_mat, read_only=.TRUE.) IF (new_ind) rowptr(:) = 0 ! initialize to 0 in order to check which rows are 0 at a later time DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, blkrow, blkcol, block, tr, & col_size=col_blk_size, row_size=row_blk_size, row_offset=row_blk_offset, & col_offset=col_blk_offset) IF (tr) & DBCSR_ABORT("DBCSR block data must not be transposed") IF (blkrow > prev_blkrow) THEN ! new block row local_row_ind = row_blk_offset - node_row_offset ! actually: local row index - 1 IF (prev_blkrow .GT. 0) THEN el_sum = el_sum + nfullcol_blkrow(prev_blkrow)*prev_row_blk_size END IF dbcsr_ind = el_sum END IF DO n = 1, col_blk_size !nr of columns DO m = 1, row_blk_size !nr of rows dbcsr_ind = dbcsr_ind + 1 csr_ind = csr_index(dbcsr_ind) ! get CSR index for current element IF (csr_ind .GT. 0) THEN ! is non-zero element if csr_ind > 0 IF (new_ind) THEN ! Calculate CSR column index colind(csr_ind) = col_blk_offset + n - 1 ! Calculate CSR row pointer ! (not accounting for zero elements inside non-zero blocks) IF (rowptr(local_row_ind + m) .LE. 0) rowptr(local_row_ind + m) = & rowptr(local_row_ind + m) + el_sum + 1 + nfullcol_blkrow(blkrow)*(m - 1) END IF ind_blk_data = (m + row_blk_size*(n - 1)) ! index of data inside DBCSR blocks SELECT CASE (csr_mat%nzval_local%data_type) CASE (dbcsr_type_real_4) csr_mat%nzval_local%r_sp(csr_ind) = block%d%r_sp(ind_blk_data) CASE (dbcsr_type_real_8) csr_mat%nzval_local%r_dp(csr_ind) = block%d%r_dp(ind_blk_data) CASE (dbcsr_type_complex_4) csr_mat%nzval_local%c_sp(csr_ind) = block%d%c_sp(ind_blk_data) CASE (dbcsr_type_complex_8) csr_mat%nzval_local%c_dp(csr_ind) = block%d%c_dp(ind_blk_data) END SELECT ELSE ! is zero element if ind = -1 ! CSR row pointer has to be corrected if element is zero ! (subtract 1 from all subsequent row pointers) IF (new_ind) rowptr(local_row_ind + m + 1:) = rowptr(local_row_ind + m + 1:) - 1 END IF END DO END DO prev_blkrow = blkrow prev_row_blk_size = row_blk_size END DO IF (new_ind) THEN ! Repeat previous row pointer for row pointers to zero rows IF (csr_mat%nrows_local .GT. 0) rowptr(1) = 1 DO k = 1, csr_mat%nrows_local IF (rowptr(k) .LE. 0) rowptr(k) = rowptr(k - 1) END DO rowptr(csr_mat%nrows_local + 1) = csr_mat%nze_local + 1 END IF CALL csr_create_nzerow(csr_mat, nzerow) CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(block) CALL dbcsr_data_release(block) IF (new_ind) csr_mat%has_indices = .TRUE. CALL timestop(handle) END SUBROUTINE convert_brd_to_csr SUBROUTINE csr_create_from_dbcsr(dbcsr_mat, csr_mat, dist_format, csr_sparsity, numnodes) !! create CSR matrix including dbcsr_mapping from arbitrary DBCSR matrix !! in order to prepare conversion. TYPE(dbcsr_type), INTENT(IN) :: dbcsr_mat TYPE(csr_type), INTENT(OUT) :: csr_mat INTEGER, INTENT(IN) :: dist_format !! how to distribute CSR rows over processes: csr_dbcsr_blkrow_dist: the number of rows per process is adapted to the row !! block sizes in the DBCSR format such that blocks are not split over different processes. csr_eqrow_ceil_dist: each !! process holds ceiling(N/P) CSR rows. csr_eqrow_floor_dist: each process holds floor(N/P) CSR rows. TYPE(dbcsr_type), INTENT(IN), OPTIONAL :: csr_sparsity !! DBCSR matrix containing 0 and 1, representing CSR sparsity pattern 1: non-zero element 0: zero element (not present in !! CSR format) Note: matrix must be of data_type dbcsr_type_real_4 or dbcsr_type_real_8 (integer types not supported) INTEGER, INTENT(IN), OPTIONAL :: numnodes !! number of nodes to use for distributing CSR matrix (optional, default is number of nodes used for DBCSR matrix) CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_create_from_dbcsr' INTEGER :: dbcsr_numnodes, handle, nblkcols_total, & nblkrows_total, nblks_local, num_p LOGICAL :: equal_dist, floor_dist TYPE(dbcsr_type) :: brd_mat, csr_sparsity_brd, & csr_sparsity_nosym, dbcsr_mat_nosym CALL timeset(routineN, handle) IF (.NOT. dbcsr_valid_index(dbcsr_mat)) & DBCSR_ABORT("Invalid DBCSR matrix") SELECT CASE (dist_format) CASE (csr_dbcsr_blkrow_dist) equal_dist = .FALSE. floor_dist = .FALSE. CASE (csr_eqrow_ceil_dist) equal_dist = .TRUE. floor_dist = .FALSE. CASE (csr_eqrow_floor_dist) equal_dist = .TRUE. floor_dist = .TRUE. END SELECT ! Conversion does not support matrices in symmetric format, therefore desymmetrize IF (dbcsr_has_symmetry(dbcsr_mat)) THEN CALL dbcsr_desymmetrize_deep(dbcsr_mat, dbcsr_mat_nosym, untransposed_data=.TRUE.) ELSE CALL dbcsr_copy(dbcsr_mat_nosym, dbcsr_mat) END IF IF (PRESENT(csr_sparsity)) THEN IF (dbcsr_has_symmetry(csr_sparsity)) THEN CALL dbcsr_desymmetrize_deep(csr_sparsity, csr_sparsity_nosym, & untransposed_data=.TRUE.) ELSE CALL dbcsr_copy(csr_sparsity_nosym, csr_sparsity) END IF ELSE CALL dbcsr_create(csr_sparsity_nosym, & template=dbcsr_mat_nosym, & name="CSR sparsity matrix", & data_type=dbcsr_type_real_8) CALL dbcsr_copy(csr_sparsity_nosym, dbcsr_mat_nosym) CALL dbcsr_set(csr_sparsity_nosym, 1.0_dp) END IF IF (.NOT. dbcsr_has_same_block_structure(dbcsr_mat_nosym, csr_sparsity_nosym)) & DBCSR_ABORT("csr_sparsity and dbcsr_mat have different sparsity pattern") dbcsr_numnodes = dbcsr_mp_numnodes(dbcsr_distribution_mp(dbcsr_distribution(dbcsr_mat))) IF (PRESENT(numnodes)) THEN IF (numnodes .GT. dbcsr_numnodes) & CALL dbcsr_abort(__LOCATION__, "Number of nodes used for CSR matrix "// & "must not exceed total number of nodes") num_p = numnodes ELSE num_p = dbcsr_numnodes END IF CALL dbcsr_create_brd(dbcsr_mat_nosym, brd_mat, equal_dist, floor_dist, & num_p) CALL dbcsr_create_brd(csr_sparsity_nosym, csr_sparsity_brd, equal_dist, floor_dist, & num_p) ! Create CSR matrix from BRD matrix CALL csr_create_from_brd(brd_mat, csr_mat, csr_sparsity_brd) ! Store DBCSR block data inside CSR matrix ! (otherwise, this data is lost when converting from DBCSR to CSR) nblks_local = dbcsr_get_num_blocks(dbcsr_mat_nosym) nblkrows_total = dbcsr_nblkrows_total(dbcsr_mat_nosym) nblkcols_total = dbcsr_nblkcols_total(dbcsr_mat_nosym) csr_mat%dbcsr_mapping%dbcsr_nblkcols_total = nblkcols_total csr_mat%dbcsr_mapping%dbcsr_nblkrows_total = nblkrows_total csr_mat%dbcsr_mapping%dbcsr_nblks_local = nblks_local ALLOCATE (csr_mat%dbcsr_mapping%dbcsr_row_p(nblkrows_total + 1)) csr_mat%dbcsr_mapping%dbcsr_row_p = dbcsr_mat_nosym%row_p ALLOCATE (csr_mat%dbcsr_mapping%dbcsr_col_i(nblks_local)) csr_mat%dbcsr_mapping%dbcsr_col_i = dbcsr_mat_nosym%col_i ALLOCATE (csr_mat%dbcsr_mapping%dbcsr_row_blk_size(nblkrows_total)) ALLOCATE (csr_mat%dbcsr_mapping%dbcsr_col_blk_size(nblkcols_total)) csr_mat%dbcsr_mapping%dbcsr_row_blk_size = dbcsr_row_block_sizes(dbcsr_mat_nosym) csr_mat%dbcsr_mapping%dbcsr_col_blk_size = dbcsr_col_block_sizes(dbcsr_mat_nosym) csr_mat%dbcsr_mapping%has_dbcsr_block_data = .TRUE. CALL dbcsr_release(dbcsr_mat_nosym) CALL dbcsr_release(csr_sparsity_nosym) CALL dbcsr_release(csr_sparsity_brd) CALL timestop(handle) END SUBROUTINE csr_create_from_dbcsr FUNCTION dbcsr_has_same_block_structure(matrix_a, matrix_b) RESULT(is_equal) !! Helper function to assert that two DBCSR matrices have the same block !! structure and same sparsity pattern TYPE(dbcsr_type), INTENT(IN) :: matrix_a, matrix_b LOGICAL :: is_equal !! whether matrix_a and matrix_b have the same block structure is_equal = .TRUE. IF (dbcsr_nblkcols_total(matrix_a) .NE. dbcsr_nblkcols_total(matrix_b)) is_equal = .FALSE. IF (dbcsr_nblkrows_total(matrix_a) .NE. dbcsr_nblkrows_total(matrix_b)) is_equal = .FALSE. IF ((matrix_a%nblks) .NE. (matrix_b%nblks)) is_equal = .FALSE. IF (ANY(matrix_a%row_p .NE. matrix_b%row_p)) is_equal = .FALSE. IF (ANY(matrix_a%col_i .NE. matrix_b%col_i)) is_equal = .FALSE. IF (ANY(dbcsr_row_block_sizes(matrix_a) .NE. & dbcsr_row_block_sizes(matrix_b))) is_equal = .FALSE. IF (ANY(dbcsr_row_block_sizes(matrix_a) .NE. & dbcsr_row_block_sizes(matrix_b))) is_equal = .FALSE. END FUNCTION dbcsr_has_same_block_structure SUBROUTINE csr_assert_consistency_with_dbcsr(csr_mat, dbcsr_mat) !! Helper function to assert that a given CSR matrix and a given DBCSR !! matrix are consistent before doing the conversion TYPE(csr_type), INTENT(IN) :: csr_mat TYPE(dbcsr_type), INTENT(IN) :: dbcsr_mat CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_assert_consistency_with_dbcsr' INTEGER :: handle TYPE(csr_mapping_data) :: map CALL timeset(routineN, handle) map = csr_mat%dbcsr_mapping IF (map%has_dbcsr_block_data) THEN IF (map%dbcsr_nblkcols_total .NE. dbcsr_nblkcols_total(dbcsr_mat)) & CALL dbcsr_abort(__LOCATION__, & "field nblkcols_total of DBCSR matrix not consistent with CSR matrix") IF (map%dbcsr_nblkrows_total .NE. dbcsr_nblkrows_total(dbcsr_mat)) & CALL dbcsr_abort(__LOCATION__, & "field nblkrows_total of DBCSR matrix not consistent with CSR matrix") IF (map%dbcsr_nblks_local .NE. dbcsr_mat%nblks) & CALL dbcsr_abort(__LOCATION__, & "field nblks of DBCSR matrix not consistent with CSR matrix") IF (ANY(map%dbcsr_row_p .NE. dbcsr_mat%row_p)) & CALL dbcsr_abort(__LOCATION__, & "field row_p of DBCSR matrix not consistent with CSR matrix") IF (ANY(map%dbcsr_col_i .NE. dbcsr_mat%col_i)) & CALL dbcsr_abort(__LOCATION__, & "field dbcsr_col_i of DBCSR matrix not consistent with CSR matrix") IF (ANY(map%dbcsr_row_blk_size .NE. dbcsr_row_block_sizes(dbcsr_mat))) & CALL dbcsr_abort(__LOCATION__, & "field row_blk_size of DBCSR matrix not consistent with CSR matrix") IF (ANY(map%dbcsr_col_blk_size .NE. dbcsr_col_block_sizes(dbcsr_mat))) & CALL dbcsr_abort(__LOCATION__, & "field col_blk_size of DBCSR matrix not consistent with CSR matrix") ELSE CALL dbcsr_warn(__LOCATION__, "Can not assert consistency of the matrices "// & "as no block data stored in CSR matrix.") END IF CALL timestop(handle) END SUBROUTINE csr_assert_consistency_with_dbcsr SUBROUTINE convert_dbcsr_to_csr(dbcsr_mat, csr_mat) !! Convert a DBCSR matrix to a CSR matrix. TYPE(dbcsr_type), INTENT(IN) :: dbcsr_mat !! DBCSR matrix to convert TYPE(csr_type), INTENT(INOUT) :: csr_mat !! correctly allocated CSR matrix CHARACTER(LEN=*), PARAMETER :: routineN = 'convert_dbcsr_to_csr' INTEGER :: handle TYPE(dbcsr_type) :: dbcsr_mat_nosym CALL timeset(routineN, handle) IF (.NOT. dbcsr_valid_index(dbcsr_mat)) & DBCSR_ABORT("Invalid DBCSR matrix") IF (dbcsr_get_data_type(dbcsr_mat) /= csr_mat%nzval_local%data_type) & DBCSR_ABORT("DBCSR and CSR matrix must have same type") IF (.NOT. csr_mat%has_mapping) & DBCSR_ABORT("CSR_mat must contain mapping to DBCSR format") IF (dbcsr_has_symmetry(dbcsr_mat)) THEN CALL dbcsr_desymmetrize_deep(dbcsr_mat, dbcsr_mat_nosym, untransposed_data=.TRUE.) ELSE dbcsr_mat_nosym = dbcsr_mat END IF CALL csr_assert_consistency_with_dbcsr(csr_mat, dbcsr_mat_nosym) ! 1) DBCSR -> BRD CALL dbcsr_complete_redistribute(dbcsr_mat_nosym, csr_mat%dbcsr_mapping%brd_mat) ! 2) BRD -> CSR CALL convert_brd_to_csr(csr_mat%dbcsr_mapping%brd_mat, csr_mat) IF (dbcsr_has_symmetry(dbcsr_mat)) CALL dbcsr_release(dbcsr_mat_nosym) CALL timestop(handle) END SUBROUTINE convert_dbcsr_to_csr SUBROUTINE convert_csr_to_dbcsr(dbcsr_mat, csr_mat) !! convert a CSR matrix to a DBCSR matrix TYPE(dbcsr_type), INTENT(INOUT) :: dbcsr_mat !! correctly allocated DBCSR matrix TYPE(csr_type), INTENT(INOUT) :: csr_mat !! CSR matrix to convert CHARACTER(LEN=*), PARAMETER :: routineN = 'convert_csr_to_dbcsr' INTEGER :: handle TYPE(dbcsr_type) :: dbcsr_mat_nosym CALL timeset(routineN, handle) IF (.NOT. dbcsr_valid_index(dbcsr_mat)) & DBCSR_ABORT("Invalid DBCSR matrix") IF (dbcsr_get_data_type(dbcsr_mat) /= csr_mat%nzval_local%data_type) & DBCSR_ABORT("DBCSR and CSR matrix must have same type") IF (.NOT. csr_mat%has_mapping) & DBCSR_ABORT("CSR_mat must contain mapping to DBCSR format") ! Desymmetrize to assert that DBCSR matrix has sparsity pattern consistent with CSR matrix IF (dbcsr_has_symmetry(dbcsr_mat)) THEN CALL dbcsr_desymmetrize_deep(dbcsr_mat, dbcsr_mat_nosym, untransposed_data=.TRUE.) ELSE dbcsr_mat_nosym = dbcsr_mat END IF CALL csr_assert_consistency_with_dbcsr(csr_mat, dbcsr_mat_nosym) IF (dbcsr_has_symmetry(dbcsr_mat)) CALL dbcsr_release(dbcsr_mat_nosym) ! 1) CSR -> BRD CALL convert_csr_to_brd(csr_mat%dbcsr_mapping%brd_mat, csr_mat) ! 2) BRD -> DBCSR CALL dbcsr_complete_redistribute(csr_mat%dbcsr_mapping%brd_mat, dbcsr_mat) CALL timestop(handle) END SUBROUTINE convert_csr_to_dbcsr SUBROUTINE dbcsr_to_csr_filter(dbcsr_mat, csr_sparsity, eps) !! Apply filtering threshold eps to DBCSR blocks in order to improve !! CSR sparsity (currently only used for testing purposes) TYPE(dbcsr_type), INTENT(IN) :: dbcsr_mat TYPE(dbcsr_type), INTENT(OUT) :: csr_sparsity REAL(kind=real_8), INTENT(IN) :: eps INTEGER :: blkcol, blkrow, col_blk_size, data_type, & row_blk_size LOGICAL :: tr REAL(kind=real_8), ALLOCATABLE, DIMENSION(:) :: block_abs, csr_sparsity_blk TYPE(dbcsr_data_obj) :: block TYPE(dbcsr_iterator) :: iter !REAL(kind=real_8), DIMENSION(:), POINTER :: block CALL dbcsr_create(csr_sparsity, & template=dbcsr_mat, & name="CSR sparsity", & data_type=dbcsr_type_real_8) CALL dbcsr_copy(csr_sparsity, dbcsr_mat) CALL dbcsr_set(csr_sparsity, 1.0_dp) IF (eps .GT. 0.0_dp) THEN data_type = dbcsr_get_data_type(dbcsr_mat) CALL dbcsr_data_init(block) CALL dbcsr_data_new(block, data_type) CALL dbcsr_iterator_start(iter, dbcsr_mat, read_only=.TRUE.) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, blkrow, blkcol, block, transposed=tr, & row_size=row_blk_size, col_size=col_blk_size) ALLOCATE (block_abs(row_blk_size*col_blk_size)) ALLOCATE (csr_sparsity_blk(row_blk_size*col_blk_size)) SELECT CASE (data_type) CASE (dbcsr_type_real_4) block_abs(:) = REAL(ABS(block%d%r_sp(:)), KIND=real_8) CASE (dbcsr_type_real_8) block_abs(:) = REAL(ABS(block%d%r_dp(:)), KIND=real_8) CASE (dbcsr_type_complex_4) block_abs(:) = REAL(ABS(block%d%c_sp(:)), KIND=real_8) CASE (dbcsr_type_complex_8) block_abs(:) = REAL(ABS(block%d%c_dp(:)), KIND=real_8) END SELECT csr_sparsity_blk = 1.0_dp WHERE (block_abs .LT. eps) csr_sparsity_blk = 0.0_dp CALL dbcsr_put_block(csr_sparsity, blkrow, blkcol, csr_sparsity_blk, transposed=tr) DEALLOCATE (csr_sparsity_blk, block_abs) END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(block) CALL dbcsr_data_release(block) END IF END SUBROUTINE dbcsr_to_csr_filter SUBROUTINE csr_write(csr_mat, unit_nr, upper_triangle, threshold, binary) !! Write a CSR matrix to file TYPE(csr_type), INTENT(IN) :: csr_mat INTEGER, INTENT(IN) :: unit_nr !! unit number to which output is written LOGICAL, INTENT(IN), OPTIONAL :: upper_triangle !! If true (default: false), write only upper triangular part of matrix REAL(KIND=real_8), INTENT(IN), OPTIONAL :: threshold !! threshold on the absolute value of the elements to be printed LOGICAL, INTENT(IN), OPTIONAL :: binary CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_write' CHARACTER(LEN=default_string_length) :: data_format COMPLEX(KIND=real_4), ALLOCATABLE, DIMENSION(:) :: nzval_to_master_c_sp COMPLEX(KIND=real_8), ALLOCATABLE, DIMENSION(:) :: nzval_to_master_c_dp INTEGER :: handle, i, ii, k, l, m, mynode, & numnodes, rowind, tag1, tag2, tag3 INTEGER, ALLOCATABLE, DIMENSION(:) :: colind_to_master, nzerow_to_master, & sizes_numrowlocal, sizes_nzelocal LOGICAL :: bin, ut REAL(KIND=real_4), ALLOCATABLE, DIMENSION(:) :: nzval_to_master_r_sp REAL(KIND=real_8) :: thld REAL(KIND=real_8), ALLOCATABLE, DIMENSION(:) :: nzval_to_master_r_dp CALL timeset(routineN, handle) IF (PRESENT(upper_triangle)) THEN ut = upper_triangle ELSE ut = .FALSE. END IF IF (PRESENT(threshold)) THEN thld = threshold ELSE thld = 0.0_dp END IF IF (PRESENT(binary)) THEN bin = binary ELSE bin = .FALSE. END IF IF (.NOT. csr_mat%valid) & DBCSR_ABORT("can not write invalid CSR matrix") tag1 = 0 tag2 = 1 tag3 = 2 CALL mp_environ(numnodes, mynode, csr_mat%mp_group) ! gather sizes (number of local non-zero elements and number of local rows) ALLOCATE (sizes_nzelocal(numnodes)) ALLOCATE (sizes_numrowlocal(numnodes)) CALL mp_gather(csr_mat%nze_local, sizes_nzelocal, 0, csr_mat%mp_group) CALL mp_gather(csr_mat%nrows_local, sizes_numrowlocal, 0, csr_mat%mp_group) ! for each node, send matrix data to node 0 (master) and write data DO i = 0, numnodes - 1 ii = i IF (mynode .EQ. 0) THEN ! allocations for receiving data from node i ALLOCATE (colind_to_master(sizes_nzelocal(ii + 1))) ALLOCATE (nzerow_to_master(sizes_numrowlocal(ii + 1))) SELECT CASE (csr_mat%nzval_local%data_type) CASE (dbcsr_type_real_4) data_format = "(2(I8),E23.6E2)" ALLOCATE (nzval_to_master_r_sp(sizes_nzelocal(ii + 1))) CASE (dbcsr_type_real_8) data_format = "(2(I8),E23.14E3)" ALLOCATE (nzval_to_master_r_dp(sizes_nzelocal(ii + 1))) CASE (dbcsr_type_complex_4) data_format = "(2(I8),2(E23.6E2))" ALLOCATE (nzval_to_master_c_sp(sizes_nzelocal(ii + 1))) CASE (dbcsr_type_complex_8) data_format = "(2(I8),2(E23.14E3))" ALLOCATE (nzval_to_master_c_dp(sizes_nzelocal(ii + 1))) END SELECT END IF IF (mynode .EQ. 0) THEN ! receive at node 0 IF (ii .EQ. 0) THEN ! data from node 0, no need for mpi routines colind_to_master(:) = csr_mat%colind_local(:) nzerow_to_master(:) = csr_mat%nzerow_local(:) SELECT CASE (csr_mat%nzval_local%data_type) CASE (dbcsr_type_real_4) nzval_to_master_r_sp(:) = csr_mat%nzval_local%r_sp(:) CASE (dbcsr_type_real_8) nzval_to_master_r_dp(:) = csr_mat%nzval_local%r_dp(:) CASE (dbcsr_type_complex_4) nzval_to_master_c_sp(:) = csr_mat%nzval_local%c_sp(:) CASE (dbcsr_type_complex_8) nzval_to_master_c_dp(:) = csr_mat%nzval_local%c_dp(:) END SELECT ELSE ! receive data from nodes with rank > 0 CALL mp_recv(colind_to_master, ii, tag1, csr_mat%mp_group) CALL mp_recv(nzerow_to_master, ii, tag2, csr_mat%mp_group) SELECT CASE (csr_mat%nzval_local%data_type) CASE (dbcsr_type_real_4) CALL mp_recv(nzval_to_master_r_sp, ii, tag3, csr_mat%mp_group) CASE (dbcsr_type_real_8) CALL mp_recv(nzval_to_master_r_dp, ii, tag3, csr_mat%mp_group) CASE (dbcsr_type_complex_4) CALL mp_recv(nzval_to_master_c_sp, ii, tag3, csr_mat%mp_group) CASE (dbcsr_type_complex_8) CALL mp_recv(nzval_to_master_c_dp, ii, tag3, csr_mat%mp_group) END SELECT END IF END IF IF ((mynode .EQ. ii) .AND. (ii .NE. 0)) THEN ! send from nodes with rank > 0 CALL mp_send(csr_mat%colind_local, 0, tag1, csr_mat%mp_group) CALL mp_send(csr_mat%nzerow_local, 0, tag2, csr_mat%mp_group) SELECT CASE (csr_mat%nzval_local%data_type) CASE (dbcsr_type_real_4) CALL mp_send(csr_mat%nzval_local%r_sp, 0, tag3, csr_mat%mp_group) CASE (dbcsr_type_real_8) CALL mp_send(csr_mat%nzval_local%r_dp, 0, tag3, csr_mat%mp_group) CASE (dbcsr_type_complex_4) CALL mp_send(csr_mat%nzval_local%c_sp, 0, tag3, csr_mat%mp_group) CASE (dbcsr_type_complex_8) CALL mp_send(csr_mat%nzval_local%c_dp, 0, tag3, csr_mat%mp_group) END SELECT END IF IF (mynode .EQ. 0) THEN ! write data received at node 0 !WRITE(unit_nr,"(A27)") "#row ind, col ind, value" m = 0 DO k = 1, sizes_numrowlocal(ii + 1) rowind = k + SUM(sizes_numrowlocal(1:ii)) ! row index: local to global DO l = 1, nzerow_to_master(k) m = m + 1 IF ((.NOT. ut) .OR. (rowind .LE. colind_to_master(m))) THEN SELECT CASE (csr_mat%nzval_local%data_type) CASE (dbcsr_type_real_4) IF (ABS(nzval_to_master_r_sp(m)) .GE. thld) THEN IF (bin) THEN WRITE (unit_nr) rowind, colind_to_master(m), nzval_to_master_r_sp(m) ELSE WRITE (unit_nr, data_format) rowind, colind_to_master(m), & nzval_to_master_r_sp(m) END IF END IF CASE (dbcsr_type_real_8) IF (ABS(nzval_to_master_r_dp(m)) .GE. thld) THEN IF (bin) THEN WRITE (unit_nr) rowind, colind_to_master(m), nzval_to_master_r_dp(m) ELSE WRITE (unit_nr, data_format) rowind, colind_to_master(m), & nzval_to_master_r_dp(m) END IF END IF CASE (dbcsr_type_complex_4) IF (ABS(nzval_to_master_c_sp(m)) .GE. thld) THEN IF (bin) THEN WRITE (unit_nr) rowind, colind_to_master(m), nzval_to_master_c_sp(m) ELSE WRITE (unit_nr, data_format) rowind, colind_to_master(m), & nzval_to_master_c_sp(m) END IF END IF CASE (dbcsr_type_complex_8) IF (ABS(nzval_to_master_c_dp(m)) .GE. thld) THEN IF (bin) THEN WRITE (unit_nr) rowind, colind_to_master(m), nzval_to_master_c_dp(m) ELSE WRITE (unit_nr, data_format) rowind, colind_to_master(m), & nzval_to_master_c_dp(m) END IF END IF END SELECT END IF END DO END DO DEALLOCATE (colind_to_master) DEALLOCATE (nzerow_to_master) SELECT CASE (csr_mat%nzval_local%data_type) CASE (dbcsr_type_real_4) DEALLOCATE (nzval_to_master_r_sp) CASE (dbcsr_type_real_8) DEALLOCATE (nzval_to_master_r_dp) CASE (dbcsr_type_complex_4) DEALLOCATE (nzval_to_master_c_sp) CASE (dbcsr_type_complex_8) DEALLOCATE (nzval_to_master_c_dp) END SELECT END IF END DO CALL timestop(handle) END SUBROUTINE csr_write SUBROUTINE csr_print_sparsity(csr_mat, unit_nr) !! Print CSR sparsity TYPE(csr_type), INTENT(IN) :: csr_mat INTEGER, INTENT(IN) :: unit_nr CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_print_sparsity' INTEGER :: handle, mynode, numnodes INTEGER(KIND=int_8) :: dbcsr_nze_total REAL(KIND=real_8) :: dbcsr_nze_percentage, nze_percentage CALL timeset(routineN, handle) IF (.NOT. csr_mat%valid) & DBCSR_ABORT("CSR matrix must be created first") nze_percentage = 100.0_dp*(REAL(csr_mat%nze_total, KIND=real_8) & /REAL(csr_mat%nrows_total, KIND=real_8)) & /REAL(csr_mat%ncols_total, KIND=real_8) IF (csr_mat%has_mapping) THEN dbcsr_nze_total = dbcsr_get_nze(csr_mat%dbcsr_mapping%brd_mat) CALL mp_sum(dbcsr_nze_total, csr_mat%mp_group) dbcsr_nze_percentage = 100.0_dp*(REAL(dbcsr_nze_total, KIND=real_8) & /REAL(csr_mat%nrows_total, KIND=real_8)) & /REAL(csr_mat%ncols_total, KIND=real_8) END IF CALL mp_environ(numnodes, mynode, csr_mat%mp_group) IF (mynode .EQ. 0) THEN WRITE (unit_nr, "(T15,A,T68,I13)") "Number of CSR non-zero elements:", csr_mat%nze_total WRITE (unit_nr, "(T15,A,T75,F6.2)") "Percentage CSR non-zero elements:", nze_percentage !IF(csr_mat%has_mapping) THEN ! WRITE(unit_nr,"(T15,A,T75,F6.2/)") "Percentage DBCSR non-zero elements:", dbcsr_nze_percentage !ENDIF END IF CALL timestop(handle) END SUBROUTINE csr_print_sparsity SUBROUTINE dbcsr_create_brd(dbcsr_mat, brd_mat, equal_dist, floor_dist, numnodes) !! Converts a DBCSR matrix to a block row distributed matrix. TYPE(dbcsr_type), INTENT(IN) :: dbcsr_mat !! DBCSR matrix to be converted TYPE(dbcsr_type), INTENT(OUT) :: brd_mat !! converted matrix LOGICAL, INTENT(IN) :: equal_dist, floor_dist !! see documentation of csr_create_from_dbcsr !! see documentation of csr_create_from_dbcsr INTEGER, INTENT(IN) :: numnodes !! number of nodes to use for block row distribution CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_create_brd' CHARACTER :: matrix_type CHARACTER(LEN=default_string_length) :: matrix_name INTEGER :: cs, data_type, end_ind, handle, i, k, l, m, mynode, nblkcols_total, & nblkrows_total, nfullrows_local, nfullrows_total, node_size, numnodes_total, row_index, & split_row, start_ind INTEGER, ALLOCATABLE, DIMENSION(:) :: rdist_tmp, row_blk_size_new_tmp INTEGER, ALLOCATABLE, DIMENSION(:, :) :: pgrid INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: cdist, col_blk_size, rdist, & row_blk_size, row_blk_size_new REAL(KIND=real_8) :: chunk_size TYPE(dbcsr_distribution_obj) :: dist_current, dist_new TYPE(dbcsr_mp_obj) :: mp_obj_current, mp_obj_new TYPE(mp_comm_type) :: mp_group CALL timeset(routineN, handle) NULLIFY (row_blk_size, rdist, row_blk_size_new) CALL dbcsr_get_info(dbcsr_mat, & nblkrows_total=nblkrows_total, & nblkcols_total=nblkcols_total, & nfullrows_total=nfullrows_total, & row_blk_size=row_blk_size, & col_blk_size=col_blk_size, & matrix_type=matrix_type, & data_type=data_type) matrix_name = dbcsr_name(dbcsr_mat) ALLOCATE (cdist(nblkcols_total)) cdist = 0 dist_current = dbcsr_distribution(dbcsr_mat) mp_obj_current = dbcsr_distribution_mp(dist_current) mp_group = dbcsr_mp_group(mp_obj_current) mynode = dbcsr_mp_mynode(mp_obj_current) numnodes_total = dbcsr_mp_numnodes(mp_obj_current) ALLOCATE (pgrid(numnodes_total, 1)) IF (equal_dist) THEN ! Equally distribute rows over processors -> cut blocks ! Calculate the number of rows a processor can hold IF (floor_dist) THEN nfullrows_local = FLOOR(REAL(nfullrows_total, KIND=dp)/numnodes) ELSE nfullrows_local = CEILING(REAL(nfullrows_total, KIND=dp)/numnodes) END IF ! allocate maximum amount of memory possibly needed ALLOCATE (rdist_tmp(nblkrows_total + numnodes - 1)) ! row distribution ALLOCATE (row_blk_size_new_tmp(nblkrows_total + numnodes - 1)) ! new sizes of block rows k = 0 ! counter for block rows m = 0 ! node counter node_size = nfullrows_local ! space available on current node in number of rows IF (node_size .GT. 0) THEN DO l = 1, nblkrows_total split_row = row_blk_size(l) ! size of current block row (number of rows) DO WHILE (split_row .GE. node_size) ! cut block row and send it to two nodes k = k + 1 m = m + 1 row_blk_size_new_tmp(k) = node_size ! size of first part of block row rdist_tmp(k) = m - 1 ! send first part to node m split_row = split_row - node_size ! size of remaining part of block rows node_size = nfullrows_local ! space available on next node IF (floor_dist .AND. (m .EQ. numnodes - 1)) THEN ! send all remaining rows to last node node_size = nfullrows_total - (numnodes - 1)*node_size END IF END DO IF (split_row .GT. 0) THEN ! enough space left on next node for remaining rows k = k + 1 row_blk_size_new_tmp(k) = split_row ! size of remaining part of block row rdist_tmp(k) = m ! send to next node node_size = node_size - split_row ! remaining space on next node END IF END DO ELSE ! send everything to last node if node_size = 0 rdist_tmp(1:nblkrows_total) = numnodes - 1 row_blk_size_new_tmp(1:nblkrows_total) = row_blk_size ! row blocks unchanged k = nblkrows_total END IF ! Copy data to correctly allocated variables ALLOCATE (row_blk_size_new(k)) row_blk_size_new = row_blk_size_new_tmp(1:k) ALLOCATE (rdist(k)) rdist = rdist_tmp(1:k) ELSE ! Leave block rows intact (do not cut) ALLOCATE (rdist(nblkrows_total)) rdist = 0 IF (numnodes .GT. nblkrows_total) THEN rdist = (/(i, i=0, nblkrows_total - 1)/) ELSE chunk_size = REAL(nblkrows_total, KIND=dp)/numnodes row_index = 0 start_ind = 1 DO i = 0, numnodes - 1 cs = NINT(i*chunk_size) - NINT((i - 1)*chunk_size) end_ind = MIN(start_ind - 1 + cs, nblkrows_total) rdist(start_ind:end_ind) = row_index start_ind = end_ind + 1 row_index = row_index + 1 END DO END IF row_blk_size_new => row_blk_size END IF pgrid(:, :) = RESHAPE((/(i, i=0, numnodes_total - 1)/), (/numnodes_total, 1/)) CALL dbcsr_mp_new(mp_obj_new, mp_group, pgrid, mynode, numnodes=numnodes_total) CALL dbcsr_distribution_new(dist_new, mp_obj_new, rdist, cdist, reuse_arrays=.TRUE.) CALL dbcsr_create(brd_mat, TRIM(matrix_name)//" row-block distributed", & dist_new, matrix_type, row_blk_size_new, col_blk_size, data_type=data_type) CALL dbcsr_complete_redistribute(dbcsr_mat, brd_mat) DEALLOCATE (pgrid) IF (equal_dist) DEALLOCATE (row_blk_size_new) CALL dbcsr_distribution_release(dist_new) CALL dbcsr_mp_release(mp_obj_new) CALL timestop(handle) END SUBROUTINE dbcsr_create_brd END MODULE dbcsr_csr_conversions ================================================ FILE: src/ops/dbcsr_io.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_io !! DBCSR input/output USE dbcsr_array_types, ONLY: array_data USE dbcsr_data_methods, ONLY: dbcsr_data_clear_pointer, & dbcsr_data_get_size_referenced, & dbcsr_data_init, & dbcsr_data_new, & dbcsr_get_data USE dbcsr_dist_methods, ONLY: dbcsr_distribution_mp USE dbcsr_kinds, ONLY: default_string_length, & dp, & real_4, & real_4_size, & real_8, & real_8_size, & sp USE dbcsr_machine, ONLY: default_output_unit USE dbcsr_methods, ONLY: & dbcsr_data_area, dbcsr_distribution, dbcsr_get_data_size, dbcsr_get_data_type, & dbcsr_get_matrix_type, dbcsr_get_num_blocks, dbcsr_name, dbcsr_nblkcols_total, & dbcsr_nblkrows_total, dbcsr_valid_index USE dbcsr_mp_methods, ONLY: dbcsr_mp_group, & dbcsr_mp_pgrid USE dbcsr_mp_operations, ONLY: dbcsr_mp_type_from_anytype USE dbcsr_mpiwrap, ONLY: & file_amode_create, file_amode_rdonly, file_amode_wronly, file_offset, mp_allgather, & mp_environ, mp_file_close, mp_file_get_size, mp_file_open, mp_file_read_at_all, & mp_file_write_at, mp_file_write_at_all, mp_sum, mp_type_descriptor_type, mp_type_size, & mpi_character_size, mpi_integer_size, mp_comm_type, mp_file_type USE dbcsr_transformations, ONLY: dbcsr_datablock_redistribute USE dbcsr_types, ONLY: dbcsr_data_obj, & dbcsr_distribution_obj, & dbcsr_mp_obj, & dbcsr_type, & dbcsr_type_complex_4, & dbcsr_type_complex_8, & dbcsr_type_real_4, & dbcsr_type_real_8 USE dbcsr_work_operations, ONLY: dbcsr_create #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_io' ! Main PUBLIC :: dbcsr_print PUBLIC :: dbcsr_print_block_sum ! Low-level printing ! PUBLIC :: dbcsr_printmat, dbcsr_print2dmat ! Utility printing PUBLIC :: dbcsr_binary_write PUBLIC :: dbcsr_binary_read LOGICAL, PARAMETER :: bcsr_debug = .TRUE. LOGICAL, PARAMETER :: bcsr_info = .FALSE. LOGICAL, PARAMETER :: bcsr_verbose = .FALSE. INTERFACE dbcsr_printmat MODULE PROCEDURE printmat_s, printmat_d, printmat_c, printmat_z END INTERFACE CONTAINS SUBROUTINE dbcsr_print(matrix, nodata, matlab_format, variable_name, unit_nr) !! Prints a BCSR matrix (block-style, not full) TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix LOGICAL, INTENT(IN), OPTIONAL :: nodata, matlab_format !! don't print actual data CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: variable_name INTEGER, INTENT(IN), OPTIONAL :: unit_nr CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_print', routineP = moduleN//':'//routineN COMPLEX(KIND=real_4), DIMENSION(:), POINTER :: c_sp COMPLEX(KIND=real_8), DIMENSION(:), POINTER :: c_dp INTEGER :: ablk_p, bc, blk, blk_p, br, ebr, fblk, & handle, ibr, iunit, lblk, m, mn, n, & sblk INTEGER, DIMENSION(:), POINTER :: col_blk_offset, col_blk_size, & local_cols, local_rows, & row_blk_offset, row_blk_size LOGICAL :: my_matlab_format, tr, yesprint REAL(KIND=dp) :: blk_cs REAL(KIND=real_4), DIMENSION(:), POINTER :: r_sp REAL(KIND=real_8), DIMENSION(:), POINTER :: r_dp ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (.NOT. dbcsr_valid_index(matrix)) & DBCSR_WARN("Can not print invalid matrix.") iunit = default_output_unit IF (PRESENT(unit_nr)) iunit = unit_nr my_matlab_format = .FALSE. IF (PRESENT(matlab_format)) my_matlab_format = matlab_format yesprint = .TRUE. IF (PRESENT(nodata)) yesprint = .NOT. nodata WRITE (iunit, *) routineP//' Contents of matrix named ', matrix%name WRITE (iunit, *) routineP//' Flags ', matrix%symmetry, & matrix%negate_real, matrix%negate_imaginary, "type", & dbcsr_get_data_type(matrix), "serial", matrix%serial_number WRITE (iunit, '(1X,A,3(1X,I9,1X,A))') routineP, matrix%nblks, "blocks", & matrix%nze, "nzes,", dbcsr_get_data_size(matrix), "data els", & dbcsr_data_get_size_referenced(matrix%data_area), "used" WRITE (iunit, '(1X,A,I5,A,I5)') routineP//" Full size", & matrix%nfullrows_total, "x", matrix%nfullcols_total WRITE (iunit, '(1X,A,I5,A,I5)') routineP//" Blocked size", & matrix%nblkrows_total, "x", matrix%nblkcols_total SELECT CASE (matrix%data_type) CASE (dbcsr_type_real_8) CALL dbcsr_get_data(matrix%data_area, r_dp) CASE (dbcsr_type_real_4) CALL dbcsr_get_data(matrix%data_area, r_sp) CASE (dbcsr_type_complex_8) CALL dbcsr_get_data(matrix%data_area, c_dp) CASE (dbcsr_type_complex_4) CALL dbcsr_get_data(matrix%data_area, c_sp) END SELECT row_blk_size => array_data(matrix%row_blk_size) col_blk_size => array_data(matrix%col_blk_size) row_blk_offset => array_data(matrix%row_blk_offset) col_blk_offset => array_data(matrix%col_blk_offset) IF (matrix%nblks .GT. 0) THEN IF (matrix%list_indexing) THEN IF (SIZE(matrix%coo_l) .NE. 3*matrix%nblks) & DBCSR_ABORT("Wrong list") ebr = 1 sblk = 3 ELSE ebr = matrix%nblkrows_total sblk = 1 END IF DO ibr = 1, ebr IF (matrix%list_indexing) THEN fblk = 1 lblk = SIZE(matrix%coo_l) ELSE br = ibr fblk = matrix%row_p(br) + 1 lblk = matrix%row_p(br + 1) m = row_blk_size(br) END IF DO blk = fblk, lblk, sblk IF (matrix%list_indexing) THEN br = matrix%coo_l(blk) bc = matrix%coo_l(blk + 1) IF (matrix%local_indexing) THEN local_rows => array_data(matrix%local_rows) local_cols => array_data(matrix%local_cols) br = local_rows(br) bc = local_cols(bc) END IF m = row_blk_size(br) ablk_p = matrix%coo_l(blk + 2) ELSE bc = matrix%col_i(blk) ablk_p = matrix%blk_p(blk) END IF n = col_blk_size(bc) mn = m*n blk_p = ABS(ablk_p) tr = ablk_p .LT. 0 block_exists: IF (blk_p .NE. 0) THEN IF (mn .GT. 0) THEN SELECT CASE (matrix%data_type) CASE (dbcsr_type_real_8) blk_cs = REAL(DOT_PRODUCT(r_dp(blk_p:blk_p + mn - 1), & r_dp(blk_p:blk_p + mn - 1)), KIND=dp) !CALL & ! dbcsr_printmat(r_dp(blk_p:blk_p+mn-1),m,n, tr=tr) CASE (dbcsr_type_real_4) blk_cs = REAL(DOT_PRODUCT(r_sp(blk_p:blk_p + mn - 1), & r_sp(blk_p:blk_p + mn - 1)), KIND=dp) !CALL & ! dbcsr_printmat(r_sp(blk_p:blk_p+mn-1),m,n, tr=tr) CASE (dbcsr_type_complex_8) blk_cs = REAL(DOT_PRODUCT(c_dp(blk_p:blk_p + mn - 1), & c_dp(blk_p:blk_p + mn - 1)), KIND=dp) !CALL & ! dbcsr_printmat(c_dp(blk_p:blk_p+mn-1),m,n, tr=tr) CASE (dbcsr_type_complex_4) blk_cs = REAL(DOT_PRODUCT(c_sp(blk_p:blk_p + mn - 1), & c_sp(blk_p:blk_p + mn - 1)), KIND=dp) !CALL & ! dbcsr_printmat(c_sp(blk_p:blk_p+mn-1),m,n, tr=tr) END SELECT ELSE blk_cs = 0.0_dp END IF !WRITE(iunit,*)routineP//' chksum for (',br,',',bc,') at',& ! blk_p,'l',mn,'= ', blk_cs,'size',m,n IF (.NOT. my_matlab_format) WRITE (iunit, '(A,I6,",",I6,A,I7,A,I6,I6,"=",I7,A,E12.3)') & !" Checksum for (",br,bc,") at ",blk_p," size ",m,n,mn,& " Checksum for (", br, bc, ") at ", ablk_p, " size ", m, n, mn, & " checksum=", blk_cs IF (yesprint .AND. blk_p .NE. 0) THEN IF (mn .GT. 0) THEN SELECT CASE (matrix%data_type) CASE (dbcsr_type_real_8) !WRITE(iunit,'(10(1X,F7.2))')r_dp(blk_p:blk_p+mn-1) IF (my_matlab_format) THEN CALL dbcsr_printmat_matlab_d(r_dp(blk_p:blk_p + mn - 1), m, n, & row_blk_offset(br), col_blk_offset(bc), iunit, tr=tr, & variable_name=variable_name) ELSE CALL dbcsr_printmat(r_dp(blk_p:blk_p + mn - 1), m, n, iunit=iunit, tr=tr) END IF CASE (dbcsr_type_real_4) IF (my_matlab_format) THEN CALL dbcsr_printmat_matlab_s(r_sp(blk_p:blk_p + mn - 1), m, n, & row_blk_offset(br), col_blk_offset(bc), iunit, tr=tr, & variable_name=variable_name) ELSE CALL dbcsr_printmat(r_sp(blk_p:blk_p + mn - 1), m, n, iunit=iunit, tr=tr) END IF CASE (dbcsr_type_complex_8) IF (my_matlab_format) THEN CALL dbcsr_printmat_matlab_z(c_dp(blk_p:blk_p + mn - 1), m, n, & row_blk_offset(br), col_blk_offset(bc), iunit, tr=tr, & variable_name=variable_name) ELSE CALL dbcsr_printmat(c_dp(blk_p:blk_p + mn - 1), m, n, iunit=iunit, tr=tr) END IF CASE (dbcsr_type_complex_4) IF (my_matlab_format) THEN CALL dbcsr_printmat_matlab_c(c_sp(blk_p:blk_p + mn - 1), m, n, & row_blk_offset(br), col_blk_offset(bc), iunit, tr=tr, & variable_name=variable_name) ELSE CALL dbcsr_printmat(c_sp(blk_p:blk_p + mn - 1), m, n, iunit=iunit, tr=tr) END IF END SELECT END IF END IF END IF block_exists END DO END DO END IF CALL timestop(handle) END SUBROUTINE dbcsr_print SUBROUTINE dbcsr_printmat_matlab_d(matrix, rows, cols, r_offset, c_offset, iunit, tr, variable_name) !! Prints the elements of a matrix. REAL(KIND=real_8), DIMENSION(:), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: rows, cols, r_offset, c_offset, iunit !! the logical (possibly detransposed) matrix size, not the stored size !! the logical (possibly detransposed) matrix size, not the stored size LOGICAL, INTENT(IN), OPTIONAL :: tr !! specifies whether the elements are stored transposed CHARACTER(len=*), INTENT(in), OPTIONAL :: variable_name INTEGER :: c, c_off, m, n, r, r_off LOGICAL :: t ! --------------------------------------------------------------------------- m = rows n = cols r_off = r_offset c_off = c_offset t = .FALSE. IF (PRESENT(tr)) THEN IF (tr) THEN t = .TRUE. m = cols n = rows r_off = c_offset c_off = r_offset END IF END IF DO c = 1, cols DO r = 1, rows IF (.NOT. t) THEN IF (PRESENT(variable_name)) THEN WRITE (iunit, '(A,I4,A,I4,A,E23.16,A)') & variable_name//'(', r + r_offset - 1, ',', c + c_offset - 1, ')=', matrix(r + (c - 1)*rows), ';' ELSE WRITE (iunit, '(A,I4,A,I4,A,E23.16,A)') 'a(', r + r_offset - 1, ',', & c + c_offset - 1, ')=', matrix(r + (c - 1)*rows), ';' END IF ELSE IF (PRESENT(variable_name)) THEN WRITE (iunit, '(A,I4,A,I4,A,E23.16,A)') & variable_name//'(', r + r_offset - 1, ',', c + c_offset - 1, ')=', matrix((r - 1)*cols + c), ';' ELSE WRITE (iunit, '(A,I4,A,I4,A,E23.16,A)') 'a(', r + r_offset - 1, ',', & c + c_offset - 1, ')=', matrix((r - 1)*cols + c), ';' END IF END IF END DO END DO END SUBROUTINE dbcsr_printmat_matlab_d SUBROUTINE dbcsr_printmat_matlab_s(matrix, rows, cols, r_offset, c_offset, iunit, tr, variable_name) REAL(KIND=real_4), DIMENSION(:), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: rows, cols, r_offset, c_offset, iunit LOGICAL, INTENT(IN), OPTIONAL :: tr CHARACTER(len=*), INTENT(in), OPTIONAL :: variable_name INTEGER :: c, c_off, m, n, r, r_off LOGICAL :: t ! --------------------------------------------------------------------------- m = rows n = cols r_off = r_offset c_off = c_offset t = .FALSE. IF (PRESENT(tr)) THEN IF (tr) THEN t = .TRUE. m = cols n = rows r_off = c_offset c_off = r_offset END IF END IF DO c = 1, cols DO r = 1, rows IF (.NOT. t) THEN IF (PRESENT(variable_name)) THEN WRITE (iunit, '(A,I4,A,I4,A,E15.7,A)') & variable_name//'(', r + r_offset - 1, ',', c + c_offset - 1, ')=', matrix(r + (c - 1)*rows), ';' ELSE WRITE (iunit, '(A,I4,A,I4,A,E15.7,A)') 'a(', r + r_offset - 1, ',', & c + c_offset - 1, ')=', matrix(r + (c - 1)*rows), ';' END IF ELSE IF (PRESENT(variable_name)) THEN WRITE (iunit, '(A,I4,A,I4,A,E15.7,A)') & variable_name//'(', r + r_offset - 1, ',', c + c_offset - 1, ')=', matrix((r - 1)*cols + c), ';' ELSE WRITE (iunit, '(A,I4,A,I4,A,E15.7,A)') 'a(', r + r_offset - 1, ',', & c + c_offset - 1, ')=', matrix((r - 1)*cols + c), ';' END IF END IF END DO END DO END SUBROUTINE dbcsr_printmat_matlab_s SUBROUTINE dbcsr_printmat_matlab_z(matrix, rows, cols, r_offset, c_offset, iunit, tr, variable_name) COMPLEX(KIND=real_8), DIMENSION(:), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: rows, cols, r_offset, c_offset, iunit LOGICAL, INTENT(IN), OPTIONAL :: tr CHARACTER(len=*), INTENT(in), OPTIONAL :: variable_name INTEGER :: c, c_off, m, n, r, r_off LOGICAL :: t ! --------------------------------------------------------------------------- m = rows n = cols r_off = r_offset c_off = c_offset t = .FALSE. IF (PRESENT(tr)) THEN IF (tr) THEN t = .TRUE. m = cols n = rows r_off = c_offset c_off = r_offset END IF END IF DO c = 1, cols DO r = 1, rows IF (.NOT. t) THEN IF (PRESENT(variable_name)) THEN WRITE (iunit, '(A,I3,A,I3,A,E23.16,A,E23.16,A)') variable_name//'(', r + r_offset - 1, ',', & c + c_offset - 1, ')=', & REAL(matrix(r + (c - 1)*rows)), '+', AIMAG(matrix(r + (c - 1)*rows)), 'i;' ELSE WRITE (iunit, '(A,I3,A,I3,A,E23.16,A,E23.16,A)') 'a(', r + r_offset - 1, ',', c + c_offset - 1, ')=', & REAL(matrix(r + (c - 1)*rows)), '+', AIMAG(matrix(r + (c - 1)*rows)), 'i;' END IF ELSE IF (PRESENT(variable_name)) THEN WRITE (iunit, '(A,I3,A,I3,A,E23.16,A,E23.16,A)') variable_name//'(', r + r_offset - 1, ',', & c + c_offset - 1, ')=', & REAL(matrix((r - 1)*cols + c)), '+', AIMAG(matrix((r - 1)*cols + c)), 'i;' ELSE WRITE (iunit, '(A,I3,A,I3,A,E23.16,A,E23.16,A)') 'a(', r + r_offset - 1, ',', c + c_offset - 1, ')=', & REAL(matrix((r - 1)*cols + c)), '+', AIMAG(matrix((r - 1)*cols + c)), 'i;' END IF END IF END DO END DO END SUBROUTINE dbcsr_printmat_matlab_z SUBROUTINE dbcsr_printmat_matlab_c(matrix, rows, cols, r_offset, c_offset, iunit, tr, variable_name) COMPLEX(KIND=real_4), DIMENSION(:), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: rows, cols, r_offset, c_offset, iunit LOGICAL, INTENT(IN), OPTIONAL :: tr CHARACTER(len=*), INTENT(in), OPTIONAL :: variable_name INTEGER :: c, c_off, m, n, r, r_off LOGICAL :: t ! --------------------------------------------------------------------------- m = rows n = cols r_off = r_offset c_off = c_offset t = .FALSE. IF (PRESENT(tr)) THEN IF (tr) THEN t = .TRUE. m = cols n = rows r_off = c_offset c_off = r_offset END IF END IF DO c = 1, cols DO r = 1, rows IF (.NOT. t) THEN IF (PRESENT(variable_name)) THEN WRITE (iunit, '(A,I3,A,I3,A,E15.7,A,E15.7,A)') variable_name//'(', r + r_offset - 1, ',', & c + c_offset - 1, ')=', & REAL(matrix(r + (c - 1)*rows)), '+', AIMAG(matrix(r + (c - 1)*rows)), 'i;' ELSE WRITE (iunit, '(A,I3,A,I3,A,E15.7,A,E15.7,A)') 'a(', r + r_offset - 1, ',', c + c_offset - 1, ')=', & REAL(matrix(r + (c - 1)*rows)), '+', AIMAG(matrix(r + (c - 1)*rows)), 'i;' END IF ELSE IF (PRESENT(variable_name)) THEN WRITE (iunit, '(A,I3,A,I3,A,E15.7,A,E15.7,A)') variable_name//'(', r + r_offset - 1, ',', & c + c_offset - 1, ')=', & REAL(matrix((r - 1)*cols + c)), '+', AIMAG(matrix((r - 1)*cols + c)), 'i;' ELSE WRITE (iunit, '(A,I3,A,I3,A,E15.7,A,E15.7,A)') 'a(', r + r_offset - 1, ',', c + c_offset - 1, ')=', & REAL(matrix((r - 1)*cols + c)), '+', AIMAG(matrix((r - 1)*cols + c)), 'i;' END IF END IF END DO END DO END SUBROUTINE dbcsr_printmat_matlab_c SUBROUTINE printmat_s(matrix, rows, cols, iunit, title, tr) !! Prints the elements of a matrix. REAL(KIND=real_4), DIMENSION(:), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: rows, cols, iunit !! the logical (possibly detransposed) matrix size, not the stored size !! the logical (possibly detransposed) matrix size, not the stored size CHARACTER(*), INTENT(IN), OPTIONAL :: title LOGICAL, INTENT(IN), OPTIONAL :: tr !! specifies whether the elements are stored transposed CHARACTER(30) :: f INTEGER :: m, n, r LOGICAL :: t REAL(KIND=dp) :: bit_bucket ! --------------------------------------------------------------------------- m = rows n = cols t = .FALSE. IF (PRESENT(title)) WRITE (iunit, *) title IF (PRESENT(tr)) THEN IF (tr) THEN t = .TRUE. m = cols n = rows END IF END IF DO r = LBOUND(matrix, 1), UBOUND(matrix, 1) bit_bucket = matrix(r) END DO bit_bucket = 0.0_dp DO r = LBOUND(matrix, 1), UBOUND(matrix, 1) bit_bucket = bit_bucket + matrix(r) END DO IF (m .GT. 10000) m = 0 IF (n .GT. 10000) n = 0 IF (m*n .LT. 1 .OR. m*n .GT. SIZE(matrix)) RETURN WRITE (f, FMT="('(',I4,'(F9.4))')") cols DO r = 1, rows IF (.NOT. t) THEN WRITE (iunit, FMT=f) matrix(r:r + (cols - 1)*rows:rows) ELSE WRITE (iunit, FMT=f) matrix((r - 1)*cols + 1:r*cols) END IF END DO END SUBROUTINE printmat_s SUBROUTINE printmat_d(matrix, rows, cols, iunit, title, tr) REAL(KIND=real_8), DIMENSION(:), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: rows, cols, iunit CHARACTER(*), INTENT(IN), OPTIONAL :: title LOGICAL, INTENT(IN), OPTIONAL :: tr IF (PRESENT(title)) THEN IF (PRESENT(tr)) THEN CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, title, tr) ELSE CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, title) END IF ELSE IF (PRESENT(tr)) THEN CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, tr=tr) ELSE CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit) END IF END IF END SUBROUTINE printmat_d SUBROUTINE printmat_c(matrix, rows, cols, iunit, title, tr) COMPLEX(KIND=real_4), DIMENSION(:), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: rows, cols, iunit CHARACTER(*), INTENT(IN), OPTIONAL :: title LOGICAL, INTENT(IN), OPTIONAL :: tr IF (PRESENT(title)) THEN IF (PRESENT(tr)) THEN CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, title, tr) ELSE CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, title) END IF ELSE IF (PRESENT(tr)) THEN CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, tr=tr) ELSE CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit) END IF END IF END SUBROUTINE printmat_c SUBROUTINE printmat_z(matrix, rows, cols, iunit, title, tr) COMPLEX(KIND=real_8), DIMENSION(:), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: rows, cols, iunit CHARACTER(*), INTENT(IN), OPTIONAL :: title LOGICAL, INTENT(IN), OPTIONAL :: tr IF (PRESENT(title)) THEN IF (PRESENT(tr)) THEN CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, title, tr) ELSE CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, title) END IF ELSE IF (PRESENT(tr)) THEN CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, tr=tr) ELSE CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit) END IF END IF END SUBROUTINE printmat_z SUBROUTINE dbcsr_binary_write(matrix, filepath) !! Writes a DBCSR matrix in a file !! file's header consists of 3 sub-headers: !! sub-header1 contains: !! 1 string: (of length version_len) the current version of this routine, !! 1 string: (of length default_string_length) matrix_name, !! 1 character: matrix_type, !! 4 integers: numnodes, data_type, nblkrows_total, nblkcols_total, !! 2 vectors: row_blk_size (length = nblkrows_total), !! col_blk_size (length = nblkcols_total), !! sub-header2 contains: !! 2 integers: nblks, data_area_size, !! sub-header3 contains: !! 3 vectors: row_p (length = nblkrows_total+1), !! col_i (length = nblks), !! blk_p (length = nblks); !! and the file's body contains the block data IMPLICIT NONE TYPE(dbcsr_type), INTENT(IN) :: matrix !! DBCSR matrix CHARACTER(len=*), INTENT(IN) :: filepath !! path to the file CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_binary_write' INTEGER :: nblkrows_total, nblkcols_total, & nblks, size_of_pgrid, & i, sendbuf, data_area_size, & data_type, type_size, & mynode, numnodes, & ginfo_size, linfo_size, handle INTEGER, DIMENSION(:), POINTER :: row_p, col_i, blk_p, & row_blk_size, col_blk_size INTEGER, DIMENSION(:, :), POINTER :: pgrid TYPE(mp_type_descriptor_type) :: mp_type TYPE(dbcsr_mp_obj) :: mp_env TYPE(dbcsr_distribution_obj) :: distribution TYPE(dbcsr_data_obj) :: data_area COMPLEX(sp), DIMENSION(:), POINTER :: c_sp COMPLEX(dp), DIMENSION(:), POINTER :: c_dp REAL(sp), DIMENSION(:), POINTER :: r_sp REAL(dp), DIMENSION(:), POINTER :: r_dp CHARACTER :: matrix_type CHARACTER(LEN=80) :: matrix_name_v_1_0 CHARACTER(LEN=default_string_length) :: matrix_name TYPE(mp_comm_type) :: mp_group TYPE(mp_file_type) :: thefile INTEGER, PARAMETER :: version_len = 10 CHARACTER(LEN=version_len), PARAMETER :: version = "DBCSRv_1.0" INTEGER, ALLOCATABLE, DIMENSION(:) :: linfo_sizes, da_sizes INTEGER(kind=file_offset), ALLOCATABLE, DIMENSION(:) :: bdata_disps, bdata_offsets, & subh2_disps, subh2_offsets, & subh3_disps, subh3_offsets INTEGER(kind=file_offset), PARAMETER :: BOF = 0 INTEGER, PARAMETER :: char_count = version_len + default_string_length + 1 !version, matrix_name, matrix_type CALL timeset(routineN, handle) IF (default_string_length /= 80) & CALL dbcsr_warn(__LOCATION__, "Changing the default string length affects "// & "the format of the written matrix. Version needs to be adjusted") nblkrows_total = dbcsr_nblkrows_total(matrix) nblkcols_total = dbcsr_nblkcols_total(matrix) distribution = dbcsr_distribution(matrix) matrix_name = dbcsr_name(matrix) data_area = dbcsr_data_area(matrix) matrix_type = dbcsr_get_matrix_type(matrix) data_type = dbcsr_get_data_type(matrix) mp_env = dbcsr_distribution_mp(distribution) mp_group = dbcsr_mp_group(mp_env) nblks = dbcsr_get_num_blocks(matrix) row_p => matrix%row_p col_i => matrix%col_i blk_p => matrix%blk_p row_blk_size => array_data(matrix%row_blk_size) col_blk_size => array_data(matrix%col_blk_size) pgrid => dbcsr_mp_pgrid(mp_env) size_of_pgrid = SIZE(pgrid) CALL mp_environ(numnodes, mynode, mp_group) ALLOCATE (linfo_sizes(numnodes), da_sizes(numnodes), & subh2_disps(numnodes), subh2_offsets(numnodes), & subh3_disps(numnodes), subh3_offsets(numnodes), & bdata_disps(numnodes), bdata_offsets(numnodes)) subh2_disps(:) = (/((i - 1)*2, i=1, numnodes)/) subh3_disps = BOF bdata_disps = BOF linfo_sizes = BOF subh2_offsets = BOF subh3_offsets = BOF bdata_offsets = BOF da_sizes = BOF ginfo_size = char_count + 4 + nblkrows_total + nblkcols_total linfo_size = 1 + nblkrows_total + 2*nblks sendbuf = linfo_size CALL mp_allgather(sendbuf, linfo_sizes, mp_group) CALL cumsum_l(INT(linfo_sizes, kind=file_offset), subh3_disps) subh3_disps(:) = CSHIFT(subh3_disps, shift=-1) + ginfo_size + 2*numnodes subh3_disps(1) = ginfo_size + 2*numnodes data_area_size = dbcsr_data_get_size_referenced(matrix%data_area) sendbuf = data_area_size CALL mp_allgather(sendbuf, da_sizes, mp_group) CALL cumsum_l(INT(da_sizes, kind=file_offset), bdata_disps) bdata_disps(:) = CSHIFT(bdata_disps, shift=-1) + SUM(INT(linfo_sizes, KIND=file_offset)) + & ginfo_size + numnodes*2 bdata_disps(1) = SUM(INT(linfo_sizes, KIND=file_offset)) + ginfo_size + numnodes*2 CALL mp_file_open(mp_group, thefile, filepath, file_amode_create + file_amode_wronly) IF (mynode .EQ. 0) THEN CALL mp_file_write_at(thefile, BOF, version) matrix_name_v_1_0 = matrix_name CALL mp_file_write_at(thefile, BOF + version_len*mpi_character_size, matrix_name_v_1_0) CALL mp_file_write_at(thefile, BOF + (version_len + default_string_length)*mpi_character_size, matrix_type) CALL mp_file_write_at(thefile, BOF + char_count*mpi_character_size, & (/size_of_pgrid, data_type, & nblkrows_total, nblkcols_total, & row_blk_size, col_blk_size/)) END IF ! write sub-header2 subh2_disps(:) = subh2_disps(:) + ginfo_size subh2_offsets(:) = BOF + (subh2_disps - char_count)*mpi_integer_size + & char_count*mpi_character_size CALL mp_file_write_at_all(thefile, subh2_offsets(mynode + 1), (/nblks, data_area_size/)) ! write sub-header3 subh3_offsets(:) = BOF + (subh3_disps - char_count)*mpi_integer_size + & char_count*mpi_character_size CALL mp_file_write_at_all(thefile, subh3_offsets(mynode + 1), (/row_p, col_i, blk_p/)) ! write block data mp_type = dbcsr_mp_type_from_anytype(data_area) CALL mp_type_size(mp_type, type_size) bdata_offsets(:) = BOF + (/((bdata_disps(i) - bdata_disps(1))*type_size, i=1, numnodes)/) + & (bdata_disps(1) - char_count)*mpi_integer_size + & char_count*mpi_character_size SELECT CASE (data_type) CASE (dbcsr_type_real_4) r_sp => data_area%d%r_sp CALL mp_file_write_at_all(thefile, bdata_offsets(mynode + 1), r_sp, msglen=data_area_size) CASE (dbcsr_type_real_8) r_dp => data_area%d%r_dp CALL mp_file_write_at_all(thefile, bdata_offsets(mynode + 1), r_dp, msglen=data_area_size) CASE (dbcsr_type_complex_4) c_sp => data_area%d%c_sp CALL mp_file_write_at_all(thefile, bdata_offsets(mynode + 1), c_sp, msglen=data_area_size) CASE (dbcsr_type_complex_8) c_dp => data_area%d%c_dp CALL mp_file_write_at_all(thefile, bdata_offsets(mynode + 1), c_dp, msglen=data_area_size) END SELECT CALL mp_file_close(thefile) DEALLOCATE (linfo_sizes, da_sizes) DEALLOCATE (subh2_disps, subh2_offsets, subh3_disps, subh3_offsets) DEALLOCATE (bdata_disps, bdata_offsets) CALL timestop(handle) CONTAINS SUBROUTINE cumsum_l(arr, cumsum) INTEGER(kind=file_offset), DIMENSION(:), & INTENT(IN) :: arr INTEGER(kind=file_offset), DIMENSION(SIZE(arr)), & INTENT(OUT) :: cumsum INTEGER :: i cumsum(1) = arr(1) DO i = 2, SIZE(arr) cumsum(i) = cumsum(i - 1) + arr(i) END DO END SUBROUTINE cumsum_l END SUBROUTINE dbcsr_binary_write SUBROUTINE dbcsr_binary_read(filepath, distribution, matrix_new) !! Reads a DBCSR matrix from a file IMPLICIT NONE CHARACTER(len=*), INTENT(IN) :: filepath !! path to the file TYPE(dbcsr_distribution_obj), INTENT(IN) :: distribution !! row and column distribution TYPE(dbcsr_type), INTENT(INOUT) :: matrix_new !! DBCSR matrix CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_binary_read' INTEGER :: nblkrows_total, nblkcols_total, & nblks, darea_size, data_type, type_size, & globalinfo_size, & size_of_pgrid, & i, j, & nblocks, & share_size, order, cur_blks, & job_count, start_index, end_index, & localinfo_length, blockdata_length, & worker_id, group_list_size, handle, linfo_length CHARACTER :: matrix_type CHARACTER(LEN=default_string_length) :: matrix_name INTEGER, PARAMETER :: version_len = 10 CHARACTER(LEN=version_len) :: version CHARACTER(LEN=80) :: matrix_name_v_1_0 CHARACTER(LEN=version_len), PARAMETER :: version_v_1_0 = "DBCSRv_1.0" TYPE(mp_comm_type) :: group_id TYPE(mp_file_type) :: thefile INTEGER, DIMENSION(:), POINTER :: row_p, col_i, blk_p, & proc_nblks, proc_darea_sizes INTEGER, DIMENSION(4) :: values INTEGER, ALLOCATABLE, DIMENSION(:) :: linfo_lens, bdata_lens INTEGER, ALLOCATABLE, DIMENSION(:), TARGET :: ginfo_vec, linfo_vec, & rowp, coli, blkp INTEGER, ALLOCATABLE, DIMENSION(:, :), TARGET :: val_data INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: row_blk_size, col_blk_size TYPE(dbcsr_mp_obj) :: mp_env TYPE(dbcsr_data_obj) :: dblk REAL(sp) :: rsp_dummy(1) REAL(dp) :: rdp_dummy(1) COMPLEX(sp) :: csp_dummy(1) COMPLEX(dp) :: cdp_dummy(1) REAL(sp), ALLOCATABLE, DIMENSION(:), TARGET :: rsp REAL(dp), ALLOCATABLE, DIMENSION(:), TARGET :: rdp COMPLEX(sp), ALLOCATABLE, DIMENSION(:), TARGET :: csp COMPLEX(dp), ALLOCATABLE, DIMENSION(:), TARGET :: cdp INTEGER(kind=file_offset), ALLOCATABLE, DIMENSION(:) :: subh2_offsets, & subh3_disps, subh3_offsets, & bdata_disps, bdata_offsets INTEGER(kind=file_offset), PARAMETER :: BOF = 0 INTEGER(kind=file_offset) :: offset, subh2_start, subh3_start, bdata_start, file_size, & localinfo_offset, blockdata_offset, sum_nblks, subh3_length, data_area_size INTEGER, PARAMETER :: char_count = 1 + version_len + default_string_length CALL timeset(routineN, handle) mp_env = dbcsr_distribution_mp(distribution) group_id = dbcsr_mp_group(mp_env) CALL mp_environ(group_list_size, worker_id, group_id) CALL mp_file_open(group_id, thefile, filepath, file_amode_rdonly) ! read version, matrix name and matrix type CALL mp_file_read_at_all(thefile, BOF, version) IF (version /= version_v_1_0) & DBCSR_WARN("Trying to read an unknown version of the matrix data file. Good luck!") CALL mp_file_read_at_all(thefile, BOF + version_len*mpi_character_size, matrix_name_v_1_0) matrix_name = matrix_name_v_1_0 CALL mp_file_read_at_all(thefile, BOF + (version_len + default_string_length)*mpi_character_size, matrix_type) ! read 4 integer values form sub-header1 CALL mp_file_read_at_all(thefile, BOF + char_count*mpi_character_size, values) size_of_pgrid = values(1) data_type = values(2) nblkrows_total = values(3) nblkcols_total = values(4) ! read 2 vectors, row_blk_size and col_blk_size, from sub-header1 globalinfo_size = nblkrows_total + nblkcols_total ALLOCATE (ginfo_vec(globalinfo_size)) CALL mp_file_read_at_all(thefile, BOF + char_count*mpi_character_size + 4*mpi_integer_size, ginfo_vec) row_blk_size => ginfo_vec(1:nblkrows_total) col_blk_size => ginfo_vec(nblkrows_total + 1:globalinfo_size) ! compute the offsets where sub-header2 and sub-header3 start subh2_start = (4 + globalinfo_size)*mpi_integer_size + char_count*mpi_character_size subh3_start = subh2_start + 2*size_of_pgrid*mpi_integer_size ! compute the offsets in sub-header2 and read 2 integers nblocks, data_area_size ! number of data chunks from sub-header 2 and 3 to be read by every node rounded up ! to the next integer to make it even for all the nodes in the specified mpi group share_size = CEILING(REAL(size_of_pgrid, KIND=dp)/group_list_size) ALLOCATE (subh2_offsets(share_size)) subh2_offsets = BOF DO i = 1, share_size offset = subh2_start + mpi_integer_size*2*(worker_id + (i - 1)*group_list_size) IF (offset .GE. subh3_start) EXIT subh2_offsets(i) = offset END DO ALLOCATE (val_data(3, share_size)) val_data(:, :) = 0 DO i = 1, share_size CALL mp_file_read_at_all(thefile, subh2_offsets(i), values, msglen=2) nblocks = values(1) data_area_size = values(2) IF (subh2_offsets(i) .EQ. 0) EXIT val_data(1, i) = nblocks IF (data_area_size >= HUGE(val_data(2, i))) & DBCSR_ABORT("Data area too large, fix code.") val_data(2, i) = INT(data_area_size) val_data(3, i) = worker_id + (i - 1)*group_list_size + 1 ! order ! order = indices of an array of length size_of_pgrid to be accessed by the current node END DO nblks = SUM(val_data(1, :)) darea_size = SUM(val_data(2, :)) proc_nblks => val_data(1, :) ! to be passed to dbcsr_datablock_redistribute proc_darea_sizes => val_data(2, :) ! to be passed to dbcsr_datablock_redistribute ! compute the offsets in sub-header3 and read 3 vectors row_p, col_i, blk_p ! actual number of chunks to be read by the current node job_count = COUNT(val_data(3, :) .NE. 0) CALL mp_file_get_size(thefile, file_size) ALLOCATE (linfo_lens(size_of_pgrid)) ALLOCATE (subh3_disps(size_of_pgrid)) ALLOCATE (subh3_offsets(size_of_pgrid)) linfo_lens = 0; subh3_disps = 0 DO i = 1, size_of_pgrid DO j = 1, share_size order = val_data(3, j) IF (i .EQ. order) linfo_lens(order) = & 1 + nblkrows_total + 2*val_data(1, j) END DO END DO CALL mp_sum(linfo_lens, group_id) CALL cumsum_l(INT(linfo_lens, kind=file_offset), subh3_disps) subh3_disps(:) = CSHIFT(subh3_disps, shift=-1) subh3_disps(1) = BOF subh3_offsets(:) = subh3_start + subh3_disps*mpi_integer_size sum_nblks = INT(nblks, kind=file_offset) CALL mp_sum(sum_nblks, group_id) subh3_length = size_of_pgrid*INT(1 + nblkrows_total, KIND=file_offset) + 2*sum_nblks linfo_length = nblkrows_total + 1 + 2*MAXVAL(val_data(1, :)) ALLOCATE (linfo_vec(linfo_length)) ALLOCATE (rowp((nblkrows_total + 1)*job_count)) ALLOCATE (coli(nblks)) ALLOCATE (blkp(nblks)) DO i = 1, share_size order = val_data(3, i) cur_blks = val_data(1, i) IF (order .EQ. 0) THEN localinfo_offset = file_size localinfo_length = 0 ELSE localinfo_offset = subh3_offsets(order) localinfo_length = linfo_lens(order) END IF CALL mp_file_read_at_all(thefile, localinfo_offset, linfo_vec, msglen=localinfo_length) IF (localinfo_length .EQ. 0) EXIT rowp((i - 1)*(nblkrows_total + 1) + 1:i*(nblkrows_total + 1)) = linfo_vec(1:nblkrows_total + 1) start_index = SUM(val_data(1, 1:i - 1)) + 1 end_index = SUM(val_data(1, 1:i)) coli(start_index:end_index) = & linfo_vec(nblkrows_total + 2:cur_blks + nblkrows_total + 1) blkp(start_index:end_index) = & linfo_vec(cur_blks + nblkrows_total + 2:2*cur_blks + nblkrows_total + 1) END DO row_p => rowp col_i => coli blk_p => blkp ! compute the offsets and read block data ALLOCATE (bdata_lens(size_of_pgrid)) ALLOCATE (bdata_disps(size_of_pgrid)) ALLOCATE (bdata_offsets(size_of_pgrid)) bdata_lens = 0 DO i = 1, size_of_pgrid DO j = 1, share_size order = val_data(3, j) IF (i .EQ. order) bdata_lens(order) = val_data(2, j) END DO END DO CALL mp_sum(bdata_lens, group_id) CALL cumsum_l(INT(bdata_lens, kind=file_offset), bdata_disps) bdata_disps(:) = CSHIFT(bdata_disps, shift=-1) bdata_disps(1) = BOF bdata_start = subh3_start + subh3_length*mpi_integer_size SELECT CASE (data_type) CASE (dbcsr_type_real_4) type_size = real_4_size CASE (dbcsr_type_real_8) type_size = real_8_size CASE (dbcsr_type_complex_4) type_size = 2*real_4_size CASE (dbcsr_type_complex_8) type_size = 2*real_8_size END SELECT bdata_offsets(:) = bdata_start + bdata_disps*type_size SELECT CASE (data_type) CASE (dbcsr_type_real_4) ALLOCATE (rsp(darea_size)) DO i = 1, share_size order = val_data(3, i) ! use dummy one-sized data array as buffer in place of empty array ! when nothing is supposed to be read (order = 0) IF (order .EQ. 0) THEN blockdata_offset = file_size CALL mp_file_read_at_all(thefile, blockdata_offset, rsp_dummy) ELSE start_index = SUM(val_data(2, 1:i - 1)) + 1 end_index = SUM(val_data(2, 1:i)) blockdata_length = bdata_lens(order) blockdata_offset = bdata_offsets(order) CALL mp_file_read_at_all(thefile, blockdata_offset, rsp(start_index:end_index), & msglen=blockdata_length) END IF END DO CASE (dbcsr_type_real_8) ALLOCATE (rdp(darea_size)) DO i = 1, share_size order = val_data(3, i) IF (order .EQ. 0) THEN blockdata_offset = file_size CALL mp_file_read_at_all(thefile, blockdata_offset, rdp_dummy) ELSE start_index = SUM(val_data(2, 1:i - 1)) + 1 end_index = SUM(val_data(2, 1:i)) blockdata_length = bdata_lens(order) blockdata_offset = bdata_offsets(order) CALL mp_file_read_at_all(thefile, blockdata_offset, rdp(start_index:end_index), & msglen=blockdata_length) END IF END DO CASE (dbcsr_type_complex_4) ALLOCATE (csp(darea_size)) DO i = 1, share_size order = val_data(3, i) IF (order .EQ. 0) THEN blockdata_offset = file_size CALL mp_file_read_at_all(thefile, blockdata_offset, csp_dummy) ELSE start_index = SUM(val_data(2, 1:i - 1)) + 1 end_index = SUM(val_data(2, 1:i)) blockdata_length = bdata_lens(order) blockdata_offset = bdata_offsets(order) CALL mp_file_read_at_all(thefile, blockdata_offset, csp(start_index:end_index), & msglen=blockdata_length) END IF END DO CASE (dbcsr_type_complex_8) ALLOCATE (cdp(darea_size)) DO i = 1, share_size order = val_data(3, i) IF (order .EQ. 0) THEN blockdata_offset = file_size CALL mp_file_read_at_all(thefile, blockdata_offset, cdp_dummy) ELSE start_index = SUM(val_data(2, 1:i - 1)) + 1 end_index = SUM(val_data(2, 1:i)) blockdata_length = bdata_lens(order) blockdata_offset = bdata_offsets(order) CALL mp_file_read_at_all(thefile, blockdata_offset, cdp(start_index:end_index), & msglen=blockdata_length) END IF END DO END SELECT CALL dbcsr_data_init(dblk) CALL dbcsr_data_new(dblk, data_type) IF (ALLOCATED(rdp)) dblk%d%r_dp => rdp IF (ALLOCATED(rsp)) dblk%d%r_sp => rsp IF (ALLOCATED(cdp)) dblk%d%c_dp => cdp IF (ALLOCATED(csp)) dblk%d%c_sp => csp CALL mp_file_close(thefile) CALL dbcsr_create(matrix_new, matrix_name, distribution, matrix_type, & row_blk_size, col_blk_size, nze=darea_size, & data_type=data_type) CALL dbcsr_datablock_redistribute(dblk, row_p, col_i, blk_p, proc_nblks, proc_darea_sizes, matrix_new) DEALLOCATE (subh2_offsets, subh3_offsets, bdata_offsets) DEALLOCATE (subh3_disps, bdata_disps) DEALLOCATE (linfo_lens, bdata_lens) DEALLOCATE (val_data, ginfo_vec, linfo_vec) DEALLOCATE (rowp, coli, blkp) IF (ALLOCATED(rdp)) DEALLOCATE (rdp) IF (ALLOCATED(rsp)) DEALLOCATE (rsp) IF (ALLOCATED(cdp)) DEALLOCATE (cdp) IF (ALLOCATED(csp)) DEALLOCATE (csp) CALL dbcsr_data_clear_pointer(dblk) DEALLOCATE (dblk%d) CALL timestop(handle) CONTAINS SUBROUTINE cumsum_l(arr, cumsum) INTEGER(kind=file_offset), DIMENSION(:), & INTENT(IN) :: arr INTEGER(kind=file_offset), DIMENSION(SIZE(arr)), & INTENT(OUT) :: cumsum INTEGER :: i cumsum(1) = arr(1) DO i = 2, SIZE(arr) cumsum(i) = cumsum(i - 1) + arr(i) END DO END SUBROUTINE cumsum_l END SUBROUTINE dbcsr_binary_read SUBROUTINE dbcsr_print_block_sum(matrix, unit_nr) !! Prints the sum of the elements for each block TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix INTEGER, INTENT(IN), OPTIONAL :: unit_nr CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_print_block_sum' COMPLEX(KIND=real_4) :: blk_sum_c_sp COMPLEX(KIND=real_4), DIMENSION(:), POINTER :: c_sp COMPLEX(KIND=real_8) :: blk_sum_c_dp COMPLEX(KIND=real_8), DIMENSION(:), POINTER :: c_dp INTEGER :: bc, blk, blk_p, br, handle, iunit, m, & mn, n INTEGER, DIMENSION(:), POINTER :: col_blk_offset, col_blk_size, & row_blk_offset, row_blk_size REAL(KIND=real_4) :: blk_sum_r_sp REAL(KIND=real_4), DIMENSION(:), POINTER :: r_sp REAL(KIND=real_8) :: blk_sum_r_dp REAL(KIND=real_8), DIMENSION(:), POINTER :: r_dp ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (.NOT. dbcsr_valid_index(matrix)) & DBCSR_WARN("Can not print invalid matrix.") iunit = default_output_unit IF (PRESENT(unit_nr)) iunit = unit_nr IF (iunit > 0) THEN SELECT CASE (matrix%data_type) CASE (dbcsr_type_real_8) CALL dbcsr_get_data(matrix%data_area, r_dp) CASE (dbcsr_type_real_4) CALL dbcsr_get_data(matrix%data_area, r_sp) CASE (dbcsr_type_complex_8) CALL dbcsr_get_data(matrix%data_area, c_dp) CASE (dbcsr_type_complex_4) CALL dbcsr_get_data(matrix%data_area, c_sp) END SELECT row_blk_size => array_data(matrix%row_blk_size) col_blk_size => array_data(matrix%col_blk_size) row_blk_offset => array_data(matrix%row_blk_offset) col_blk_offset => array_data(matrix%col_blk_offset) IF (matrix%nblks .GT. 0) THEN DO br = 1, matrix%nblkrows_total m = row_blk_size(br) DO blk = matrix%row_p(br) + 1, matrix%row_p(br + 1) bc = matrix%col_i(blk) n = col_blk_size(bc) mn = m*n blk_p = ABS(matrix%blk_p(blk)) block_exists: IF (blk_p .NE. 0) THEN IF (mn .GT. 0) THEN SELECT CASE (matrix%data_type) CASE (dbcsr_type_real_8) blk_sum_r_dp = SUM(r_dp(blk_p:blk_p + mn - 1)) WRITE (iunit, '(I6,I6,ES18.9)') & br, bc, blk_sum_r_dp CASE (dbcsr_type_real_4) blk_sum_r_sp = SUM(r_sp(blk_p:blk_p + mn - 1)) WRITE (iunit, '(I6,I6,ES18.9)') & br, bc, blk_sum_r_sp CASE (dbcsr_type_complex_8) blk_sum_c_dp = SUM(c_dp(blk_p:blk_p + mn - 1)) WRITE (iunit, '(I6,I6,ES18.9," I*",ES18.9)') & br, bc, REAL(blk_sum_c_dp), AIMAG(blk_sum_c_dp) CASE (dbcsr_type_complex_4) blk_sum_c_sp = SUM(c_sp(blk_p:blk_p + mn - 1)) WRITE (iunit, '(I6,I6,ES18.9," I*",ES18.9)') & br, bc, REAL(blk_sum_c_sp), AIMAG(blk_sum_c_sp) END SELECT ELSE blk_sum_r_dp = 0.0_dp WRITE (iunit, '(I6,I6,ES18.9)') & br, bc, blk_sum_r_dp END IF END IF block_exists END DO END DO END IF END IF ! unit > 0 CALL timestop(handle) END SUBROUTINE dbcsr_print_block_sum END MODULE dbcsr_io ================================================ FILE: src/ops/dbcsr_operations.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_operations !! Higher-level operations on DBCSR matrices. USE dbcsr_array_types, ONLY: array_data, & array_equality, & array_get USE dbcsr_blas_operations, ONLY: set_larnv_seed USE dbcsr_block_access, ONLY: dbcsr_get_block_p, & dbcsr_put_block, & dbcsr_remove_block, & dbcsr_reserve_blocks, & dbcsr_reserve_block2d USE dbcsr_block_operations, ONLY: dbcsr_block_conjg, & dbcsr_block_partial_copy, & dbcsr_block_real_neg, & dbcsr_block_scale, & dbcsr_data_clear USE dbcsr_config, ONLY: default_resize_factor USE dbcsr_data_methods, ONLY: & dbcsr_data_clear_pointer, dbcsr_data_ensure_size, dbcsr_data_get_size, & dbcsr_data_get_size_referenced, dbcsr_data_get_type, dbcsr_data_init, dbcsr_data_new, & dbcsr_data_release, dbcsr_data_set_pointer, dbcsr_get_data, dbcsr_scalar, & dbcsr_scalar_are_equal, dbcsr_scalar_fill_all, dbcsr_scalar_get_type, dbcsr_scalar_one, & dbcsr_scalar_zero, dbcsr_type_1d_to_2d, dbcsr_get_data_p_d, dbcsr_get_data_p_s, dbcsr_scalar_set_type USE dbcsr_data_operations, ONLY: dbcsr_data_convert, & dbcsr_data_copyall, & dbcsr_switch_data_area USE dbcsr_dist_methods, ONLY: dbcsr_distribution_col_dist, & dbcsr_distribution_local_cols, & dbcsr_distribution_local_rows, & dbcsr_distribution_mp, & dbcsr_distribution_row_dist, & dbcsr_distribution_get USE dbcsr_dist_operations, ONLY: checker_square_proc, & checker_tr, & dbcsr_find_column, & dbcsr_get_stored_coordinates, & dbcsr_get_stored_block_info USE dbcsr_index_operations, ONLY: dbcsr_index_checksum, & dbcsr_index_compact, & dbcsr_repoint_index USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left, & dbcsr_iterator_next_block, & dbcsr_iterator_start, & dbcsr_iterator_stop USE dbcsr_methods, ONLY: & dbcsr_col_block_offsets, dbcsr_distribution, dbcsr_get_data_size, dbcsr_get_data_type, & dbcsr_get_index_memory_type, dbcsr_get_matrix_type, dbcsr_get_num_blocks, & dbcsr_get_replication_type, dbcsr_has_symmetry, dbcsr_max_col_size, dbcsr_max_row_size, & dbcsr_nblkcols_total, dbcsr_nblkrows_total, dbcsr_nfullcols_total, dbcsr_nfullrows_total, & dbcsr_row_block_offsets, dbcsr_valid_index, dbcsr_get_nze, dbcsr_nfullcols_local, & dbcsr_nfullrows_local, dbcsr_get_num_blocks, dbcsr_release, dbcsr_wm_use_mutable USE dbcsr_mpiwrap, ONLY: mp_comm_type USE dbcsr_mp_methods, ONLY: dbcsr_mp_group, & dbcsr_mp_mynode, & dbcsr_mp_mypcol, & dbcsr_mp_myprow, & dbcsr_mp_numnodes, & dbcsr_mp_pgrid USE dbcsr_ptr_util, ONLY: ensure_array_size, & pointer_view USE dbcsr_toollib, ONLY: swap USE dbcsr_types, ONLY: & dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_filter_frobenius, dbcsr_func_artanh, & dbcsr_func_asin, dbcsr_func_cos, dbcsr_func_ddsin, dbcsr_func_ddtanh, dbcsr_func_dsin, & dbcsr_func_dtanh, dbcsr_func_inverse, dbcsr_func_inverse_special, dbcsr_func_sin, & dbcsr_func_spread_from_zero, dbcsr_func_tanh, dbcsr_func_truncate, dbcsr_iterator, & dbcsr_mp_obj, dbcsr_norm_column, dbcsr_norm_frobenius, dbcsr_norm_gershgorin, & dbcsr_norm_maxabsnorm, dbcsr_repl_full, dbcsr_repl_none, dbcsr_scalar_type, dbcsr_type, & dbcsr_type_antihermitian, dbcsr_type_antisymmetric, dbcsr_type_complex_4, & dbcsr_type_complex_8, dbcsr_type_hermitian, dbcsr_type_no_symmetry, dbcsr_type_real_4, & dbcsr_type_real_8, dbcsr_type_symmetric USE dbcsr_dist_util, ONLY: find_block_of_element USE dbcsr_work_operations, ONLY: dbcsr_create, & dbcsr_finalize, & dbcsr_work_create, & add_work_coordinate USE dbcsr_kinds, ONLY: dp, & int_4, & int_8, & real_4, & real_8, & sp USE dbcsr_mpiwrap, ONLY: mp_allgather, & mp_max, & mp_sum #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_operations' ! prettify protection CHARACTER, PARAMETER :: xa = dbcsr_type_hermitian, xb = dbcsr_type_antihermitian, & xc = dbcsr_type_no_symmetry PUBLIC :: dbcsr_trace, dbcsr_dot, dbcsr_add_on_diag, & dbcsr_set, dbcsr_scale, dbcsr_add, dbcsr_copy, & dbcsr_copy_into_existing, & dbcsr_get_diag, dbcsr_set_diag, & dbcsr_get_block_diag, dbcsr_hadamard_product, & dbcsr_filter, dbcsr_filter_anytype, dbcsr_scale_by_vector, & dbcsr_function_of_elements, & dbcsr_triu, & dbcsr_init_random PUBLIC :: dbcsr_sum_replicated PUBLIC :: dbcsr_norm_scalar, dbcsr_norm_r8_vec, dbcsr_conjg, & dbcsr_gershgorin_norm, dbcsr_maxabs, dbcsr_frobenius_norm PUBLIC :: dbcsr_crop_matrix PUBLIC :: dbcsr_get_info, dbcsr_may_be_dense, dbcsr_get_occupation PUBLIC :: dbcsr_clear, dbcsr_add_block_node, dbcsr_conform_scalar PUBLIC :: dbcsr_zero ! The interfaces for the generic routines found in the generated ! generic files. INTERFACE dbcsr_conform_scalar MODULE PROCEDURE make_conformant_scalar_d, make_conformant_scalar_s MODULE PROCEDURE make_conformant_scalar_c, make_conformant_scalar_z END INTERFACE INTERFACE dbcsr_trace MODULE PROCEDURE dbcsr_trace_s, dbcsr_trace_sd, & dbcsr_trace_c, dbcsr_trace_z END INTERFACE INTERFACE dbcsr_dot MODULE PROCEDURE dbcsr_dot_s, dbcsr_dot_sd, & dbcsr_dot_c, dbcsr_dot_z END INTERFACE INTERFACE dbcsr_scale MODULE PROCEDURE dbcsr_scale_anytype MODULE PROCEDURE dbcsr_scale_s, dbcsr_scale_d, dbcsr_scale_c, dbcsr_scale_z END INTERFACE INTERFACE dbcsr_scale_by_vector MODULE PROCEDURE dbcsr_scale_by_vector_anytype MODULE PROCEDURE dbcsr_scale_by_vector_s, dbcsr_scale_by_vector_d MODULE PROCEDURE dbcsr_scale_by_vector_c, dbcsr_scale_by_vector_z END INTERFACE INTERFACE dbcsr_set MODULE PROCEDURE dbcsr_set_s, dbcsr_set_d, dbcsr_set_c, dbcsr_set_z END INTERFACE INTERFACE dbcsr_add MODULE PROCEDURE dbcsr_add_anytype MODULE PROCEDURE dbcsr_add_s, dbcsr_add_d, dbcsr_add_c, dbcsr_add_z END INTERFACE INTERFACE dbcsr_add_on_diag MODULE PROCEDURE dbcsr_add_on_diag_s, dbcsr_add_on_diag_ds MODULE PROCEDURE dbcsr_add_on_diag_c, dbcsr_add_on_diag_z END INTERFACE INTERFACE dbcsr_filter MODULE PROCEDURE dbcsr_filter_anytype MODULE PROCEDURE dbcsr_filter_s, dbcsr_filter_d, & dbcsr_filter_c, dbcsr_filter_z END INTERFACE INTERFACE dbcsr_get_diag MODULE PROCEDURE dbcsr_get_diag_s, dbcsr_get_diag_d, dbcsr_get_diag_c, dbcsr_get_diag_z END INTERFACE INTERFACE dbcsr_set_diag MODULE PROCEDURE dbcsr_set_diag_s, dbcsr_set_diag_d, dbcsr_set_diag_c, dbcsr_set_diag_z END INTERFACE LOGICAL, PARAMETER :: debug_mod = .FALSE. LOGICAL, PARAMETER :: careful_mod = .FALSE. INTEGER, PARAMETER, PRIVATE :: rpslot_owner = 1 INTEGER, PARAMETER, PRIVATE :: rpslot_addblks = 2 INTEGER, PARAMETER, PRIVATE :: rpslot_addoffset = 3 INTEGER, PARAMETER, PRIVATE :: rpslot_oldblks = 4 INTEGER, PARAMETER, PRIVATE :: rpslot_oldoffset = 5 INTEGER, PARAMETER, PRIVATE :: rpslot_totaloffset = 6 INTEGER, PARAMETER, PRIVATE :: rpnslots = 6 CONTAINS #:include '../data/dbcsr.fypp' #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float FUNCTION make_conformant_scalar_${nametype1}$ (scalar, matrix) RESULT(encapsulated) !! Encapsulates a given scalar value and makes it conform with the !! type of the matrix. ${type1}$, INTENT(IN) :: scalar TYPE(dbcsr_type), INTENT(IN) :: matrix TYPE(dbcsr_scalar_type) :: encapsulated INTEGER :: data_type, scalar_data_type encapsulated = dbcsr_scalar(scalar) CALL dbcsr_scalar_fill_all(encapsulated) data_type = dbcsr_get_data_type(matrix) scalar_data_type = dbcsr_scalar_get_type(encapsulated) IF (scalar_data_type .EQ. dbcsr_type_complex_4 .OR. & scalar_data_type .EQ. dbcsr_type_complex_8) THEN IF (data_type .NE. dbcsr_type_complex_4 .AND. data_type .NE. dbcsr_type_complex_8) & DBCSR_ABORT("Can not conform a complex to a real number") END IF CALL dbcsr_scalar_set_type(encapsulated, data_type) END FUNCTION make_conformant_scalar_${nametype1}$ #:endfor SUBROUTINE dbcsr_add_block_node(matrix, block_row, block_col, block) !! Emulation of sparse_matrix_types/add_block_node mapped !! to add_real_matrix_block.... should not be used any longer !! It adds a block to the dbcsr matrix and returns a rank-2 pointer to the !! block. Currently it only and always uses the mutable data. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! DBCSR matrix INTEGER, INTENT(IN) :: block_row, block_col !! the row !! the column REAL(KIND=dp), DIMENSION(:, :), POINTER :: block !! the block to put INTEGER :: c, ithread, mynode, p, r LOGICAL :: dbg, existed, is_there, tr TYPE(dbcsr_distribution_obj) :: dist ! --------------------------------------------------------------------------- dbg = .FALSE. ithread = 0 !$ ithread = omp_get_thread_num() IF (.NOT. ASSOCIATED(matrix%wms)) THEN CALL dbcsr_work_create(matrix, work_mutable=.TRUE.) matrix%valid = .FALSE. END IF !$ IF (SIZE(matrix%wms) .LT. omp_get_num_threads()) & !$ DBCSR_ABORT("Too few threads.") IF (.NOT. dbcsr_wm_use_mutable(matrix%wms(ithread + 1))) & DBCSR_ABORT("Data loss due to no conversion of appendable to mutable data") is_there = ASSOCIATED(block) !r = row ; c = col ; tr = .FALSE. !CALL dbcsr_get_stored_coordinates (matrix, r, c, tr) !CALL dbcsr_reserve_block2d (matrix, row, col, block) !write(*,*) 'add_block_node: block_row',block_row,' block_col',block_col CALL dbcsr_reserve_block2d(matrix, block_row, block_col, block, & existed=existed) ! IF (dbg) THEN r = block_row; c = block_col; tr = .FALSE. CALL dbcsr_get_stored_coordinates(matrix, r, c, p) CALL dbcsr_get_info(matrix, distribution=dist) CALL dbcsr_distribution_get(dist, mynode=mynode) IF (p .NE. mynode) & DBCSR_WARN("Adding non-local element") END IF IF (existed) DBCSR_WARN("You should not add existing blocks according to old API.") IF (.NOT. is_there) block(:, :) = 0.0_dp END SUBROUTINE dbcsr_add_block_node SUBROUTINE dbcsr_conjg(matrix) !! Conjugate a DBCSR matrix TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! DBCSR matrix CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_conjg' INTEGER :: blk, col, data_type, handle, row LOGICAL :: tr TYPE(dbcsr_data_obj) :: data_any TYPE(dbcsr_iterator) :: iter ! --------------------------------------------------------------------------- ! CALL timeset(routineN, handle) data_type = dbcsr_get_data_type(matrix) CALL dbcsr_data_init(data_any) CALL dbcsr_data_new(data_any, data_type) CALL dbcsr_iterator_start(iter, matrix) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, data_any, tr, blk) SELECT CASE (data_type) CASE (dbcsr_type_complex_4) data_any%d%c_sp = CONJG(data_any%d%c_sp) CASE (dbcsr_type_complex_8) data_any%d%c_dp = CONJG(data_any%d%c_dp) CASE DEFAULT ! needed for g95 END SELECT END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(data_any) CALL dbcsr_data_release(data_any) CALL timestop(handle) END SUBROUTINE dbcsr_conjg SUBROUTINE dbcsr_zero(matrix_a) !! fill a dbcsr matrix with zeros TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_zero' INTEGER :: handle CALL timeset(routineN, handle) SELECT CASE (dbcsr_get_data_type(matrix_a)) CASE (dbcsr_type_complex_4) matrix_a%data_area%d%c_sp = (0.0, 0.0) CASE (dbcsr_type_complex_8) matrix_a%data_area%d%c_dp = (0.0_dp, 0.0_dp) CASE (dbcsr_type_real_4) matrix_a%data_area%d%r_sp = 0.0 CASE (dbcsr_type_real_8) matrix_a%data_area%d%r_dp = 0.0_dp END SELECT CALL timestop(handle) END SUBROUTINE dbcsr_zero SUBROUTINE dbcsr_scale_anytype(matrix_a, alpha_scalar, limits) !! Scales a DBCSR matrix by alpha !! !! Limits !! A 4-tuple describing (first_row, last_row, first_column, last_column). Set !! to 0 to avoid limiting. TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a !! DBCSR matrix TYPE(dbcsr_scalar_type), INTENT(IN) :: alpha_scalar !! a scalar INTEGER, DIMENSION(4), INTENT(IN), OPTIONAL :: limits !! Scale only a subbox CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_scale_anytype' INTEGER, PARAMETER :: first_col_i = 3, first_row_i = 1, & last_col_i = 4, last_row_i = 2 INTEGER :: a_col, a_col_size, a_row, a_row_size, col_offset, handle, row_offset, & scale_col_offset, scale_col_size, scale_row_offset, scale_row_size INTEGER, DIMENSION(4) :: my_limits LOGICAL :: do_scale, has_limits, tr TYPE(dbcsr_data_obj) :: data_any TYPE(dbcsr_iterator) :: iter TYPE(dbcsr_scalar_type) :: one ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) ! Limits are only honored if the argument is present and any are ! non-zero. IF (PRESENT(limits)) THEN has_limits = ANY(limits(:) .NE. 0) ELSE has_limits = .FALSE. END IF my_limits(first_row_i) = 1 my_limits(last_row_i) = dbcsr_nfullrows_total(matrix_a) my_limits(first_col_i) = 1 my_limits(last_col_i) = dbcsr_nfullcols_total(matrix_a) IF (has_limits) THEN IF (limits(last_col_i) .NE. 0) THEN IF (debug_mod .AND. (limits(last_col_i) < 0 .OR. limits(last_col_i) > dbcsr_nfullcols_total(matrix_a))) & DBCSR_ABORT("Specified last column is out of bounds.") my_limits(last_col_i) = limits(last_col_i) END IF IF (limits(first_col_i) .NE. 0) THEN IF (debug_mod .AND. (limits(first_col_i) < 0 .OR. limits(first_col_i) > dbcsr_nfullcols_total(matrix_a))) & DBCSR_ABORT("Specified first column is out of bounds.") my_limits(first_col_i) = limits(first_col_i) END IF IF (limits(last_row_i) .NE. 0) THEN IF (debug_mod .AND. (limits(last_row_i) < 0 .OR. limits(last_row_i) > dbcsr_nfullrows_total(matrix_a))) & DBCSR_ABORT("Specified last row is out of bounds.") my_limits(last_row_i) = limits(last_row_i) END IF IF (limits(first_row_i) .NE. 0) THEN IF (debug_mod .AND. (limits(first_row_i) < 0 .OR. limits(first_row_i) > dbcsr_nfullrows_total(matrix_a))) & DBCSR_ABORT("Specified first row is out of bounds.") my_limits(first_row_i) = limits(first_row_i) END IF END IF ! ! quick return if possible one = dbcsr_scalar_one(dbcsr_scalar_get_type(alpha_scalar)) do_scale = .NOT. dbcsr_scalar_are_equal(alpha_scalar, one) ! ! let's go IF (do_scale) THEN !$OMP PARALLEL DEFAULT (NONE) & !$OMP PRIVATE (iter, data_any) & !$OMP PRIVATE (a_row, a_col, tr, a_row_size, a_col_size, & !$OMP row_offset, col_offset) & !$OMP PRIVATE (scale_row_size, scale_col_size,& !$OMP scale_row_offset, scale_col_offset) & !$OMP SHARED (matrix_a, my_limits,alpha_scalar) CALL dbcsr_data_init(data_any) CALL dbcsr_data_new(data_any, dbcsr_type_1d_to_2d(dbcsr_get_data_type(matrix_a))) CALL dbcsr_iterator_start(iter, matrix_a, read_only=.FALSE., & contiguous_pointers=.FALSE., dynamic=.TRUE., & dynamic_byrows=.TRUE., shared=.TRUE.) iterations: DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, a_row, a_col, data_any, tr, & row_size=a_row_size, col_size=a_col_size, & row_offset=row_offset, col_offset=col_offset) IF (a_row_size .GT. 0 .AND. a_col_size .GT. 0) THEN CALL frame_block_limit(a_row_size, row_offset, & my_limits(first_row_i), my_limits(last_row_i), & scale_row_size, scale_row_offset) CALL frame_block_limit(a_col_size, col_offset, & my_limits(first_col_i), my_limits(last_col_i), & scale_col_size, scale_col_offset) IF (tr) THEN CALL swap(scale_row_size, scale_col_size) CALL swap(scale_row_offset, scale_col_offset) END IF CALL dbcsr_block_scale(data_any, scale=alpha_scalar, & row_size=scale_row_size, col_size=scale_col_size, & lb=scale_row_offset, lb2=scale_col_offset) END IF END DO iterations CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(data_any) CALL dbcsr_data_release(data_any) !$OMP END PARALLEL END IF CALL timestop(handle) END SUBROUTINE dbcsr_scale_anytype ELEMENTAL SUBROUTINE frame_block_limit(block_size, block_offset, & first_limit, last_limit, & frame_size, frame_offset) !! Determines the effect of limits on a block INTEGER, INTENT(IN) :: block_size, block_offset, first_limit, & last_limit !! size of block !! global offset of block !! lower limit !! upper limit INTEGER, INTENT(OUT) :: frame_size, frame_offset !! size of block region within the limits !! starting position of the block region that is within the limits INTEGER :: f, l f = MAX(block_offset, first_limit) l = MIN(block_offset + block_size - 1, last_limit) frame_size = MAX(l - f + 1, 0) frame_offset = MIN(f - block_offset + 1, block_size) END SUBROUTINE frame_block_limit SUBROUTINE dbcsr_scale_by_vector_anytype(matrix_a, alpha, side) !! Scales a DBCSR matrix by alpha TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a !! DBCSR matrix TYPE(dbcsr_data_obj), INTENT(IN), OPTIONAL :: alpha !! the scaling vector CHARACTER(LEN=*), INTENT(IN) :: side !! apply the scaling from the side CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_scale_by_vector_anytype' INTEGER :: a_blk, a_col, a_col_size, a_nze, a_row, & a_row_size, col_offset, data_type, & handle, i, icol, irow, row_offset LOGICAL :: right, tr TYPE(dbcsr_data_obj) :: data_any TYPE(dbcsr_iterator) :: iter ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) ! check that alpha and matrix have the same data type IF (dbcsr_get_data_type(matrix_a) .NE. alpha%d%data_type) & DBCSR_ABORT("wrong data type matrix_a") IF (ASSOCIATED(alpha%d%r2_sp) .OR. ASSOCIATED(alpha%d%r2_dp) & .OR. ASSOCIATED(alpha%d%c2_sp) .OR. ASSOCIATED(alpha%d%c2_dp)) & DBCSR_ABORT("alpha is not a vector") ! ! set vars right = .TRUE. SELECT CASE (side) CASE ('right'); right = .TRUE. CASE ('left'); right = .FALSE. CASE DEFAULT DBCSR_ABORT("wrong side="//side) END SELECT ! check that alpha and matrix have matching sizes IF (right .AND. dbcsr_nfullcols_total(matrix_a) /= dbcsr_data_get_size(alpha)) THEN DBCSR_ABORT("vector size does not match matrix row size for RHS scaling") ELSE IF ((.NOT. right) .AND. dbcsr_nfullrows_total(matrix_a) /= dbcsr_data_get_size(alpha)) THEN DBCSR_ABORT("vector size does not match matrix col size for LHS scaling") END IF ! ! let's go data_type = dbcsr_get_data_type(matrix_a) CALL dbcsr_data_init(data_any) CALL dbcsr_data_new(data_any, dbcsr_get_data_type(matrix_a)) CALL dbcsr_iterator_start(iter, matrix_a) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, a_row, a_col, data_any, tr, & block_number=a_blk, & row_size=a_row_size, col_size=a_col_size, & row_offset=row_offset, col_offset=col_offset) a_nze = a_row_size*a_col_size IF (a_nze .EQ. 0) CYCLE ! Skip empty blocks ! ! let's scale IF (right) THEN SELECT CASE (data_type) CASE (dbcsr_type_real_4) DO i = 1, a_col_size DO icol = (i - 1)*a_row_size + 1, (i - 1)*a_row_size + a_row_size data_any%d%r_sp(icol) = data_any%d%r_sp(icol)*alpha%d%r_sp(col_offset + i - 1) END DO END DO CASE (dbcsr_type_real_8) DO i = 1, a_col_size DO icol = (i - 1)*a_row_size + 1, (i - 1)*a_row_size + a_row_size data_any%d%r_dp(icol) = data_any%d%r_dp(icol)*alpha%d%r_dp(col_offset + i - 1) END DO END DO CASE (dbcsr_type_complex_4) DO i = 1, a_col_size DO icol = (i - 1)*a_row_size + 1, (i - 1)*a_row_size + a_row_size data_any%d%c_sp(icol) = data_any%d%c_sp(icol)*alpha%d%c_sp(col_offset + i - 1) END DO END DO CASE (dbcsr_type_complex_8) DO i = 1, a_col_size DO icol = (i - 1)*a_row_size + 1, (i - 1)*a_row_size + a_row_size data_any%d%c_dp(icol) = data_any%d%c_dp(icol)*alpha%d%c_dp(col_offset + i - 1) END DO END DO END SELECT ELSE SELECT CASE (data_type) CASE (dbcsr_type_real_4) DO i = 1, a_row_size DO irow = i, i + a_col_size*a_row_size - 1, a_row_size data_any%d%r_sp(irow) = data_any%d%r_sp(irow)*alpha%d%r_sp(row_offset + i - 1) END DO END DO CASE (dbcsr_type_real_8) DO i = 1, a_row_size DO irow = i, i + a_col_size*a_row_size - 1, a_row_size data_any%d%r_dp(irow) = data_any%d%r_dp(irow)*alpha%d%r_dp(row_offset + i - 1) END DO END DO CASE (dbcsr_type_complex_4) DO i = 1, a_row_size DO irow = i, i + a_col_size*a_row_size - 1, a_row_size data_any%d%c_sp(irow) = data_any%d%c_sp(irow)*alpha%d%c_sp(row_offset + i - 1) END DO END DO CASE (dbcsr_type_complex_8) DO i = 1, a_row_size DO irow = i, i + a_col_size*a_row_size - 1, a_row_size data_any%d%c_dp(irow) = data_any%d%c_dp(irow)*alpha%d%c_dp(row_offset + i - 1) END DO END DO END SELECT END IF END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(data_any) CALL dbcsr_data_release(data_any) CALL timestop(handle) END SUBROUTINE dbcsr_scale_by_vector_anytype SUBROUTINE dbcsr_add_anytype(matrix_a, matrix_b, alpha_scalar, beta_scalar, flop) !! add and scale matrices !! A = alpha*A + beta*B or TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a !! DBCSR matrix TYPE(dbcsr_type), INTENT(IN) :: matrix_b !! DBCSR matrix TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: alpha_scalar, beta_scalar INTEGER(KIND=int_8), INTENT(INOUT), OPTIONAL :: flop CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_anytype' INTEGER :: data_type_a, data_type_b, & handle, size_work, iw INTEGER(KIND=int_8) :: my_flop, local_matrix_size LOGICAL :: do_scale TYPE(dbcsr_iterator) :: iter TYPE(dbcsr_scalar_type) :: my_beta_scalar ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (.NOT. dbcsr_valid_index(matrix_a)) & DBCSR_ABORT("Invalid matrix") IF ((dbcsr_get_matrix_type(matrix_a) .EQ. dbcsr_type_symmetric .OR. & dbcsr_get_matrix_type(matrix_a) .EQ. dbcsr_type_antisymmetric) .NEQV. & (dbcsr_get_matrix_type(matrix_b) .EQ. dbcsr_type_symmetric .OR. & dbcsr_get_matrix_type(matrix_b) .EQ. dbcsr_type_antisymmetric)) THEN DBCSR_ABORT("Summing general with symmetric matrix NYI") END IF data_type_a = dbcsr_get_data_type(matrix_a) data_type_b = dbcsr_get_data_type(matrix_b) ! my_beta_scalar = dbcsr_scalar_one(data_type_b) IF (PRESENT(beta_scalar)) my_beta_scalar = beta_scalar ! ! let's go IF ((dbcsr_nblkrows_total(matrix_a) .NE. dbcsr_nblkrows_total(matrix_b)) .OR. & (dbcsr_nblkcols_total(matrix_a) .NE. dbcsr_nblkcols_total(matrix_b)) .OR. & (data_type_a .NE. data_type_b)) & DBCSR_ABORT("matrices not consistent") IF (data_type_a .NE. my_beta_scalar%data_type) & DBCSR_ABORT("beta type parameter not consistent with matrices type") do_scale = .NOT. dbcsr_scalar_are_equal(my_beta_scalar, dbcsr_scalar_one(data_type_b)) IF (PRESENT(alpha_scalar)) THEN CALL dbcsr_scale(matrix_a, alpha_scalar=alpha_scalar) END IF IF ((.NOT. dbcsr_scalar_are_equal(my_beta_scalar, & dbcsr_scalar_zero(data_type_b))) .AND. & dbcsr_get_num_blocks(matrix_b) .GT. 0) THEN ! Pre-size work arrays of matrix_a to avoid continuous reallocation. ! Overestimate for symmetric matrix and multiple threads! local_matrix_size = INT(dbcsr_nfullrows_local(matrix_a), KIND=int_8)* & dbcsr_nfullcols_local(matrix_a) size_work = MAX(0, INT(MIN(local_matrix_size - INT(dbcsr_get_nze(matrix_a), KIND=int_8), & INT(dbcsr_get_nze(matrix_b), KIND=int_8)), KIND=int_4)) my_flop = 0 !$OMP PARALLEL DEFAULT (NONE) & !$OMP PRIVATE (iter, iw) & !$OMP SHARED (matrix_a, matrix_b, data_type_b, size_work) & !$OMP SHARED (do_scale, my_beta_scalar) & !$OMP REDUCTION (+ : my_flop) CALL dbcsr_work_create(matrix_a, & nblks_guess=matrix_b%nblks, & sizedata_guess=size_work, & work_mutable=.FALSE.) !$OMP BARRIER iw = 1 !$ iw = omp_get_thread_num() + 1 CALL dbcsr_iterator_start(iter, matrix_b, & shared=.TRUE., read_only=.TRUE., contiguous_pointers=.FALSE., & dynamic=.TRUE., dynamic_byrows=.TRUE.) SELECT CASE (data_type_b) CASE (dbcsr_type_real_4) CALL dbcsr_add_anytype_s(matrix_a, matrix_b, iter, iw, do_scale, my_beta_scalar, my_flop) CASE (dbcsr_type_real_8) CALL dbcsr_add_anytype_d(matrix_a, matrix_b, iter, iw, do_scale, my_beta_scalar, my_flop) CASE (dbcsr_type_complex_4) CALL dbcsr_add_anytype_c(matrix_a, matrix_b, iter, iw, do_scale, my_beta_scalar, my_flop) CASE (dbcsr_type_complex_8) CALL dbcsr_add_anytype_z(matrix_a, matrix_b, iter, iw, do_scale, my_beta_scalar, my_flop) CASE default DBCSR_ABORT("Invalid data type") END SELECT CALL dbcsr_iterator_stop(iter) CALL dbcsr_finalize(matrix_a) !$OMP END PARALLEL IF (PRESENT(flop)) flop = flop + my_flop END IF CALL timestop(handle) END SUBROUTINE dbcsr_add_anytype SUBROUTINE dbcsr_add_d(matrix_a, matrix_b, alpha_scalar, beta_scalar) !! Interface for dbcsr_add TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a TYPE(dbcsr_type), INTENT(IN) :: matrix_b REAL(real_8), INTENT(IN) :: alpha_scalar, beta_scalar CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_d' INTEGER :: handle CALL timeset(routineN, handle) IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_8 .AND. & dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_8) THEN CALL dbcsr_add_anytype(matrix_a, matrix_b, & alpha_scalar=dbcsr_scalar(alpha_scalar), & beta_scalar=dbcsr_scalar(beta_scalar)) ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_4 .AND. & dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_4) THEN CALL dbcsr_add_anytype(matrix_a, matrix_b, & alpha_scalar=dbcsr_scalar(REAL(alpha_scalar, real_4)), & beta_scalar=dbcsr_scalar(REAL(beta_scalar, real_4))) ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_complex_4 .AND. & dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_complex_4) THEN CALL dbcsr_add_anytype(matrix_a, matrix_b, & alpha_scalar=dbcsr_scalar(CMPLX(alpha_scalar, 0, real_4)), & beta_scalar=dbcsr_scalar(CMPLX(beta_scalar, 0, real_4))) ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_complex_8 .AND. & dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_complex_8) THEN CALL dbcsr_add_anytype(matrix_a, matrix_b, & alpha_scalar=dbcsr_scalar(CMPLX(alpha_scalar, 0, real_8)), & beta_scalar=dbcsr_scalar(CMPLX(beta_scalar, 0, real_8))) ELSE DBCSR_ABORT("Invalid combination of data type, NYI") END IF CALL timestop(handle) END SUBROUTINE dbcsr_add_d SUBROUTINE dbcsr_add_s(matrix_a, matrix_b, alpha_scalar, beta_scalar) TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a TYPE(dbcsr_type), INTENT(IN) :: matrix_b REAL(real_4), INTENT(IN) :: alpha_scalar, beta_scalar CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_s' INTEGER :: handle CALL timeset(routineN, handle) IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_4 .AND. & dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_4) THEN CALL dbcsr_add_anytype(matrix_a, matrix_b, & alpha_scalar=dbcsr_scalar(alpha_scalar), & beta_scalar=dbcsr_scalar(beta_scalar)) ELSE DBCSR_ABORT("Invalid combination of data type, NYI") END IF CALL timestop(handle) END SUBROUTINE dbcsr_add_s SUBROUTINE dbcsr_add_z(matrix_a, matrix_b, alpha_scalar, beta_scalar) TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a TYPE(dbcsr_type), INTENT(IN) :: matrix_b COMPLEX(real_8), INTENT(IN) :: alpha_scalar, beta_scalar CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_z' INTEGER :: handle CALL timeset(routineN, handle) IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_complex_8 .AND. & dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_complex_8) THEN CALL dbcsr_add_anytype(matrix_a, matrix_b, & alpha_scalar=dbcsr_scalar(alpha_scalar), & beta_scalar=dbcsr_scalar(beta_scalar)) ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_complex_4 .AND. & dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_complex_4) THEN CALL dbcsr_add_anytype(matrix_a, matrix_b, & alpha_scalar=dbcsr_scalar(CMPLX(alpha_scalar, KIND=real_4)), & beta_scalar=dbcsr_scalar(CMPLX(beta_scalar, KIND=real_4))) ELSE DBCSR_ABORT("Invalid combination of data type, NYI") END IF CALL timestop(handle) END SUBROUTINE dbcsr_add_z SUBROUTINE dbcsr_add_c(matrix_a, matrix_b, alpha_scalar, beta_scalar) TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a TYPE(dbcsr_type), INTENT(IN) :: matrix_b COMPLEX(real_4), INTENT(IN) :: alpha_scalar, beta_scalar CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_c' INTEGER :: handle CALL timeset(routineN, handle) IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_complex_4 .AND. & dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_complex_4) THEN CALL dbcsr_add_anytype(matrix_a, matrix_b, & alpha_scalar=dbcsr_scalar(alpha_scalar), & beta_scalar=dbcsr_scalar(beta_scalar)) ELSE DBCSR_ABORT("Invalid combination of data type, NYI") END IF CALL timestop(handle) END SUBROUTINE dbcsr_add_c SUBROUTINE dbcsr_add_on_diag_ds(matrix, alpha) TYPE(dbcsr_type), INTENT(INOUT) :: matrix REAL(kind=real_8), INTENT(IN) :: alpha IF (dbcsr_get_data_type(matrix) == dbcsr_type_real_4) THEN CALL dbcsr_add_on_diag_s(matrix, REAL(alpha, kind=real_4)) ELSE CALL dbcsr_add_on_diag_d(matrix, alpha) END IF END SUBROUTINE dbcsr_add_on_diag_ds SUBROUTINE dbcsr_function_of_elements(matrix_a, func, a0, a1, a2) !! Computes various functions (defined by func) of matrix elements !! @note !! sign(A,B) returns the value of A with the sign of B !! dbcsr_func_inverse: 1/(a1*x+a0) !! fails if the inversion produces infinite numbers !! dbcsr_func_inverse_special: 1/(x+sign(a0,x)) !! safe inverse: if a0>0 then the denominator is never zero !! dbcsr_func_tanh: tanh(a1*x+a0) !! dbcsr_func_dtanh: d(tanh(a1*x+a0)) / dx !! dbcsr_func_ddtanh: d2(tanh(a1*x+a0)) / dx2 !! dbcsr_func_artanh: artanh(a1*x+a0)=ln[(1+(a1*x+a0))/(1-(a1*x+a0))]/2 !! fails if |a1*x+a0| >= 1 !! dbcsr_func_sread_from_zero: if |x|<|a0| then x=sign(a0,x) !! dbcsr_func_truncate: if |x|>|a0| then x=sign(a0,x) !! dbcsr_func_sin: sin(a1*x+a0) !! dbcsr_func_cos: cos(a1*x+a0) !! dbcsr_func_dsin: d(sin(a1*x+a0)) / dx = a1*cos(a1*x+a0) !! dbcsr_func_ddsin: d2(sin(a1*x+a0)) / dx2 = -a1*a1*sin(a1*x+a0) !! dbcsr_func_asin: asin(a1*x+a0) !! fails if |a1*x+a0| > 1 !! @endnote TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a !! DBCSR matrix INTEGER, INTENT(IN) :: func REAL(kind=dp), INTENT(IN), OPTIONAL :: a0, a1, a2 CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_function_of_elements' INTEGER :: blk, col, col_size, data_type, handle, & ielem, nze, row, row_size LOGICAL :: tr_a REAL(kind=dp) :: p0, p1, p2 TYPE(dbcsr_data_obj) :: a_data TYPE(dbcsr_iterator) :: iter ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (PRESENT(a0)) THEN p0 = a0 ELSE p0 = 0.0_dp END IF IF (PRESENT(a1)) THEN p1 = a1 ELSE p1 = 1.0_dp END IF IF (PRESENT(a2)) THEN p2 = a2 ELSE p2 = 0.0_dp END IF data_type = dbcsr_get_data_type(matrix_a) CALL dbcsr_data_init(a_data) CALL dbcsr_data_new(a_data, data_type) CALL dbcsr_iterator_start(iter, matrix_a) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, a_data, tr_a, blk, & row_size=row_size, col_size=col_size) nze = row_size*col_size SELECT CASE (data_type) !CASE (dbcsr_type_real_4) ! a_data%d%r_sp(1:nze) = 1.0_real_4/a_data%d%r_sp(1:nze) ! IF(MAXVAL(ABS(a_data%d%r_sp)).GE.HUGE(0.0_real_4))& ! DBCSR_ABORT("Division by zero") CASE (dbcsr_type_real_8) SELECT CASE (func) CASE (dbcsr_func_spread_from_zero) ! if |x|<|a0| then x=|a0|*sign(x) DO ielem = 1, nze IF (ABS(a_data%d%r_dp(ielem)) .LT. ABS(p0)) THEN a_data%d%r_dp(ielem) = SIGN(p0, a_data%d%r_dp(ielem)) END IF END DO CASE (dbcsr_func_truncate) ! if |x|>|a0| then x=|a0|*sign(x) DO ielem = 1, nze IF (ABS(a_data%d%r_dp(ielem)) .GT. ABS(p0)) THEN a_data%d%r_dp(ielem) = SIGN(p0, a_data%d%r_dp(ielem)) END IF END DO CASE (dbcsr_func_inverse_special) !IF (MINVAL(ABS(a_data%d%r_dp)).le.ABS(p2)) THEN ! ! there is at least one near-zero element, ! ! invert element-by-element ! DO ielem=1,nze ! IF (a_data%d%r_dp(ielem).le.ABS(p2)) THEN ! a_data%d%r_dp(ielem) = 0.0_real_8 ! ELSE ! a_data%d%r_dp(ielem) = & ! 1.0_real_8/(p1*a_data%d%r_dp(ielem)+p0) ! ENDIF ! ENDDO !ELSE ! a_data%d%r_dp(1:nze) = 1.0_real_8/(p1*a_data%d%r_dp(1:nze)+p0) !ENDIF a_data%d%r_dp(1:nze) = 1.0_real_8/(a_data%d%r_dp(1:nze) + SIGN(p0, a_data%d%r_dp(1:nze))) CASE (dbcsr_func_inverse) a_data%d%r_dp(1:nze) = 1.0_real_8/(p1*a_data%d%r_dp(1:nze) + p0) IF (MAXVAL(ABS(a_data%d%r_dp)) .GE. HUGE(0.0_real_8)) & DBCSR_ABORT("Division by zero") CASE (dbcsr_func_tanh) a_data%d%r_dp(1:nze) = TANH(p1*a_data%d%r_dp(1:nze) + p0) CASE (dbcsr_func_dtanh) a_data%d%r_dp(1:nze) = TANH(p1*a_data%d%r_dp(1:nze) + p0) a_data%d%r_dp(1:nze) = a_data%d%r_dp(1:nze)**2 a_data%d%r_dp(1:nze) = p1*(1.0_real_8 - a_data%d%r_dp(1:nze)) CASE (dbcsr_func_ddtanh) a_data%d%r_dp(1:nze) = TANH(p1*a_data%d%r_dp(1:nze) + p0) a_data%d%r_dp(1:nze) = a_data%d%r_dp(1:nze)**3 - a_data%d%r_dp(1:nze) a_data%d%r_dp(1:nze) = 2.0_real_8*(p1**2)*a_data%d%r_dp(1:nze) CASE (dbcsr_func_artanh) a_data%d%r_dp(1:nze) = p1*a_data%d%r_dp(1:nze) + p0 IF (MAXVAL(ABS(a_data%d%r_dp)) .GE. 1.0_real_8) & DBCSR_ABORT("ARTANH is undefined for |x|>=1") a_data%d%r_dp(1:nze) = (1.0_real_8 + a_data%d%r_dp(1:nze)) & /(1.0_real_8 - a_data%d%r_dp(1:nze)) a_data%d%r_dp(1:nze) = 0.5_real_8*LOG(a_data%d%r_dp(1:nze)) CASE (dbcsr_func_sin) a_data%d%r_dp(1:nze) = SIN(p1*a_data%d%r_dp(1:nze) + p0) CASE (dbcsr_func_cos) a_data%d%r_dp(1:nze) = COS(p1*a_data%d%r_dp(1:nze) + p0) CASE (dbcsr_func_dsin) a_data%d%r_dp(1:nze) = p1*COS(p1*a_data%d%r_dp(1:nze) + p0) CASE (dbcsr_func_ddsin) a_data%d%r_dp(1:nze) = -p1*p1*SIN(p1*a_data%d%r_dp(1:nze) + p0) CASE (dbcsr_func_asin) a_data%d%r_dp(1:nze) = p1*a_data%d%r_dp(1:nze) + p0 IF (MAXVAL(ABS(a_data%d%r_dp)) .GT. 1.0_real_8) & DBCSR_ABORT("ASIN is undefined for |x|>1") a_data%d%r_dp(1:nze) = ASIN(a_data%d%r_dp(1:nze)) CASE DEFAULT DBCSR_ABORT("Unknown function of matrix elements") END SELECT !CASE (dbcsr_type_complex_4) !CASE (dbcsr_type_complex_8) CASE DEFAULT DBCSR_ABORT("Operation is implemented only for dp real values") END SELECT END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(a_data) CALL dbcsr_data_release(a_data) CALL timestop(handle) END SUBROUTINE dbcsr_function_of_elements SUBROUTINE dbcsr_hadamard_product(matrix_a, matrix_b, matrix_c, & b_assume_value) !! Hadamard product !! C = A . B (C needs to be different from A and B) TYPE(dbcsr_type), INTENT(IN) :: matrix_a, matrix_b !! DBCSR matrix !! DBCSR matrix TYPE(dbcsr_type), INTENT(INOUT) :: matrix_c !! DBCSR matrix REAL(KIND=dp), INTENT(IN), OPTIONAL :: b_assume_value CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_hadamard_product' INTEGER :: blk, col, col_size, data_type, handle, & nze, row, row_size LOGICAL :: assume_blocks_in_b, found, tr_a, tr_b REAL(KIND=dp) :: assumed_b_value TYPE(dbcsr_data_obj) :: a_data, b_data, c_data TYPE(dbcsr_iterator) :: iter ! --------------------------------------------------------------------------- IF (PRESENT(b_assume_value)) THEN assume_blocks_in_b = .TRUE. assumed_b_value = b_assume_value ELSE assume_blocks_in_b = .FALSE. assumed_b_value = 0.0_dp END IF CALL timeset(routineN, handle) IF (dbcsr_get_data_type(matrix_a) .NE. dbcsr_get_data_type(matrix_b) .OR. & dbcsr_get_data_type(matrix_a) .NE. dbcsr_get_data_type(matrix_c)) & DBCSR_ABORT("data types not consistent, need to fix that") IF (dbcsr_nblkrows_total(matrix_a) .NE. dbcsr_nblkrows_total(matrix_b) .OR. & dbcsr_nblkrows_total(matrix_c) .NE. dbcsr_nblkrows_total(matrix_a)) & DBCSR_ABORT("matrices not consistent") data_type = dbcsr_get_data_type(matrix_a) CALL dbcsr_data_init(c_data) CALL dbcsr_data_new(c_data, data_type, & data_size=dbcsr_max_row_size(matrix_a)*dbcsr_max_col_size(matrix_a)) CALL dbcsr_zero(matrix_c) CALL dbcsr_data_init(a_data) CALL dbcsr_data_new(a_data, data_type) CALL dbcsr_data_init(b_data) CALL dbcsr_data_new(b_data, data_type) CALL dbcsr_iterator_start(iter, matrix_a) DO WHILE (dbcsr_iterator_blocks_left(iter)) SELECT CASE (dbcsr_get_data_type(matrix_a)) !CASE (dbcsr_type_real_4) CASE (dbcsr_type_real_8) CALL dbcsr_iterator_next_block(iter, row, col, a_data, tr_a, blk, & row_size=row_size, col_size=col_size) nze = row_size*col_size CALL dbcsr_get_block_p(matrix_b, row, col, b_data, tr_b, found) IF (tr_a .NEQV. tr_b) & DBCSR_ABORT("tr not consistent, need to fix that") IF (found) THEN SELECT CASE (data_type) CASE (dbcsr_type_real_4) c_data%d%r_sp(1:nze) = a_data%d%r_sp(1:nze)*b_data%d%r_sp(1:nze) CALL dbcsr_put_block(matrix_c, row, col, c_data%d%r_sp(1:nze), transposed=tr_a, & summation=.FALSE.) CASE (dbcsr_type_real_8) c_data%d%r_dp(1:nze) = a_data%d%r_dp(1:nze)*b_data%d%r_dp(1:nze) CALL dbcsr_put_block(matrix_c, row, col, c_data%d%r_dp(1:nze), transposed=tr_a, & summation=.FALSE.) CASE (dbcsr_type_complex_4) c_data%d%c_sp(1:nze) = a_data%d%c_sp(1:nze)*b_data%d%c_sp(1:nze) CALL dbcsr_put_block(matrix_c, row, col, c_data%d%c_sp(1:nze), transposed=tr_a, & summation=.FALSE.) CASE (dbcsr_type_complex_8) c_data%d%c_dp(1:nze) = a_data%d%c_dp(1:nze)*b_data%d%c_dp(1:nze) CALL dbcsr_put_block(matrix_c, row, col, c_data%d%c_dp(1:nze), transposed=tr_a, & summation=.FALSE.) END SELECT ELSE IF (assume_blocks_in_b) THEN ! this makes not too much sense, to delete ? SELECT CASE (data_type) CASE (dbcsr_type_real_4) c_data%d%r_sp(1:nze) = a_data%d%r_sp(1:nze)*REAL(assumed_b_value, KIND=sp) CALL dbcsr_put_block(matrix_c, row, col, c_data%d%r_sp(1:nze), transposed=tr_a, & summation=.FALSE.) CASE (dbcsr_type_real_8) c_data%d%r_dp(1:nze) = a_data%d%r_dp(1:nze)*assumed_b_value CALL dbcsr_put_block(matrix_c, row, col, c_data%d%r_dp(1:nze), transposed=tr_a, & summation=.FALSE.) CASE (dbcsr_type_complex_4) c_data%d%c_sp(1:nze) = a_data%d%c_sp(1:nze)*REAL(assumed_b_value, KIND=sp) CALL dbcsr_put_block(matrix_c, row, col, c_data%d%c_sp(1:nze), transposed=tr_a, & summation=.FALSE.) CASE (dbcsr_type_complex_8) c_data%d%c_dp(1:nze) = a_data%d%c_dp(1:nze)*assumed_b_value CALL dbcsr_put_block(matrix_c, row, col, c_data%d%c_dp(1:nze), transposed=tr_a, & summation=.FALSE.) END SELECT END IF END IF !CASE (dbcsr_type_complex_4) !CASE (dbcsr_type_complex_8) CASE DEFAULT DBCSR_ABORT("Only real double precision") END SELECT END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_finalize(matrix_c) CALL dbcsr_data_clear_pointer(a_data) CALL dbcsr_data_clear_pointer(b_data) CALL dbcsr_data_release(c_data) CALL dbcsr_data_release(a_data) CALL dbcsr_data_release(b_data) CALL timestop(handle) END SUBROUTINE dbcsr_hadamard_product SUBROUTINE dbcsr_init_random(matrix, keep_sparsity, mini_seed) !! ... TODO : unify with other version which is generic in the data_type TYPE(dbcsr_type), INTENT(INOUT) :: matrix LOGICAL, OPTIONAL :: keep_sparsity INTEGER, INTENT(IN), OPTIONAL :: mini_seed CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_init_random' INTEGER :: col, col_size, handle, hold, iseed(4), & mynode, ncol, nrow, row, row_size, & stored_col, stored_row, my_mini_seed INTEGER, DIMENSION(:), POINTER :: col_blk_size, row_blk_size LOGICAL :: found, my_keep_sparsity, tr REAL(real_8), ALLOCATABLE, DIMENSION(:) :: rnd REAL(real_8), DIMENSION(:, :), POINTER :: buff, data_d ! --------------------------------------------------------------------------- my_keep_sparsity = .FALSE. IF (PRESENT(keep_sparsity)) my_keep_sparsity = keep_sparsity my_mini_seed = 1 IF (PRESENT(mini_seed)) my_mini_seed = mini_seed CALL timeset(routineN, handle) row_blk_size => array_data(matrix%row_blk_size) col_blk_size => array_data(matrix%col_blk_size) mynode = dbcsr_mp_mynode(dbcsr_distribution_mp(dbcsr_distribution(matrix))) CALL dbcsr_work_create(matrix, work_mutable=.TRUE.) ALLOCATE (rnd(MAXVAL(row_blk_size)*MAXVAL(col_blk_size))) nrow = dbcsr_nblkrows_total(matrix) ncol = dbcsr_nblkcols_total(matrix) DO row = 1, nrow DO col = 1, ncol row_size = row_blk_size(row) col_size = col_blk_size(col) tr = .FALSE. stored_row = row stored_col = col CALL dbcsr_get_stored_coordinates(matrix, stored_row, stored_col, hold) IF (hold .EQ. mynode) THEN CALL dbcsr_get_block_p(matrix, stored_row, stored_col, data_d, tr, found) IF (found .OR. (.NOT. my_keep_sparsity)) THEN ! set the seed for dlarnv, is here to guarantee same value of the random numbers ! for all layouts (and block distributions) CALL set_larnv_seed(row, nrow, col, ncol, my_mini_seed, iseed) CALL dlarnv(1, iseed, row_size*col_size, rnd(1)) END IF IF (found) THEN CALL dcopy(row_size*col_size, rnd, 1, data_d, 1) ELSE IF (.NOT. my_keep_sparsity) THEN ALLOCATE (buff(row_size, col_size)) CALL dcopy(row_size*col_size, rnd, 1, buff, 1) CALL dbcsr_put_block(matrix, stored_row, stored_col, buff) DEALLOCATE (buff) END IF END IF END IF END DO END DO DEALLOCATE (rnd) CALL dbcsr_finalize(matrix) CALL timestop(handle) END SUBROUTINE dbcsr_init_random SUBROUTINE dbcsr_get_block_diag(matrix, diag) !! get the diagonal of a dbcsr matrix TYPE(dbcsr_type), INTENT(IN) :: matrix !! the matrix TYPE(dbcsr_type), INTENT(INOUT) :: diag !! the diagonal CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_block_diag' INTEGER :: blk, col, handle, row LOGICAL :: tr TYPE(dbcsr_data_obj) :: data_a TYPE(dbcsr_iterator) :: iter ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) CALL dbcsr_create(diag, name='diag of '//TRIM(matrix%name), & template=matrix) CALL dbcsr_data_init(data_a) CALL dbcsr_data_new(data_a, dbcsr_get_data_type(matrix)) CALL dbcsr_iterator_start(iter, matrix) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, data_a, tr, blk) IF (row .EQ. col) CALL dbcsr_put_block(diag, row, col, data_a, transposed=tr) END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(data_a) CALL dbcsr_data_release(data_a) CALL dbcsr_finalize(diag) CALL timestop(handle) END SUBROUTINE dbcsr_get_block_diag LOGICAL FUNCTION symmetry_consistent(matrix_type, data_type) !! checks if matrix symmetry and data_type are consistent !! \brief note: does not check the symmetry of the data itself CHARACTER, INTENT(IN) :: matrix_type INTEGER, INTENT(IN) :: data_type symmetry_consistent = .FALSE. SELECT CASE (data_type) CASE (dbcsr_type_real_4, dbcsr_type_real_8) SELECT CASE (matrix_type) CASE (dbcsr_type_no_symmetry, dbcsr_type_symmetric, dbcsr_type_antisymmetric) symmetry_consistent = .TRUE. END SELECT CASE (dbcsr_type_complex_4, dbcsr_type_complex_8) SELECT CASE (matrix_type) CASE (dbcsr_type_no_symmetry, dbcsr_type_hermitian, dbcsr_type_antihermitian) symmetry_consistent = .TRUE. END SELECT CASE DEFAULT DBCSR_ABORT("Invalid data type.") END SELECT END FUNCTION symmetry_consistent LOGICAL FUNCTION symmetry_compatible(matrix_type_a, matrix_type_b) !! checks if symmetries of two matrices are compatible for copying !! \brief data from matrix_a(source) to matrix_b(target) CHARACTER, INTENT(IN) :: matrix_type_a, matrix_type_b symmetry_compatible = .FALSE. SELECT CASE (matrix_type_a) CASE (dbcsr_type_no_symmetry) SELECT CASE (matrix_type_b) CASE (dbcsr_type_no_symmetry) symmetry_compatible = .TRUE. END SELECT CASE (dbcsr_type_symmetric, dbcsr_type_hermitian) SELECT CASE (matrix_type_b) CASE (dbcsr_type_symmetric, dbcsr_type_hermitian) symmetry_compatible = .TRUE. END SELECT CASE (dbcsr_type_antisymmetric, dbcsr_type_antihermitian) SELECT CASE (matrix_type_b) CASE (dbcsr_type_antisymmetric, dbcsr_type_antihermitian) symmetry_compatible = .TRUE. END SELECT CASE DEFAULT DBCSR_ABORT("Invalid matrix type.") END SELECT END FUNCTION symmetry_compatible SUBROUTINE dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, & shallow_data, keep_imaginary, matrix_type) !! copy a matrix TYPE(dbcsr_type), INTENT(INOUT) :: matrix_b !! target DBCSR matrix TYPE(dbcsr_type), INTENT(IN) :: matrix_a !! source DBCSR matrix CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: name !! name of the new matrix LOGICAL, INTENT(IN), OPTIONAL :: keep_sparsity, shallow_data, & keep_imaginary !! keep the target matrix sparsity; default is False. !! shallow data copy !! when copy from complex to real,& the default is to keep only the real part; if this flag is set, the imaginary part is !! used CHARACTER, INTENT(IN), OPTIONAL :: matrix_type !! 'N' for normal, 'T' for transposed, 'S' for symmetric, and 'A' for antisymmetric CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_copy' CHARACTER :: new_matrix_type, repl_type INTEGER :: handle, new_type LOGICAL :: keep_sparse, shallow ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (.NOT. symmetry_consistent(dbcsr_get_matrix_type(matrix_a), dbcsr_get_data_type(matrix_a))) & DBCSR_ABORT("Source matrix symmetry not consistent with its data type.") shallow = .FALSE.; IF (PRESENT(shallow_data)) shallow = shallow_data keep_sparse = .FALSE. IF (PRESENT(keep_sparsity)) keep_sparse = keep_sparsity IF (keep_sparse .AND. .NOT. dbcsr_valid_index(matrix_b)) & DBCSR_ABORT("Target matrix must be valid to keep its sparsity") IF (keep_sparse .AND. shallow) & DBCSR_WARN("Shallow copy not compatibly with sparsity retainment") IF (keep_sparse) THEN IF (PRESENT(name)) matrix_b%name = name CALL dbcsr_copy_into_existing(matrix_b, matrix_a) ELSE IF (dbcsr_valid_index(matrix_b)) THEN new_type = dbcsr_get_data_type(matrix_b) repl_type = dbcsr_get_replication_type(matrix_b) ELSE new_type = dbcsr_get_data_type(matrix_a) repl_type = dbcsr_get_replication_type(matrix_a) END IF new_matrix_type = dbcsr_get_matrix_type(matrix_a) IF (PRESENT(matrix_type)) THEN IF (.NOT. symmetry_compatible(dbcsr_get_matrix_type(matrix_a), matrix_type)) & CALL dbcsr_abort(__LOCATION__, "Specified target matrix symmetry "//matrix_type// & " not compatible with source matrix type "//dbcsr_get_matrix_type(matrix_a)) new_matrix_type = matrix_type END IF IF (.NOT. symmetry_consistent(new_matrix_type, new_type)) & CALL dbcsr_abort(__LOCATION__, "Target matrix symmetry "// & new_matrix_type//" not consistent with its data type.") IF (PRESENT(name)) THEN CALL dbcsr_create(matrix_b, name=TRIM(name), & template=matrix_a, & matrix_type=new_matrix_type, & data_type=new_type) ELSE CALL dbcsr_create(matrix_b, & data_type=new_type, & matrix_type=new_matrix_type, & template=matrix_a) END IF CALL ensure_array_size(matrix_b%index, ub=SIZE(matrix_a%index), & memory_type=dbcsr_get_index_memory_type(matrix_b)) ! ! copy index and data matrix_b%index(1:SIZE(matrix_a%index)) = matrix_a%index(:) IF (.NOT. shallow) THEN IF (matrix_a%nze > dbcsr_get_data_size(matrix_a)) & DBCSR_ABORT("Source matrix sizes not consistent!") CALL dbcsr_data_ensure_size(matrix_b%data_area, & dbcsr_data_get_size_referenced(matrix_a%data_area)) IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_get_data_type(matrix_b)) & THEN CALL dbcsr_data_copyall(matrix_b%data_area, & matrix_a%data_area) ELSE CALL dbcsr_data_convert(matrix_b%data_area, & matrix_a%data_area, drop_real=keep_imaginary) END IF ELSE IF (dbcsr_get_data_type(matrix_a) .NE. dbcsr_get_data_type(matrix_b)) & DBCSR_ABORT("Shallow copy only possible when retaining data type.") CALL dbcsr_switch_data_area(matrix_b, matrix_a%data_area) END IF ! ! the row_p, col_i and blk_p ... CALL dbcsr_repoint_index(matrix_b) matrix_b%nze = matrix_a%nze matrix_b%nblks = matrix_b%nblks matrix_b%valid = .TRUE. matrix_b%sparsity_id = matrix_a%sparsity_id END IF CALL timestop(handle) END SUBROUTINE dbcsr_copy SUBROUTINE dbcsr_copy_into_existing(matrix_b, matrix_a) !! copy a matrix, retaining current sparsity TYPE(dbcsr_type), INTENT(INOUT) :: matrix_b !! target DBCSR matrix TYPE(dbcsr_type), INTENT(IN) :: matrix_a !! source DBCSR matrix CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_copy_into_existing' INTEGER :: col_size, data_type, dst_col, dst_row, & handle, rel, row_size, src_col, & src_cs, src_row, src_rs LOGICAL :: dst_tr, making_symmetric, neg_imag, & neg_real, src_tr TYPE(dbcsr_data_obj) :: dst_data, src_data TYPE(dbcsr_iterator) :: dst_iter, src_iter ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (.NOT. dbcsr_valid_index(matrix_b)) & DBCSR_ABORT("Matrix_b is not valid") IF (dbcsr_get_data_type(matrix_b) .NE. dbcsr_get_data_type(matrix_a)) & DBCSR_ABORT("Matrices have different data types.") data_type = dbcsr_get_data_type(matrix_b) neg_real = matrix_b%negate_real neg_imag = matrix_b%negate_imaginary making_symmetric = dbcsr_has_symmetry(matrix_b) & .AND. .NOT. dbcsr_has_symmetry(matrix_a) IF (making_symmetric) THEN CALL dbcsr_copy_into_existing_sym(matrix_b, matrix_a) CALL timestop(handle) RETURN END IF CALL dbcsr_data_init(src_data) CALL dbcsr_data_init(dst_data) CALL dbcsr_data_new(src_data, data_type) CALL dbcsr_data_new(dst_data, data_type) CALL dbcsr_iterator_start(src_iter, matrix_a) CALL dbcsr_iterator_start(dst_iter, matrix_b) ! Iterate through the blocks of the source and destination ! matrix. There are three possibilities: 1. copy the data for ! blocks present in both; 2 skip source blocks not present in the ! target; 3 zero blocks not present in the source. IF (dbcsr_iterator_blocks_left(src_iter)) THEN CALL dbcsr_iterator_next_block(src_iter, src_row, src_col, src_data, & src_tr) ELSE src_row = 0; src_col = 0 END IF DO WHILE (dbcsr_iterator_blocks_left(dst_iter)) CALL dbcsr_iterator_next_block(dst_iter, dst_row, dst_col, dst_data, & dst_tr, row_size=row_size, col_size=col_size) ! Now find the source position that is greater or equal to the ! target one. I.e, skip blocks that the target doesn't have. rel = pos_relation(dst_row, dst_col, src_row, src_col) DO WHILE (rel .EQ. 1 .AND. dbcsr_iterator_blocks_left(src_iter)) CALL dbcsr_iterator_next_block(src_iter, src_row, src_col, & src_data, src_tr, row_size=src_rs, col_size=src_cs) rel = pos_relation(dst_row, dst_col, src_row, src_col) END DO SELECT CASE (rel) CASE (-1, 1) ! Target lags source or ran out of source CALL dbcsr_data_clear(dst_data) CASE (0) ! Copy the data IF (dbcsr_data_get_size(src_data) .NE. dbcsr_data_get_size(dst_data)) & DBCSR_ABORT("Block sizes not equal!") IF (src_tr .EQV. dst_tr) THEN CALL dbcsr_data_copyall(dst_data, src_data) ELSE CALL dbcsr_block_partial_copy(dst=dst_data, dst_tr=dst_tr, & dst_rs=row_size, dst_cs=col_size, & dst_r_lb=1, dst_c_lb=1, & src=src_data, src_tr=src_tr, & src_rs=src_rs, src_cs=src_cs, & src_r_lb=1, src_c_lb=1, & nrow=row_size, ncol=col_size) IF (neg_real) THEN CALL dbcsr_block_real_neg(dst_data, row_size, col_size) END IF IF (neg_imag) THEN CALL dbcsr_block_conjg(dst_data, row_size, col_size) END IF END IF CASE default DBCSR_ABORT("Trouble syncing iterators") END SELECT END DO CALL dbcsr_iterator_stop(src_iter) CALL dbcsr_iterator_stop(dst_iter) CALL dbcsr_data_clear_pointer(src_data) CALL dbcsr_data_clear_pointer(dst_data) CALL dbcsr_data_release(src_data) CALL dbcsr_data_release(dst_data) CALL timestop(handle) END SUBROUTINE dbcsr_copy_into_existing SUBROUTINE dbcsr_copy_into_existing_sym(matrix_b, matrix_a) !! copy a matrix, retaining current sparsity TYPE(dbcsr_type), INTENT(INOUT) :: matrix_b !! target DBCSR matrix TYPE(dbcsr_type), INTENT(IN) :: matrix_a !! source DBCSR matrix CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_copy_into_existing_sym' INTEGER :: col_size, data_type, dst_col, dst_row, & handle, row_size, src_col, src_cs, & src_row, src_rs LOGICAL :: dst_tr, found, neg_imag, neg_real, src_tr TYPE(dbcsr_data_obj) :: dst_data, src_data TYPE(dbcsr_iterator) :: dst_iter ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (dbcsr_get_data_type(matrix_b) .NE. dbcsr_get_data_type(matrix_a)) & DBCSR_ABORT("Matrices have different data types.") data_type = dbcsr_get_data_type(matrix_b) IF (.NOT. dbcsr_has_symmetry(matrix_b) .OR. dbcsr_has_symmetry(matrix_a)) & DBCSR_ABORT("Must copy from non-symmetric to symmetric matrix.") neg_real = matrix_b%negate_real neg_imag = matrix_b%negate_imaginary CALL dbcsr_data_init(src_data) CALL dbcsr_data_init(dst_data) CALL dbcsr_data_new(src_data, data_type) CALL dbcsr_data_new(dst_data, data_type) CALL dbcsr_iterator_start(dst_iter, matrix_b) ! Iterate through the blocks of the destination matrix. For each ! one, try to find an appropriate source matrix block and copy it ! into the destination matrix. DO WHILE (dbcsr_iterator_blocks_left(dst_iter)) CALL dbcsr_iterator_next_block(dst_iter, dst_row, dst_col, dst_data, & dst_tr, row_size=row_size, col_size=col_size) src_row = dst_row src_col = dst_col IF (checker_tr(dst_row, dst_col)) & CALL swap(src_row, src_col) CALL dbcsr_get_block_p(matrix_a, src_row, src_col, src_data, src_tr, & found=found, row_size=src_rs, col_size=src_cs) IF (.NOT. found) THEN CALL dbcsr_data_clear(dst_data) ELSE IF (dbcsr_data_get_size(src_data) .NE. dbcsr_data_get_size(dst_data)) THEN DBCSR_ABORT("Block sizes not equal!") END IF IF (checker_tr(dst_row, dst_col)) THEN src_tr = .NOT. src_tr CALL swap(src_rs, src_cs) END IF CALL dbcsr_block_partial_copy(dst=dst_data, dst_tr=dst_tr, & dst_rs=row_size, dst_cs=col_size, & dst_r_lb=1, dst_c_lb=1, & src=src_data, src_tr=src_tr, & src_rs=src_rs, src_cs=src_cs, & src_r_lb=1, src_c_lb=1, & nrow=row_size, ncol=col_size) IF (neg_real .AND. checker_tr(dst_row, dst_col)) THEN CALL dbcsr_block_real_neg(dst_data, row_size, col_size) END IF IF (neg_imag .AND. checker_tr(dst_row, dst_col)) THEN CALL dbcsr_block_conjg(dst_data, row_size, col_size) END IF END IF END DO CALL dbcsr_iterator_stop(dst_iter) CALL dbcsr_data_clear_pointer(src_data) CALL dbcsr_data_clear_pointer(dst_data) CALL dbcsr_data_release(src_data) CALL dbcsr_data_release(dst_data) CALL timestop(handle) END SUBROUTINE dbcsr_copy_into_existing_sym ELEMENTAL FUNCTION pos_relation(row1, col1, row2, col2) RESULT(relation) !! Determines the relation between two matrix positions. INTEGER, INTENT(IN) :: row1, col1, row2, col2 INTEGER :: relation !! Relation between positions 1 and 2. 0: same -1: pos1 < pos2 1: pos1 > pos2 IF (row1 .LT. row2) THEN relation = -1 ELSEIF (row1 .GT. row2) THEN relation = 1 ELSE ! rows are equal, check column IF (col1 .LT. col2) THEN relation = -1 ELSEIF (col1 .GT. col2) THEN relation = 1 ELSE relation = 0 END IF END IF END FUNCTION pos_relation SUBROUTINE dbcsr_copy_submatrix(matrix_b, matrix_a, name, & block_row_bounds, block_column_bounds, & shallow_data) !! Copy a submatrix. TYPE(dbcsr_type), INTENT(INOUT) :: matrix_b !! target DBCSR matrix TYPE(dbcsr_type), INTENT(IN) :: matrix_a !! source DBCSR matrix CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: name !! name of the new matrix INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL :: block_row_bounds, block_column_bounds !! rows to extract (array of size 2 holding the lower and upper inclusive bounds) !! columns to extract (array of size 2 holding the lower and upper inclusive bounds) LOGICAL, INTENT(IN), OPTIONAL :: shallow_data !! shallow data copy CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_copy_submatrix' INTEGER :: blk_p, col, handle, nblocks, new_blk, & old_blk, row INTEGER, ALLOCATABLE, DIMENSION(:) :: blkp_list, col_list, row_list LOGICAL :: shallow, tr TYPE(dbcsr_data_obj) :: data_block TYPE(dbcsr_iterator) :: iter ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (PRESENT(shallow_data)) THEN shallow = shallow_data ELSE shallow = .FALSE. END IF ! Verify assumptions. IF (PRESENT(block_row_bounds)) THEN IF (SIZE(block_row_bounds) /= 2) & DBCSR_ABORT("Size of bounds specifier must be 2") END IF IF (PRESENT(block_column_bounds)) THEN IF (SIZE(block_column_bounds) /= 2) & DBCSR_ABORT("Size of bounds specifier must be 2") END IF ! Setup target matrix CALL dbcsr_create(matrix_b, name=name, template=matrix_a) CALL dbcsr_finalize(matrix_b) IF (.NOT. shallow) THEN ! Non-shallow copy uses the standard iterator on the source and ! block put on the target. ! !$OMP PARALLEL DEFAULT (NONE) & !$OMP PRIVATE (data_block, iter, row, col, tr) & !$OMP SHARED (matrix_a, matrix_b,& !$OMP block_row_bounds, block_column_bounds) CALL dbcsr_work_create(matrix_b, work_mutable=.FALSE.) CALL dbcsr_data_init(data_block) CALL dbcsr_data_new(data_block, dbcsr_get_data_type(matrix_a)) CALL dbcsr_iterator_start(iter, matrix_a, dynamic=.TRUE., & dynamic_byrows=.TRUE.) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, data_block, tr) ! Only keep the block if they are within the specified bounds. IF (PRESENT(block_row_bounds)) THEN IF (row .LT. block_row_bounds(1)) CYCLE IF (row .GT. block_row_bounds(2)) CYCLE END IF IF (PRESENT(block_column_bounds)) THEN IF (col .LT. block_column_bounds(1)) CYCLE IF (col .GT. block_column_bounds(2)) CYCLE END IF CALL dbcsr_put_block(matrix_b, row, col, data_block, transposed=tr) END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(data_block) CALL dbcsr_data_release(data_block) CALL dbcsr_finalize(matrix_b) !$OMP END PARALLEL ELSE ! For the shallow copy the source matrix data is referenced. CALL dbcsr_switch_data_area(matrix_b, matrix_a%data_area) nblocks = dbcsr_get_num_blocks(matrix_a) ! High estimate. ! Shallow copy goes through source's data blocks and inserts ! the only the ones corresponding to the submatrix specifier ! into the target. Block pointers must remain the same as in ! the source. ALLOCATE (row_list(nblocks), col_list(nblocks), blkp_list(nblocks)) ! CALL dbcsr_iterator_start(iter, matrix_a) new_blk = 1 DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, & blk=old_blk, blk_p=blk_p) ! Only keep the block if they are within the specified bounds. IF (PRESENT(block_row_bounds)) THEN IF (row .LT. block_row_bounds(1)) CYCLE IF (row .GT. block_row_bounds(2)) CYCLE END IF IF (PRESENT(block_column_bounds)) THEN IF (col .LT. block_column_bounds(1)) CYCLE IF (col .GT. block_column_bounds(2)) CYCLE END IF row_list(new_blk) = row col_list(new_blk) = col blkp_list(new_blk) = blk_p new_blk = new_blk + 1 END DO new_blk = new_blk - 1 CALL dbcsr_iterator_stop(iter) CALL dbcsr_reserve_blocks(matrix_b, row_list(1:new_blk), & col_list(1:new_blk), blkp_list(1:new_blk)) END IF ! CALL timestop(handle) END SUBROUTINE dbcsr_copy_submatrix SUBROUTINE dbcsr_crop_matrix(matrix_b, matrix_a, & full_row_bounds, full_column_bounds, & shallow_data) !! Crop and copies a matrix. TYPE(dbcsr_type), INTENT(INOUT) :: matrix_b !! target DBCSR matrix TYPE(dbcsr_type), INTENT(IN) :: matrix_a !! source DBCSR matrix INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL :: full_row_bounds, full_column_bounds !! rows to extract (array of size 2 holding the lower and upper inclusive bounds) !! columns to extract (array of size 2 holding the lower and upper inclusive bounds) LOGICAL, INTENT(IN), OPTIONAL :: shallow_data CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_crop_matrix' INTEGER :: col, f_col_f, f_row_f, handle, l_col_l, & l_row_l, row INTEGER, DIMENSION(2) :: block_col_bounds, block_row_bounds LOGICAL :: part_col, part_f_col, part_f_row, & part_l_col, part_l_row, part_row, & shallow, tr TYPE(dbcsr_data_obj) :: data_block TYPE(dbcsr_iterator) :: iter ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) part_l_col = .FALSE. part_f_col = .FALSE. part_l_row = .FALSE. part_f_row = .FALSE. IF (PRESENT(shallow_data)) THEN shallow = shallow_data ELSE shallow = .FALSE. END IF block_row_bounds = 0 block_col_bounds = 0 part_col = .FALSE. part_row = .FALSE. ! ! If row bounds are present, they must be converted to block ! addressing. IF (PRESENT(full_row_bounds)) THEN IF (SIZE(full_row_bounds) /= 2) & DBCSR_ABORT("Size of bounds specifier must be 2") IF (full_row_bounds(1) < 0) & DBCSR_ABORT("Invalid first row bound.") IF (full_row_bounds(2) > dbcsr_nfullrows_total(matrix_a)) & DBCSR_ABORT("Invalid last row bound.") IF (full_row_bounds(1) .EQ. 0) THEN block_row_bounds(1) = 1 ELSE CALL find_block_of_element(full_row_bounds(1), block_row_bounds(1), & dbcsr_nblkrows_total(matrix_a), & dbcsr_row_block_offsets(matrix_a), & hint=0) part_f_row = array_get(dbcsr_row_block_offsets(matrix_a), block_row_bounds(1)) & .NE. full_row_bounds(1) END IF f_row_f = -7 IF (part_f_row) THEN ! Block offset of last cleared row f_row_f = full_row_bounds(1) - & array_get(dbcsr_row_block_offsets(matrix_a), block_row_bounds(1)) END IF IF (full_row_bounds(2) .EQ. 0) THEN block_row_bounds(2) = dbcsr_nblkrows_total(matrix_a) ELSE CALL find_block_of_element(full_row_bounds(2), block_row_bounds(2), & dbcsr_nblkrows_total(matrix_a), & dbcsr_row_block_offsets(matrix_a), & hint=0) part_l_row = array_get(dbcsr_row_block_offsets(matrix_a), block_row_bounds(2) + 1) - 1 & .NE. full_row_bounds(2) END IF ! Block offset of first cleared row l_row_l = -7 IF (part_l_row) THEN l_row_l = 2 + full_row_bounds(2) - & array_get(dbcsr_row_block_offsets(matrix_a), block_row_bounds(2)) END IF part_row = part_f_row .OR. part_l_row END IF ! ! If column bounds are present, they must be converted to block ! addressing. IF (PRESENT(full_column_bounds)) THEN IF (SIZE(full_column_bounds) /= 2) & DBCSR_ABORT("Size of bounds specifier must be 2") IF (full_column_bounds(1) < 0) & DBCSR_ABORT("Invalid first column bound.") IF (full_column_bounds(2) > dbcsr_nfullcols_total(matrix_a)) & DBCSR_ABORT("Invalid last column bound.") IF (full_column_bounds(1) .EQ. 0) THEN block_col_bounds(1) = 1 ELSE CALL find_block_of_element(full_column_bounds(1), block_col_bounds(1), & dbcsr_nblkcols_total(matrix_a), & dbcsr_col_block_offsets(matrix_a), & hint=0) part_f_col = array_get(dbcsr_col_block_offsets(matrix_a), block_col_bounds(1)) & .NE. full_column_bounds(1) END IF f_col_f = -7 IF (part_f_col) THEN ! Block offset of last cleared column f_col_f = full_column_bounds(1) - & array_get(dbcsr_col_block_offsets(matrix_a), block_col_bounds(1)) END IF IF (full_column_bounds(2) .EQ. 0) THEN block_col_bounds(2) = dbcsr_nblkcols_total(matrix_a) ELSE CALL find_block_of_element(full_column_bounds(2), block_col_bounds(2), & dbcsr_nblkcols_total(matrix_a), & dbcsr_col_block_offsets(matrix_a), & hint=0) part_l_col = array_get(dbcsr_col_block_offsets(matrix_a), block_col_bounds(2) + 1) - 1 & .NE. full_column_bounds(2) END IF l_col_l = -7 IF (part_l_col) THEN ! Block offset of first cleared column l_col_l = 2 + full_column_bounds(2) - & array_get(dbcsr_col_block_offsets(matrix_a), block_col_bounds(2)) END IF part_col = part_f_col .OR. part_l_col END IF ! ! First copy the blocks then perform the intra-block zeroing. CALL dbcsr_copy_submatrix(matrix_b, matrix_a, & block_row_bounds=block_row_bounds, & block_column_bounds=block_col_bounds, & shallow_data=shallow) IF (part_row .OR. part_col) THEN !$OMP PARALLEL DEFAULT (NONE) & !$OMP PRIVATE (data_block, iter, row, col, tr) & !$OMP SHARED (matrix_b,& !$OMP part_row, part_f_row, part_l_row, f_row_f, l_row_l, & !$OMP part_col, part_f_col, part_l_col, f_col_f, l_col_l,& !$OMP block_row_bounds, block_col_bounds) CALL dbcsr_data_init(data_block) CALL dbcsr_data_new(data_block, dbcsr_type_1d_to_2d(dbcsr_get_data_type(matrix_b))) CALL dbcsr_iterator_start(iter, matrix_b, & dynamic=.TRUE., dynamic_byrows=.TRUE.) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, data_block, tr) IF (part_row) THEN IF (row .LT. block_row_bounds(1)) CYCLE IF (row .GT. block_row_bounds(2)) CYCLE END IF IF (part_col) THEN IF (col .LT. block_col_bounds(1)) CYCLE IF (col .GT. block_col_bounds(2)) CYCLE END IF IF (part_row) THEN IF (part_f_row .AND. row .EQ. block_row_bounds(1)) THEN CALL dbcsr_data_clear(data_block, ub=f_row_f, tr=tr) END IF IF (part_l_row .AND. row .EQ. block_row_bounds(2)) THEN CALL dbcsr_data_clear(data_block, lb=l_row_l, tr=tr) END IF END IF IF (part_col) THEN IF (part_f_col .AND. col .EQ. block_col_bounds(1)) THEN CALL dbcsr_data_clear(data_block, ub2=f_col_f, tr=tr) END IF IF (part_l_col .AND. col .EQ. block_col_bounds(2)) THEN CALL dbcsr_data_clear(data_block, lb2=l_col_l, tr=tr) END IF END IF END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(data_block) CALL dbcsr_data_release(data_block) CALL dbcsr_finalize(matrix_b) !$OMP END PARALLEL END IF ! CALL timestop(handle) END SUBROUTINE dbcsr_crop_matrix SUBROUTINE dbcsr_triu(matrix_a) !! triu of a dbcsr matrix TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a !! the matrix CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_triu' INTEGER :: blk, blk_nze, col, col_size, handle, i, & j, row, row_size LOGICAL :: tr REAL(dp), DIMENSION(:, :), POINTER :: DATA TYPE(dbcsr_iterator) :: iter ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) CALL dbcsr_iterator_start(iter, matrix_a) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, DATA, tr, & block_number=blk, row_size=row_size, col_size=col_size) blk_nze = row_size*col_size IF (row .GT. col) CALL dbcsr_remove_block(matrix_a, row, col, blk_nze, blk) IF (row .EQ. col) THEN DO j = 1, col_size DO i = j + 1, row_size DATA(i, j) = 0.0_dp END DO END DO END IF END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_finalize(matrix_a) CALL timestop(handle) END SUBROUTINE dbcsr_triu SUBROUTINE dbcsr_filter_anytype(matrix, eps, method, & use_absolute, filter_diag) !! filter a dbcsr matrix TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! the matrix TYPE(dbcsr_scalar_type), INTENT(IN) :: eps !! the threshold INTEGER, INTENT(IN), OPTIONAL :: method !! how the matrix is filtered LOGICAL, INTENT(in), OPTIONAL :: use_absolute, filter_diag !! NYI CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_filter_anytype' COMPLEX(KIND=real_4), DIMENSION(:), POINTER :: data_c COMPLEX(KIND=real_8), DIMENSION(:), POINTER :: data_z INTEGER :: blk, blk_nze, col, col_size, handle, & my_method, row, row_size, data_type LOGICAL :: gt0, my_filter_diag, tr REAL(KIND=real_4) :: nrm_s REAL(KIND=real_4), DIMENSION(:), POINTER :: data_s REAL(KIND=real_8) :: my_absolute, nrm_d REAL(KIND=real_8), DIMENSION(:), POINTER :: data_d TYPE(dbcsr_iterator) :: iter REAL(KIND=real_8), EXTERNAL :: DZNRM2 #if defined (__ACCELERATE) REAL(KIND=real_8), EXTERNAL :: SCNRM2 #else REAL(KIND=real_4), EXTERNAL :: SCNRM2 #endif ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) my_method = dbcsr_filter_frobenius IF (PRESENT(method)) my_method = method my_absolute = 1.0_dp IF (PRESENT(use_absolute)) my_absolute = dbcsr_maxabs(matrix) my_filter_diag = .TRUE. IF (PRESENT(filter_diag)) my_filter_diag = filter_diag SELECT CASE (eps%data_type) CASE (dbcsr_type_real_4) gt0 = eps%r_sp .GT. 0.0_real_4 CASE (dbcsr_type_real_8) gt0 = eps%r_dp .GT. 0.0_real_8 CASE (dbcsr_type_complex_4) gt0 = ABS(eps%c_sp) .GT. 0.0_real_4 CASE (dbcsr_type_complex_8) gt0 = ABS(eps%c_dp) .GT. 0.0_real_8 CASE default gt0 = .FALSE. END SELECT IF (gt0) THEN data_type = dbcsr_get_data_type(matrix) !$OMP PARALLEL DEFAULT(NONE) PRIVATE(iter,row,col,data_s,data_d,data_c,data_z,tr, & !$OMP blk,row_size,col_size,blk_nze,nrm_d,nrm_s) & !$OMP SHARED(my_method,my_absolute,eps,matrix,data_type) CALL dbcsr_iterator_start(iter, matrix, contiguous_pointers=.TRUE.) DO WHILE (dbcsr_iterator_blocks_left(iter)) SELECT CASE (data_type) CASE (dbcsr_type_real_4) CALL dbcsr_iterator_next_block(iter, row, col, data_s, tr, blk, & row_size, col_size) blk_nze = row_size*col_size IF (blk_nze .EQ. 0) CYCLE ! Skip empty blocks SELECT CASE (my_method) CASE (dbcsr_filter_frobenius) ! ! Frobenius based nrm_s = norm2(data_s) IF (nrm_s .LT. my_absolute*eps%r_sp) & CALL dbcsr_remove_block(matrix, row, col, blk_nze, blk) CASE DEFAULT DBCSR_ABORT("Only Frobenius based filtering") END SELECT CASE (dbcsr_type_real_8) CALL dbcsr_iterator_next_block(iter, row, col, data_d, tr, blk, & row_size, col_size) blk_nze = row_size*col_size IF (blk_nze .EQ. 0) CYCLE ! Skip empty blocks SELECT CASE (my_method) CASE (dbcsr_filter_frobenius) ! ! Frobenius based nrm_d = norm2(data_d) IF (nrm_d .LT. my_absolute*eps%r_dp) & CALL dbcsr_remove_block(matrix, row, col, blk_nze, blk) CASE DEFAULT DBCSR_ABORT("Only Frobenius based filtering") END SELECT CASE (dbcsr_type_complex_4) CALL dbcsr_iterator_next_block(iter, row, col, data_c, tr, blk, & row_size, col_size) blk_nze = row_size*col_size IF (blk_nze .EQ. 0) CYCLE ! Skip empty blocks SELECT CASE (my_method) CASE (dbcsr_filter_frobenius) ! ! Frobenius based nrm_d = SCNRM2(SIZE(data_c), data_c(1), 1) IF (nrm_d .LT. my_absolute*eps%r_dp) & CALL dbcsr_remove_block(matrix, row, col, blk_nze, blk) CASE DEFAULT DBCSR_ABORT("Only Frobenius based filtering") END SELECT CASE (dbcsr_type_complex_8) CALL dbcsr_iterator_next_block(iter, row, col, data_z, tr, blk, & row_size, col_size) blk_nze = row_size*col_size IF (blk_nze .EQ. 0) CYCLE ! Skip empty blocks SELECT CASE (my_method) CASE (dbcsr_filter_frobenius) ! ! Frobenius based nrm_d = DZNRM2(SIZE(data_z), data_z(1), 1) IF (nrm_d .LT. my_absolute*eps%r_dp) & CALL dbcsr_remove_block(matrix, row, col, blk_nze, blk) CASE DEFAULT DBCSR_ABORT("Only Frobenius based filtering") END SELECT CASE DEFAULT DBCSR_ABORT("Wrong data type") END SELECT END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_finalize(matrix, reshuffle=.TRUE.) !$OMP END PARALLEL CALL dbcsr_index_compact(matrix) END IF CALL timestop(handle) END SUBROUTINE dbcsr_filter_anytype SUBROUTINE dbcsr_norm_scalar(matrix, which_norm, norm_scalar) !! compute a norm of a dbcsr matrix TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! the matrix INTEGER, INTENT(IN) :: which_norm REAL(KIND=real_8), INTENT(OUT) :: norm_scalar CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_norm_scalar' INTEGER :: handle ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) SELECT CASE (which_norm) CASE (dbcsr_norm_frobenius) norm_scalar = dbcsr_frobenius_norm(matrix) CASE (dbcsr_norm_maxabsnorm) norm_scalar = dbcsr_maxabs(matrix) CASE (dbcsr_norm_gershgorin) norm_scalar = dbcsr_gershgorin_norm(matrix) CASE DEFAULT DBCSR_ABORT("this norm is NYI") END SELECT CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_norm_r8_vec(matrix, which_norm, norm_vector) TYPE(dbcsr_type), INTENT(INOUT) :: matrix INTEGER, INTENT(IN) :: which_norm REAL(KIND=real_8), DIMENSION(:), INTENT(OUT), & TARGET, CONTIGUOUS :: norm_vector REAL(KIND=real_8), DIMENSION(:), POINTER, CONTIGUOUS :: v_p TYPE(dbcsr_data_obj) :: norm_vector_a CALL dbcsr_data_init(norm_vector_a) CALL dbcsr_data_new(norm_vector_a, dbcsr_type_real_8) v_p => norm_vector CALL dbcsr_data_set_pointer(norm_vector_a, v_p) CALL dbcsr_norm_vec(matrix, which_norm, norm_vector_a) CALL dbcsr_data_clear_pointer(norm_vector_a) CALL dbcsr_data_release(norm_vector_a) END SUBROUTINE dbcsr_norm_r8_vec SUBROUTINE dbcsr_norm_vec(matrix, which_norm, norm_vector) !! compute the column norms of the dbcsr matrix TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! the matrix INTEGER, INTENT(IN) :: which_norm TYPE(dbcsr_data_obj), INTENT(INOUT) :: norm_vector CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_norm_vec' INTEGER :: blk, col, col_offset, i, j, row, & row_offset, handle LOGICAL :: tr TYPE(dbcsr_data_obj) :: data_a TYPE(dbcsr_iterator) :: iter CALL timeset(routineN, handle) SELECT CASE (which_norm) CASE (dbcsr_norm_column) IF (dbcsr_data_get_type(norm_vector) /= dbcsr_get_data_type(matrix)) & DBCSR_ABORT("Mismatched vector/matrix data types") IF (dbcsr_has_symmetry(matrix)) THEN IF (dbcsr_data_get_size(norm_vector) < dbcsr_nfullrows_total(matrix)) & DBCSR_ABORT("Passed vector too small") END IF IF (dbcsr_data_get_size(norm_vector) < dbcsr_nfullcols_total(matrix)) & DBCSR_ABORT("Passed vector too small") CALL dbcsr_data_init(data_a) CALL dbcsr_data_new(data_a, dbcsr_type_1d_to_2d(dbcsr_get_data_type(matrix))) CALL dbcsr_data_clear(norm_vector) CALL dbcsr_iterator_start(iter, matrix) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, data_a, tr, & blk, row_offset=row_offset, col_offset=col_offset) SELECT CASE (dbcsr_get_data_type(matrix)) CASE (dbcsr_type_real_4) IF (dbcsr_has_symmetry(matrix) .AND. row .NE. col) THEN DO j = 1, SIZE(data_a%d%r2_sp, 2) DO i = 1, SIZE(data_a%d%r2_sp, 1) norm_vector%d%r_sp(col_offset + j - 1) & = norm_vector%d%r_sp(col_offset + j - 1) & + data_a%d%r2_sp(i, j)**2 norm_vector%d%r_sp(row_offset + i - 1) & = norm_vector%d%r_sp(row_offset + i - 1) & + data_a%d%r2_sp(i, j)**2 END DO END DO ELSE DO j = 1, SIZE(data_a%d%r2_sp, 2) DO i = 1, SIZE(data_a%d%r2_sp, 1) norm_vector%d%r_sp(col_offset + j - 1) & = norm_vector%d%r_sp(col_offset + j - 1) & + data_a%d%r2_sp(i, j)*data_a%d%r2_sp(i, j) END DO END DO END IF CASE (dbcsr_type_real_8) IF (dbcsr_has_symmetry(matrix) .AND. row .NE. col) THEN DO j = 1, SIZE(data_a%d%r2_dp, 2) DO i = 1, SIZE(data_a%d%r2_dp, 1) norm_vector%d%r_dp(col_offset + j - 1) & = norm_vector%d%r_dp(col_offset + j - 1) & + data_a%d%r2_dp(i, j)**2 norm_vector%d%r_dp(row_offset + i - 1) & = norm_vector%d%r_dp(row_offset + i - 1) & + data_a%d%r2_dp(i, j)**2 END DO END DO ELSE DO j = 1, SIZE(data_a%d%r2_dp, 2) DO i = 1, SIZE(data_a%d%r2_dp, 1) norm_vector%d%r_dp(col_offset + j - 1) & = norm_vector%d%r_dp(col_offset + j - 1) & + data_a%d%r2_dp(i, j)*data_a%d%r2_dp(i, j) END DO END DO END IF CASE DEFAULT DBCSR_ABORT("Only real values") END SELECT END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(data_a) CALL dbcsr_data_release(data_a) SELECT CASE (dbcsr_get_data_type(matrix)) CASE (dbcsr_type_real_4) CALL mp_sum(norm_vector%d%r_sp, & dbcsr_mp_group(dbcsr_distribution_mp(matrix%dist))) norm_vector%d%r_sp = SQRT(norm_vector%d%r_sp) CASE (dbcsr_type_real_8) CALL mp_sum(norm_vector%d%r_dp, & dbcsr_mp_group(dbcsr_distribution_mp(matrix%dist))) norm_vector%d%r_dp = SQRT(norm_vector%d%r_dp) END SELECT CASE DEFAULT DBCSR_ABORT("this norm is NYI") END SELECT CALL timestop(handle) END SUBROUTINE dbcsr_norm_vec FUNCTION dbcsr_gershgorin_norm(matrix) RESULT(norm) !! compute a norm of a dbcsr matrix TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! the matrix REAL(KIND=real_8) :: norm CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_gershgorin_norm' COMPLEX(KIND=real_4), DIMENSION(:, :), POINTER :: data_c COMPLEX(KIND=real_8), DIMENSION(:, :), POINTER :: data_z INTEGER :: blk, col, col_offset, handle, i, j, nc, & nr, row, row_offset LOGICAL :: any_sym, tr REAL(KIND=real_4), DIMENSION(:, :), POINTER :: data_r REAL(KIND=real_8), DIMENSION(:, :), POINTER :: data_d REAL(real_8), ALLOCATABLE, DIMENSION(:) :: buff_d TYPE(dbcsr_iterator) :: iter CALL timeset(routineN, handle) nr = dbcsr_nfullrows_total(matrix) nc = dbcsr_nfullcols_total(matrix) any_sym = dbcsr_get_matrix_type(matrix) .EQ. dbcsr_type_symmetric .OR. & dbcsr_get_matrix_type(matrix) .EQ. dbcsr_type_antisymmetric IF (nr .NE. nc) & DBCSR_ABORT("not a square matrix") norm = 0.0_dp ALLOCATE (buff_d(nr)) buff_d = 0.0_dp CALL dbcsr_iterator_start(iter, matrix) DO WHILE (dbcsr_iterator_blocks_left(iter)) SELECT CASE (dbcsr_get_data_type(matrix)) CASE (dbcsr_type_real_4) CALL dbcsr_iterator_next_block(iter, row, col, data_r, tr, blk, & row_offset=row_offset, col_offset=col_offset) DO j = 1, SIZE(data_r, 2) DO i = 1, SIZE(data_r, 1) buff_d(row_offset + i - 1) = buff_d(row_offset + i - 1) + ABS(data_r(i, j)) IF (any_sym .AND. row .NE. col) & buff_d(col_offset + j - 1) = buff_d(col_offset + j - 1) + ABS(data_r(i, j)) END DO END DO CASE (dbcsr_type_real_8) CALL dbcsr_iterator_next_block(iter, row, col, data_d, tr, blk, & row_offset=row_offset, col_offset=col_offset) DO j = 1, SIZE(data_d, 2) DO i = 1, SIZE(data_d, 1) buff_d(row_offset + i - 1) = buff_d(row_offset + i - 1) + ABS(data_d(i, j)) IF (any_sym .AND. row .NE. col) & buff_d(col_offset + j - 1) = buff_d(col_offset + j - 1) + ABS(data_d(i, j)) END DO END DO CASE (dbcsr_type_complex_4) CALL dbcsr_iterator_next_block(iter, row, col, data_c, tr, blk, & row_offset=row_offset, col_offset=col_offset) DO j = 1, SIZE(data_c, 2) DO i = 1, SIZE(data_c, 1) buff_d(row_offset + i - 1) = buff_d(row_offset + i - 1) + ABS(data_c(i, j)) IF (any_sym .AND. row .NE. col) & DBCSR_ABORT("Only nonsymmetric matrix so far") ! buff_d(col_offset+j-1) = buff_d(col_offset+j-1) + ABS(data_c(i,j)) END DO END DO CASE (dbcsr_type_complex_8) CALL dbcsr_iterator_next_block(iter, row, col, data_z, tr, blk, & row_offset=row_offset, col_offset=col_offset) DO j = 1, SIZE(data_z, 2) DO i = 1, SIZE(data_z, 1) buff_d(row_offset + i - 1) = buff_d(row_offset + i - 1) + ABS(data_z(i, j)) IF (any_sym .AND. row .NE. col) & DBCSR_ABORT("Only nonsymmetric matrix so far") ! buff_d(col_offset+j-1) = buff_d(col_offset+j-1) + ABS(data_z(i,j)) END DO END DO CASE DEFAULT DBCSR_ABORT("Wrong data type") END SELECT END DO CALL dbcsr_iterator_stop(iter) CALL mp_sum(buff_d, dbcsr_mp_group(dbcsr_distribution_mp(matrix%dist))) norm = MAXVAL(buff_d) DEALLOCATE (buff_d) CALL timestop(handle) END FUNCTION dbcsr_gershgorin_norm FUNCTION dbcsr_maxabs(matrix) RESULT(norm) !! compute a norm of a dbcsr matrix TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! the matrix REAL(real_8) :: norm COMPLEX(KIND=real_4), DIMENSION(:, :), POINTER :: data_c COMPLEX(KIND=real_8), DIMENSION(:, :), POINTER :: data_z INTEGER :: blk, col, row LOGICAL :: tr REAL(KIND=real_4), DIMENSION(:, :), POINTER :: data_r REAL(KIND=real_8), DIMENSION(:, :), POINTER :: data_d TYPE(dbcsr_iterator) :: iter ! --------------------------------------------------------------------------- norm = 0.0_dp CALL dbcsr_iterator_start(iter, matrix) DO WHILE (dbcsr_iterator_blocks_left(iter)) SELECT CASE (dbcsr_get_data_type(matrix)) CASE (dbcsr_type_real_4) CALL dbcsr_iterator_next_block(iter, row, col, data_r, tr, blk) norm = MAX(norm, REAL(MAXVAL(ABS(data_r)), dp)) CASE (dbcsr_type_real_8) CALL dbcsr_iterator_next_block(iter, row, col, data_d, tr, blk) norm = MAX(norm, MAXVAL(ABS(data_d))) CASE (dbcsr_type_complex_4) CALL dbcsr_iterator_next_block(iter, row, col, data_c, tr, blk) norm = MAX(norm, REAL(MAXVAL(ABS(data_c)), dp)) CASE (dbcsr_type_complex_8) CALL dbcsr_iterator_next_block(iter, row, col, data_z, tr, blk) norm = MAX(norm, MAXVAL(ABS(data_z))) CASE DEFAULT DBCSR_ABORT("Wrong data type") END SELECT END DO CALL dbcsr_iterator_stop(iter) CALL mp_max(norm, dbcsr_mp_group(dbcsr_distribution_mp(matrix%dist))) END FUNCTION dbcsr_maxabs FUNCTION dbcsr_frobenius_norm(matrix, local) RESULT(norm) !! compute a norm of a dbcsr matrix TYPE(dbcsr_type), INTENT(IN) :: matrix !! the matrix LOGICAL, INTENT(in), OPTIONAL :: local REAL(KIND=real_8) :: norm CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_frobenius_norm' COMPLEX(KIND=real_4), DIMENSION(:, :), POINTER :: data_c COMPLEX(KIND=real_8), DIMENSION(:, :), POINTER :: data_z INTEGER :: blk, col, handle, row LOGICAL :: any_sym, my_local, tr REAL(KIND=real_4), DIMENSION(:, :), POINTER :: data_r REAL(KIND=real_8), DIMENSION(:, :), POINTER :: data_d REAL(real_8) :: fac TYPE(dbcsr_iterator) :: iter ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) my_local = .FALSE. IF (PRESENT(local)) my_local = local any_sym = dbcsr_get_matrix_type(matrix) .EQ. dbcsr_type_symmetric .OR. & dbcsr_get_matrix_type(matrix) .EQ. dbcsr_type_antisymmetric norm = 0.0_dp CALL dbcsr_iterator_start(iter, matrix) DO WHILE (dbcsr_iterator_blocks_left(iter)) SELECT CASE (dbcsr_get_data_type(matrix)) CASE (dbcsr_type_real_4) CALL dbcsr_iterator_next_block(iter, row, col, data_r, tr, blk) fac = 1.0_dp IF (any_sym .AND. row .NE. col) fac = 2.0_dp norm = norm + fac*SUM(data_r**2) CASE (dbcsr_type_real_8) CALL dbcsr_iterator_next_block(iter, row, col, data_d, tr, blk) fac = 1.0_dp IF (any_sym .AND. row .NE. col) fac = 2.0_dp norm = norm + fac*SUM(data_d**2) CASE (dbcsr_type_complex_4) CALL dbcsr_iterator_next_block(iter, row, col, data_c, tr, blk) fac = 1.0_dp IF (any_sym .AND. row .NE. col) & DBCSR_ABORT("Only nonsymmetric matrix so far") norm = norm + fac*REAL(SUM(CONJG(data_c)*data_c), KIND=real_8) CASE (dbcsr_type_complex_8) CALL dbcsr_iterator_next_block(iter, row, col, data_z, tr, blk) fac = 1.0_dp IF (any_sym .AND. row .NE. col) & DBCSR_ABORT("Only nonsymmetric matrix so far") norm = norm + fac*REAL(SUM(CONJG(data_z)*data_z), KIND=real_8) CASE DEFAULT DBCSR_ABORT("Wrong data type") END SELECT END DO CALL dbcsr_iterator_stop(iter) IF (.NOT. my_local) CALL mp_sum(norm, dbcsr_mp_group(dbcsr_distribution_mp(matrix%dist))) norm = SQRT(norm) CALL timestop(handle) END FUNCTION dbcsr_frobenius_norm SUBROUTINE dbcsr_sum_replicated(matrix) !! Sums blocks in a replicated dbcsr matrix, which has the same structure on all ranks. TYPE(dbcsr_type), INTENT(inout) :: matrix !! dbcsr matrix to operate on CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_sum_replicated' INTEGER :: handle, index_checksum, mynode, & numnodes INTEGER, ALLOCATABLE, DIMENSION(:) :: all_checksums TYPE(dbcsr_mp_obj) :: mp TYPE(mp_comm_type) :: comm ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) mp = dbcsr_distribution_mp(dbcsr_distribution(matrix)) comm = dbcsr_mp_group(mp) numnodes = dbcsr_mp_numnodes(mp) mynode = dbcsr_mp_mynode(mp) ! ALLOCATE (all_checksums(numnodes)) CALL dbcsr_index_checksum(matrix, index_checksum) CALL mp_allgather(index_checksum, all_checksums, comm) ! IF (.NOT. ALL(all_checksums .EQ. index_checksum)) & DBCSR_ABORT("Replicated matrices do not all have the same index structure.") ! SELECT CASE (dbcsr_data_get_type(matrix%data_area)) CASE (dbcsr_type_real_4) CALL mp_sum(matrix%data_area%d%r_sp, comm) CASE (dbcsr_type_real_8) CALL mp_sum(matrix%data_area%d%r_dp, comm) CASE (dbcsr_type_complex_4) CALL mp_sum(matrix%data_area%d%c_sp, comm) CASE (dbcsr_type_complex_8) CALL mp_sum(matrix%data_area%d%c_dp, comm) CASE default DBCSR_ABORT("Incorrect data type") END SELECT ! CALL timestop(handle) END SUBROUTINE dbcsr_sum_replicated FUNCTION dbcsr_block_in_limits(row, col, block_row_limits, block_column_limits) !! check if a block is not in the limits INTEGER, INTENT(in) :: row, col INTEGER, DIMENSION(2), INTENT(in), OPTIONAL :: block_row_limits, block_column_limits LOGICAL :: dbcsr_block_in_limits dbcsr_block_in_limits = .TRUE. IF (PRESENT(block_row_limits)) THEN IF (row .LT. block_row_limits(1)) dbcsr_block_in_limits = .FALSE. IF (row .GT. block_row_limits(2)) dbcsr_block_in_limits = .FALSE. END IF IF (PRESENT(block_column_limits)) THEN IF (col .LT. block_column_limits(1)) dbcsr_block_in_limits = .FALSE. IF (col .GT. block_column_limits(2)) dbcsr_block_in_limits = .FALSE. END IF END FUNCTION dbcsr_block_in_limits SUBROUTINE dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, & nfullrows_total, nfullcols_total, & nblkrows_local, nblkcols_local, & nfullrows_local, nfullcols_local, & my_prow, my_pcol, & local_rows, local_cols, proc_row_dist, proc_col_dist, & row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, distribution, name, data_area, & matrix_type, data_type, group) !! Gets information about a matrix TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix to query INTEGER, INTENT(OUT), OPTIONAL :: nblkrows_total, nblkcols_total, nfullrows_total, & nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, & my_prow, my_pcol INTEGER, DIMENSION(:), OPTIONAL, POINTER :: local_rows, local_cols, proc_row_dist, & proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset TYPE(dbcsr_distribution_obj), INTENT(OUT), & OPTIONAL :: distribution !! the data distribution of the matrix CHARACTER(len=*), INTENT(OUT), OPTIONAL :: name !! matrix name TYPE(dbcsr_data_obj), INTENT(OUT), OPTIONAL :: data_area !! data_area CHARACTER, OPTIONAL :: matrix_type !! matrix type (regular, symmetric, see dbcsr_types.F for values) INTEGER, OPTIONAL :: data_type !! data type (single/double precision real/complex) TYPE(mp_comm_type), INTENT(OUT), OPTIONAL :: group ! --------------------------------------------------------------------------- !vw avoid massive printing of warnings !DBCSR_WARN("Invalid matrix") IF (PRESENT(nblkrows_total)) nblkrows_total = matrix%nblkrows_total IF (PRESENT(nblkcols_total)) nblkcols_total = matrix%nblkcols_total IF (PRESENT(nfullrows_total)) nfullrows_total = matrix%nfullrows_total IF (PRESENT(nfullcols_total)) nfullcols_total = matrix%nfullcols_total IF (PRESENT(nblkrows_local)) nblkrows_local = matrix%nblkrows_local IF (PRESENT(nblkcols_local)) nblkcols_local = matrix%nblkcols_local IF (PRESENT(nfullrows_local)) nfullrows_local = matrix%nfullrows_local IF (PRESENT(nfullcols_local)) nfullcols_local = matrix%nfullcols_local IF (PRESENT(row_blk_size)) row_blk_size => array_data(matrix%row_blk_size) IF (PRESENT(col_blk_size)) col_blk_size => array_data(matrix%col_blk_size) IF (PRESENT(row_blk_offset)) row_blk_offset => array_data(matrix%row_blk_offset) IF (PRESENT(col_blk_offset)) col_blk_offset => array_data(matrix%col_blk_offset) IF (PRESENT(distribution)) distribution = matrix%dist IF (PRESENT(name)) name = matrix%name IF (PRESENT(data_area)) data_area = matrix%data_area IF (PRESENT(data_type)) data_type = matrix%data_type IF (PRESENT(local_rows)) local_rows => dbcsr_distribution_local_rows(matrix%dist) IF (PRESENT(local_cols)) local_cols => dbcsr_distribution_local_cols(matrix%dist) IF (PRESENT(proc_row_dist)) proc_row_dist => dbcsr_distribution_row_dist(matrix%dist) IF (PRESENT(proc_col_dist)) proc_col_dist => dbcsr_distribution_col_dist(matrix%dist) IF (PRESENT(my_prow)) my_prow = dbcsr_mp_myprow(dbcsr_distribution_mp(matrix%dist)) IF (PRESENT(my_pcol)) my_pcol = dbcsr_mp_mypcol(dbcsr_distribution_mp(matrix%dist)) IF (PRESENT(matrix_type)) matrix_type = dbcsr_get_matrix_type(matrix) IF (PRESENT(group)) group = dbcsr_mp_group(matrix%dist%d%mp_env) ! a shortcut !IF (PRESENT(matrix_type)) THEN ! matrix_type = dbcsr_get_matrix_type(matrix) ! IF (matrix_type .EQ. dbcsr_type_invalid) & ! DBCSR_ABORT("Incorrect symmetry") !ENDIF END SUBROUTINE dbcsr_get_info FUNCTION dbcsr_may_be_dense(matrix, occ_thresh) RESULT(may_be_dense) !! Returns whether the matrix could be represented in a dense form TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix REAL(real_8), INTENT(in) :: occ_thresh LOGICAL :: may_be_dense !! use the mutable and not append-only working structures REAL(real_8) :: occ ! --------------------------------------------------------------------------- occ = dbcsr_get_occupation(matrix) may_be_dense = .NOT. (occ .LT. occ_thresh) ! make sure every proc sees the same CALL mp_sum(may_be_dense, dbcsr_mp_group(dbcsr_distribution_mp(matrix%dist))) END FUNCTION dbcsr_may_be_dense FUNCTION dbcsr_get_occupation(matrix) RESULT(occupation) !! Returns the occupation of the matrix TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix from which to get the occupation REAL(KIND=real_8) :: occupation INTEGER :: nfullcols, nfullrows INTEGER(KIND=int_8) :: nze_global INTEGER, DIMENSION(:), POINTER :: row_blk_size nze_global = matrix%nze CALL mp_sum(nze_global, dbcsr_mp_group(dbcsr_distribution_mp(matrix%dist))) nfullrows = dbcsr_nfullrows_total(matrix) nfullcols = dbcsr_nfullcols_total(matrix) row_blk_size => array_data(matrix%row_blk_size) IF (nfullrows .NE. 0 .AND. nfullcols .NE. 0) THEN IF (dbcsr_has_symmetry(matrix)) THEN IF (2*nze_global .EQ. & (INT(nfullrows, KIND=int_8)*INT(nfullrows + 1, KIND=int_8) + SUM(row_blk_size*(row_blk_size - 1)))) THEN occupation = 1.0_real_8 ELSE occupation = 2.0_real_8*REAL(nze_global, real_8)/ & (REAL(nfullrows, real_8)*REAL(nfullrows + 1, real_8) + & SUM(REAL(row_blk_size, real_8)*REAL(row_blk_size - 1, real_8))) END IF ELSE IF (nze_global .EQ. INT(nfullrows, KIND=int_8)*INT(nfullcols, KIND=int_8)) THEN occupation = 1.0_real_8 ELSE occupation = REAL(nze_global, real_8)/(REAL(nfullrows, real_8)*REAL(nfullcols, real_8)) END IF END IF ELSE occupation = 0.0_real_8 END IF END FUNCTION dbcsr_get_occupation SUBROUTINE dbcsr_clear(matrix) !! Clear a matrix (remove all blocks) TYPE(dbcsr_type), INTENT(INOUT) :: matrix TYPE(dbcsr_type) :: matrix_tmp CALL dbcsr_create(matrix_tmp, matrix) CALL dbcsr_release(matrix) matrix = matrix_tmp END SUBROUTINE SUBROUTINE dbcsr_trace_sd(matrix_a, trace) !! Trace of DBCSR matrices TYPE(dbcsr_type), INTENT(IN) :: matrix_a !! DBCSR matrices REAL(kind=real_8), INTENT(INOUT) :: trace !! the trace of the product of the matrices CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_trace_sd' INTEGER :: handle REAL(kind=real_4) :: trace_4 CALL timeset(routineN, handle) IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_8) THEN CALL dbcsr_trace_d(matrix_a, trace) ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_4) THEN trace_4 = 0.0_real_4 CALL dbcsr_trace_s(matrix_a, trace_4) trace = REAL(trace_4, real_8) ELSE DBCSR_ABORT("Invalid combination of data type, NYI") END IF CALL timestop(handle) END SUBROUTINE dbcsr_trace_sd SUBROUTINE dbcsr_dot_sd(matrix_a, matrix_b, trace) !! Dot product of DBCSR matrices !! \result the dot product of the matrices TYPE(dbcsr_type), INTENT(IN) :: matrix_a, matrix_b !! DBCSR matrices !! DBCSR matrices REAL(kind=real_8), INTENT(INOUT) :: trace CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_dot_sd' INTEGER :: handle REAL(kind=real_4) :: trace_4 CALL timeset(routineN, handle) IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_8 .AND. & dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_8) THEN CALL dbcsr_dot_d(matrix_a, matrix_b, trace) ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_4 .AND. & dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_4) THEN trace_4 = 0.0_real_4 CALL dbcsr_dot_s(matrix_a, matrix_b, trace_4) trace = REAL(trace_4, real_8) ELSE DBCSR_ABORT("Invalid combination of data type, NYI") END IF CALL timestop(handle) END SUBROUTINE dbcsr_dot_sd #:include '../data/dbcsr.fypp' #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float SUBROUTINE dbcsr_trace_${nametype1}$ (matrix_a, trace) !! traces a DBCSR matrix TYPE(dbcsr_type), INTENT(IN) :: matrix_a !! DBCSR matrix ${type1}$, INTENT(INOUT) :: trace !! the trace of the matrix CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_trace_${nametype1}$' INTEGER :: a_blk, a_col, a_col_size, & a_nze, a_row, a_row_size, i, & mynode, error_handle INTEGER, DIMENSION(:), POINTER :: col_blk_size, row_blk_size, & row_dist, col_dist ${type1}$, DIMENSION(:), POINTER :: a_data, data_p INTEGER, DIMENSION(:, :), POINTER :: pgrid TYPE(dbcsr_distribution_obj) :: dist ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) row_blk_size => array_data(matrix_a%row_blk_size) col_blk_size => array_data(matrix_a%col_blk_size) IF (dbcsr_get_data_type(matrix_a) /= ${dkind1}$) & DBCSR_ABORT("Incompatible data types") CALL dbcsr_get_data(matrix_a%data_area, data_p) dist = dbcsr_distribution(matrix_a) mynode = dbcsr_mp_mynode(dbcsr_distribution_mp(dist)) pgrid => dbcsr_mp_pgrid(dbcsr_distribution_mp(dist)) row_dist => dbcsr_distribution_row_dist(dist) col_dist => dbcsr_distribution_col_dist(dist) ! ! let's go trace = REAL(0.0, ${kind1}$) DO a_row = 1, matrix_a%nblkrows_total a_row_size = row_blk_size(a_row) DO a_blk = matrix_a%row_p(a_row) + 1, matrix_a%row_p(a_row + 1) IF (a_blk .EQ. 0) CYCLE a_col = matrix_a%col_i(a_blk) IF (a_col .ne. a_row) CYCLE ! We must skip non-local blocks in a replicated matrix. IF (matrix_a%replication_type .NE. dbcsr_repl_full) THEN IF (mynode .NE. checker_square_proc(a_row, a_col, pgrid, row_dist, col_dist)) & CYCLE END IF a_col_size = col_blk_size(a_col) IF (a_row_size .NE. a_col_size) & DBCSR_ABORT("is that a square matrix?") a_nze = a_row_size**2 a_data => pointer_view(data_p, ABS(matrix_a%blk_p(a_blk)), & ABS(matrix_a%blk_p(a_blk)) + a_nze - 1) !data_a => matrix_a%data(ABS(matrix_a%blk_p(a_blk)):ABS(matrix_a%blk_p(a_blk))+a_nze-1) ! ! let's trace the block DO i = 1, a_row_size trace = trace + a_data((i - 1)*a_row_size + i) END DO END DO ! a_col END DO ! a_row ! ! summe CALL mp_sum(trace, dbcsr_mp_group(dbcsr_distribution_mp(matrix_a%dist))) CALL timestop(error_handle) END SUBROUTINE dbcsr_trace_${nametype1}$ SUBROUTINE dbcsr_dot_${nametype1}$ (matrix_a, matrix_b, trace) !! Dot product of DBCSR matrices TYPE(dbcsr_type), INTENT(IN) :: matrix_a, matrix_b !! DBCSR matrices !! DBCSR matrices ${type1}$, INTENT(INOUT) :: trace !! the trace of the product of the matrices INTEGER :: a_blk, a_col, a_col_size, a_row_size, b_blk, b_col_size, & b_frst_blk, b_last_blk, b_row_size, nze, row, a_beg, a_end, b_beg, b_end CHARACTER :: matrix_a_type, matrix_b_type INTEGER, DIMENSION(:), POINTER :: a_col_blk_size, & a_row_blk_size, & b_col_blk_size, b_row_blk_size ${type1}$ :: sym_fac, fac LOGICAL :: found, matrix_a_symm, matrix_b_symm ${type1}$, DIMENSION(:), POINTER :: a_data, b_data ! --------------------------------------------------------------------------- IF (matrix_a%replication_type .NE. dbcsr_repl_none & .OR. matrix_b%replication_type .NE. dbcsr_repl_none) & DBCSR_ABORT("Trace of product of replicated matrices not yet possible.") sym_fac = REAL(1.0, ${kind1}$) matrix_a_type = dbcsr_get_matrix_type(matrix_a) matrix_b_type = dbcsr_get_matrix_type(matrix_b) matrix_a_symm = matrix_a_type == dbcsr_type_symmetric .OR. matrix_a_type == dbcsr_type_antisymmetric matrix_b_symm = matrix_b_type == dbcsr_type_symmetric .OR. matrix_b_type == dbcsr_type_antisymmetric IF (matrix_a_symm .AND. matrix_b_symm) sym_fac = REAL(2.0, ${kind1}$) ! tracing a symmetric with a general matrix is not implemented, as it would require communication of blocks IF (matrix_a_symm .NEQV. matrix_b_symm) & DBCSR_ABORT("Tracing general with symmetric matrix NYI") a_row_blk_size => array_data(matrix_a%row_blk_size) a_col_blk_size => array_data(matrix_a%col_blk_size) b_row_blk_size => array_data(matrix_b%row_blk_size) b_col_blk_size => array_data(matrix_b%col_blk_size) CALL dbcsr_get_data(matrix_a%data_area, a_data) CALL dbcsr_get_data(matrix_b%data_area, b_data) ! let's go trace = REAL(0.0, ${kind1}$) IF (matrix_a%nblkrows_total .NE. matrix_b%nblkrows_total) & DBCSR_ABORT("this combination of transpose is NYI") DO row = 1, matrix_a%nblkrows_total a_row_size = a_row_blk_size(row) b_row_size = b_row_blk_size(row) IF (a_row_size .NE. b_row_size) DBCSR_ABORT("matrices not consistent") b_blk = matrix_b%row_p(row) + 1 b_frst_blk = matrix_b%row_p(row) + 1 b_last_blk = matrix_b%row_p(row + 1) DO a_blk = matrix_a%row_p(row) + 1, matrix_a%row_p(row + 1) IF (matrix_a%blk_p(a_blk) .EQ. 0) CYCLE ! Deleted block a_col = matrix_a%col_i(a_blk) a_col_size = a_col_blk_size(a_col) ! ! find the b_blk we assume here that the columns are ordered ! CALL dbcsr_find_column(a_col, b_frst_blk, b_last_blk, matrix_b%col_i, & matrix_b%blk_p, b_blk, found) IF (found) THEN b_col_size = b_col_blk_size(a_col) IF (a_col_size .NE. b_col_size) DBCSR_ABORT("matrices not consistent") ! nze = a_row_size*a_col_size ! IF (nze .GT. 0) THEN ! ! let's trace the blocks a_beg = ABS(matrix_a%blk_p(a_blk)) a_end = a_beg + nze - 1 b_beg = ABS(matrix_b%blk_p(b_blk)) b_end = b_beg + nze - 1 fac = REAL(1.0, ${kind1}$) IF (row .NE. a_col) fac = sym_fac trace = trace + fac*SUM(a_data(a_beg:a_end)*b_data(b_beg:b_end)) END IF END IF END DO ! a_col END DO ! a_row ! ! sum CALL mp_sum(trace, dbcsr_mp_group(dbcsr_distribution_mp(matrix_a%dist))) END SUBROUTINE dbcsr_dot_${nametype1}$ SUBROUTINE dbcsr_scale_${nametype1}$ (matrix_a, alpha_scalar, last_column) !! Interface for matrix scaling by a scalar TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a ${type1}$, INTENT(IN) :: alpha_scalar INTEGER, INTENT(IN), OPTIONAL :: last_column CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_scale_${nametype1}$' INTEGER :: error_handler TYPE(dbcsr_scalar_type) :: sc sc = dbcsr_scalar(alpha_scalar) CALL dbcsr_scalar_fill_all(sc) sc%data_type = dbcsr_get_data_type(matrix_a) CALL timeset(routineN, error_handler) IF (PRESENT(last_column)) THEN CALL dbcsr_scale_anytype(matrix_a, & alpha_scalar=sc, & limits=(/0, 0, 0, last_column/)) ELSE CALL dbcsr_scale_anytype(matrix_a, alpha_scalar=sc) END IF CALL timestop(error_handler) END SUBROUTINE dbcsr_scale_${nametype1}$ SUBROUTINE dbcsr_scale_by_vector_${nametype1}$ (matrix_a, alpha, side) !! Interface for matrix scaling by a vector TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a ${type1}$, DIMENSION(:), INTENT(IN), TARGET, CONTIGUOUS :: alpha CHARACTER(LEN=*), INTENT(IN) :: side ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: tmp_p TYPE(dbcsr_data_obj) :: enc_alpha_vec CALL dbcsr_data_init(enc_alpha_vec) CALL dbcsr_data_new(enc_alpha_vec, ${dkind1}$) tmp_p => alpha CALL dbcsr_data_set_pointer(enc_alpha_vec, tmp_p) CALL dbcsr_scale_by_vector_anytype(matrix_a, enc_alpha_vec, side) CALL dbcsr_data_clear_pointer(enc_alpha_vec) CALL dbcsr_data_release(enc_alpha_vec) END SUBROUTINE dbcsr_scale_by_vector_${nametype1}$ SUBROUTINE dbcsr_set_${nametype1}$ (matrix, alpha) !! Interface for dbcsr_set TYPE(dbcsr_type), INTENT(INOUT) :: matrix ${type1}$, INTENT(IN) :: alpha CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_set' INTEGER :: col, handle, row TYPE(dbcsr_iterator) :: iter ${type1}$, DIMENSION(:, :), POINTER :: block LOGICAL :: tr CALL timeset(routineN, handle) IF (alpha == ${zero1[n]}$) THEN CALL dbcsr_zero(matrix) ELSE IF (dbcsr_get_data_type(matrix) /= ${dkind1}$) & DBCSR_ABORT("Incompatible data types") !TODO: could be speedup by direct assignment to data_area, similar to dbcsr_zero() CALL dbcsr_iterator_start(iter, matrix) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, block, tr) block(:, :) = alpha END DO CALL dbcsr_iterator_stop(iter) END IF CALL timestop(handle) END SUBROUTINE dbcsr_set_${nametype1}$ SUBROUTINE dbcsr_filter_${nametype1}$ (matrix, eps, method, use_absolute, & filter_diag) TYPE(dbcsr_type), INTENT(INOUT) :: matrix ${type1}$, INTENT(IN) :: eps INTEGER, INTENT(IN), OPTIONAL :: method LOGICAL, INTENT(in), OPTIONAL :: use_absolute, filter_diag CALL dbcsr_filter_anytype(matrix, dbcsr_scalar(eps), method, & use_absolute, filter_diag) END SUBROUTINE dbcsr_filter_${nametype1}$ SUBROUTINE dbcsr_set_diag_${nametype1}$ (matrix, diag) TYPE(dbcsr_type), INTENT(INOUT) :: matrix ${type1}$, DIMENSION(:), INTENT(IN) :: diag CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_set_diag' INTEGER :: icol, irow, row_offset, handle, i LOGICAL :: tr TYPE(dbcsr_iterator) :: iter ${type1}$, DIMENSION(:, :), POINTER :: block CALL timeset(routineN, handle) IF (dbcsr_get_data_type(matrix) /= ${dkind1}$) & DBCSR_ABORT("Incompatible data types") IF (dbcsr_nfullrows_total(matrix) /= SIZE(diag)) & DBCSR_ABORT("Diagonal has wrong size") IF (.NOT. array_equality(matrix%row_blk_offset, matrix%col_blk_offset)) & DBCSR_ABORT("matrix not quadratic") CALL dbcsr_iterator_start(iter, matrix) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, irow, icol, block, tr, row_offset=row_offset) IF (irow /= icol) CYCLE IF (sIZE(block, 1) /= sIZE(block, 2)) & DBCSR_ABORT("Diagonal block non-squared") DO i = 1, sIZE(block, 1) block(i, i) = diag(row_offset + i - 1) END DO END DO CALL dbcsr_iterator_stop(iter) CALL timestop(handle) END SUBROUTINE dbcsr_set_diag_${nametype1}$ SUBROUTINE dbcsr_get_diag_${nametype1}$ (matrix, diag) TYPE(dbcsr_type), INTENT(IN) :: matrix ${type1}$, DIMENSION(:), INTENT(OUT) :: diag CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_diag' INTEGER :: icol, irow, row_offset, handle, i LOGICAL :: tr TYPE(dbcsr_iterator) :: iter ${type1}$, DIMENSION(:, :), POINTER :: block CALL timeset(routineN, handle) IF (dbcsr_get_data_type(matrix) /= ${dkind1}$) & DBCSR_ABORT("Incompatible data types") IF (dbcsr_nfullrows_total(matrix) /= SIZE(diag)) & DBCSR_ABORT("Diagonal has wrong size") IF (.NOT. array_equality(matrix%row_blk_offset, matrix%col_blk_offset)) & DBCSR_ABORT("matrix not quadratic") diag(:) = ${zero1[n]}$ CALL dbcsr_iterator_start(iter, matrix) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, irow, icol, block, tr, row_offset=row_offset) IF (irow /= icol) CYCLE IF (sIZE(block, 1) /= sIZE(block, 2)) & DBCSR_ABORT("Diagonal block non-squared") DO i = 1, sIZE(block, 1) diag(row_offset + i - 1) = block(i, i) END DO END DO CALL dbcsr_iterator_stop(iter) CALL timestop(handle) END SUBROUTINE dbcsr_get_diag_${nametype1}$ SUBROUTINE dbcsr_add_on_diag_${nametype1}$ (matrix, alpha) !! add a constant to the diagonal of a matrix TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! DBCSR matrix ${type1}$, INTENT(IN) :: alpha !! scalar CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_on_diag' INTEGER :: handle, mynode, node, irow, i, row_size LOGICAL :: found, tr ${type1}$, DIMENSION(:, :), POINTER :: block CALL timeset(routineN, handle) IF (dbcsr_get_data_type(matrix) /= ${dkind1}$) & DBCSR_ABORT("Incompatible data types") IF (.NOT. array_equality(matrix%row_blk_offset, matrix%col_blk_offset)) & DBCSR_ABORT("matrix not quadratic") mynode = dbcsr_mp_mynode(dbcsr_distribution_mp(dbcsr_distribution(matrix))) CALL dbcsr_work_create(matrix, work_mutable=.TRUE.) DO irow = 1, dbcsr_nblkrows_total(matrix) CALL dbcsr_get_stored_coordinates(matrix, irow, irow, node) IF (node /= mynode) CYCLE CALL dbcsr_get_block_p(matrix, irow, irow, block, tr, found, row_size=row_size) IF (.NOT. found) THEN ALLOCATE (block(row_size, row_size)) block(:, :) = ${zero1[n]}$ END IF DO i = 1, row_size block(i, i) = block(i, i) + alpha END DO IF (.NOT. found) THEN CALL dbcsr_put_block(matrix, irow, irow, block) DEALLOCATE (block) END IF END DO CALL dbcsr_finalize(matrix) CALL timestop(handle) END SUBROUTINE dbcsr_add_on_diag_${nametype1}$ SUBROUTINE dbcsr_update_contiguous_blocks_${nametype1}$ (matrix_a, matrix_b, first_lb_a, first_lb_b, nze, & do_scale, my_beta_scalar, found, iw) !! Low level function to sum contiguous chunks of blocks of the matrices (matrix_a = matrix_a + beta*matrix_b) TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a !! DBCSR matrix TYPE(dbcsr_type), INTENT(IN) :: matrix_b !! DBCSR matrix TYPE(dbcsr_scalar_type), INTENT(IN) :: my_beta_scalar INTEGER, INTENT(IN) :: first_lb_a, first_lb_b, nze, iw LOGICAL, INTENT(IN) :: found, do_scale INTEGER :: ub_a, ub_b ub_a = first_lb_a + nze - 1 ub_b = first_lb_b + nze - 1 IF (found) THEN IF (do_scale) THEN CALL ${nametype1}$axpy(nze, my_beta_scalar%${base1}$_${prec1}$, & matrix_b%data_area%d%${base1}$_${prec1}$ (first_lb_b:ub_b), 1, & matrix_a%data_area%d%${base1}$_${prec1}$ (first_lb_a:ub_a), 1) ELSE matrix_a%data_area%d%${base1}$_${prec1}$ (first_lb_a:ub_a) = & matrix_a%data_area%d%${base1}$_${prec1}$ (first_lb_a:ub_a) + & matrix_b%data_area%d%${base1}$_${prec1}$ (first_lb_b:ub_b) END IF ELSE IF (do_scale) THEN matrix_a%wms(iw)%data_area%d%${base1}$_${prec1}$ (first_lb_a:ub_a) = & my_beta_scalar%${base1}$_${prec1}$* & matrix_b%data_area%d%${base1}$_${prec1}$ (first_lb_b:ub_b) ELSE matrix_a%wms(iw)%data_area%d%${base1}$_${prec1}$ (first_lb_a:ub_a) = & matrix_b%data_area%d%${base1}$_${prec1}$ (first_lb_b:ub_b) END IF END IF END SUBROUTINE dbcsr_update_contiguous_blocks_${nametype1}$ SUBROUTINE dbcsr_add_anytype_${nametype1}$ (matrix_a, matrix_b, iter, iw, do_scale, & my_beta_scalar, my_flop) !! Low level function to sum two matrices (matrix_a = matrix_a + beta*matrix_b TYPE(dbcsr_type), INTENT(INOUT) :: matrix_a !! DBCSR matrix TYPE(dbcsr_type), INTENT(IN) :: matrix_b !! DBCSR matrix TYPE(dbcsr_iterator), INTENT(INOUT) :: iter INTEGER, INTENT(IN) :: iw LOGICAL, INTENT(IN) :: do_scale TYPE(dbcsr_scalar_type), INTENT(IN) :: my_beta_scalar INTEGER(KIND=int_8), INTENT(INOUT) :: my_flop INTEGER :: row, col, row_size, col_size, & nze, tot_nze, blk, & lb_a, first_lb_a, lb_a_val, & lb_b, first_lb_b INTEGER, DIMENSION(2) :: lb_row_blk LOGICAL :: was_found, found, tr ! some start values lb_row_blk(:) = 0 first_lb_a = matrix_a%wms(iw)%datasize + 1 first_lb_b = 0 tot_nze = 0 ! DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, blk, tr, lb_b, row_size, col_size) nze = row_size*col_size IF (nze .LE. 0) CYCLE IF (lb_row_blk(1) .LT. row) THEN lb_row_blk(1) = row lb_row_blk(2) = matrix_a%row_p(row) + 1 END IF ! get b-block index lb_b = ABS(lb_b) CALL dbcsr_find_column(col, lb_row_blk(2), matrix_a%row_p(row + 1), matrix_a%col_i, matrix_a%blk_p, blk, found) lb_row_blk(2) = blk + 1 ! get index of a-block lb_a whether found (from matrix_a) or not (from workspace array) IF (found) THEN my_flop = my_flop + nze*2 lb_a = ABS(matrix_a%blk_p(blk)) ELSE lb_a = matrix_a%wms(iw)%datasize + 1 lb_a_val = lb_a IF (tr) lb_a_val = -lb_a matrix_a%wms(iw)%lastblk = matrix_a%wms(iw)%lastblk + 1 matrix_a%wms(iw)%row_i(matrix_a%wms(iw)%lastblk) = row matrix_a%wms(iw)%col_i(matrix_a%wms(iw)%lastblk) = col matrix_a%wms(iw)%blk_p(matrix_a%wms(iw)%lastblk) = lb_a_val matrix_a%wms(iw)%datasize = matrix_a%wms(iw)%datasize + nze END IF ! at the first iteration we skip this and go directly to initialization after IF (first_lb_b .NE. 0) THEN ! if found status is the same as before then probably we are in contiguous blocks IF ((found .EQV. was_found) .AND. & (first_lb_b + tot_nze .EQ. lb_b) .AND. & (first_lb_a + tot_nze) .EQ. lb_a) THEN tot_nze = tot_nze + nze CYCLE END IF ! save block chunk CALL dbcsr_update_contiguous_blocks_${nametype1}$ (matrix_a, matrix_b, first_lb_a, first_lb_b, tot_nze, & do_scale, my_beta_scalar, was_found, iw) END IF ! first_lb_a = lb_a first_lb_b = lb_b tot_nze = nze was_found = found END DO ! save the last block or chunk of blocks IF (first_lb_b .NE. 0) THEN call dbcsr_update_contiguous_blocks_${nametype1}$ (matrix_a, matrix_b, first_lb_a, first_lb_b, tot_nze, & do_scale, my_beta_scalar, was_found, iw) END IF END SUBROUTINE dbcsr_add_anytype_${nametype1}$ #:endfor END MODULE dbcsr_operations ================================================ FILE: src/ops/dbcsr_test_methods.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_test_methods !! Tests for CP2K DBCSR operations USE dbcsr_blas_operations, ONLY: dbcsr_lapack_larnv, & set_larnv_seed USE dbcsr_block_access, ONLY: dbcsr_put_block USE dbcsr_block_operations, ONLY: dbcsr_block_conjg, & dbcsr_block_partial_copy, & dbcsr_block_scale, & dbcsr_block_transpose, & dbcsr_data_clear, & dbcsr_data_set USE dbcsr_data_methods, ONLY: & dbcsr_data_clear_pointer, dbcsr_data_get_sizes, dbcsr_data_get_type, dbcsr_data_init, & dbcsr_data_new, dbcsr_data_release, dbcsr_scalar, dbcsr_scalar_negative, dbcsr_scalar_one, & dbcsr_type_1d_to_2d, dbcsr_type_2d_to_1d USE dbcsr_dist_methods, ONLY: dbcsr_distribution_hold, & dbcsr_distribution_mp, & dbcsr_distribution_new, & dbcsr_distribution_release USE dbcsr_dist_operations, ONLY: dbcsr_get_stored_coordinates USE dbcsr_dist_util, ONLY: dbcsr_verify_matrix USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left, & dbcsr_iterator_next_block, & dbcsr_iterator_start, & dbcsr_iterator_stop USE dbcsr_kinds, ONLY: dp, & int_8, & real_4, & real_8 USE dbcsr_methods, ONLY: dbcsr_get_matrix_type, & dbcsr_max_col_size, & dbcsr_max_row_size, & dbcsr_nblkcols_total, & dbcsr_nblkrows_total, & dbcsr_nfullcols_total, & dbcsr_nfullrows_total USE dbcsr_mp_methods, ONLY: dbcsr_mp_mynode, & dbcsr_mp_new, & dbcsr_mp_numnodes, & dbcsr_mp_release USE dbcsr_mpiwrap, ONLY: mp_comm_null, & mp_environ, mp_comm_type USE dbcsr_ptr_util, ONLY: ensure_array_size USE dbcsr_types, ONLY: & dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_iterator, dbcsr_mp_obj, dbcsr_scalar_type, & dbcsr_type, dbcsr_type_antihermitian, dbcsr_type_antisymmetric, dbcsr_type_complex_4, & dbcsr_type_complex_8, dbcsr_type_hermitian, dbcsr_type_no_symmetry, dbcsr_type_real_4, & dbcsr_type_real_8, dbcsr_type_real_default, dbcsr_type_symmetric USE dbcsr_work_operations, ONLY: dbcsr_create, & dbcsr_finalize, & dbcsr_work_create #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE PUBLIC :: dbcsr_to_dense_local, dbcsr_impose_sparsity PUBLIC :: dbcsr_random_dist, dbcsr_make_random_matrix, & dbcsr_make_random_block_sizes, compx_to_dbcsr_scalar, & dbcsr_reset_randmat_seed CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_test_methods' INTEGER, PRIVATE, SAVE :: randmat_counter = 0 INTEGER, PARAMETER, PRIVATE :: rand_seed_init = 12341313 CONTAINS SUBROUTINE dbcsr_reset_randmat_seed() !! Reset the seed used for generating random matrices to default value randmat_counter = rand_seed_init END SUBROUTINE FUNCTION compx_to_dbcsr_scalar(z, data_type) RESULT(res) COMPLEX(real_8) :: z INTEGER :: data_type TYPE(dbcsr_scalar_type) :: res SELECT CASE (data_type) CASE (dbcsr_type_real_4) res = dbcsr_scalar(REAL(z, kind=real_4)) CASE (dbcsr_type_real_8) res = dbcsr_scalar(REAL(z, kind=real_8)) CASE (dbcsr_type_complex_4) res = dbcsr_scalar(CMPLX(z, kind=real_4)) CASE (dbcsr_type_complex_8) res = dbcsr_scalar(z) END SELECT END FUNCTION compx_to_dbcsr_scalar SUBROUTINE dbcsr_impose_sparsity(sparse, dense) !! Impose sparsity on a dense matrix based on a dbcsr TYPE(dbcsr_type), INTENT(IN) :: sparse !! sparse matrix TYPE(dbcsr_data_obj), INTENT(inout) :: dense !! dense matrix Take into account the symmetry of the sparse matrix. The dense matrix need to be valid. The operation is !! done locally. CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_impose_sparsity' CHARACTER :: symm INTEGER :: blk, col, col_offset, col_size, & data_type, dense_col_size, & dense_row_size, handle, row, & row_offset, row_size LOGICAL :: valid TYPE(dbcsr_data_obj) :: tmp TYPE(dbcsr_iterator) :: iter CALL timeset(routineN, handle) CALL dbcsr_data_get_sizes(dense, dense_row_size, dense_col_size, valid) IF (.NOT. valid) & DBCSR_ABORT("dense matrix not valid") data_type = dbcsr_data_get_type(dense) symm = dbcsr_get_matrix_type(sparse) CALL dbcsr_data_init(tmp) CALL dbcsr_data_new(tmp, dbcsr_type_1d_to_2d(data_type), data_size=dense_row_size, & data_size2=dense_col_size) CALL dbcsr_data_set(dst=tmp, lb=1, data_size=dense_row_size, src=dense, source_lb=1, & lb2=1, data_size2=dense_col_size, source_lb2=1) CALL dbcsr_data_clear(dense) CALL dbcsr_iterator_start(iter, sparse) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, blk, & row_size=row_size, col_size=col_size, & row_offset=row_offset, col_offset=col_offset) CALL dbcsr_block_partial_copy( & dst=dense, & dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.FALSE., & dst_r_lb=row_offset, dst_c_lb=col_offset, & src=tmp, & src_rs=dense_row_size, src_cs=dense_col_size, src_tr=.FALSE., & src_r_lb=row_offset, src_c_lb=col_offset, & nrow=row_size, ncol=col_size) IF (symm .NE. dbcsr_type_no_symmetry) THEN SELECT CASE (symm) CASE (dbcsr_type_symmetric) CALL dbcsr_block_partial_copy( & dst=dense, & dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., & dst_r_lb=row_offset, dst_c_lb=col_offset, & src=tmp, & src_rs=dense_row_size, src_cs=dense_col_size, src_tr=.FALSE., & src_r_lb=row_offset, src_c_lb=col_offset, & nrow=row_size, ncol=col_size) CASE (dbcsr_type_antisymmetric) CALL dbcsr_block_partial_copy( & dst=dense, & dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., & dst_r_lb=row_offset, dst_c_lb=col_offset, & src=tmp, & src_rs=dense_row_size, src_cs=dense_col_size, src_tr=.FALSE., & src_r_lb=row_offset, src_c_lb=col_offset, & nrow=row_size, ncol=col_size) CALL dbcsr_block_scale(dense, dbcsr_scalar_negative(dbcsr_scalar_one( & dbcsr_type_2d_to_1d(data_type))), & row_size=col_size, col_size=row_size, & lb=col_offset, lb2=row_offset) CASE (dbcsr_type_hermitian) CALL dbcsr_block_partial_copy( & dst=dense, & dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., & dst_r_lb=row_offset, dst_c_lb=col_offset, & src=tmp, & src_rs=dense_row_size, src_cs=dense_col_size, src_tr=.FALSE., & src_r_lb=row_offset, src_c_lb=col_offset, & nrow=row_size, ncol=col_size) CALL dbcsr_block_conjg(dense, row_size=col_size, col_size=row_size, & lb=col_offset, lb2=row_offset) CASE (dbcsr_type_antihermitian) CALL dbcsr_block_partial_copy( & dst=dense, & dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., & dst_r_lb=row_offset, dst_c_lb=col_offset, & src=tmp, & src_rs=dense_row_size, src_cs=dense_col_size, src_tr=.FALSE., & src_r_lb=row_offset, src_c_lb=col_offset, & nrow=row_size, ncol=col_size) CALL dbcsr_block_scale(dense, dbcsr_scalar_negative(dbcsr_scalar_one( & dbcsr_type_2d_to_1d(data_type))), & row_size=col_size, col_size=row_size, & lb=col_offset, lb2=row_offset) CALL dbcsr_block_conjg(dense, row_size=col_size, col_size=row_size, & lb=col_offset, lb2=row_offset) CASE DEFAULT DBCSR_ABORT("wrong matrix symmetry") END SELECT END IF END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_release(tmp) CALL timestop(handle) END SUBROUTINE dbcsr_impose_sparsity SUBROUTINE dbcsr_to_dense_local(sparse, dense) !! Convert a sparse matrix to a dense matrix TYPE(dbcsr_type), INTENT(in) :: sparse !! sparse matrix TYPE(dbcsr_data_obj), INTENT(inout) :: dense !! dense matrix Take into account the symmetry of the sparse matrix. The dense matrix need to be valid. The operation is !! done locally. CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_to_dense_local' CHARACTER :: symm INTEGER :: col, col_offset, col_size, data_type, & dense_col_size, dense_row_size, & handle, row, row_offset, row_size LOGICAL :: tr, valid TYPE(dbcsr_data_obj) :: block TYPE(dbcsr_iterator) :: iter CALL timeset(routineN, handle) CALL dbcsr_data_get_sizes(dense, dense_row_size, dense_col_size, valid) IF (.NOT. valid) & DBCSR_ABORT("dense matrix not valid") symm = dbcsr_get_matrix_type(sparse) data_type = dbcsr_data_get_type(dense) CALL dbcsr_data_clear(dense) CALL dbcsr_data_init(block) CALL dbcsr_data_new(block, dbcsr_type_1d_to_2d(data_type)) CALL dbcsr_iterator_start(iter, sparse) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, block, tr, & row_size=row_size, col_size=col_size, & row_offset=row_offset, col_offset=col_offset) CALL dbcsr_block_partial_copy(dst=dense, & dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.FALSE., & dst_r_lb=row_offset, dst_c_lb=col_offset, & src=block, src_rs=row_size, src_cs=col_size, src_tr=tr, & src_r_lb=1, src_c_lb=1, nrow=row_size, ncol=col_size) IF (symm .NE. dbcsr_type_no_symmetry .AND. row .NE. col) THEN SELECT CASE (symm) CASE (dbcsr_type_symmetric) CALL dbcsr_block_partial_copy(dst=dense, & dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., & dst_r_lb=row_offset, dst_c_lb=col_offset, & src=block, src_rs=row_size, src_cs=col_size, src_tr=tr, & src_r_lb=1, src_c_lb=1, nrow=row_size, ncol=col_size) CASE (dbcsr_type_antisymmetric) CALL dbcsr_block_partial_copy(dst=dense, & dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., & dst_r_lb=row_offset, dst_c_lb=col_offset, & src=block, src_rs=row_size, src_cs=col_size, src_tr=tr, & src_r_lb=1, src_c_lb=1, nrow=row_size, ncol=col_size) CALL dbcsr_block_scale(dense, dbcsr_scalar_negative(dbcsr_scalar_one( & dbcsr_type_2d_to_1d(data_type))), & row_size=col_size, col_size=row_size, & lb=col_offset, lb2=row_offset) CASE (dbcsr_type_hermitian) CALL dbcsr_block_partial_copy(dst=dense, & dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., & dst_r_lb=row_offset, dst_c_lb=col_offset, & src=block, src_rs=row_size, src_cs=col_size, src_tr=tr, & src_r_lb=1, src_c_lb=1, nrow=row_size, ncol=col_size) CALL dbcsr_block_conjg(dense, row_size=col_size, col_size=row_size, & lb=col_offset, lb2=row_offset) CASE (dbcsr_type_antihermitian) CALL dbcsr_block_partial_copy(dst=dense, & dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., & dst_r_lb=row_offset, dst_c_lb=col_offset, & src=block, src_rs=row_size, src_cs=col_size, src_tr=tr, & src_r_lb=1, src_c_lb=1, nrow=row_size, ncol=col_size) CALL dbcsr_block_scale(dense, dbcsr_scalar_negative(dbcsr_scalar_one( & dbcsr_type_2d_to_1d(data_type))), & row_size=col_size, col_size=row_size, & lb=col_offset, lb2=row_offset) CALL dbcsr_block_conjg(dense, row_size=col_size, col_size=row_size, & lb=col_offset, lb2=row_offset) CASE DEFAULT DBCSR_ABORT("wrong matrix symmetry") END SELECT END IF END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(block) CALL dbcsr_data_release(block) CALL timestop(handle) END SUBROUTINE dbcsr_to_dense_local SUBROUTINE dbcsr_random_dist(dist_array, dist_size, nbins) INTEGER, DIMENSION(:), INTENT(out), POINTER :: dist_array INTEGER, INTENT(in) :: dist_size, nbins INTEGER :: i ALLOCATE (dist_array(dist_size)) !CALL RANDOM_NUMBER (dist_array) DO i = 1, dist_size dist_array(i) = MODULO(nbins - i, nbins) END DO END SUBROUTINE dbcsr_random_dist SUBROUTINE dbcsr_make_random_matrix(matrix, row_blk_sizes, col_blk_sizes, & name, sparsity, mp_group, data_type, symmetry, dist) !! Creates a random matrix. TYPE(dbcsr_type), INTENT(out) :: matrix INTEGER, DIMENSION(:), INTENT(INOUT), POINTER, CONTIGUOUS :: row_blk_sizes, col_blk_sizes CHARACTER(len=*), INTENT(in) :: name REAL(kind=real_8), INTENT(in) :: sparsity TYPE(mp_comm_type), INTENT(in) :: mp_group INTEGER, INTENT(in), OPTIONAL :: data_type CHARACTER, INTENT(in), OPTIONAL :: symmetry TYPE(dbcsr_distribution_obj), INTENT(IN), OPTIONAL :: dist CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_random_matrix' CHARACTER :: my_symmetry INTEGER :: col, error_handle, max_nze, & my_data_type, my_proc, ncol, nrow, & numproc, nze, p, row, s_col, s_row INTEGER(KIND=int_8) :: counter, ele, increment, nmax INTEGER, DIMENSION(4) :: iseed, jseed LOGICAL :: tr REAL(kind=real_8) :: my_sparsity REAL(kind=real_8), DIMENSION(1) :: value TYPE(dbcsr_data_obj) :: data_values, data_values_tr TYPE(dbcsr_distribution_obj) :: new_dist ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) ! Check that the counter was initialised (or has not overflowed) DBCSR_ASSERT(randmat_counter .NE. 0) ! the counter goes into the seed. Every new call gives a new random matrix randmat_counter = randmat_counter + 1 ! Create the matrix IF (PRESENT(dist)) THEN new_dist = dist CALL dbcsr_distribution_hold(new_dist) ELSE CALL dbcsr_make_null_dist(new_dist, SIZE(row_blk_sizes), & SIZE(col_blk_sizes), group=mp_group) END IF my_data_type = dbcsr_type_real_default IF (PRESENT(data_type)) my_data_type = data_type my_symmetry = dbcsr_type_no_symmetry IF (PRESENT(symmetry)) my_symmetry = symmetry CALL dbcsr_create(matrix, name, & new_dist, my_symmetry, & row_blk_sizes, & col_blk_sizes, & data_type=my_data_type) numproc = dbcsr_mp_numnodes(dbcsr_distribution_mp(new_dist)) my_proc = dbcsr_mp_mynode(dbcsr_distribution_mp(new_dist)) ! IF (sparsity .GT. 1) THEN my_sparsity = sparsity/100.0 ELSE my_sparsity = sparsity END IF CALL dbcsr_work_create(matrix, & nblks_guess=INT(REAL(dbcsr_nblkrows_total(matrix), KIND=dp) & *REAL(dbcsr_nblkcols_total(matrix), KIND=dp) & *(1.0_dp - sparsity)*1.1_dp/numproc), & sizedata_guess=INT(REAL(dbcsr_nfullrows_total(matrix), KIND=dp) & *REAL(dbcsr_nfullcols_total(matrix), KIND=dp) & *(1.0_dp - sparsity)*1.1_dp/numproc), & work_mutable=.TRUE.) max_nze = dbcsr_max_row_size(matrix)*dbcsr_max_col_size(matrix) CALL dbcsr_data_init(data_values) CALL dbcsr_data_new(data_values, my_data_type, data_size=max_nze) CALL dbcsr_data_init(data_values_tr) CALL dbcsr_data_new(data_values_tr, my_data_type, data_size=max_nze) nrow = dbcsr_nblkrows_total(matrix) ncol = dbcsr_nblkcols_total(matrix) nmax = INT(nrow, KIND=int_8)*INT(ncol, KIND=int_8) ele = -1 counter = 0 CALL set_larnv_seed(7, 42, 3, 42, randmat_counter, jseed) DO ! find the next block to add, this is given by a geometrically distributed variable ! we number the blocks of the matrix and jump to the next one CALL dlarnv(1, jseed, 1, value) IF (my_sparsity > 0) THEN increment = 1 + FLOOR(LOG(value(1))/LOG(my_sparsity), KIND=int_8) ELSE increment = 1 END IF ele = ele + increment IF (ele >= nmax) EXIT counter = counter + 1 row = INT(ele/ncol) + 1 col = INT(MOD(ele, INT(ncol, KIND=KIND(ele)))) + 1 ! build the upper matrix if some symmetry, and only deal with the local blocks. s_row = row; s_col = col IF (PRESENT(dist)) THEN tr = .FALSE. CALL dbcsr_get_stored_coordinates(matrix, s_row, s_col, p) IF (my_symmetry .NE. dbcsr_type_no_symmetry .AND. s_col .LT. s_row) CYCLE IF (p .NE. my_proc) CYCLE ELSE IF (my_symmetry .NE. dbcsr_type_no_symmetry .AND. s_col .LT. s_row) CYCLE END IF IF (.NOT. PRESENT(dist) .AND. my_proc .NE. 0) CYCLE ! fill based on a block based seed, makes this the same values in parallel CALL set_larnv_seed(row, nrow, col, ncol, randmat_counter, iseed) nze = row_blk_sizes(s_row)*col_blk_sizes(s_col) CALL dbcsr_lapack_larnv(1, iseed, nze, data_values) CALL dbcsr_put_block(matrix, s_row, s_col, data_values) IF (my_symmetry .NE. dbcsr_type_no_symmetry .AND. s_col .EQ. s_row) THEN SELECT CASE (my_symmetry) CASE (dbcsr_type_symmetric) CALL dbcsr_block_transpose(data_values_tr, data_values, & row_size=row_blk_sizes(s_row), col_size=col_blk_sizes(s_col), lb=1, source_lb=1) CASE (dbcsr_type_antisymmetric) CALL dbcsr_block_transpose(data_values_tr, data_values, & row_size=row_blk_sizes(s_row), col_size=col_blk_sizes(s_col), lb=1, source_lb=1, & scale=dbcsr_scalar_negative(dbcsr_scalar_one(my_data_type))) CASE (dbcsr_type_hermitian) CALL dbcsr_block_transpose(data_values_tr, data_values, & row_size=row_blk_sizes(s_row), col_size=col_blk_sizes(s_col), lb=1, source_lb=1) CALL dbcsr_block_conjg(data_values_tr, row_size=col_blk_sizes(s_col), col_size=row_blk_sizes(s_row), & lb=1) CASE (dbcsr_type_antihermitian) CALL dbcsr_block_transpose(data_values_tr, data_values, & row_size=row_blk_sizes(s_row), col_size=col_blk_sizes(s_col), lb=1, source_lb=1, & scale=dbcsr_scalar_negative(dbcsr_scalar_one(my_data_type))) CALL dbcsr_block_conjg(data_values_tr, row_size=col_blk_sizes(s_col), col_size=row_blk_sizes(s_row), & lb=1) CASE DEFAULT DBCSR_ABORT("wrong matrix symmetry") END SELECT CALL dbcsr_put_block(matrix, s_row, s_col, data_values_tr, summation=.TRUE.) END IF END DO CALL dbcsr_data_release(data_values) CALL dbcsr_data_release(data_values_tr) CALL dbcsr_distribution_release(new_dist) CALL dbcsr_finalize(matrix) CALL dbcsr_verify_matrix(matrix) ! CALL timestop(error_handle) END SUBROUTINE dbcsr_make_random_matrix SUBROUTINE dbcsr_make_random_block_sizes(block_sizes, size_sum, size_mix) INTEGER, DIMENSION(:), INTENT(out), POINTER :: block_sizes INTEGER, INTENT(in) :: size_sum INTEGER, DIMENSION(:), INTENT(in) :: size_mix INTEGER :: block_size, current_sum, nblocks, & nsize_mix, selector INTEGER, ALLOCATABLE, DIMENSION(:, :) :: mixer INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: sizes ! NULLIFY (sizes) nsize_mix = SIZE(size_mix)/2 ALLOCATE (mixer(3, nsize_mix)) mixer(1, :) = size_mix(1:nsize_mix*2 - 1:2) mixer(2, :) = size_mix(2:nsize_mix*2:2) mixer(3, :) = 1 nblocks = 0 current_sum = 0 CALL ensure_array_size(sizes, lb=1, ub=1) selector = 1 ! DO WHILE (current_sum .LT. size_sum) nblocks = nblocks + 1 !CALL RANDOM_NUMBER(value) !block_size = MIN (INT (value(1) * size_max),& ! size_sum - current_sum) block_size = MIN(mixer(2, selector), & size_sum - current_sum) sizes(nblocks) = block_size current_sum = current_sum + block_size CALL ensure_array_size(sizes, ub=nblocks + 1, factor=2.0_dp) mixer(3, selector) = mixer(3, selector) + 1 IF (mixer(3, selector) .GT. mixer(1, selector)) THEN mixer(3, selector) = 1 selector = MOD(selector, nsize_mix) + 1 END IF END DO ALLOCATE (block_sizes(nblocks)) block_sizes = sizes(1:nblocks) current_sum = SUM(block_sizes) IF (current_sum /= size_sum) & DBCSR_ABORT("Incorrect block sizes") DEALLOCATE (mixer, sizes) END SUBROUTINE dbcsr_make_random_block_sizes SUBROUTINE dbcsr_make_null_mp(mp_env, group) TYPE(dbcsr_mp_obj), INTENT(out) :: mp_env TYPE(mp_comm_type), INTENT(in), OPTIONAL :: group INTEGER :: mynode, numnodes IF (PRESENT(group)) THEN CALL mp_environ(numnodes, mynode, group) CALL dbcsr_mp_new(mp_env, group, & RESHAPE((/1/), (/1, 1/)), & mynode, numnodes, & myprow=0, mypcol=0) ELSE CALL dbcsr_mp_new(mp_env, MP_COMM_NULL, & RESHAPE((/1/), (/1, 1/)), & 0, 1, & myprow=0, mypcol=0) END IF END SUBROUTINE dbcsr_make_null_mp ! SUBROUTINE dbcsr_make_null_dist(distribution, nblkrows, nblkcols, group) TYPE(dbcsr_distribution_obj), INTENT(out) :: distribution INTEGER, INTENT(in) :: nblkrows, nblkcols TYPE(mp_comm_type), INTENT(in), OPTIONAL :: group INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_dist, row_dist TYPE(dbcsr_mp_obj) :: mp_env CALL dbcsr_make_null_mp(mp_env, group=group) ALLOCATE (row_dist(nblkrows), col_dist(nblkcols)) row_dist = 0 col_dist = 0 CALL dbcsr_distribution_new(distribution, mp_env, & row_dist, col_dist, reuse_arrays=.TRUE.) CALL dbcsr_mp_release(mp_env) END SUBROUTINE dbcsr_make_null_dist END MODULE dbcsr_test_methods ================================================ FILE: src/ops/dbcsr_tests.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tests !! Tests for CP2K DBCSR operations USE dbcsr_data_methods, ONLY: dbcsr_scalar USE dbcsr_dist_methods, ONLY: dbcsr_distribution_mp, & dbcsr_distribution_new, & dbcsr_distribution_release USE dbcsr_dist_operations, ONLY: dbcsr_dist_bin USE dbcsr_dist_util, ONLY: dbcsr_checksum USE dbcsr_io, ONLY: dbcsr_binary_read, & dbcsr_binary_write USE dbcsr_kinds, ONLY: dp, & int_8, & real_8 USE dbcsr_machine, ONLY: m_flush, & m_walltime USE dbcsr_methods, ONLY: dbcsr_col_block_sizes, & dbcsr_distribution, & dbcsr_get_data_type, & dbcsr_name, & dbcsr_nblkcols_total, & dbcsr_nblkrows_total, & dbcsr_release, & dbcsr_row_block_sizes USE dbcsr_mp_methods, ONLY: dbcsr_mp_active, & dbcsr_mp_group, & dbcsr_mp_init, & dbcsr_mp_new, & dbcsr_mp_npcols, & dbcsr_mp_nprows, & dbcsr_mp_release, & dbcsr_mp_make_env USE dbcsr_mpiwrap, ONLY: & mp_comm_free, mp_environ, mp_max, mp_sum, mp_sync, mp_comm_type USE dbcsr_multiply_api, ONLY: dbcsr_multiply USE dbcsr_operations, ONLY: dbcsr_add, & dbcsr_copy, & dbcsr_frobenius_norm USE dbcsr_test_methods, ONLY: dbcsr_make_random_block_sizes, & dbcsr_make_random_matrix USE dbcsr_transformations, ONLY: dbcsr_redistribute USE dbcsr_types, ONLY: dbcsr_distribution_obj, & dbcsr_mp_obj, & dbcsr_scalar_type, & dbcsr_type, & dbcsr_type_no_symmetry USE dbcsr_work_operations, ONLY: dbcsr_create #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE PUBLIC :: dbcsr_run_tests, dbcsr_test_mm, dbcsr_test_binary_io CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tests' INTEGER, PARAMETER :: dbcsr_test_mm = 1 INTEGER, PARAMETER :: dbcsr_test_binary_io = 2 CONTAINS SUBROUTINE dbcsr_run_tests(mp_group, io_unit, nproc, & matrix_sizes, trs, & bs_m, bs_n, bs_k, sparsities, alpha, beta, data_type, test_type, & n_loops, eps, retain_sparsity, always_checksum) !! Performs a variety of matrix multiplies of same matrices on different !! processor grids TYPE(mp_comm_type), INTENT(IN) :: mp_group INTEGER, INTENT(IN) :: io_unit !! MPI communicator !! which unit to write to, if not negative INTEGER, DIMENSION(:), POINTER :: nproc !! number of processors to test on INTEGER, DIMENSION(:), INTENT(in) :: matrix_sizes !! size of matrices to test LOGICAL, DIMENSION(2), INTENT(in) :: trs !! transposes of the two matrices INTEGER, DIMENSION(:), POINTER :: bs_m, bs_n, bs_k !! block sizes of the 3 dimensions !! block sizes of the 3 dimensions !! block sizes of the 3 dimensions REAL(kind=dp), DIMENSION(3), INTENT(in) :: sparsities !! sparsities of matrices to create REAL(kind=dp), INTENT(in) :: alpha, beta !! alpha value to use in multiply !! beta value to use in multiply INTEGER, INTENT(IN) :: data_type, test_type, n_loops !! matrix data type !! number of repetition for each multiplication REAL(kind=dp), INTENT(in) :: eps !! eps value for filtering LOGICAL, INTENT(in) :: retain_sparsity, always_checksum !! checksum after each multiplication CHARACTER(len=*), PARAMETER :: fmt_desc = '(A,3(1X,I6),1X,A,2(1X,I5),1X,A,2(1X,L1))', & routineN = 'dbcsr_run_tests' CHARACTER :: t_a, t_b INTEGER :: bmax, bmin, error_handle, & mynode, numnodes INTEGER, ALLOCATABLE, DIMENSION(:, :) :: group_sizes INTEGER, DIMENSION(2) :: npdims INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_dist_a, col_dist_b, col_dist_c, & row_dist_a, row_dist_b, row_dist_c, & sizes_k, sizes_m, sizes_n LOGICAL :: pgiven TYPE(dbcsr_distribution_obj) :: dist_a, dist_b, dist_c TYPE(dbcsr_mp_obj) :: mp_env TYPE(dbcsr_type), TARGET :: matrix_a, matrix_b, matrix_c TYPE(mp_comm_type) :: cart_group ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) ! Create the row/column block sizes. IF (ASSOCIATED(bs_m)) THEN bmin = MINVAL(bs_m(2::2)) bmax = MAXVAL(bs_m(2::2)) CALL dbcsr_make_random_block_sizes(sizes_m, matrix_sizes(1), bs_m) ELSE CALL dbcsr_make_random_block_sizes(sizes_m, matrix_sizes(1), (/1, 13, 2, 5/)) bmin = 5; bmax = 13 END IF IF (ASSOCIATED(bs_n)) THEN bmin = MIN(bmin, MINVAL(bs_n(2::2))) bmax = MAX(bmax, MAXVAL(bs_n(2::2))) CALL dbcsr_make_random_block_sizes(sizes_n, matrix_sizes(2), bs_n) ELSE CALL dbcsr_make_random_block_sizes(sizes_n, matrix_sizes(2), (/1, 13, 2, 5/)) bmin = MIN(bmin, 5); bmax = MAX(bmax, 13) END IF IF (ASSOCIATED(bs_k)) THEN bmin = MIN(bmin, MINVAL(bs_k(2::2))) bmax = MAX(bmax, MAXVAL(bs_k(2::2))) CALL dbcsr_make_random_block_sizes(sizes_k, matrix_sizes(3), bs_k) ELSE CALL dbcsr_make_random_block_sizes(sizes_k, matrix_sizes(3), (/1, 13, 2, 5/)) bmin = MIN(bmin, 5); bmax = MAX(bmax, 13) END IF ! ! Create dist ! Create the random matrices. CALL dbcsr_mp_make_env(mp_env, cart_group, mp_group) npdims(1) = dbcsr_mp_nprows(mp_env) npdims(2) = dbcsr_mp_npcols(mp_env) CALL dbcsr_dist_bin(row_dist_c, SIZE(sizes_m), npdims(1), & sizes_m) CALL dbcsr_dist_bin(col_dist_c, SIZE(sizes_n), npdims(2), & sizes_n) CALL dbcsr_distribution_new(dist_c, mp_env, row_dist_c, col_dist_c) CALL dbcsr_make_random_matrix(matrix_c, sizes_m, sizes_n, "Matrix C", & REAL(sparsities(3), real_8), & mp_group, data_type=data_type, dist=dist_c) CALL dbcsr_distribution_release(dist_c) IF (trs(1)) THEN CALL dbcsr_dist_bin(row_dist_a, SIZE(sizes_k), npdims(1), & sizes_k) CALL dbcsr_dist_bin(col_dist_a, SIZE(sizes_m), npdims(2), & sizes_m) CALL dbcsr_distribution_new(dist_a, mp_env, row_dist_a, col_dist_a) CALL dbcsr_make_random_matrix(matrix_a, sizes_k, sizes_m, "Matrix A", & REAL(sparsities(1), real_8), & mp_group, data_type=data_type, dist=dist_a) DEALLOCATE (row_dist_a, col_dist_a) ELSE CALL dbcsr_dist_bin(col_dist_a, SIZE(sizes_k), npdims(2), & sizes_k) CALL dbcsr_distribution_new(dist_a, mp_env, row_dist_c, col_dist_a) CALL dbcsr_make_random_matrix(matrix_a, sizes_m, sizes_k, "Matrix A", & REAL(sparsities(1), real_8), & mp_group, data_type=data_type, dist=dist_a) DEALLOCATE (col_dist_a) END IF CALL dbcsr_distribution_release(dist_a) IF (trs(2)) THEN CALL dbcsr_dist_bin(row_dist_b, SIZE(sizes_n), npdims(1), & sizes_n) CALL dbcsr_dist_bin(col_dist_b, SIZE(sizes_k), npdims(2), & sizes_k) CALL dbcsr_distribution_new(dist_b, mp_env, row_dist_b, col_dist_b) CALL dbcsr_make_random_matrix(matrix_b, sizes_n, sizes_k, "Matrix B", & REAL(sparsities(2), real_8), & mp_group, data_type=data_type, dist=dist_b) DEALLOCATE (row_dist_b, col_dist_b) ELSE CALL dbcsr_dist_bin(row_dist_b, SIZE(sizes_k), npdims(1), & sizes_k) CALL dbcsr_distribution_new(dist_b, mp_env, row_dist_b, col_dist_c) CALL dbcsr_make_random_matrix(matrix_b, sizes_k, sizes_n, "Matrix B", & REAL(sparsities(2), real_8), & mp_group, data_type=data_type, dist=dist_b) DEALLOCATE (row_dist_b) END IF CALL dbcsr_mp_release(mp_env) CALL dbcsr_distribution_release(dist_b) DEALLOCATE (row_dist_c, col_dist_c) DEALLOCATE (sizes_m, sizes_n, sizes_k) ! Prepare test parameters IF (io_unit .GT. 0) THEN WRITE (io_unit, fmt_desc) "Testing with sizes", matrix_sizes(1:3), & "min/max block sizes", bmin, bmax, "transposed?", trs(1:2) END IF CALL mp_environ(numnodes, mynode, mp_group) pgiven = ASSOCIATED(nproc) IF (pgiven) pgiven = nproc(1) .NE. 0 IF (pgiven) THEN ALLOCATE (group_sizes(SIZE(nproc), 2)) group_sizes(:, 1) = nproc(:) group_sizes(:, 2) = 0 ELSE !ALLOCATE (group_sizes (numnodes, 2)) !DO test = numnodes, 1, -1 ! group_sizes(1+numnodes-test, 1:2) = (/ test, 0 /) !ENDDO ALLOCATE (group_sizes(1, 2)) group_sizes(1, 1:2) = (/numnodes, 0/) END IF t_a = 'N'; IF (trs(1)) t_a = 'T' t_b = 'N'; IF (trs(2)) t_b = 'T' SELECT CASE (test_type) CASE (dbcsr_test_mm) CALL test_multiplies_multiproc(group_sizes, & matrix_a, matrix_b, matrix_c, t_a, t_b, & dbcsr_scalar(REAL(alpha, real_8)), dbcsr_scalar(REAL(beta, real_8)), & n_loops=n_loops, eps=eps, & io_unit=io_unit, always_checksum=always_checksum, & retain_sparsity=retain_sparsity) CASE (dbcsr_test_binary_io) CALL test_binary_io(matrix_a, io_unit) END SELECT CALL dbcsr_release(matrix_a) CALL dbcsr_release(matrix_b) CALL dbcsr_release(matrix_c) CALL mp_comm_free(cart_group) CALL timestop(error_handle) END SUBROUTINE dbcsr_run_tests SUBROUTINE test_binary_io(matrix_a, io_unit) !! dumps and retrieves a dbcsr matrix, and checks a checksum TYPE(dbcsr_type) :: matrix_a !! matrix to be written INTEGER :: io_unit !! unit for status updates CHARACTER(LEN=100) :: file_name REAL(kind=real_8) :: norm, post, pre TYPE(dbcsr_type) :: matrix_a_read file_name = "test_dbcsr_binary_io.dat" pre = dbcsr_checksum(matrix_a, pos=.TRUE.) CALL dbcsr_binary_write(matrix_a, file_name) ! needs a new matrix, reading into matrix_a does not work CALL dbcsr_binary_read(file_name, distribution=dbcsr_distribution(matrix_a), & matrix_new=matrix_a_read) post = dbcsr_checksum(matrix_a_read, pos=.TRUE.) CALL dbcsr_add(matrix_a_read, matrix_a, -1.0_dp, 1.0_dp) norm = dbcsr_frobenius_norm(matrix_a_read) IF (io_unit > 0) THEN WRITE (io_unit, *) "checksums", pre, post WRITE (io_unit, *) "difference norm", norm END IF IF (norm /= 0.0_dp) & DBCSR_ABORT("bug in binary io") CALL dbcsr_release(matrix_a_read) END SUBROUTINE test_binary_io SUBROUTINE test_multiplies_multiproc(group_sizes, & matrix_a, matrix_b, matrix_c, & transa, transb, alpha, beta, limits, retain_sparsity, & n_loops, eps, & io_unit, always_checksum) !! Performs a variety of matrix multiplies of same matrices on different !! processor grids INTEGER, DIMENSION(:, :) :: group_sizes !! array of (sub) communicator sizes to test (2-D) TYPE(dbcsr_type), INTENT(in) :: matrix_a, matrix_b, matrix_c !! matrices to multiply !! matrices to multiply !! matrices to multiply CHARACTER, INTENT(in) :: transa, transb TYPE(dbcsr_scalar_type), INTENT(in) :: alpha, beta INTEGER, DIMENSION(6), INTENT(in), OPTIONAL :: limits LOGICAL, INTENT(in), OPTIONAL :: retain_sparsity INTEGER, INTENT(IN) :: n_loops REAL(kind=dp), INTENT(in) :: eps INTEGER, INTENT(IN) :: io_unit !! which unit to write to, if not negative LOGICAL :: always_checksum CHARACTER(len=*), PARAMETER :: routineN = 'test_multiplies_multiproc' INTEGER :: error_handle, & loop_iter, mynode, numnodes, test INTEGER(kind=int_8) :: flop, flop_sum INTEGER, DIMENSION(2) :: npdims INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_dist_a, col_dist_b, col_dist_c, & row_dist_a, row_dist_b, row_dist_c LOGICAL :: i_am_alive REAL(kind=real_8) :: cs, cs_pos, flops_all, t1, t2 TYPE(dbcsr_distribution_obj) :: dist_a, dist_b, dist_c TYPE(dbcsr_mp_obj) :: mp_env TYPE(dbcsr_type) :: m_a, m_b, m_c, m_c_reserve TYPE(mp_comm_type) :: cart_group, group ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) IF (SIZE(group_sizes, 2) /= 2) & DBCSR_ABORT("second dimension of group_sizes must be 2") p_sizes: DO test = 1, SIZE(group_sizes, 1) t2 = 0.0_real_8 flop_sum = 0 npdims(1:2) = group_sizes(test, 1:2) numnodes = npdims(1)*npdims(2) group = dbcsr_mp_group(dbcsr_distribution_mp( & dbcsr_distribution(matrix_c))) IF (numnodes .EQ. 0) THEN CALL dbcsr_mp_make_env(mp_env, cart_group, group, nprocs=MAXVAL(npdims)) ELSE CALL dbcsr_mp_make_env(mp_env, cart_group, group, pgrid_dims=npdims) END IF IF (numnodes < 0) & DBCSR_ABORT("Cartesian sides must be greater or equal to 0") i_am_alive = dbcsr_mp_active(mp_env) alive: IF (i_am_alive) THEN npdims(1) = dbcsr_mp_nprows(mp_env) npdims(2) = dbcsr_mp_npcols(mp_env) group = dbcsr_mp_group(mp_env) CALL mp_environ(numnodes, mynode, group) ! Row & column distributions CALL dbcsr_dist_bin(row_dist_a, & dbcsr_nblkrows_total(matrix_a), npdims(1), & dbcsr_row_block_sizes(matrix_a)) CALL dbcsr_dist_bin(col_dist_a, & dbcsr_nblkcols_total(matrix_a), npdims(2), & dbcsr_col_block_sizes(matrix_a)) CALL dbcsr_dist_bin(row_dist_b, & dbcsr_nblkrows_total(matrix_b), npdims(1), & dbcsr_row_block_sizes(matrix_b)) CALL dbcsr_dist_bin(col_dist_b, & dbcsr_nblkcols_total(matrix_b), npdims(2), & dbcsr_col_block_sizes(matrix_b)) CALL dbcsr_dist_bin(row_dist_c, & dbcsr_nblkrows_total(matrix_c), npdims(1), & dbcsr_row_block_sizes(matrix_c)) CALL dbcsr_dist_bin(col_dist_c, & dbcsr_nblkcols_total(matrix_c), npdims(2), & dbcsr_col_block_sizes(matrix_c)) CALL dbcsr_distribution_new(dist_a, & mp_env, row_dist_a, col_dist_a, reuse_arrays=.TRUE.) CALL dbcsr_distribution_new(dist_b, & mp_env, row_dist_b, col_dist_b, reuse_arrays=.TRUE.) CALL dbcsr_distribution_new(dist_c, & mp_env, row_dist_c, col_dist_c, reuse_arrays=.TRUE.) ! Redistribute the matrices ! A CALL dbcsr_create(m_a, "Test for "//TRIM(dbcsr_name(matrix_a)), & dist_a, dbcsr_type_no_symmetry, & row_blk_size_obj=matrix_a%row_blk_size, & col_blk_size_obj=matrix_a%col_blk_size, & data_type=dbcsr_get_data_type(matrix_a)) CALL dbcsr_distribution_release(dist_a) CALL dbcsr_redistribute(matrix_a, m_a) ! B CALL dbcsr_create(m_b, "Test for "//TRIM(dbcsr_name(matrix_b)), & dist_b, dbcsr_type_no_symmetry, & row_blk_size_obj=matrix_b%row_blk_size, & col_blk_size_obj=matrix_b%col_blk_size, & data_type=dbcsr_get_data_type(matrix_b)) CALL dbcsr_distribution_release(dist_b) CALL dbcsr_redistribute(matrix_b, m_b) ! C CALL dbcsr_create(m_c, "Test for "//TRIM(dbcsr_name(matrix_c)), & dist_c, dbcsr_type_no_symmetry, & row_blk_size_obj=matrix_c%row_blk_size, & col_blk_size_obj=matrix_c%col_blk_size, & data_type=dbcsr_get_data_type(matrix_c)) CALL dbcsr_distribution_release(dist_c) CALL dbcsr_redistribute(matrix_c, m_c) CALL dbcsr_copy(m_c_reserve, m_c) ! Perform multiply loops: DO loop_iter = 1, n_loops CALL dbcsr_release(m_c) CALL dbcsr_copy(m_c, m_c_reserve) CALL mp_sync(group) t1 = -m_walltime() IF (PRESENT(limits)) THEN IF (eps .LE. -0.0_dp) THEN CALL dbcsr_multiply(transa, transb, alpha, & m_a, m_b, beta, m_c, & first_row=limits(1), & last_row=limits(2), & first_column=limits(3), & last_column=limits(4), & first_k=limits(5), & last_k=limits(6), & retain_sparsity=retain_sparsity, flop=flop) ELSE CALL dbcsr_multiply(transa, transb, alpha, & m_a, m_b, beta, m_c, & first_row=limits(1), & last_row=limits(2), & first_column=limits(3), & last_column=limits(4), & first_k=limits(5), & last_k=limits(6), & retain_sparsity=retain_sparsity, flop=flop, & filter_eps=eps) END IF ELSE IF (eps .LE. -0.0_dp) THEN CALL dbcsr_multiply(transa, transb, alpha, & m_a, m_b, beta, m_c, & retain_sparsity=retain_sparsity, flop=flop) ELSE CALL dbcsr_multiply(transa, transb, alpha, & m_a, m_b, beta, m_c, & retain_sparsity=retain_sparsity, flop=flop, & filter_eps=eps) END IF END IF t1 = t1 + m_walltime() t2 = t2 + t1 flop_sum = flop_sum + flop ! CALL mp_max(t1, group) CALL mp_sum(flop, group) t1 = MAX(t1, EPSILON(t1)) flops_all = REAL(flop, KIND=real_8)/t1/numnodes/(1024*1024) IF (io_unit .GT. 0) THEN WRITE (io_unit, '(A,I5,A,I5,A,F12.3,A,I9,A)') & " loop ", loop_iter, " with ", numnodes, " MPI ranks: using ", t1, "s ", INT(flops_all), " Mflops/rank" CALL m_flush(io_unit) END IF IF (loop_iter .EQ. n_loops .OR. always_checksum) THEN cs = dbcsr_checksum(m_c) cs_pos = dbcsr_checksum(m_c, pos=.TRUE.) IF (io_unit > 0) THEN WRITE (io_unit, *) "Final checksums", cs, cs_pos END IF END IF END DO loops ! Release CALL dbcsr_mp_release(mp_env) CALL dbcsr_release(m_a) CALL dbcsr_release(m_b) CALL dbcsr_release(m_c) CALL dbcsr_release(m_c_reserve) END IF alive CALL mp_comm_free(cart_group) END DO p_sizes CALL timestop(error_handle) END SUBROUTINE test_multiplies_multiproc END MODULE dbcsr_tests ================================================ FILE: src/ops/dbcsr_transformations.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_transformations !! DBCSR transformations USE dbcsr_array_types, ONLY: array_data, & array_hold, & array_i1d_obj, & array_release USE dbcsr_block_access, ONLY: dbcsr_get_block_p, & dbcsr_put_block USE dbcsr_block_operations, ONLY: dbcsr_block_conjg, & dbcsr_block_partial_copy, & dbcsr_block_real_neg, & dbcsr_block_transpose, & dbcsr_data_clear, & dbcsr_data_copy, & dbcsr_data_set USE dbcsr_data_methods, ONLY: & dbcsr_data_clear_pointer, dbcsr_data_ensure_size, dbcsr_data_get_memory_type, & dbcsr_data_get_size, dbcsr_data_get_size_referenced, dbcsr_data_get_type, dbcsr_data_hold, & dbcsr_data_init, dbcsr_data_new, dbcsr_data_release, dbcsr_data_set_pointer, & dbcsr_data_set_size_referenced, dbcsr_get_data, dbcsr_type_1d_to_2d USE dbcsr_data_operations, ONLY: dbcsr_copy_sort_data, & dbcsr_switch_data_area USE dbcsr_dist_methods, ONLY: & dbcsr_distribution_col_dist, dbcsr_distribution_hold, dbcsr_distribution_local_cols, & dbcsr_distribution_local_rows, dbcsr_distribution_mp, dbcsr_distribution_ncols, & dbcsr_distribution_nlocal_cols, dbcsr_distribution_nlocal_rows, dbcsr_distribution_nrows, & dbcsr_distribution_release, dbcsr_distribution_row_dist USE dbcsr_dist_operations, ONLY: dbcsr_get_local_cols, & dbcsr_get_local_rows, & dbcsr_get_stored_coordinates, & dbcsr_reblocking_targets, & dbcsr_transpose_dims, & dbcsr_transpose_distribution USE dbcsr_dist_util, ONLY: convert_sizes_to_offsets, & dbcsr_checksum, & dbcsr_pack_meta, & dbcsr_unpack_meta, & dbcsr_verify_matrix, & get_internal_offsets, & global_offsets_to_local, & nfull_elements USE dbcsr_index_operations, ONLY: dbcsr_addto_index_array, & dbcsr_clearfrom_index_array, & dbcsr_repoint_index, & make_dense_index, & make_undense_index, & transpose_index_local USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left, & dbcsr_iterator_next_block, & dbcsr_iterator_start, & dbcsr_iterator_stop USE dbcsr_kinds, ONLY: dp, & int_8, & sp USE dbcsr_methods, ONLY: & dbcsr_col_block_sizes, dbcsr_distribution, dbcsr_get_data_type, dbcsr_get_matrix_type, & dbcsr_has_symmetry, dbcsr_nblkcols_total, dbcsr_nblkrows_total, dbcsr_nfullcols_total, & dbcsr_nfullrows_total, dbcsr_release, dbcsr_row_block_sizes, dbcsr_valid_index USE dbcsr_mp_methods, ONLY: & dbcsr_mp_grid_remove, dbcsr_mp_grid_setup, dbcsr_mp_group, dbcsr_mp_has_subgroups, & dbcsr_mp_my_col_group, dbcsr_mp_my_row_group, dbcsr_mp_mynode, dbcsr_mp_mypcol, & dbcsr_mp_myprow, dbcsr_mp_npcols, dbcsr_mp_nprows, dbcsr_mp_numnodes, dbcsr_mp_pgrid USE dbcsr_mp_operations, ONLY: dbcsr_allgatherv, & hybrid_alltoall_any, & hybrid_alltoall_c1, & hybrid_alltoall_d1, & hybrid_alltoall_i1, & hybrid_alltoall_s1, & hybrid_alltoall_z1 USE dbcsr_mpiwrap, ONLY: mp_allgather, & mp_alltoall, mp_comm_type USE dbcsr_operations, ONLY: dbcsr_set USE dbcsr_ptr_util, ONLY: pointer_view USE dbcsr_types, ONLY: & dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_iterator, dbcsr_meta_size, dbcsr_mp_obj, & dbcsr_repl_col, dbcsr_repl_full, dbcsr_repl_none, dbcsr_repl_row, dbcsr_slot_blk_p, & dbcsr_slot_col_i, dbcsr_slot_home_pcol, dbcsr_slot_home_prow, dbcsr_slot_nblks, & dbcsr_slot_nze, dbcsr_slot_row_p, dbcsr_type, dbcsr_type_complex_4, dbcsr_type_complex_8, & dbcsr_type_no_symmetry, dbcsr_type_real_4, dbcsr_type_real_8 USE dbcsr_work_operations, ONLY: dbcsr_create, & dbcsr_finalize, & dbcsr_work_create #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_transformations' LOGICAL, PARAMETER, PRIVATE :: careful_mod = .FALSE. PUBLIC :: dbcsr_desymmetrize_deep, & dbcsr_new_transposed, & dbcsr_transposed, & dbcsr_complete_redistribute, & dbcsr_redistribute, dbcsr_make_untransposed_blocks PUBLIC :: dbcsr_replicate_all, dbcsr_distribute, dbcsr_datablock_redistribute PUBLIC :: dbcsr_make_dense, dbcsr_make_undense, dbcsr_make_dense_low CONTAINS SUBROUTINE dbcsr_new_transposed(transposed, normal, shallow_data_copy, & transpose_data, transpose_distribution, transpose_index, & use_distribution, redistribute) !! Transposes a DBCSR matrix. !! !! Distribution options !! By default the distribution is transposed. If transpose_distribution !! is false, then an undetermined distribution is created that is !! compatible with the same process grid. TYPE(dbcsr_type), INTENT(INOUT) :: transposed !! transposed DBCSR matrix TYPE(dbcsr_type), INTENT(IN) :: normal !! input DBCSR matrix LOGICAL, INTENT(IN), OPTIONAL :: shallow_data_copy, transpose_data, & transpose_distribution, transpose_index !! only shallow data_copy; default is no; if set, the transpose_data option is ignored !! transpose data blocks, default is True !! transpose the distribution from the input matrix, default is True !! transpose the index (default=yes) or turn it into BCSC TYPE(dbcsr_distribution_obj), INTENT(IN), OPTIONAL :: use_distribution !! use this distribution LOGICAL, INTENT(IN), OPTIONAL :: redistribute !! redistributes the matrix; default is .TRUE. unless shallow or transpose_distribution are set. CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_new_transposed' LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: handle, stat INTEGER, ALLOCATABLE, DIMENSION(:) :: blk_p LOGICAL :: redist, shallow, tr_blocks, tr_dist, & tr_index TYPE(dbcsr_distribution_obj) :: new_dist TYPE(dbcsr_type) :: t2 ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (.NOT. dbcsr_valid_index(normal)) & DBCSR_ABORT("Matrix does not exist.") ! Internalize options shallow = .FALSE. IF (PRESENT(shallow_data_copy)) shallow = shallow_data_copy tr_blocks = .TRUE. IF (PRESENT(transpose_data)) tr_blocks = transpose_data tr_dist = .TRUE. IF (PRESENT(transpose_distribution)) tr_dist = transpose_distribution tr_index = .TRUE. IF (PRESENT(transpose_index)) tr_index = transpose_index ! Prepare the distribution for the transposed matrix IF (PRESENT(use_distribution)) THEN IF (dbcsr_distribution_nrows(use_distribution) /= dbcsr_distribution_ncols(normal%dist)) & DBCSR_ABORT("Given distribution must be compatible with the current distribution") IF (dbcsr_distribution_ncols(use_distribution) /= dbcsr_distribution_nrows(normal%dist)) & DBCSR_ABORT("Given distribution must be compatible with the current distribution") new_dist = use_distribution CALL dbcsr_distribution_hold(new_dist) ELSE IF (tr_dist) THEN CALL dbcsr_transpose_distribution(new_dist, normal%dist) ELSE CALL dbcsr_transpose_dims(new_dist, normal%dist) END IF END IF ! Create the transposed matrix CALL dbcsr_create(transposed, name="transposed "//TRIM(normal%name), & template=normal, & dist=new_dist, & row_blk_size_obj=normal%col_blk_size, & col_blk_size_obj=normal%row_blk_size, & matrix_type=dbcsr_get_matrix_type(normal), & max_rbs=normal%max_cbs, & max_cbs=normal%max_rbs, & row_blk_offset=normal%col_blk_offset, & col_blk_offset=normal%row_blk_offset) CALL dbcsr_distribution_release(new_dist) ! Reserve the space for the new indices. IF (tr_index) THEN CALL dbcsr_addto_index_array(transposed, dbcsr_slot_row_p, & reservation=transposed%nblkrows_total + 1, extra=transposed%nblks*2) ELSE CALL dbcsr_addto_index_array(transposed, dbcsr_slot_row_p, & reservation=normal%nblkrows_total + 1, extra=transposed%nblks*2) END IF CALL dbcsr_addto_index_array(transposed, dbcsr_slot_col_i, & reservation=normal%nblks) CALL dbcsr_addto_index_array(transposed, dbcsr_slot_blk_p, & reservation=normal%nblks) CALL dbcsr_repoint_index(transposed) IF (.NOT. shallow) THEN CALL dbcsr_data_ensure_size(transposed%data_area, & dbcsr_data_get_size_referenced(normal%data_area), & nocopy=.TRUE.) END IF ! transposed%nblks = normal%nblks transposed%nze = normal%nze transposed%index(dbcsr_slot_nblks) = normal%nblks transposed%index(dbcsr_slot_nze) = normal%nze ! Transpose the local index. ALLOCATE (blk_p(normal%nblks), stat=stat) IF (stat /= 0) DBCSR_ABORT("blk_p") IF (tr_index) THEN CALL transpose_index_local(transposed%row_p, transposed%col_i, & normal%row_p, normal%col_i, blk_p, normal%blk_p) IF (dbg) THEN WRITE (*, *) 'orig. row_p', normal%row_p WRITE (*, *) 'orig. col_i', normal%col_i WRITE (*, *) 'orig. blk_p', normal%blk_p WRITE (*, *) 'new . row_p', transposed%row_p WRITE (*, *) 'new . col_i', transposed%col_i WRITE (*, *) 'new . blk_p', blk_p!transposed%blk_p END IF ELSE transposed%row_p(:) = normal%row_p(:) transposed%col_i(:) = normal%col_i(:) blk_p(:) = normal%blk_p(:) !transposed%transpose = .TRUE. END IF ! Copy the data IF (shallow) THEN CALL dbcsr_switch_data_area(transposed, normal%data_area) transposed%blk_p(1:transposed%nblks) = & -blk_p(1:transposed%nblks) ELSE CALL dbcsr_copy_sort_data(transposed%blk_p, blk_p, transposed%row_p, & transposed%col_i, array_data(transposed%row_blk_size), & array_data(transposed%col_blk_size), & transposed%data_area, normal%data_area, & mark_transposed=.not. tr_blocks, & transpose_blocks=tr_blocks) END IF transposed%valid = .TRUE. !CALL dbcsr_copy_sort_data (transposed%blk_p, blk_p, transposed%row_p,& ! transposed%col_i, array_data (transposed%row_blk_size),& ! array_data (transposed%col_blk_size),& ! transposed%data_area, normal%data_area,& ! transpose_blocks=.TRUE.) ! 1315 FORMAT(I5, 1X, I5, 1X, I5, 1X, I5, 1X, I5, 1X, I5, 1X, I5, 1X, I5, 1X, I5, 1X, I5) IF (dbg) THEN WRITE (*, *) 'new FINAL index' WRITE (*, 1315) transposed%row_p WRITE (*, 1315) transposed%col_i WRITE (*, 1315) transposed%blk_p END IF ! IF (tr_index) DEALLOCATE (blk_p) ! IF (PRESENT(redistribute)) THEN redist = redistribute ELSE redist = .NOT. tr_dist .AND. .NOT. shallow END IF IF (redist) THEN !write (*,*)routineN//" redistributing" CALL dbcsr_create(t2, template=transposed) CALL dbcsr_redistribute(transposed, t2) CALL dbcsr_release(transposed) transposed = t2 END IF CALL timestop(handle) END SUBROUTINE dbcsr_new_transposed SUBROUTINE dbcsr_transposed(transposed, normal, shallow_data_copy, & !! Transposes a DBCSR matrix, keeping the same distribution transpose_data, transpose_distribution, use_distribution) TYPE(dbcsr_type), INTENT(INOUT) :: transposed TYPE(dbcsr_type), INTENT(IN) :: normal LOGICAL, INTENT(IN), OPTIONAL :: shallow_data_copy, transpose_data, & transpose_distribution TYPE(dbcsr_distribution_obj), INTENT(IN), & OPTIONAL :: use_distribution LOGICAL :: myshallow_data_copy, & mytranspose_distribution TYPE(dbcsr_distribution_obj) :: myuse_distribution ! set some defaults to make usage a bit less painful (fschiff) myshallow_data_copy = .FALSE. myuse_distribution = normal%dist mytranspose_distribution = .FALSE. IF (PRESENT(shallow_data_copy)) myshallow_data_copy = shallow_data_copy IF (PRESENT(use_distribution)) myuse_distribution = use_distribution IF (PRESENT(transpose_distribution)) mytranspose_distribution = transpose_distribution CALL dbcsr_new_transposed(transposed, normal, myshallow_data_copy, & transpose_data, mytranspose_distribution, & use_distribution=myuse_distribution) END SUBROUTINE dbcsr_transposed SUBROUTINE dbcsr_desymmetrize_deep(sm, desm, untransposed_data) !! Duplicates data in symmetric matrix to make it normal (w.r.t. data !! structure. Can handle symmetric/antisymmetric/hermitian/skewhermitian !! matrices TYPE(dbcsr_type), INTENT(IN) :: sm !! input symmetric matrix TYPE(dbcsr_type), INTENT(INOUT) :: desm !! desymmetrized matrix LOGICAL, INTENT(IN), OPTIONAL :: untransposed_data CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_desymmetrize_deep' INTEGER, PARAMETER :: idata = 2, imeta = 1, metalen = 3 INTEGER :: blk, blk_l, blk_p, blk_ps, blks, col, col_size, dst_p, handle, & nsymmetries, numproc, nze, pcol, prow, row, row_size, src_p, stored_col, stored_row, & symmetry_i INTEGER, ALLOCATABLE, DIMENSION(:) :: rd_disp, recv_meta, rm_disp, sd_disp, & sdp, send_meta, sm_disp, smp INTEGER, ALLOCATABLE, DIMENSION(:, :) :: recv_count, send_count, & total_recv_count, total_send_count INTEGER, DIMENSION(:), POINTER :: col_blk_size, col_dist, row_blk_size, & row_dist INTEGER, DIMENSION(:, :), POINTER :: blacs2mpi LOGICAL :: make_untr, tr TYPE(dbcsr_data_obj) :: recv_data, send_data TYPE(dbcsr_distribution_obj) :: target_dist TYPE(dbcsr_iterator) :: iter TYPE(dbcsr_mp_obj) :: mp_obj TYPE(mp_comm_type) :: mp_group ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (.NOT. dbcsr_valid_index(sm)) & DBCSR_ABORT("Input matrix is invalid.") IF (dbcsr_valid_index(desm)) THEN CALL dbcsr_release(desm) END IF CALL dbcsr_create(desm, sm, matrix_type="N") IF (PRESENT(untransposed_data)) THEN make_untr = untransposed_data ELSE make_untr = .FALSE. END IF nsymmetries = 1 IF (sm%symmetry) THEN nsymmetries = 2 END IF row_blk_size => array_data(sm%row_blk_size) col_blk_size => array_data(sm%col_blk_size) target_dist = sm%dist row_dist => dbcsr_distribution_row_dist(target_dist) col_dist => dbcsr_distribution_col_dist(target_dist) mp_obj = dbcsr_distribution_mp(target_dist) blacs2mpi => dbcsr_mp_pgrid(mp_obj) numproc = dbcsr_mp_numnodes(mp_obj) mp_group = dbcsr_mp_group(mp_obj) ! ALLOCATE (send_count(2, 0:numproc - 1)) ALLOCATE (recv_count(2, 0:numproc - 1)) ALLOCATE (total_send_count(2, 0:numproc - 1)) ALLOCATE (total_recv_count(2, 0:numproc - 1)) ALLOCATE (sdp(0:numproc - 1)) ALLOCATE (sd_disp(0:numproc - 1)) ALLOCATE (smp(0:numproc - 1)) ALLOCATE (sm_disp(0:numproc - 1)) ALLOCATE (rd_disp(0:numproc - 1)) ALLOCATE (rm_disp(0:numproc - 1)) ! desm%negate_real = sm%negate_real desm%negate_imaginary = sm%negate_imaginary ! Count initial sizes for sending. send_count(:, :) = 0 CALL dbcsr_iterator_start(iter, sm) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, blk, & row_size=row_size, col_size=col_size) DO symmetry_i = 1, nsymmetries IF (symmetry_i .EQ. 1) THEN stored_row = row; stored_col = col ELSE IF (row .EQ. col) CYCLE stored_row = col; stored_col = row END IF ! Where do we send this block? prow = row_dist(stored_row) pcol = col_dist(stored_col) dst_p = blacs2mpi(prow, pcol) nze = row_size*col_size send_count(imeta, dst_p) = send_count(imeta, dst_p) + 1 send_count(idata, dst_p) = send_count(idata, dst_p) + nze END DO ! symmetry_i END DO ! iter CALL dbcsr_iterator_stop(iter) ! CALL mp_alltoall(send_count, recv_count, 2, mp_group) ! ! Allocate data structures needed for data exchange. CALL dbcsr_data_init(recv_data) CALL dbcsr_data_new(recv_data, dbcsr_get_data_type(sm), & SUM(recv_count(idata, :))) ALLOCATE (recv_meta(metalen*SUM(recv_count(imeta, :)))) CALL dbcsr_data_init(send_data) CALL dbcsr_data_new(send_data, dbcsr_get_data_type(sm), & SUM(send_count(idata, :))) ALLOCATE (send_meta(metalen*SUM(send_count(imeta, :)))) ! ! Fill in the meta data structures and copy the data. DO dst_p = 0, numproc - 1 total_send_count(imeta, dst_p) = send_count(imeta, dst_p) total_send_count(idata, dst_p) = send_count(idata, dst_p) total_recv_count(imeta, dst_p) = recv_count(imeta, dst_p) total_recv_count(idata, dst_p) = recv_count(idata, dst_p) END DO sd_disp = -1; sm_disp = -1 rd_disp = -1; rm_disp = -1 sd_disp(0) = 1; sm_disp(0) = 1 rd_disp(0) = 1; rm_disp(0) = 1 DO dst_p = 1, numproc - 1 sm_disp(dst_p) = sm_disp(dst_p - 1) & + metalen*total_send_count(imeta, dst_p - 1) sd_disp(dst_p) = sd_disp(dst_p - 1) & + total_send_count(idata, dst_p - 1) rm_disp(dst_p) = rm_disp(dst_p - 1) & + metalen*total_recv_count(imeta, dst_p - 1) rd_disp(dst_p) = rd_disp(dst_p - 1) & + total_recv_count(idata, dst_p - 1) END DO sdp(:) = sd_disp smp(:) = sm_disp ! CALL dbcsr_iterator_start(iter, sm) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, blk, blk_p=blk_p, & row_size=row_size, col_size=col_size) DO symmetry_i = 1, nsymmetries IF (symmetry_i .EQ. 1) THEN stored_row = row; stored_col = col; tr = .FALSE. ELSE IF (row .EQ. col) CYCLE stored_row = col; stored_col = row; tr = .TRUE. END IF ! Where do we send this block? prow = row_dist(stored_row) pcol = col_dist(stored_col) dst_p = blacs2mpi(prow, pcol) nze = row_size*col_size send_meta(smp(dst_p)) = stored_row send_meta(smp(dst_p) + 1) = stored_col send_meta(smp(dst_p) + 2) = sdp(dst_p) - sd_disp(dst_p) + 1 IF (make_untr) THEN CALL dbcsr_block_partial_copy(dst=send_data, & dst_rs=row_size, dst_cs=col_size, & dst_tr=symmetry_i .GT. 1, & dst_r_lb=1, dst_c_lb=1, dst_offset=sdp(dst_p) - 1, & nrow=row_size, ncol=col_size, & src=sm%data_area, & src_rs=row_size, src_cs=col_size, & src_tr=blk_p .LT. 0, & src_r_lb=1, src_c_lb=1, & src_offset=ABS(blk_p) - 1) IF (tr) THEN IF (sm%negate_real) THEN CALL dbcsr_block_real_neg(dst=send_data, row_size=row_size, & col_size=col_size, lb=sdp(dst_p)) END IF IF (sm%negate_imaginary) & CALL dbcsr_block_conjg(dst=send_data, row_size=row_size, & col_size=col_size, lb=sdp(dst_p)) END IF ELSE CALL dbcsr_data_copy(send_data, (/sdp(dst_p)/), (/nze/), & sm%data_area, (/ABS(blk_p)/), (/nze/)) IF (tr) & send_meta(smp(dst_p) + 2) = -send_meta(smp(dst_p) + 2) END IF smp(dst_p) = smp(dst_p) + metalen sdp(dst_p) = sdp(dst_p) + nze END DO ! symmetry_i END DO ! iter CALL dbcsr_iterator_stop(iter) ! Exchange the data and metadata structures. CALL hybrid_alltoall_any(send_data, & total_send_count(idata, :), sd_disp(:) - 1, & recv_data, & total_recv_count(idata, :), rd_disp(:) - 1, mp_obj) CALL mp_alltoall(send_meta(:), metalen*total_send_count(imeta, :), sm_disp(:) - 1, & recv_meta(:), metalen*total_recv_count(imeta, :), rm_disp(:) - 1, & mp_group) ! Now fill in the data. CALL dbcsr_work_create(desm, & SUM(recv_count(imeta, :)), & SUM(recv_count(idata, :)), n=1, & work_mutable=.FALSE.) ! Switch data data area of the work matrix with the received data ! (avoids copying). CALL dbcsr_data_hold(recv_data) CALL dbcsr_data_release(desm%wms(1)%data_area) desm%wms(1)%data_area = recv_data ! blk_ps = 1 blks = 1 ! WRITE(*,*)rm_disp ! WRITE(*,*)recv_count DO src_p = 0, numproc - 1 IF (careful_mod) THEN IF ((blks - 1)*3 /= rm_disp(src_p) - 1) & DBCSR_ABORT("Count mismatch") END IF blks = (rm_disp(src_p) - 1)/metalen + 1 DO blk_l = 1, recv_count(imeta, src_p) stored_row = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1)) stored_col = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 1) blk_p = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 2) desm%wms(1)%row_i(blks) = stored_row desm%wms(1)%col_i(blks) = stored_col desm%wms(1)%blk_p(blks) = SIGN(ABS(blk_p) + (rd_disp(src_p) - 1), blk_p) nze = row_blk_size(ABS(stored_row)) & *col_blk_size(stored_col) blk_ps = blk_ps + nze blks = blks + 1 END DO END DO ! desm%wms(1)%lastblk = blks - 1 desm%wms(1)%datasize = blk_ps - 1 CALL dbcsr_finalize(desm) DEALLOCATE (send_count) DEALLOCATE (recv_count) DEALLOCATE (sdp); DEALLOCATE (sd_disp) DEALLOCATE (smp); DEALLOCATE (sm_disp) DEALLOCATE (rd_disp) DEALLOCATE (rm_disp) CALL dbcsr_data_release(recv_data) DEALLOCATE (recv_meta) CALL dbcsr_data_release(send_data) DEALLOCATE (send_meta) CALL timestop(handle) END SUBROUTINE dbcsr_desymmetrize_deep SUBROUTINE dbcsr_distribute(matrix, fast) !! Distributes a matrix that is currently replicated. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! matrix to replicate LOGICAL, INTENT(in), OPTIONAL :: fast !! change just the index, don't touch the data CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_distribute' COMPLEX(KIND=dp), DIMENSION(:), POINTER, CONTIGUOUS :: c_dp COMPLEX(KIND=sp), DIMENSION(:), POINTER, CONTIGUOUS :: c_sp INTEGER :: blk, col, handle, mynode, nblks, nze, p, & row INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_blk_size, row_blk_size, tmp_index LOGICAL :: mini, tr REAL(KIND=dp), DIMENSION(:), POINTER, CONTIGUOUS :: r_dp REAL(KIND=sp), DIMENSION(:), POINTER, CONTIGUOUS :: r_sp TYPE(dbcsr_data_obj) :: tmp_data TYPE(dbcsr_distribution_obj) :: dist TYPE(dbcsr_iterator) :: iter TYPE(dbcsr_mp_obj) :: mp_obj TYPE(dbcsr_type) :: distributed ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (.NOT. dbcsr_valid_index(matrix)) & DBCSR_ABORT("Matrix not initialized.") IF (matrix%replication_type .EQ. dbcsr_repl_none) & DBCSR_WARN("Distributing a non-replicated matrix makes no sense.") IF (PRESENT(fast)) THEN mini = fast ELSE mini = .FALSE. END IF SELECT CASE (matrix%data_type) CASE (dbcsr_type_real_8) CALL dbcsr_get_data(matrix%data_area, r_dp) CASE (dbcsr_type_real_4) CALL dbcsr_get_data(matrix%data_area, r_sp) DBCSR_ABORT("Only real double precision") CASE (dbcsr_type_complex_8) CALL dbcsr_get_data(matrix%data_area, c_dp) DBCSR_ABORT("Only real double precision") CASE (dbcsr_type_complex_4) CALL dbcsr_get_data(matrix%data_area, c_sp) DBCSR_ABORT("Only real double precision") END SELECT row_blk_size => array_data(matrix%row_blk_size) col_blk_size => array_data(matrix%col_blk_size) dist = dbcsr_distribution(matrix) mp_obj = dbcsr_distribution_mp(dist) mynode = dbcsr_mp_mynode(dbcsr_distribution_mp(dist)) ! IF (mini) THEN ! We just mark the blocks as deleted. CALL dbcsr_iterator_start(iter, matrix) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, r_dp, tr, blk) tr = .FALSE. CALL dbcsr_get_stored_coordinates(matrix, row, col, p) IF (mynode .EQ. p) THEN matrix%blk_p(blk) = 0 END IF END DO CALL dbcsr_iterator_stop(iter) matrix%replication_type = dbcsr_repl_none ELSE CALL dbcsr_create(distributed, name='Distributed '//TRIM(matrix%name), & template=matrix, & matrix_type=dbcsr_type_no_symmetry, & replication_type=dbcsr_repl_none) distributed%replication_type = dbcsr_repl_none ! First count how many blocks are local. nze = 0 nblks = 0 CALL dbcsr_iterator_start(iter, matrix) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, r_dp, tr, blk) tr = .FALSE. CALL dbcsr_get_stored_coordinates(matrix, row, col, p) IF (mynode .EQ. p) THEN nze = nze + row_blk_size(row)*col_blk_size(col) nblks = nblks + 1 END IF END DO CALL dbcsr_iterator_stop(iter) ! Preallocate the array CALL dbcsr_work_create(distributed, nblks_guess=nblks, & sizedata_guess=nze, work_mutable=.FALSE.) ! Now actually do the work CALL dbcsr_iterator_start(iter, matrix) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, r_dp, tr, blk) tr = .FALSE. CALL dbcsr_get_stored_coordinates(matrix, row, col, p) IF (mynode .EQ. p) THEN CALL dbcsr_put_block(distributed, row, col, r_dp, transposed=tr) END IF END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_finalize(distributed) ! Now replace the data and index CALL dbcsr_switch_data_area(matrix, distributed%data_area, & previous_data_area=tmp_data) CALL dbcsr_switch_data_area(distributed, tmp_data) CALL dbcsr_data_release(tmp_data) tmp_index => matrix%index matrix%index => distributed%index distributed%index => tmp_index CALL dbcsr_repoint_index(matrix) matrix%nze = distributed%nze matrix%nblks = distributed%nblks CALL dbcsr_release(distributed) END IF CALL timestop(handle) END SUBROUTINE dbcsr_distribute SUBROUTINE dbcsr_make_untransposed_blocks(matrix) !! Detransposes all blocks in a matrix TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! DBCSR matrix CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_untransposed_blocks' INTEGER :: blk, col, col_size, handle, row, row_size INTEGER, DIMENSION(:), POINTER :: cbs, rbs LOGICAL :: sym_negation, tr TYPE(dbcsr_data_obj) :: block_data TYPE(dbcsr_iterator) :: iter ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) rbs => dbcsr_row_block_sizes(matrix) cbs => dbcsr_col_block_sizes(matrix) sym_negation = matrix%negate_real !$OMP PARALLEL DEFAULT(NONE) PRIVATE(block_data,iter,row,col,tr,blk,row_size,col_size) & !$OMP SHARED(matrix,rbs,cbs,sym_negation) CALL dbcsr_data_init(block_data) CALL dbcsr_data_new(block_data, dbcsr_get_data_type(matrix)) CALL dbcsr_iterator_start(iter, matrix) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, block_data, & transposed=tr, & block_number=blk) IF (tr) THEN row_size = rbs(row) col_size = cbs(col) CALL dbcsr_block_transpose(block_data, col_size, row_size) IF (sym_negation) THEN SELECT CASE (block_data%d%data_type) CASE (dbcsr_type_real_4) block_data%d%r_sp(:) = -block_data%d%r_sp(:) CASE (dbcsr_type_real_8) block_data%d%r_dp(:) = -block_data%d%r_dp(:) CASE (dbcsr_type_complex_4) block_data%d%c_sp(:) = -block_data%d%c_sp(:) CASE (dbcsr_type_complex_8) block_data%d%c_dp(:) = -block_data%d%c_dp(:) END SELECT END IF matrix%blk_p(blk) = -matrix%blk_p(blk) END IF END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(block_data) CALL dbcsr_data_release(block_data) !$OMP END PARALLEL CALL timestop(handle) END SUBROUTINE dbcsr_make_untransposed_blocks SUBROUTINE dbcsr_make_dense(matrix, dense_matrix, dense_dist, & dense_row_sizes, dense_col_sizes, row_map, col_map) !! Makes a dense matrix, inplace. !! @note !! Used for making matrices dense/undense !! @endnote TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix to make dense TYPE(dbcsr_type), INTENT(OUT) :: dense_matrix TYPE(dbcsr_distribution_obj), INTENT(INOUT) :: dense_dist TYPE(array_i1d_obj), INTENT(IN) :: dense_row_sizes, dense_col_sizes, & row_map, col_map CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_dense' LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: handle REAL(kind=dp) :: cs TYPE(array_i1d_obj) :: dense_local_cols, dense_local_rows TYPE(dbcsr_distribution_obj) :: old_distribution ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) CALL dbcsr_create(dense_matrix, template=matrix, & dist=dense_dist, & row_blk_size_obj=dense_row_sizes, & col_blk_size_obj=dense_col_sizes) ! IF (dbg) THEN cs = dbcsr_checksum(matrix) WRITE (*, *) routineN//" prod cs pre", cs END IF old_distribution = dbcsr_distribution(matrix) ! Conversion of global to local offsets for the dense blocks CALL dbcsr_get_local_rows(dense_dist, dense_local_rows, & dense_matrix%index(dbcsr_slot_home_prow)) CALL dbcsr_get_local_cols(dense_dist, dense_local_cols, & dense_matrix%index(dbcsr_slot_home_pcol)) ! CALL dbcsr_make_dense_low(matrix, dense_matrix, & dbcsr_distribution_local_rows(old_distribution), & dbcsr_distribution_local_cols(old_distribution), & array_data(matrix%row_blk_offset), & array_data(matrix%col_blk_offset), & array_data(dense_local_rows), array_data(dense_local_cols), & array_data(dense_matrix%row_blk_offset), & array_data(dense_matrix%col_blk_offset), & array_data(row_map), array_data(col_map), .TRUE., .TRUE.) IF (dbg) THEN cs = dbcsr_checksum(dense_matrix) WRITE (*, *) routineN//" prod cs pst", cs END IF CALL timestop(handle) END SUBROUTINE dbcsr_make_dense SUBROUTINE dbcsr_make_dense_low(und_matrix, dense_matrix, & und_local_rows, und_local_cols, & und_row_blk_offsets, und_col_blk_offsets, & dense_local_rows, dense_local_cols, & dense_row_blk_offsets, dense_col_blk_offsets, & row_map, col_map, join_rows, join_cols) !! Copies a matrix and makes its data dense. !! @note !! the dense_matrix must have been created !! @endnote TYPE(dbcsr_type), INTENT(IN) :: und_matrix !! Original non-dense matrix TYPE(dbcsr_type), INTENT(INOUT) :: dense_matrix !! Dense copy of und_matrix INTEGER, DIMENSION(:), INTENT(IN) :: und_local_rows, und_local_cols, und_row_blk_offsets, & und_col_blk_offsets, dense_local_rows, dense_local_cols, dense_row_blk_offsets, & dense_col_blk_offsets, row_map, col_map !! The process-grid local rows of the non-dense und_matrix !! The process-grid local columns of the non-dense und_matrix !! The block offsets of the rows of the non-dense matrix !! The block offsets of the columns of the non-dense matrix !! The process-grid local rows of the dense matrix !! The process-grid local columns of the dense matrix !! The block offsets of the rows of the dense matrix !! The block offsets of the columns of the dense matrix !! Mapping of non-dense rows to dense rows !! Mapping of non-dense columns to dense columns LOGICAL, INTENT(IN) :: join_rows, join_cols !! Make rows dense !! Make columns dense CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_dense_low' INTEGER :: dense_nblkcols_local, dense_nblkcols_total, dense_nblkrows_local, & dense_nblkrows_total, dense_nlocal_blocks, error_handle, nfullcols, nfullrows, & und_nblkcols_total, und_nblkrows_total INTEGER, ALLOCATABLE, DIMENSION(:) :: col_internal_offsets, dense_local_col_blk_offsets, & dense_local_row_blk_offsets, row_internal_offsets, und_local_col_blk_offsets, & und_local_row_blk_offsets INTEGER, DIMENSION(dbcsr_meta_size) :: meta TYPE(dbcsr_data_obj) :: dense_data, und_data ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) ! nfullrows = nfull_elements(und_row_blk_offsets, und_local_rows) nfullcols = nfull_elements(und_col_blk_offsets, und_local_cols) ! und_nblkrows_total = SIZE(und_row_blk_offsets) - 1 und_nblkcols_total = SIZE(und_col_blk_offsets) - 1 ! ! Find the local data offsets (but indexed by the global ! rows/columns) for the undense data. ALLOCATE (und_local_row_blk_offsets(und_nblkrows_total + 1)) ALLOCATE (und_local_col_blk_offsets(und_nblkcols_total + 1)) CALL global_offsets_to_local( & und_row_blk_offsets, & und_local_rows, & und_local_row_blk_offsets) CALL global_offsets_to_local( & und_col_blk_offsets, & und_local_cols, & und_local_col_blk_offsets) ! dense_nblkrows_total = SIZE(dense_row_blk_offsets) - 1 dense_nblkcols_total = SIZE(dense_col_blk_offsets) - 1 dense_nblkrows_local = SIZE(dense_local_rows) dense_nblkcols_local = SIZE(dense_local_cols) ! ! Find the local data offsets (but indexed by the (dense) global ! rows/columns) for the dense data. ALLOCATE (dense_local_row_blk_offsets(dense_nblkrows_total + 1)) ALLOCATE (dense_local_col_blk_offsets(dense_nblkcols_total + 1)) CALL global_offsets_to_local( & dense_row_blk_offsets, & dense_local_rows, & dense_local_row_blk_offsets) CALL global_offsets_to_local( & dense_col_blk_offsets, & dense_local_cols, & dense_local_col_blk_offsets) ! Find the offset of blocks within dense rows/columns. This is needed ! since the blocked rows/columns are not necessarily in the same order. ALLOCATE (row_internal_offsets(und_nblkrows_total)) ALLOCATE (col_internal_offsets(und_nblkcols_total)) CALL get_internal_offsets( & und_local_rows, row_map, & und_local_row_blk_offsets, & dense_local_row_blk_offsets, & row_internal_offsets) CALL get_internal_offsets( & und_local_cols, col_map, & und_local_col_blk_offsets, & dense_local_col_blk_offsets, & col_internal_offsets) ! und_data = und_matrix%data_area CALL dbcsr_data_hold(und_data) CALL dbcsr_data_init(dense_data) CALL dbcsr_data_new(dense_data, dbcsr_data_get_type(und_data), & data_size=nfullrows*nfullcols, & memory_type=dbcsr_data_get_memory_type(und_data)) ! ! Reshuffle the data CALL make_dense_data(und_matrix, & dense_data, nfullrows, nfullcols, & und_local_row_blk_offsets, und_local_col_blk_offsets, & dense_local_row_blk_offsets, dense_local_col_blk_offsets, & row_map=row_map, col_map=col_map, & row_internal_offsets=row_internal_offsets, & col_internal_offsets=col_internal_offsets, & join_rows=join_rows, join_cols=join_cols, make_tr=.FALSE.) CALL dbcsr_switch_data_area(dense_matrix, dense_data) CALL dbcsr_data_release(dense_data) CALL dbcsr_data_release(und_data) ! ! Create the new dense index. dense_nlocal_blocks = dense_nblkrows_local*dense_nblkcols_local CALL dbcsr_addto_index_array(dense_matrix, & dbcsr_slot_row_p, & reservation=dense_nblkrows_total + 1, extra=2*dense_nlocal_blocks) CALL dbcsr_addto_index_array(dense_matrix, & dbcsr_slot_col_i, & reservation=dense_nlocal_blocks) CALL dbcsr_addto_index_array(dense_matrix, & dbcsr_slot_blk_p, & reservation=dense_nlocal_blocks) ! meta = dense_matrix%index(1:dbcsr_meta_size) CALL dbcsr_pack_meta(dense_matrix, meta) meta(dbcsr_slot_nze) = nfullrows*nfullcols meta(dbcsr_slot_nblks) = dense_nlocal_blocks CALL make_dense_index(dense_matrix%row_p, & dense_matrix%col_i, & dense_matrix%blk_p, & dense_nblkrows_total, dense_nblkcols_total, & dense_local_rows, & dense_local_cols, & dense_local_row_blk_offsets, & dense_local_col_blk_offsets, & make_tr=.FALSE., & meta=meta) CALL dbcsr_unpack_meta(dense_matrix, meta) ! DEALLOCATE (und_local_row_blk_offsets) DEALLOCATE (und_local_col_blk_offsets) DEALLOCATE (dense_local_row_blk_offsets) DEALLOCATE (dense_local_col_blk_offsets) DEALLOCATE (row_internal_offsets) DEALLOCATE (col_internal_offsets) ! CALL timestop(error_handle) END SUBROUTINE dbcsr_make_dense_low SUBROUTINE dbcsr_make_undense(matrix, undense_matrix, distribution, & row_blk_offsets, col_blk_offsets, row_blk_sizes, col_blk_sizes, & row_map, col_map) !! Makes a blocked matrix from a dense matrix, inplace !! @note !! Used for making matrices dense/undense !! @endnote TYPE(dbcsr_type), INTENT(IN) :: matrix !! dense matrix TYPE(dbcsr_type), INTENT(INOUT) :: undense_matrix !! matrix to make undense TYPE(dbcsr_distribution_obj), INTENT(IN) :: distribution !! distribution of non-dense rows and columns TYPE(array_i1d_obj), INTENT(IN) :: row_blk_offsets, col_blk_offsets, & row_blk_sizes, col_blk_sizes, row_map, & col_map !! non-dense row block offsets !! non-dense column block offsets !! non-dense row block sizes !! non-dense column block sizes !! mapping from non-dense rows !! mapping from non-dense columns CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_undense' LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: handle, nblkcols_local, nblkcols_total, & nblkrows_local, nblkrows_total, & nfullcols_local, nfullrows_local INTEGER, ALLOCATABLE, DIMENSION(:) :: col_internal_offsets, dense_local_col_blk_offsets, & dense_local_row_blk_offsets, local_col_blk_offsets, local_row_blk_offsets, & row_internal_offsets INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: local_cols, local_rows, meta REAL(kind=dp) :: cs TYPE(dbcsr_data_obj) :: blocked_data, dense_data TYPE(dbcsr_distribution_obj) :: dense_distribution ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (dbg) THEN cs = dbcsr_checksum(matrix) WRITE (*, *) routineN//" prod cs pre", cs END IF dense_distribution = dbcsr_distribution(matrix) nfullrows_local = matrix%nfullrows_local nfullcols_local = matrix%nfullcols_local nblkrows_local = dbcsr_distribution_nlocal_rows(distribution) nblkcols_local = dbcsr_distribution_nlocal_cols(distribution) nblkrows_total = dbcsr_distribution_nrows(distribution) nblkcols_total = dbcsr_distribution_ncols(distribution) local_rows => dbcsr_distribution_local_rows(distribution) local_cols => dbcsr_distribution_local_cols(distribution) CALL dbcsr_create(undense_matrix, template=matrix, & dist=distribution, & row_blk_size_obj=row_blk_sizes, & col_blk_size_obj=col_blk_sizes) ! Restore previous offsets, just to try to keep the same memory. CALL array_release(undense_matrix%row_blk_offset) CALL array_release(undense_matrix%col_blk_offset) undense_matrix%row_blk_offset = row_blk_offsets undense_matrix%col_blk_offset = col_blk_offsets CALL array_hold(undense_matrix%row_blk_offset) CALL array_hold(undense_matrix%col_blk_offset) ! ALLOCATE (local_row_blk_offsets(nblkrows_total + 1)) ALLOCATE (local_col_blk_offsets(nblkcols_total + 1)) CALL dbcsr_clearfrom_index_array(undense_matrix, dbcsr_slot_row_p) CALL dbcsr_clearfrom_index_array(undense_matrix, dbcsr_slot_col_i) CALL dbcsr_clearfrom_index_array(undense_matrix, dbcsr_slot_blk_p) CALL dbcsr_addto_index_array(undense_matrix, dbcsr_slot_row_p, & reservation=nblkrows_total + 1, extra=nblkrows_local*nblkcols_local*2) CALL dbcsr_addto_index_array(undense_matrix, dbcsr_slot_col_i, & reservation=nblkrows_local*nblkcols_local) CALL dbcsr_addto_index_array(undense_matrix, dbcsr_slot_blk_p, & reservation=nblkrows_local*nblkcols_local) meta => undense_matrix%index(1:dbcsr_meta_size) CALL dbcsr_pack_meta(undense_matrix, meta) meta(dbcsr_slot_nblks) = nblkrows_local*nblkcols_local meta(dbcsr_slot_nze) = nfullrows_local*nfullcols_local CALL global_offsets_to_local(array_data(row_blk_offsets), & local_rows, local_row_blk_offsets(1:nblkrows_local + 1)) CALL global_offsets_to_local(array_data(col_blk_offsets), & local_cols, local_col_blk_offsets(1:nblkcols_local + 1)) CALL make_undense_index(undense_matrix%row_p, undense_matrix%col_i, undense_matrix%blk_p, & distribution, & local_row_blk_offsets(1:nblkrows_local + 1), & local_col_blk_offsets(1:nblkcols_local + 1), & meta) CALL dbcsr_unpack_meta(undense_matrix, meta) ! CALL global_offsets_to_local(array_data(row_blk_offsets), & local_rows, local_row_blk_offsets) CALL global_offsets_to_local(array_data(col_blk_offsets), & local_cols, local_col_blk_offsets) ! ALLOCATE (dense_local_row_blk_offsets(1 + dbcsr_distribution_nrows(dense_distribution))) ALLOCATE (dense_local_col_blk_offsets(1 + dbcsr_distribution_ncols(dense_distribution))) CALL global_offsets_to_local(array_data(matrix%row_blk_offset), & dbcsr_distribution_local_rows(dense_distribution), & dense_local_row_blk_offsets) CALL global_offsets_to_local(array_data(matrix%col_blk_offset), & dbcsr_distribution_local_cols(dense_distribution), & dense_local_col_blk_offsets) ! Find the offset of blocks within dense rows/columns. This is needed ! since the blocked rows/columns are not necessarily in the same order. ALLOCATE (row_internal_offsets(nblkrows_total)) ALLOCATE (col_internal_offsets(nblkcols_total)) CALL get_internal_offsets( & local_rows, array_data(row_map), & local_row_blk_offsets, & dense_local_row_blk_offsets, & row_internal_offsets) CALL get_internal_offsets( & local_cols, array_data(col_map), & local_col_blk_offsets, & dense_local_col_blk_offsets, & col_internal_offsets) ! dense_data = matrix%data_area CALL dbcsr_data_hold(dense_data) CALL dbcsr_data_init(blocked_data) CALL dbcsr_data_new(blocked_data, dbcsr_data_get_type(dense_data), & data_size=nfullrows_local*nfullcols_local, & memory_type=dbcsr_data_get_memory_type(dense_data)) CALL dbcsr_switch_data_area(undense_matrix, blocked_data) CALL dbcsr_data_release(blocked_data) ! Reshuffle the data CALL make_undense_data(undense_matrix, dense_data, & nfullrows_local, nfullcols_local, & dense_local_row_blk_offsets, dense_local_col_blk_offsets, & array_data(row_map), array_data(col_map), & row_internal_offsets, col_internal_offsets) CALL dbcsr_data_release(dense_data) IF (dbg) THEN cs = dbcsr_checksum(matrix) WRITE (*, *) routineN//" prod cs pst", cs END IF DEALLOCATE (local_row_blk_offsets) DEALLOCATE (local_col_blk_offsets) DEALLOCATE (dense_local_row_blk_offsets) DEALLOCATE (dense_local_col_blk_offsets) DEALLOCATE (row_internal_offsets) DEALLOCATE (col_internal_offsets) CALL timestop(handle) END SUBROUTINE dbcsr_make_undense SUBROUTINE make_dense_data(matrix, dense_data, nfullrows, nfullcols, & und_row_blk_offsets, und_col_blk_offsets, & dense_row_blk_offsets, dense_col_blk_offsets, & row_map, col_map, & row_internal_offsets, col_internal_offsets, & join_rows, join_cols, make_tr) !! Shuffles the data from blocked to standard dense form !! @note !! Used for making matrices dense/undense !! @endnote TYPE(dbcsr_type), INTENT(IN) :: matrix !! Existing blocked matrix TYPE(dbcsr_data_obj), INTENT(INOUT) :: dense_data !! Dense data INTEGER, INTENT(IN) :: nfullrows, nfullcols !! size of new data !! size of new data INTEGER, DIMENSION(:), INTENT(IN) :: und_row_blk_offsets, und_col_blk_offsets, & dense_row_blk_offsets, dense_col_blk_offsets, row_map, col_map, row_internal_offsets, & col_internal_offsets LOGICAL, INTENT(IN) :: join_rows, join_cols, make_tr !! make rows dense, default is yes !! make columns dense, default is yes !! make the dense blocks transposed CHARACTER(len=*), PARAMETER :: routineN = 'make_dense_data' INTEGER :: blk_col, blk_col_size, blk_row, blk_row_size, dense_col, dense_row, error_handle, & target_col_offset, target_cs, target_offset, target_row_offset, target_rs, tco, tro LOGICAL :: tr TYPE(dbcsr_data_obj) :: block TYPE(dbcsr_iterator) :: iter ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) IF (dbcsr_data_get_size(dense_data) < nfullrows*nfullcols) & DBCSR_ABORT("Dense data too small") IF (.NOT. join_cols .AND. .NOT. join_rows) & DBCSR_WARN("Joining neither rows nor columns is untested") ! CALL dbcsr_data_clear(dense_data) IF (dbcsr_data_get_size(matrix%data_area) .GT. 0 & .AND. nfullrows .GT. 0 .AND. nfullcols .GT. 0) THEN !$OMP PARALLEL DEFAULT(NONE) & !$OMP PRIVATE (block, iter, & !$OMP target_rs, target_cs, blk_row, blk_col, tr, blk_row_size, blk_col_size,& !$OMP tro, tco, target_offset,& !$OMP target_row_offset, target_col_offset,& !$OMP dense_row, dense_col) & !$OMP SHARED (& !$OMP dense_data, matrix, & !$OMP make_tr, join_rows, join_cols, & !$OMP und_row_blk_offsets, und_col_blk_offsets,& !$OMP dense_row_blk_offsets, dense_col_blk_offsets,& !$OMP row_internal_offsets, col_internal_offsets,& !$OMP row_map, col_map,& !$OMP nfullrows, nfullcols) CALL dbcsr_data_init(block) CALL dbcsr_data_new(block, & dbcsr_type_1d_to_2d(dbcsr_data_get_type(dense_data))) CALL dbcsr_iterator_start(iter, matrix, dynamic=.TRUE., shared=.TRUE., & contiguous_pointers=.FALSE., read_only=.TRUE.) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, blk_row, blk_col, block, tr, & row_size=blk_row_size, col_size=blk_col_size) dense_row = row_map(blk_row) dense_col = col_map(blk_col) ! ! Calculate the target block row/column size and the offset ! within the target block where the undense block is placed. IF (join_rows) THEN target_row_offset = dense_row_blk_offsets(dense_row) target_rs = dense_row_blk_offsets(dense_row + 1) - & dense_row_blk_offsets(dense_row) tro = 1 + row_internal_offsets(blk_row) ELSE target_row_offset = und_row_blk_offsets(blk_row) target_rs = blk_row_size tro = 1 END IF IF (join_cols) THEN target_col_offset = dense_col_blk_offsets(dense_col) target_cs = dense_col_blk_offsets(dense_col + 1) - & dense_col_blk_offsets(dense_col) tco = 1 + col_internal_offsets(blk_col) ELSE target_col_offset = und_col_blk_offsets(blk_col) target_cs = blk_col_size tco = 1 END IF target_offset = (target_row_offset - 1)*nfullcols & + (target_col_offset - 1)*( & dense_row_blk_offsets(dense_row + 1) - & dense_row_blk_offsets(dense_row)) CALL dbcsr_block_partial_copy(dst=dense_data, & dst_offset=target_offset, & dst_rs=target_rs, dst_cs=target_cs, dst_tr=make_tr, & dst_r_lb=tro, dst_c_lb=tco, & src=block, src_rs=blk_row_size, src_cs=blk_col_size, src_tr=tr, & src_r_lb=1, src_c_lb=1, nrow=blk_row_size, ncol=blk_col_size) END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(block) CALL dbcsr_data_release(block) !$OMP END PARALLEL END IF CALL timestop(error_handle) END SUBROUTINE make_dense_data SUBROUTINE make_undense_data(matrix, dense_data, nfullrows, nfullcols, & dense_row_blk_offsets, dense_col_blk_offsets, & row_map, col_map, row_internal_offsets, col_internal_offsets) !! Shuffles the data from standard dense to blocked form !! @note !! Used for making matrices dense/undense !! @endnote TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! Matrix with data to fill TYPE(dbcsr_data_obj), INTENT(IN) :: dense_data !! Dense data INTEGER, INTENT(IN) :: nfullrows, nfullcols !! number of full rows in local submatrix !! number of full columns in local submatrix INTEGER, DIMENSION(:), INTENT(IN) :: dense_row_blk_offsets, & dense_col_blk_offsets, row_map, & col_map, row_internal_offsets, & col_internal_offsets !! row block offsets for dense data !! column block offsets for dense data !! mapping from undense to dense rows !! mapping from undense to dense rows INTEGER :: blk_col, blk_col_size, blk_row, blk_row_size, dense_col, dense_col_offset, & dense_cs, dense_offset, dense_row, dense_row_offset, dense_rs, sco, sro LOGICAL :: tr TYPE(dbcsr_data_obj) :: block TYPE(dbcsr_iterator) :: iter ! --------------------------------------------------------------------------- IF (dbcsr_data_get_size(dense_data) < nfullrows*nfullcols) & DBCSR_ABORT("Dense data too small") IF (dbcsr_data_get_size(matrix%data_area) .GT. 0) THEN CALL dbcsr_data_clear(matrix%data_area) !$OMP PARALLEL DEFAULT(NONE) & !$OMP PRIVATE (block, iter,& !$OMP blk_row, blk_col, tr,& !$OMP blk_row_size, blk_col_size, sro, sco,& !$OMP dense_row_offset, dense_col_offset, dense_row, dense_col,& !$OMP dense_cs, dense_rs,& !$OMP dense_offset) & !$OMP SHARED (& !$OMP matrix, dense_data, & !$OMP nfullrows, nfullcols, & !$OMP dense_row_blk_offsets, dense_col_blk_offsets,& !$OMP row_map, col_map,& !$OMP row_internal_offsets, col_internal_offsets) CALL dbcsr_data_init(block) CALL dbcsr_data_new(block, & dbcsr_type_1d_to_2d(dbcsr_data_get_type(dense_data))) CALL dbcsr_iterator_start(iter, matrix, dynamic=.TRUE., shared=.TRUE., & contiguous_pointers=.FALSE.) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, blk_row, blk_col, block, tr, & row_size=blk_row_size, col_size=blk_col_size) dense_row = row_map(blk_row) dense_col = col_map(blk_col) dense_row_offset = dense_row_blk_offsets(dense_row) dense_col_offset = dense_col_blk_offsets(dense_col) dense_rs = dense_row_blk_offsets(dense_row + 1) - & dense_row_blk_offsets(dense_row) dense_cs = dense_col_blk_offsets(dense_col + 1) - & dense_col_blk_offsets(dense_col) sro = 1 + row_internal_offsets(blk_row) sco = 1 + col_internal_offsets(blk_col) dense_offset = (dense_row_offset - 1)*nfullcols & + (dense_col_offset - 1)*dense_rs CALL dbcsr_block_partial_copy( & dst=block, dst_rs=blk_row_size, dst_cs=blk_col_size, dst_tr=tr, & dst_r_lb=1, dst_c_lb=1, & src=dense_data, src_offset=dense_offset, & src_rs=dense_rs, src_cs=dense_cs, src_tr=.FALSE., & src_r_lb=sro, src_c_lb=sco, & nrow=blk_row_size, ncol=blk_col_size) END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(block) CALL dbcsr_data_release(block) !$OMP END PARALLEL END IF END SUBROUTINE make_undense_data SUBROUTINE dbcsr_replicate_all(matrix) !! Replicates a DBCSR on all processors. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! matrix to replicate CALL dbcsr_replicate(matrix, replicate_rows=.TRUE., & replicate_columns=.TRUE.) END SUBROUTINE dbcsr_replicate_all SUBROUTINE dbcsr_replicate(matrix, replicate_rows, replicate_columns, & restrict_source) !! Replicates a DBCSR matrix among process rows and columns !! !! Direction definition !! Row replication means that all processors in a process grid sharing !! the same row get the data of the entire row. (In a 1-column grid the !! operation has no effect.) Similar logic applies to column replication. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! matrix to replicate LOGICAL, INTENT(IN) :: replicate_rows, replicate_columns !! Row should be replicated among all processors !! Column should be replicated among all processors INTEGER, INTENT(IN), OPTIONAL :: restrict_source !! Send only from this node (ignores blocks on other nodes) CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_replicate' INTEGER, PARAMETER :: metalen = 3 LOGICAL, PARAMETER :: dbg = .FALSE. CHARACTER :: rep_type INTEGER :: blk, blk_l, blk_p, blk_ps, blks, col, col_size, data_type, dst_p, handle, & mynode, mypcol, myprow, nblks, numnodes, nze, offset, row, row_size, smp, & src_p, stored_blk_p, stored_col, stored_row INTEGER, ALLOCATABLE, DIMENSION(:) :: rd_disp, recv_meta, rm_disp, send_meta INTEGER, ALLOCATABLE, DIMENSION(:, :) :: recv_count INTEGER, DIMENSION(2) :: send_count INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_blk_size, col_dist, row_blk_size, & row_dist, tmp_index INTEGER, DIMENSION(:, :), POINTER :: blacs2mpi LOGICAL :: had_subcomms, i_am_restricted, rest_src, & tr TYPE(dbcsr_data_obj) :: data_block, recv_data, send_data, & tmp_data TYPE(dbcsr_distribution_obj) :: target_dist TYPE(dbcsr_iterator) :: iter TYPE(dbcsr_mp_obj) :: mp_obj TYPE(dbcsr_type) :: replicated TYPE(mp_comm_type) :: mp_group ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (.NOT. dbcsr_valid_index(matrix)) & DBCSR_ABORT("Matrix not initialized.") !IF(matrix%replication_type /= dbcsr_repl_none) & ! DBCSR_WARN("Replicating a non-distributed matrix makes no sense.") IF (replicate_rows .AND. replicate_columns) THEN rep_type = dbcsr_repl_full ELSEIF (replicate_rows .AND. .NOT. replicate_columns) THEN rep_type = dbcsr_repl_row ELSEIF (replicate_columns .AND. .NOT. replicate_rows) THEN rep_type = dbcsr_repl_col ELSE rep_type = dbcsr_repl_none IF (.NOT. replicate_rows .AND. .NOT. replicate_columns) & DBCSR_ABORT("Some replication must be specified") END IF data_type = dbcsr_get_data_type(matrix) row_blk_size => array_data(matrix%row_blk_size) col_blk_size => array_data(matrix%col_blk_size) target_dist = matrix%dist row_dist => dbcsr_distribution_row_dist(target_dist) col_dist => dbcsr_distribution_col_dist(target_dist) mp_obj = dbcsr_distribution_mp(target_dist) blacs2mpi => dbcsr_mp_pgrid(mp_obj) numnodes = dbcsr_mp_numnodes(mp_obj) mynode = dbcsr_mp_mynode(mp_obj) myprow = dbcsr_mp_myprow(mp_obj) mypcol = dbcsr_mp_mypcol(mp_obj) IF (MAXVAL(row_dist) .GT. UBOUND(blacs2mpi, 1)) & DBCSR_ABORT('Row distribution references unexistent processor rows') IF (dbg) THEN IF (MAXVAL(row_dist) .NE. UBOUND(blacs2mpi, 1)) & DBCSR_WARN('Range of row distribution not equal to processor rows') END IF IF (MAXVAL(col_dist) .GT. UBOUND(blacs2mpi, 2)) & DBCSR_ABORT('Col distribution references unexistent processor cols') IF (dbg) THEN IF (MAXVAL(col_dist) .NE. UBOUND(blacs2mpi, 2)) & DBCSR_WARN('Range of col distribution not equal to processor cols') END IF ! Define the number of nodes with which I will communicate. Also ! setup row and column communicators. had_subcomms = dbcsr_mp_has_subgroups(mp_obj) SELECT CASE (rep_type) CASE (dbcsr_repl_full) numnodes = dbcsr_mp_numnodes(mp_obj) mp_group = dbcsr_mp_group(mp_obj) mynode = dbcsr_mp_mynode(mp_obj) CASE (dbcsr_repl_row) numnodes = dbcsr_mp_npcols(mp_obj) CALL dbcsr_mp_grid_setup(mp_obj) mp_group = dbcsr_mp_my_row_group(mp_obj) mynode = dbcsr_mp_mypcol(mp_obj) CASE (dbcsr_repl_col) numnodes = dbcsr_mp_nprows(mp_obj) CALL dbcsr_mp_grid_setup(mp_obj) mp_group = dbcsr_mp_my_col_group(mp_obj) mynode = dbcsr_mp_myprow(mp_obj) CASE (dbcsr_repl_none) numnodes = 1 mp_group = dbcsr_mp_group(mp_obj) mynode = 0 END SELECT IF ((rep_type == dbcsr_repl_row .OR. rep_type == dbcsr_repl_col) .AND. .NOT. dbcsr_mp_has_subgroups(mp_obj)) & DBCSR_ABORT("Only full replication supported when subcommunicators are turned off.") ! IF (PRESENT(restrict_source)) THEN rest_src = .TRUE. i_am_restricted = mynode .NE. restrict_source ELSE rest_src = .FALSE. i_am_restricted = .FALSE. END IF ! ALLOCATE (recv_count(2, 0:numnodes - 1)) ALLOCATE (rd_disp(0:numnodes - 1)) ALLOCATE (rm_disp(0:numnodes - 1)) CALL dbcsr_create(replicated, name='Replicated '//TRIM(matrix%name), & template=matrix, & matrix_type=dbcsr_type_no_symmetry, & replication_type=rep_type) ! ! Count initial sizes for sending. Also, ensure that blocks are on their ! home processors. send_count(1:2) = 0 CALL dbcsr_iterator_start(iter, matrix) IF (.NOT. i_am_restricted) THEN DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, & row_size=row_size, col_size=col_size, blk=blk) !tr = .FALSE. !CALL dbcsr_get_stored_coordinates (matrix, row, col, tr, dst_p) !IF(dst_p /= mynode) & ! DBCSR_ABORT("Matrix is not correctly distributed. Call dbcsr_redistribute.") nze = row_size*col_size send_count(1) = send_count(1) + 1 send_count(2) = send_count(2) + nze END DO send_count(2) = dbcsr_data_get_size_referenced(matrix%data_area) END IF CALL dbcsr_iterator_stop(iter) ! Exchange how much data others have. CALL mp_allgather(send_count(1:2), recv_count, mp_group) CALL dbcsr_data_init(recv_data) nze = SUM(recv_count(2, :)) nblks = SUM(recv_count(1, :)) CALL dbcsr_data_new(recv_data, data_type=data_type, data_size=nze) ! send_data should have the correct size CALL dbcsr_data_init(send_data) IF (send_count(2) .EQ. 0) THEN CALL dbcsr_data_new(send_data, data_type=data_type, data_size=0) ELSE CALL dbcsr_data_new(send_data, data_type=data_type) send_data = pointer_view(send_data, matrix%data_area, 1, send_count(2)) END IF ALLOCATE (recv_meta(metalen*nblks)) ALLOCATE (send_meta(metalen*send_count(1))) recv_meta(:) = 0 ! Fill in the meta data structures and copy the data. rd_disp = -1; rm_disp = -1 rd_disp(0) = 1; rm_disp(0) = 1 DO dst_p = 1, numnodes - 1 rm_disp(dst_p) = rm_disp(dst_p - 1) & + metalen*recv_count(1, dst_p - 1) rd_disp(dst_p) = rd_disp(dst_p - 1) & + recv_count(2, dst_p - 1) END DO CALL dbcsr_data_init(data_block) CALL dbcsr_data_new(data_block, data_type=data_type) CALL dbcsr_iterator_start(iter, matrix) smp = 1 IF (.NOT. i_am_restricted) THEN DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, blk, & transposed=tr, blk_p=blk_p) send_meta(smp + 0) = row send_meta(smp + 1) = col send_meta(smp + 2) = blk_p smp = smp + metalen END DO END IF CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(data_block) CALL dbcsr_data_release(data_block) ! Exchange the data and metadata structures. CALL mp_allgather(send_meta, recv_meta, metalen*recv_count(1, :), & rm_disp - 1, mp_group) CALL dbcsr_allgatherv(send_data, dbcsr_data_get_size(send_data), & recv_data, recv_count(2, :), & rd_disp - 1, mp_group) ! Release the send buffer. If it had a non-zero size then it was a ! pointer into the regular matrix and the data pointer should be ! cleared and not deallocated. IF (send_count(2) .NE. 0) THEN CALL dbcsr_data_clear_pointer(send_data) END IF CALL dbcsr_data_release(send_data) ! ! Now fill in the data. CALL dbcsr_work_create(replicated, & SUM(recv_count(1, :)), & SUM(recv_count(2, :)), n=1, & work_mutable=.FALSE.) CALL dbcsr_data_hold(recv_data) CALL dbcsr_data_release(replicated%wms(1)%data_area) replicated%wms(1)%data_area = recv_data blk_ps = 1 blks = 1 DO src_p = 0, numnodes - 1 nze = recv_count(2, src_p) !CALL dbcsr_data_set (replicated%wms(1)%data_area, blk_ps, nze,& ! recv_data, rd_disp(src_p)) offset = rd_disp(src_p) - 1 DO blk_l = 1, recv_count(1, src_p) IF (dbg) WRITE (*, *) "src_p, blk_l", src_p, blk_l stored_row = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1)) stored_col = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 1) stored_blk_p = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 2) replicated%wms(1)%row_i(blks) = stored_row replicated%wms(1)%col_i(blks) = stored_col replicated%wms(1)%blk_p(blks) = SIGN(ABS(stored_blk_p) + offset, & stored_blk_p) nze = row_blk_size(stored_row) & *col_blk_size(stored_col) blk_ps = MAX(blk_ps, ABS(stored_blk_p) + nze + offset) blks = blks + 1 END DO END DO CALL dbcsr_data_set_size_referenced(replicated%wms(1)%data_area, blk_ps - 1) ! replicated%wms(1)%lastblk = blks - 1 replicated%wms(1)%datasize = blk_ps - 1 CALL dbcsr_finalize(replicated, reshuffle=.TRUE.) ! ! Remove communicators if they were forcibly created. IF (had_subcomms .AND. & (rep_type .EQ. dbcsr_repl_row .OR. rep_type .EQ. dbcsr_repl_col)) THEN CALL dbcsr_mp_grid_remove(mp_obj) END IF DEALLOCATE (recv_count) DEALLOCATE (rd_disp) DEALLOCATE (rm_disp) CALL dbcsr_data_release(recv_data) DEALLOCATE (recv_meta) DEALLOCATE (send_meta) matrix%replication_type = replicated%replication_type ! Now replace the data and index CALL dbcsr_switch_data_area(matrix, replicated%data_area, & previous_data_area=tmp_data) CALL dbcsr_switch_data_area(replicated, tmp_data) CALL dbcsr_data_release(tmp_data) tmp_index => matrix%index matrix%index => replicated%index replicated%index => tmp_index CALL dbcsr_repoint_index(matrix) matrix%nze = replicated%nze matrix%nblks = replicated%nblks CALL dbcsr_release(replicated) CALL dbcsr_verify_matrix(matrix) CALL timestop(handle) END SUBROUTINE dbcsr_replicate SUBROUTINE dbcsr_complete_redistribute(matrix, redist, keep_sparsity, summation) !! Fully redistributes a DBCSR matrix. !! The new distribution may be arbitrary as long as the total !! number full rows and columns matches that of the existing !! matrix. TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix to redistribute TYPE(dbcsr_type), INTENT(INOUT) :: redist !! redistributed matrix LOGICAL, INTENT(IN), OPTIONAL :: keep_sparsity, summation !! retains the sparsity of the redist matrix !! sum blocks with identical row and col from different processes CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_complete_redistribute' INTEGER, PARAMETER :: metalen = 7 LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: blk, blk_col_new, blk_ps, blk_row_new, blks, cnt_fnd, cnt_new, cnt_skip, col, & col_int, col_offset_new, col_offset_old, col_rle, col_size, col_size_new, data_offset_l, & data_type, dst_p, handle, i, meta_l, numnodes, nze_rle, row, row_int, & row_offset_new, row_offset_old, row_rle, row_size, row_size_new, src_p, stored_col_new, & stored_row_new INTEGER, ALLOCATABLE, DIMENSION(:) :: col_end_new, col_end_old, col_start_new, & col_start_old, rd_disp, recv_meta, rm_disp, row_end_new, row_end_old, row_start_new, & row_start_old, sd_disp, sdp, send_meta, sm_disp, smp INTEGER, ALLOCATABLE, DIMENSION(:, :) :: col_reblocks, n_col_reblocks, n_row_reblocks, & recv_count, row_reblocks, send_count, total_recv_count, total_send_count INTEGER, DIMENSION(:), POINTER :: col_blk_size_new, col_blk_size_old, & col_dist_new, row_blk_size_new, & row_blk_size_old, row_dist_new INTEGER, DIMENSION(:, :), POINTER :: pgrid LOGICAL :: found, my_keep_sparsity, my_summation, & sym, tr, valid_block REAL(kind=dp) :: cs1, cs2 TYPE(dbcsr_data_obj) :: buff_data, data_block, recv_data, & send_data TYPE(dbcsr_distribution_obj) :: dist_new TYPE(dbcsr_iterator) :: iter TYPE(dbcsr_mp_obj) :: mp_obj_new TYPE(mp_comm_type) :: mp_group ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (.NOT. dbcsr_valid_index(matrix)) & DBCSR_ABORT("Input not valid.") IF (matrix%replication_type .NE. dbcsr_repl_none) & DBCSR_WARN("Can not redistribute replicated matrix.") IF (dbcsr_has_symmetry(matrix) .AND. .NOT. dbcsr_has_symmetry(redist)) & DBCSR_ABORT("Can not redistribute a symmetric matrix into a non-symmetric one") ! my_keep_sparsity = .FALSE. IF (PRESENT(keep_sparsity)) my_keep_sparsity = keep_sparsity ! my_summation = .FALSE. IF (PRESENT(summation)) my_summation = summation ! zero blocks that might be present in the target (redist) but not in the source (matrix) CALL dbcsr_set(redist, 0.0_dp) sym = dbcsr_has_symmetry(redist) data_type = matrix%data_type ! Get row and column start and end positions ! Old matrix row_blk_size_old => array_data(matrix%row_blk_size) col_blk_size_old => array_data(matrix%col_blk_size) ALLOCATE (row_start_old(dbcsr_nblkrows_total(matrix)), & row_end_old(dbcsr_nblkrows_total(matrix)), & col_start_old(dbcsr_nblkcols_total(matrix)), & col_end_old(dbcsr_nblkcols_total(matrix))) CALL convert_sizes_to_offsets(row_blk_size_old, & row_start_old, row_end_old) CALL convert_sizes_to_offsets(col_blk_size_old, & col_start_old, col_end_old) ! New matrix dist_new = dbcsr_distribution(redist) row_blk_size_new => array_data(redist%row_blk_size) col_blk_size_new => array_data(redist%col_blk_size) ALLOCATE (row_start_new(dbcsr_nblkrows_total(redist)), & row_end_new(dbcsr_nblkrows_total(redist)), & col_start_new(dbcsr_nblkcols_total(redist)), & col_end_new(dbcsr_nblkcols_total(redist))) CALL convert_sizes_to_offsets(row_blk_size_new, & row_start_new, row_end_new) CALL convert_sizes_to_offsets(col_blk_size_new, & col_start_new, col_end_new) row_dist_new => dbcsr_distribution_row_dist(dist_new) col_dist_new => dbcsr_distribution_col_dist(dist_new) ! Create mappings i = dbcsr_nfullrows_total(redist) ALLOCATE (row_reblocks(4, i)) ALLOCATE (n_row_reblocks(2, dbcsr_nblkrows_total(matrix))) CALL dbcsr_reblocking_targets(row_reblocks, i, n_row_reblocks, & row_blk_size_old, row_blk_size_new) i = dbcsr_nfullcols_total(redist) ALLOCATE (col_reblocks(4, i)) ALLOCATE (n_col_reblocks(2, dbcsr_nblkcols_total(matrix))) CALL dbcsr_reblocking_targets(col_reblocks, i, n_col_reblocks, & col_blk_size_old, col_blk_size_new) ! mp_obj_new = dbcsr_distribution_mp(dist_new) pgrid => dbcsr_mp_pgrid(mp_obj_new) numnodes = dbcsr_mp_numnodes(mp_obj_new) mp_group = dbcsr_mp_group(mp_obj_new) ! IF (MAXVAL(row_dist_new) > UBOUND(pgrid, 1)) & DBCSR_ABORT('Row distribution references unexistent processor rows') IF (dbg) THEN IF (MAXVAL(row_dist_new) .NE. UBOUND(pgrid, 1)) & DBCSR_WARN('Range of row distribution not equal to processor rows') END IF IF (MAXVAL(col_dist_new) > UBOUND(pgrid, 2)) & DBCSR_ABORT('Col distribution references unexistent processor cols') IF (dbg) THEN IF (MAXVAL(col_dist_new) .NE. UBOUND(pgrid, 2)) & DBCSR_WARN('Range of col distribution not equal to processor cols') END IF ALLOCATE (send_count(2, 0:numnodes - 1)) ALLOCATE (recv_count(2, 0:numnodes - 1)) ALLOCATE (total_send_count(2, 0:numnodes - 1)) ALLOCATE (total_recv_count(2, 0:numnodes - 1)) ALLOCATE (sdp(0:numnodes - 1)) ALLOCATE (sd_disp(0:numnodes - 1)) ALLOCATE (smp(0:numnodes - 1)) ALLOCATE (sm_disp(0:numnodes - 1)) ALLOCATE (rd_disp(0:numnodes - 1)) ALLOCATE (rm_disp(0:numnodes - 1)) IF (dbg) THEN cs1 = dbcsr_checksum(matrix) END IF !cs1 = dbcsr_checksum (matrix) !call dbcsr_print(matrix) ! ! ! Count initial sizes for sending. ! ! We go through every element of every local block and determine ! to which processor it must be sent. It could be more efficient, ! but at least the index data are run-length encoded. send_count(:, :) = 0 CALL dbcsr_iterator_start(iter, matrix) dst_p = -1 DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, blk) DO col_int = n_col_reblocks(1, col), & n_col_reblocks(1, col) + n_col_reblocks(2, col) - 1 blk_col_new = col_reblocks(1, col_int) DO row_int = n_row_reblocks(1, row), & n_row_reblocks(1, row) + n_row_reblocks(2, row) - 1 blk_row_new = row_reblocks(1, row_int) IF (.NOT. sym .OR. blk_col_new .GE. blk_row_new) THEN tr = .FALSE. CALL dbcsr_get_stored_coordinates(redist, & blk_row_new, blk_col_new, dst_p) send_count(1, dst_p) = send_count(1, dst_p) + 1 send_count(2, dst_p) = send_count(2, dst_p) + & col_reblocks(2, col_int)*row_reblocks(2, row_int) END IF END DO END DO END DO CALL dbcsr_iterator_stop(iter) ! ! CALL mp_alltoall(send_count, recv_count, 2, mp_group) ! Allocate data structures needed for data exchange. CALL dbcsr_data_init(recv_data) CALL dbcsr_data_new(recv_data, data_type, SUM(recv_count(2, :))) ALLOCATE (recv_meta(metalen*SUM(recv_count(1, :)))) CALL dbcsr_data_init(send_data) CALL dbcsr_data_new(send_data, data_type, SUM(send_count(2, :))) ALLOCATE (send_meta(metalen*SUM(send_count(1, :)))) ! Fill in the meta data structures and copy the data. DO dst_p = 0, numnodes - 1 total_send_count(1, dst_p) = send_count(1, dst_p) total_send_count(2, dst_p) = send_count(2, dst_p) total_recv_count(1, dst_p) = recv_count(1, dst_p) total_recv_count(2, dst_p) = recv_count(2, dst_p) END DO sd_disp = -1; sm_disp = -1 rd_disp = -1; rm_disp = -1 sd_disp(0) = 1; sm_disp(0) = 1 rd_disp(0) = 1; rm_disp(0) = 1 DO dst_p = 1, numnodes - 1 sm_disp(dst_p) = sm_disp(dst_p - 1) & + metalen*total_send_count(1, dst_p - 1) sd_disp(dst_p) = sd_disp(dst_p - 1) & + total_send_count(2, dst_p - 1) rm_disp(dst_p) = rm_disp(dst_p - 1) & + metalen*total_recv_count(1, dst_p - 1) rd_disp(dst_p) = rd_disp(dst_p - 1) & + total_recv_count(2, dst_p - 1) END DO sdp(:) = sd_disp ! sdp points to the the next place to store ! data. It is postincremented. smp(:) = sm_disp - metalen ! But smp points to the "working" data, not ! the next. It is pre-incremented, so we must ! first rewind it. ! CALL dbcsr_data_init(data_block) CALL dbcsr_data_new(data_block, data_type) CALL dbcsr_iterator_start(iter, matrix) dst_p = -1 DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, data_block, tr, blk, & row_size=row_size, col_size=col_size) !IF (tr) WRITE(*,*)"block at",row,col," is transposed" DO col_int = n_col_reblocks(1, col), & n_col_reblocks(1, col) + n_col_reblocks(2, col) - 1 blk_col_new = col_reblocks(1, col_int) DO row_int = n_row_reblocks(1, row), & n_row_reblocks(1, row) + n_row_reblocks(2, row) - 1 blk_row_new = row_reblocks(1, row_int) loc_ok: IF (.NOT. sym .OR. blk_col_new .GE. blk_row_new) THEN IF (dbg) & WRITE (*, *) 'using block', blk_row_new, 'x', blk_col_new ! Start a new RLE run tr = .FALSE. CALL dbcsr_get_stored_coordinates(redist, & blk_row_new, blk_col_new, dst_p) row_offset_old = row_reblocks(3, row_int) col_offset_old = col_reblocks(3, col_int) row_offset_new = row_reblocks(4, row_int) col_offset_new = col_reblocks(4, col_int) row_rle = row_reblocks(2, row_int) col_rle = col_reblocks(2, col_int) smp(dst_p) = smp(dst_p) + metalen send_meta(smp(dst_p)) = blk_row_new ! new blocked row send_meta(smp(dst_p) + 1) = blk_col_new ! new blocked column send_meta(smp(dst_p) + 2) = row_offset_new ! row in new block send_meta(smp(dst_p) + 3) = col_offset_new ! col in new block send_meta(smp(dst_p) + 4) = row_rle ! RLE rows send_meta(smp(dst_p) + 5) = col_rle ! RLE columns send_meta(smp(dst_p) + 6) = sdp(dst_p) - sd_disp(dst_p) ! Offset in data nze_rle = row_rle*col_rle ! Copy current block into the send buffer CALL dbcsr_block_partial_copy( & send_data, dst_offset=sdp(dst_p) - 1, & dst_rs=row_rle, dst_cs=col_rle, dst_tr=.FALSE., & dst_r_lb=1, dst_c_lb=1, & src=data_block, & src_rs=row_size, src_cs=col_size, src_tr=tr, & src_r_lb=row_offset_old, src_c_lb=col_offset_old, & nrow=row_rle, ncol=col_rle) sdp(dst_p) = sdp(dst_p) + nze_rle END IF loc_ok END DO ! row_int END DO ! col_int END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(data_block) CALL dbcsr_data_release(data_block) ! Exchange the data and metadata structures. ! SELECT CASE (data_type) CASE (dbcsr_type_real_4) CALL hybrid_alltoall_s1( & send_data%d%r_sp(:), total_send_count(2, :), sd_disp(:) - 1, & recv_data%d%r_sp(:), total_recv_count(2, :), rd_disp(:) - 1, & mp_obj_new) CASE (dbcsr_type_real_8) !CALL mp_alltoall(& ! send_data%d%r_dp(:), total_send_count(2,:), sd_disp(:)-1,& ! recv_data%d%r_dp(:), total_recv_count(2,:), rd_disp(:)-1,& ! mp_group) CALL hybrid_alltoall_d1( & send_data%d%r_dp(:), total_send_count(2, :), sd_disp(:) - 1, & recv_data%d%r_dp(:), total_recv_count(2, :), rd_disp(:) - 1, & mp_obj_new) CASE (dbcsr_type_complex_4) CALL hybrid_alltoall_c1( & send_data%d%c_sp(:), total_send_count(2, :), sd_disp(:) - 1, & recv_data%d%c_sp(:), total_recv_count(2, :), rd_disp(:) - 1, & mp_obj_new) CASE (dbcsr_type_complex_8) CALL hybrid_alltoall_z1( & send_data%d%c_dp(:), total_send_count(2, :), sd_disp(:) - 1, & recv_data%d%c_dp(:), total_recv_count(2, :), rd_disp(:) - 1, & mp_obj_new) CASE default DBCSR_ABORT("Invalid matrix type") END SELECT CALL hybrid_alltoall_i1(send_meta(:), metalen*total_send_count(1, :), sm_disp(:) - 1, & recv_meta(:), metalen*total_recv_count(1, :), rm_disp(:) - 1, mp_obj_new) ! ! Now fill in the data. CALL dbcsr_work_create(redist, & nblks_guess=SUM(recv_count(1, :)), & sizedata_guess=SUM(recv_count(2, :)), work_mutable=.TRUE.) CALL dbcsr_data_init(buff_data) CALL dbcsr_data_init(data_block) CALL dbcsr_data_new(buff_data, dbcsr_type_1d_to_2d(data_type), & redist%max_rbs, redist%max_cbs) CALL dbcsr_data_new(data_block, dbcsr_type_1d_to_2d(data_type)) !blk_p = 1 !blk = 1 blk_ps = 0 blks = 0 cnt_fnd = 0; cnt_new = 0; cnt_skip = 0 DO src_p = 0, numnodes - 1 data_offset_l = rd_disp(src_p) DO meta_l = 1, recv_count(1, src_p) stored_row_new = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1)) stored_col_new = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 1) row_offset_new = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 2) col_offset_new = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 3) row_rle = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 4) col_rle = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 5) data_offset_l = rd_disp(src_p) & + recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 6) CALL dbcsr_data_clear_pointer(data_block) CALL dbcsr_get_block_p(redist, stored_row_new, stored_col_new, & data_block, tr, found) valid_block = found IF (found) cnt_fnd = cnt_fnd + 1 IF (.NOT. found .AND. .NOT. my_keep_sparsity) THEN ! We have to set up a buffer block CALL dbcsr_data_set_pointer(data_block, & rsize=row_blk_size_new(stored_row_new), & csize=col_blk_size_new(stored_col_new), & pointee=buff_data) CALL dbcsr_data_clear(data_block) !r2_dp => r2_dp_buff(1:row_blk_size_new (stored_row_new),& ! 1:col_blk_size_new (stored_col_new)) !r2_dp(:,:) = 0.0_dp tr = .FALSE. blks = blks + 1 blk_ps = blk_ps + row_blk_size_new(stored_row_new)* & col_blk_size_new(stored_col_new) valid_block = .TRUE. cnt_new = cnt_new + 1 END IF nze_rle = row_rle*col_rle IF (valid_block) THEN row_size_new = row_blk_size_new(stored_row_new) col_size_new = col_blk_size_new(stored_col_new) CALL dbcsr_block_partial_copy( & dst=data_block, dst_tr=tr, & dst_rs=row_size_new, dst_cs=col_size_new, & dst_r_lb=row_offset_new, dst_c_lb=col_offset_new, & src=recv_data, src_offset=data_offset_l - 1, & src_rs=row_rle, src_cs=col_rle, src_tr=.FALSE., & src_r_lb=1, src_c_lb=1, & nrow=row_rle, ncol=col_rle) ELSE cnt_skip = cnt_skip + 1 END IF data_offset_l = data_offset_l + nze_rle IF ((.NOT. found .OR. my_summation) .AND. valid_block) THEN IF (dbg) WRITE (*, *) routineN//" Adding new block at", & stored_row_new, stored_col_new CALL dbcsr_put_block(redist, stored_row_new, stored_col_new, & data_block, transposed=tr, summation=my_summation) !DEALLOCATE (r2_dp) ELSE IF (.NOT. my_keep_sparsity .AND. dbg) & WRITE (*, *) routineN//" Reusing block at", & stored_row_new, stored_col_new END IF END DO END DO CALL dbcsr_data_clear_pointer(data_block) CALL dbcsr_data_release(buff_data) CALL dbcsr_data_release(data_block) ! IF (dbg) THEN WRITE (*, *) routineN//" Declared blocks=", redist%wms(1)%lastblk, & "actual=", blks WRITE (*, *) routineN//" Declared data size=", redist%wms(1)%datasize, & "actual=", blk_ps END IF CALL dbcsr_finalize(redist) DEALLOCATE (send_count) DEALLOCATE (recv_count) DEALLOCATE (sdp); DEALLOCATE (sd_disp) DEALLOCATE (smp); DEALLOCATE (sm_disp) DEALLOCATE (rd_disp) DEALLOCATE (rm_disp) CALL dbcsr_data_release(recv_data) CALL dbcsr_data_release(send_data) DEALLOCATE (recv_meta) DEALLOCATE (send_meta) !if (dbg) call dbcsr_print(redist) IF (dbg) THEN cs2 = dbcsr_checksum(redist) WRITE (*, *) routineN//" Checksums=", cs1, cs2, cs1 - cs2 END IF !IF(cs1-cs2 > 0.00001) DBCSR_ABORT("Mangled data!") CALL timestop(handle) END SUBROUTINE dbcsr_complete_redistribute SUBROUTINE dbcsr_redistribute(matrix, redist) !! Redistributes a DBCSR matrix. !! The new distribution should have compatible row and column blocks. TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix to redistribute TYPE(dbcsr_type), INTENT(INOUT) :: redist !! redistributed matrix, which should already be created CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_redistribute' INTEGER, PARAMETER :: metalen = 2 LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: blk, blk_ps, blks, col, col_size, data_type, dst_p, handle, meta_l, & numnodes, nze, row, row_size, src_p, stored_col_new, stored_row_new INTEGER, ALLOCATABLE, DIMENSION(:) :: rd_disp, recv_meta, rm_disp, sd_disp, & sdp, send_meta, sm_disp, smp INTEGER, ALLOCATABLE, DIMENSION(:, :) :: recv_count, send_count, & total_recv_count, total_send_count INTEGER, DIMENSION(:), POINTER :: col_blk_size_new, col_dist_new, & row_blk_size_new, row_dist_new INTEGER, DIMENSION(:, :), POINTER :: pgrid LOGICAL :: sym_tr, tr TYPE(dbcsr_data_obj) :: data_block, recv_data, send_data TYPE(dbcsr_distribution_obj) :: dist_new TYPE(dbcsr_iterator) :: iter TYPE(dbcsr_mp_obj) :: mp_obj_new TYPE(mp_comm_type) :: mp_group ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) !call dbcsr_print_dist (matrix%dist) !call dbcsr_print_dist (redist%dist) IF (.NOT. dbcsr_valid_index(matrix)) & DBCSR_ABORT("Input not valid.") IF (matrix%replication_type .NE. dbcsr_repl_none) & DBCSR_WARN("Can not redistribute replicated matrix.") data_type = matrix%data_type ! Get row and column start and end positions ! Old matrix ! New matrix dist_new = dbcsr_distribution(redist) row_blk_size_new => array_data(redist%row_blk_size) col_blk_size_new => array_data(redist%col_blk_size) row_dist_new => dbcsr_distribution_row_dist(dist_new) col_dist_new => dbcsr_distribution_col_dist(dist_new) ! mp_obj_new = dbcsr_distribution_mp(dist_new) pgrid => dbcsr_mp_pgrid(mp_obj_new) numnodes = dbcsr_mp_numnodes(mp_obj_new) mp_group = dbcsr_mp_group(mp_obj_new) ! IF (MAXVAL(row_dist_new) .GT. UBOUND(pgrid, 1)) & DBCSR_ABORT('Row distribution references unexistent processor rows') IF (dbg) THEN IF (MAXVAL(row_dist_new) .NE. UBOUND(pgrid, 1)) & DBCSR_WARN('Range of row distribution not equal to processor rows') END IF IF (MAXVAL(col_dist_new) .GT. UBOUND(pgrid, 2)) & DBCSR_ABORT('Col distribution references unexistent processor cols') IF (dbg) THEN IF (MAXVAL(col_dist_new) .NE. UBOUND(pgrid, 2)) & DBCSR_WARN('Range of col distribution not equal to processor cols') END IF ALLOCATE (send_count(2, 0:numnodes - 1)) ALLOCATE (recv_count(2, 0:numnodes - 1)) ALLOCATE (total_send_count(2, 0:numnodes - 1)) ALLOCATE (total_recv_count(2, 0:numnodes - 1)) ALLOCATE (sdp(0:numnodes - 1)) ALLOCATE (sd_disp(0:numnodes - 1)) ALLOCATE (smp(0:numnodes - 1)) ALLOCATE (sm_disp(0:numnodes - 1)) ALLOCATE (rd_disp(0:numnodes - 1)) ALLOCATE (rm_disp(0:numnodes - 1)) ! Count initial sizes for sending. ! send_count(:, :) = 0 CALL dbcsr_iterator_start(iter, matrix) dst_p = -1 DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, blk, tr, & row_size=row_size, col_size=col_size) sym_tr = .FALSE. CALL dbcsr_get_stored_coordinates(redist, & row, col, dst_p) nze = row_size*col_size send_count(1, dst_p) = send_count(1, dst_p) + 1 send_count(2, dst_p) = send_count(2, dst_p) + nze END DO CALL dbcsr_iterator_stop(iter) CALL mp_alltoall(send_count, recv_count, 2, mp_group) ! Allocate data structures needed for data exchange. CALL dbcsr_data_init(recv_data) CALL dbcsr_data_new(recv_data, data_type, SUM(recv_count(2, :))) ALLOCATE (recv_meta(metalen*SUM(recv_count(1, :)))) CALL dbcsr_data_init(send_data) CALL dbcsr_data_new(send_data, data_type, SUM(send_count(2, :))) ALLOCATE (send_meta(metalen*SUM(send_count(1, :)))) ! Fill in the meta data structures and copy the data. DO dst_p = 0, numnodes - 1 total_send_count(1, dst_p) = send_count(1, dst_p) total_send_count(2, dst_p) = send_count(2, dst_p) total_recv_count(1, dst_p) = recv_count(1, dst_p) total_recv_count(2, dst_p) = recv_count(2, dst_p) END DO sd_disp = -1; sm_disp = -1 rd_disp = -1; rm_disp = -1 sd_disp(0) = 1; sm_disp(0) = 1 rd_disp(0) = 1; rm_disp(0) = 1 DO dst_p = 1, numnodes - 1 sm_disp(dst_p) = sm_disp(dst_p - 1) & + metalen*total_send_count(1, dst_p - 1) sd_disp(dst_p) = sd_disp(dst_p - 1) & + total_send_count(2, dst_p - 1) rm_disp(dst_p) = rm_disp(dst_p - 1) & + metalen*total_recv_count(1, dst_p - 1) rd_disp(dst_p) = rd_disp(dst_p - 1) & + total_recv_count(2, dst_p - 1) END DO sdp(:) = sd_disp ! sdp points to the the next place to store ! data. It is postincremented. smp(:) = sm_disp - metalen ! But smp points to the "working" data, not ! the next. It is pre-incremented, so we must ! first rewind it. CALL dbcsr_data_init(data_block) CALL dbcsr_data_new(data_block, data_type) CALL dbcsr_iterator_start(iter, matrix) dst_p = -1 DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, data_block, tr, blk) !IF (tr) WRITE(*,*)"block at",row,col," is transposed" sym_tr = .FALSE. CALL dbcsr_get_stored_coordinates(redist, & row, col, dst_p) smp(dst_p) = smp(dst_p) + metalen IF (tr) THEN send_meta(smp(dst_p)) = -row ELSE send_meta(smp(dst_p)) = row END IF send_meta(smp(dst_p) + 1) = col ! new blocked column nze = dbcsr_data_get_size(data_block) CALL dbcsr_data_set(send_data, lb=sdp(dst_p), data_size=nze, & src=data_block, source_lb=1) !send_data(sdp(dst_p):sdp(dst_p)+SIZE(r_dp)-1) & ! = r_dp(:) sdp(dst_p) = sdp(dst_p) + nze END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(data_block) ! Exchange the data and metadata structures. SELECT CASE (data_type) CASE (dbcsr_type_real_4) CALL hybrid_alltoall_s1( & send_data%d%r_sp(:), total_send_count(2, :), sd_disp(:) - 1, & recv_data%d%r_sp(:), total_recv_count(2, :), rd_disp(:) - 1, & mp_obj_new) CASE (dbcsr_type_real_8) !CALL mp_alltoall(& ! send_data%d%r_dp(:), total_send_count(2,:), sd_disp(:)-1,& ! recv_data%d%r_dp(:), total_recv_count(2,:), rd_disp(:)-1,& ! mp_group) CALL hybrid_alltoall_d1( & send_data%d%r_dp(:), total_send_count(2, :), sd_disp(:) - 1, & recv_data%d%r_dp(:), total_recv_count(2, :), rd_disp(:) - 1, & mp_obj_new) CASE (dbcsr_type_complex_4) CALL hybrid_alltoall_c1( & send_data%d%c_sp(:), total_send_count(2, :), sd_disp(:) - 1, & recv_data%d%c_sp(:), total_recv_count(2, :), rd_disp(:) - 1, & mp_obj_new) CASE (dbcsr_type_complex_8) CALL hybrid_alltoall_z1( & send_data%d%c_dp(:), total_send_count(2, :), sd_disp(:) - 1, & recv_data%d%c_dp(:), total_recv_count(2, :), rd_disp(:) - 1, & mp_obj_new) END SELECT !CALL mp_alltoall(send_data(:), total_send_count(2,:), sd_disp(:)-1,& ! recv_data(:), total_recv_count(2,:), rd_disp(:)-1, mp_group) CALL hybrid_alltoall_i1(send_meta(:), metalen*total_send_count(1, :), sm_disp(:) - 1, & recv_meta(:), metalen*total_recv_count(1, :), rm_disp(:) - 1, mp_obj_new) ! Now fill in the data. CALL dbcsr_work_create(redist, & SUM(recv_count(1, :)), & SUM(recv_count(2, :)), work_mutable=.FALSE., n=1) ! blk_ps = 1 blks = 0 DO src_p = 0, numnodes - 1 !data_offset_l = rd_disp(src_p) DO meta_l = 1, recv_count(1, src_p) row = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1)) tr = row .LT. 0 stored_row_new = ABS(row) stored_col_new = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 1) nze = row_blk_size_new(stored_row_new)*col_blk_size_new(stored_col_new) !r_dp => recv_data(blk_ps:blk_ps+nze-1) !CALL dbcsr_put_block(redist, stored_row_new, stored_col_new, r_dp, tr) !### this should be changed to be like the make images (i.e., copy data in finalize, not here & now) data_block = pointer_view(data_block, recv_data, blk_ps, nze) CALL dbcsr_put_block(redist, stored_row_new, stored_col_new, data_block, transposed=tr) blk_ps = blk_ps + nze blks = blks + 1 END DO END DO CALL dbcsr_data_clear_pointer(data_block) CALL dbcsr_data_release(data_block) ! IF (dbg) THEN WRITE (*, *) routineN//" Declared blocks=", redist%wms(1)%lastblk, & "actual=", blks WRITE (*, *) routineN//" Declared data size=", redist%wms(1)%datasize, & "actual=", blk_ps END IF CALL dbcsr_finalize(redist) CALL dbcsr_data_release(recv_data) CALL dbcsr_data_release(send_data) DEALLOCATE (send_count) DEALLOCATE (recv_count) DEALLOCATE (sdp); DEALLOCATE (sd_disp) DEALLOCATE (smp); DEALLOCATE (sm_disp) DEALLOCATE (rd_disp) DEALLOCATE (rm_disp) DEALLOCATE (recv_meta) DEALLOCATE (send_meta) CALL timestop(handle) END SUBROUTINE dbcsr_redistribute SUBROUTINE dbcsr_datablock_redistribute(dblk, row_p, col_i, blk_p, & proc_nblks, proc_darea_sizes, new_matrix) !! Redistributes data blocks of a DBCSR matrix read from a file. !! This routine should be used with dbcsr_binary_read in the module !! dbcsr_io.F TYPE(dbcsr_data_obj), INTENT(IN) :: dblk !! data blocks of the DBCSR matrix that the current node possesses after reading the data file INTEGER, DIMENSION(:), INTENT(IN), & POINTER :: row_p, col_i, blk_p, & proc_nblks, proc_darea_sizes !! row_p of the DBCSR matrix that the current node possesses after reading the data file !! col_i of the DBCSR matrix that the current node possesses after reading the data file !! blk_p of the DBCSR matrix that the current node possesses after reading the data file !! 1D array holding nblks of those nodes of the mp environment, that created the file, whose contents have been read by the !! current node of the present mp environment !! 1D array holding data_area_size of those nodes of the mp environment, that created the file, whose contents have been !! read by the current node of the present mp environment TYPE(dbcsr_type), INTENT(INOUT) :: new_matrix !! redistributed matrix CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_datablock_redistribute' INTEGER, PARAMETER :: metalen = 2 COMPLEX(kind=dp), DIMENSION(:), POINTER, CONTIGUOUS :: c_dp COMPLEX(kind=sp), DIMENSION(:), POINTER, CONTIGUOUS :: c_sp INTEGER :: bcol, blk, blk_ps, blk_size, blks, brow, col_size, data_type, & dst_p, handle, i, ind, job_count, meta_l, & nblkrows_total, numnodes, row_size, src_p, stored_col_new, & stored_row_new INTEGER(kind=int_8) :: actual_blk, blkp, end_ind, & start_ind INTEGER(kind=int_8), ALLOCATABLE, & DIMENSION(:) :: extra_darea_size, extra_nblks INTEGER, ALLOCATABLE, DIMENSION(:) :: rd_disp, recv_meta, rm_disp, & sd_disp, sdp, send_meta, & sm_disp, smp INTEGER, ALLOCATABLE, DIMENSION(:, :) :: recv_count, send_count, & total_recv_count, & total_send_count INTEGER, DIMENSION(:), POINTER :: col_blk_size, row_blk_size LOGICAL :: sym_tr, tr REAL(kind=dp), DIMENSION(:), POINTER, CONTIGUOUS :: r_dp REAL(kind=sp), DIMENSION(:), POINTER, CONTIGUOUS :: r_sp TYPE(dbcsr_data_obj) :: data_block, recv_data, & send_data TYPE(dbcsr_distribution_obj) :: dist TYPE(dbcsr_mp_obj) :: mp_env TYPE(mp_comm_type) :: mp_group CALL timeset(routineN, handle) dist = dbcsr_distribution(new_matrix) mp_env = dbcsr_distribution_mp(dist) numnodes = dbcsr_mp_numnodes(mp_env) mp_group = dbcsr_mp_group(mp_env) data_type = dbcsr_get_data_type(new_matrix) nblkrows_total = dbcsr_nblkrows_total(new_matrix) row_blk_size => array_data(new_matrix%row_blk_size) col_blk_size => array_data(new_matrix%col_blk_size) ALLOCATE (send_count(2, 0:numnodes - 1)) ALLOCATE (recv_count(2, 0:numnodes - 1)) ALLOCATE (total_send_count(2, 0:numnodes - 1)) ALLOCATE (total_recv_count(2, 0:numnodes - 1)) ALLOCATE (sdp(0:numnodes - 1)) ALLOCATE (sd_disp(0:numnodes - 1)) ALLOCATE (smp(0:numnodes - 1)) ALLOCATE (sm_disp(0:numnodes - 1)) ALLOCATE (rd_disp(0:numnodes - 1)) ALLOCATE (rm_disp(0:numnodes - 1)) send_count(:, :) = 0 dst_p = -1 job_count = COUNT(proc_nblks .NE. 0) ALLOCATE (extra_nblks(job_count)) ALLOCATE (extra_darea_size(job_count)) IF (job_count > 0) THEN CALL cumsum_l(INT((/0, proc_nblks(1:job_count - 1)/), kind=int_8), extra_nblks) CALL cumsum_l(INT((/0, proc_darea_sizes(1:job_count - 1)/), kind=int_8), extra_darea_size) END IF i = 0 DO ind = 1, job_count*nblkrows_total brow = MOD(ind - 1, nblkrows_total) + 1 IF (brow .EQ. 1) i = i + 1 row_size = row_blk_size(brow) DO blk = row_p(ind + i - 1) + 1, row_p(ind + i) actual_blk = INT(blk, kind=int_8) + extra_nblks(i) bcol = col_i(actual_blk) col_size = col_blk_size(bcol) blk_size = row_size*col_size sym_tr = .FALSE. CALL dbcsr_get_stored_coordinates(new_matrix, brow, bcol, dst_p) send_count(1, dst_p) = send_count(1, dst_p) + 1 send_count(2, dst_p) = send_count(2, dst_p) + blk_size END DO END DO CALL mp_alltoall(send_count, recv_count, 2, mp_group) CALL dbcsr_data_init(recv_data) CALL dbcsr_data_new(recv_data, data_type, SUM(recv_count(2, :))) ALLOCATE (recv_meta(metalen*SUM(recv_count(1, :)))) CALL dbcsr_data_init(send_data) CALL dbcsr_data_new(send_data, data_type, SUM(send_count(2, :))) ALLOCATE (send_meta(metalen*SUM(send_count(1, :)))) DO dst_p = 0, numnodes - 1 total_send_count(1, dst_p) = send_count(1, dst_p) total_send_count(2, dst_p) = send_count(2, dst_p) total_recv_count(1, dst_p) = recv_count(1, dst_p) total_recv_count(2, dst_p) = recv_count(2, dst_p) END DO sd_disp = -1; sm_disp = -1; rd_disp = -1; rm_disp = -1 sd_disp(0) = 1; sm_disp(0) = 1; rd_disp(0) = 1; rm_disp(0) = 1 DO dst_p = 1, numnodes - 1 sm_disp(dst_p) = sm_disp(dst_p - 1) + metalen*total_send_count(1, dst_p - 1) sd_disp(dst_p) = sd_disp(dst_p - 1) + total_send_count(2, dst_p - 1) rm_disp(dst_p) = rm_disp(dst_p - 1) + metalen*total_recv_count(1, dst_p - 1) rd_disp(dst_p) = rd_disp(dst_p - 1) + total_recv_count(2, dst_p - 1) END DO sdp(:) = sd_disp smp(:) = sm_disp - metalen SELECT CASE (data_type) CASE (dbcsr_type_real_4) r_sp => dblk%d%r_sp CASE (dbcsr_type_real_8) r_dp => dblk%d%r_dp CASE (dbcsr_type_complex_4) c_sp => dblk%d%c_sp CASE (dbcsr_type_complex_8) c_dp => dblk%d%c_dp END SELECT CALL dbcsr_data_init(data_block) CALL dbcsr_data_new(data_block, data_type) i = 0 dst_p = -1 DO ind = 1, job_count*nblkrows_total brow = MOD(ind - 1, nblkrows_total) + 1 IF (brow .EQ. 1) i = i + 1 row_size = row_blk_size(brow) DO blk = row_p(ind + i - 1) + 1, row_p(ind + i) actual_blk = INT(blk, kind=int_8) + extra_nblks(i) bcol = col_i(actual_blk) col_size = col_blk_size(bcol) blk_size = row_size*col_size blkp = INT(blk_p(actual_blk), kind=int_8) start_ind = blkp + extra_darea_size(i) end_ind = blkp + extra_darea_size(i) + blk_size - 1 SELECT CASE (data_type) CASE (dbcsr_type_real_4) data_block%d%r_sp => r_sp(start_ind:end_ind) CASE (dbcsr_type_real_8) data_block%d%r_dp => r_dp(start_ind:end_ind) CASE (dbcsr_type_complex_4) data_block%d%c_sp => c_sp(start_ind:end_ind) CASE (dbcsr_type_complex_8) data_block%d%c_dp => c_dp(start_ind:end_ind) END SELECT sym_tr = .FALSE. CALL dbcsr_get_stored_coordinates(new_matrix, brow, bcol, dst_p) smp(dst_p) = smp(dst_p) + metalen tr = .FALSE. ! IF (tr) THEN ! send_meta(smp(dst_p)) = -brow ! ELSE send_meta(smp(dst_p)) = brow ! ENDIF send_meta(smp(dst_p) + 1) = bcol blk_size = dbcsr_data_get_size(data_block) CALL dbcsr_data_set(send_data, lb=sdp(dst_p), & data_size=blk_size, src=data_block, source_lb=1) sdp(dst_p) = sdp(dst_p) + blk_size END DO END DO CALL dbcsr_data_clear_pointer(data_block) SELECT CASE (data_type) CASE (dbcsr_type_real_4) CALL hybrid_alltoall_s1( & send_data%d%r_sp(:), total_send_count(2, :), sd_disp(:) - 1, & recv_data%d%r_sp(:), total_recv_count(2, :), rd_disp(:) - 1, & mp_env) CASE (dbcsr_type_real_8) CALL hybrid_alltoall_d1( & send_data%d%r_dp(:), total_send_count(2, :), sd_disp(:) - 1, & recv_data%d%r_dp(:), total_recv_count(2, :), rd_disp(:) - 1, & mp_env) CASE (dbcsr_type_complex_4) CALL hybrid_alltoall_c1( & send_data%d%c_sp(:), total_send_count(2, :), sd_disp(:) - 1, & recv_data%d%c_sp(:), total_recv_count(2, :), rd_disp(:) - 1, & mp_env) CASE (dbcsr_type_complex_8) CALL hybrid_alltoall_z1( & send_data%d%c_dp(:), total_send_count(2, :), sd_disp(:) - 1, & recv_data%d%c_dp(:), total_recv_count(2, :), rd_disp(:) - 1, & mp_env) END SELECT CALL hybrid_alltoall_i1(send_meta(:), metalen*total_send_count(1, :), sm_disp(:) - 1, & recv_meta(:), metalen*total_recv_count(1, :), rm_disp(:) - 1, mp_env) CALL dbcsr_work_create(new_matrix, SUM(recv_count(1, :)), & SUM(recv_count(2, :)), work_mutable=.FALSE., n=1) blk_ps = 1 blks = 0 DO src_p = 0, numnodes - 1 DO meta_l = 1, recv_count(1, src_p) brow = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1)) tr = brow .LT. 0 stored_row_new = ABS(brow) stored_col_new = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 1) blk_size = row_blk_size(stored_row_new)*col_blk_size(stored_col_new) data_block = pointer_view(data_block, recv_data, blk_ps, blk_size) CALL dbcsr_put_block(new_matrix, stored_row_new, stored_col_new, data_block, transposed=tr) blk_ps = blk_ps + blk_size blks = blks + 1 END DO END DO CALL dbcsr_data_clear_pointer(data_block) DEALLOCATE (data_block%d) CALL dbcsr_finalize(new_matrix, reshuffle=.TRUE.) CALL dbcsr_data_release(recv_data) CALL dbcsr_data_release(send_data) DEALLOCATE (send_count) DEALLOCATE (recv_count) DEALLOCATE (sdp); DEALLOCATE (sd_disp) DEALLOCATE (smp); DEALLOCATE (sm_disp) DEALLOCATE (rd_disp) DEALLOCATE (rm_disp) DEALLOCATE (recv_meta) DEALLOCATE (send_meta) DEALLOCATE (extra_nblks); DEALLOCATE (extra_darea_size) CALL timestop(handle) CONTAINS SUBROUTINE cumsum_l(arr, cumsum) INTEGER(kind=int_8), DIMENSION(:), INTENT(IN) :: arr INTEGER(kind=int_8), DIMENSION(:), INTENT(OUT) :: cumsum INTEGER :: i IF (SIZE(cumsum) > 0) THEN cumsum(1) = arr(1) DO i = 2, SIZE(cumsum) cumsum(i) = cumsum(i - 1) + arr(i) END DO END IF END SUBROUTINE cumsum_l END SUBROUTINE dbcsr_datablock_redistribute END MODULE dbcsr_transformations ================================================ FILE: src/tas/PACKAGE ================================================ { "description": "tall-and-skinny matrices", "archive": "libdbcsr", "requires":["../base", "../data", "../mm", "../ops", "../block", "../core", "../work", "../utils", "../dist", "../mpi"], } ================================================ FILE: src/tas/dbcsr_tas.fypp ================================================ #!--------------------------------------------------------------------------------------------------! #! Copyright (C) by the DBCSR developers group - All rights reserved ! #! This file is part of the DBCSR library. ! #! ! #! For information on the license, see the LICENSE file. ! #! For further information please visit https://dbcsr.cp2k.org ! #! SPDX-License-Identifier: GPL-2.0+ ! #!--------------------------------------------------------------------------------------------------! #:mute #! datatypes #:set dtype_float_prec = ['real_8', 'real_4', 'real_8', 'real_4'] #:set dtype_float_type = ['REAL(kind=real_8)', 'REAL(kind=real_4)', 'COMPLEX(kind=real_8)', 'COMPLEX(kind=real_4)'] #:set dtype_float_suffix = ['r_dp', 'r_sp', 'c_dp', 'c_sp'] #:set dtype_float_suffix_dbcsr = ['d', 's', 'z', 'c'] #:set dtype_float_param = ['dbcsr_type_real_8', 'dbcsr_type_real_4', 'dbcsr_type_complex_8', 'dbcsr_type_complex_4'] #:set dtype_int_type = ['INTEGER'] #:set dtype_int_suffix = ['i'] #:set dtype_int_param = ['dbcsr_type_int_4'] #:set dtype_all_type = dtype_float_type + dtype_int_type #:set dtype_all_suffix = dtype_float_suffix + dtype_int_suffix #:set dtype_all_param = dtype_float_param + dtype_int_param #:set dtype_float_list = list(zip(dtype_float_param, dtype_float_type, dtype_float_suffix)) #:set dtype_float_list_prec = list(zip(dtype_float_prec, dtype_float_param, dtype_float_type, dtype_float_suffix)) #:set dtype_float_list_dbcsr = list(zip(dtype_float_param, dtype_float_type, dtype_float_suffix, dtype_float_suffix_dbcsr)) #:set dtype_int_list = list(zip(dtype_int_param, dtype_int_type, dtype_int_suffix)) #:set dtype_all_list = list(zip(dtype_all_param, dtype_all_type, dtype_all_suffix)) #:endmute ================================================ FILE: src/tas/dbcsr_tas_base.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tas_base !! Tall-and-skinny matrices: base routines similar to DBCSR API, mostly wrappers around existing !! DBCSR routines. #:include "dbcsr_tas.fypp" USE dbcsr_block_access, ONLY: & dbcsr_get_block_p, dbcsr_put_block, dbcsr_reserve_blocks USE dbcsr_data_methods, ONLY: & dbcsr_data_new, dbcsr_data_release, dbcsr_type_1d_to_2d USE dbcsr_data_methods_low, ONLY: & dbcsr_data_clear_pointer, dbcsr_data_init USE dbcsr_data_types, ONLY: & dbcsr_data_obj, dbcsr_scalar_type USE dbcsr_dist_methods, ONLY: & dbcsr_distribution_col_dist, dbcsr_distribution_new, dbcsr_distribution_row_dist, dbcsr_distribution_hold USE dbcsr_iterator_operations, ONLY: & dbcsr_iterator_blocks_left, dbcsr_iterator_next_block, dbcsr_iterator_start, dbcsr_iterator_stop USE dbcsr_methods, ONLY: & dbcsr_distribution_release, dbcsr_get_data_type, dbcsr_mp_release, dbcsr_nblkcols_total, & dbcsr_nblkrows_total, dbcsr_nfullrows_total, dbcsr_nfullcols_total, dbcsr_release, & dbcsr_get_data_size, dbcsr_get_num_blocks, dbcsr_get_nze USE dbcsr_operations, ONLY: & dbcsr_get_info, dbcsr_set, dbcsr_filter, dbcsr_clear USE dbcsr_tas_types, ONLY: & dbcsr_tas_distribution_type, dbcsr_tas_iterator, dbcsr_tas_split_info, dbcsr_tas_type USE dbcsr_tas_global, ONLY: & dbcsr_tas_blk_size_arb, dbcsr_tas_dist_arb, dbcsr_tas_distribution, dbcsr_tas_rowcol_data USE dbcsr_tas_split, ONLY: & block_index_global_to_local, block_index_local_to_global, colsplit, & dbcsr_tas_info_hold, dbcsr_tas_release_info, dbcsr_tas_create_split, & group_to_mrowcol, rowsplit, dbcsr_tas_get_split_info USE dbcsr_tas_util, ONLY: & dbcsr_mp_environ, index_unique USE dbcsr_types, ONLY: & dbcsr_distribution_obj, dbcsr_iterator, dbcsr_mp_obj, dbcsr_type, dbcsr_type_no_symmetry USE dbcsr_work_operations, ONLY: & dbcsr_create, dbcsr_finalize USE dbcsr_kinds, ONLY: & default_string_length, int_8, real_8, real_4 USE dbcsr_mpiwrap, ONLY: & mp_cart_rank, mp_environ, mp_sum, mp_comm_type #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_base' PUBLIC :: & ! DBCSR wrappers / interface routines dbcsr_tas_blk_sizes, & dbcsr_tas_clear, & dbcsr_tas_copy, & dbcsr_tas_create, & dbcsr_tas_destroy, & dbcsr_tas_distribution_destroy, & dbcsr_tas_distribution_new, & dbcsr_tas_filter, & dbcsr_tas_finalize, & dbcsr_tas_get_block_p, & dbcsr_tas_get_data_size, & dbcsr_tas_get_data_type, & dbcsr_tas_get_info, & dbcsr_tas_get_num_blocks, & dbcsr_tas_get_nze, & dbcsr_tas_get_nze_total, & dbcsr_tas_get_num_blocks_total, & dbcsr_tas_get_stored_coordinates, & dbcsr_tas_info, & dbcsr_tas_iterator_blocks_left, & dbcsr_tas_iterator_next_block, & dbcsr_tas_iterator_start, & dbcsr_tas_iterator_stop, & dbcsr_tas_nblkcols_local, & dbcsr_tas_nblkcols_total, & dbcsr_tas_nblkrows_local, & dbcsr_tas_nblkrows_total, & dbcsr_tas_nfullrows_total, & dbcsr_tas_nfullcols_total, & dbcsr_tas_put_block, & dbcsr_tas_reserve_blocks, & dbcsr_tas_set, & dbcsr_repl_get_stored_coordinates PUBLIC :: & ! conversion routines dbcsr_tas_convert_to_dbcsr, & dbcsr_tas_convert_to_tas INTERFACE dbcsr_tas_create MODULE PROCEDURE dbcsr_tas_create_new MODULE PROCEDURE dbcsr_tas_create_template END INTERFACE INTERFACE dbcsr_tas_get_block_p MODULE PROCEDURE dbcsr_tas_get_block_p_area END INTERFACE INTERFACE dbcsr_tas_put_block MODULE PROCEDURE dbcsr_tas_put_block_area END INTERFACE INTERFACE dbcsr_tas_reserve_blocks MODULE PROCEDURE dbcsr_tas_reserve_blocks_template MODULE PROCEDURE dbcsr_tas_reserve_blocks_index END INTERFACE INTERFACE dbcsr_tas_iterator_next_block MODULE PROCEDURE dbcsr_tas_iterator_next_area_block MODULE PROCEDURE dbcsr_tas_iterator_next_block_index END INTERFACE INTERFACE dbcsr_tas_iterator_next_block #:for dparam, dtype, dsuffix in dtype_float_list MODULE PROCEDURE dbcsr_tas_iterator_next_block_${dsuffix}$ #:endfor END INTERFACE INTERFACE dbcsr_tas_put_block #:for dparam, dtype, dsuffix in dtype_float_list MODULE PROCEDURE dbcsr_tas_put_block_${dsuffix}$ #:endfor END INTERFACE INTERFACE dbcsr_tas_get_block_p #:for dparam, dtype, dsuffix in dtype_float_list MODULE PROCEDURE dbcsr_tas_get_block_p_${dsuffix}$ #:endfor END INTERFACE INTERFACE dbcsr_tas_set #:for dparam, dtype, dsuffix in dtype_float_list MODULE PROCEDURE dbcsr_tas_set_${dsuffix}$ #:endfor END INTERFACE INTERFACE dbcsr_tas_filter #:for dparam, dtype, dsuffix in dtype_float_list MODULE PROCEDURE dbcsr_tas_filter_${dsuffix}$ #:endfor END INTERFACE CONTAINS SUBROUTINE dbcsr_tas_create_new(matrix, name, dist, data_type, & row_blk_size, col_blk_size, own_dist) !! Create new tall-and-skinny matrix. !! Exactly like dbcsr_create_new but with custom types for row_blk_size and col_blk_size instead of !! arrays. TYPE(dbcsr_tas_type), INTENT(OUT) :: matrix CHARACTER(len=*), INTENT(IN) :: name TYPE(dbcsr_tas_distribution_type), INTENT(INOUT) :: dist INTEGER, INTENT(IN), OPTIONAL :: data_type CLASS(dbcsr_tas_rowcol_data), INTENT(IN) :: row_blk_size, col_blk_size LOGICAL, INTENT(IN), OPTIONAL :: own_dist !! whether matrix should own distribution TYPE(dbcsr_tas_split_info) :: info INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: row_blk_size_vec, col_blk_size_vec INTEGER :: nrows, ncols, irow, col, icol, row CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_create_new' INTEGER :: handle CALL timeset(routineN, handle) CALL dbcsr_tas_copy_distribution(dist, matrix%dist, own_dist) matrix%nblkrows = row_blk_size%nmrowcol matrix%nblkcols = col_blk_size%nmrowcol DBCSR_ASSERT(matrix%nblkrows == dist%row_dist%nmrowcol) DBCSR_ASSERT(matrix%nblkcols == dist%col_dist%nmrowcol) matrix%nfullrows = row_blk_size%nfullrowcol matrix%nfullcols = col_blk_size%nfullrowcol ALLOCATE (matrix%row_blk_size, source=row_blk_size) ALLOCATE (matrix%col_blk_size, source=col_blk_size) info = dbcsr_tas_info(matrix) SELECT CASE (info%split_rowcol) CASE (rowsplit) matrix%nblkrowscols_split = matrix%nblkrows ASSOCIATE (rows => dist%local_rowcols) nrows = SIZE(rows) ncols = INT(dist%col_dist%nmrowcol) ALLOCATE (row_blk_size_vec(nrows)) ALLOCATE (col_blk_size_vec(ncols)) DO irow = 1, nrows row_blk_size_vec(irow) = row_blk_size%data(rows(irow)) END DO DO col = 1, ncols col_blk_size_vec(col) = col_blk_size%data(INT(col, KIND=int_8)) END DO END ASSOCIATE CASE (colsplit) matrix%nblkrowscols_split = matrix%nblkcols ASSOCIATE (cols => dist%local_rowcols) ncols = SIZE(cols) nrows = INT(dist%row_dist%nmrowcol) ALLOCATE (row_blk_size_vec(nrows)) ALLOCATE (col_blk_size_vec(ncols)) DO icol = 1, ncols col_blk_size_vec(icol) = col_blk_size%data(cols(icol)) END DO DO row = 1, nrows row_blk_size_vec(row) = row_blk_size%data(INT(row, KIND=int_8)) END DO END ASSOCIATE END SELECT CALL dbcsr_create(matrix=matrix%matrix, & name=name, & dist=dist%dbcsr_dist, & matrix_type=dbcsr_type_no_symmetry, & row_blk_size=row_blk_size_vec, & col_blk_size=col_blk_size_vec, & data_type=data_type, & reuse_arrays=.TRUE.) matrix%valid = .TRUE. CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_tas_create_template(matrix_in, matrix, name, data_type) !! Create matrix from template TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix_in TYPE(dbcsr_tas_type), INTENT(OUT) :: matrix CHARACTER(len=*), INTENT(IN), OPTIONAL :: name INTEGER, INTENT(IN), OPTIONAL :: data_type CALL dbcsr_create(matrix%matrix, template=matrix_in%matrix, matrix_type=dbcsr_type_no_symmetry, & data_type=data_type) CALL dbcsr_finalize(matrix%matrix) CALL dbcsr_tas_copy_distribution(matrix_in%dist, matrix%dist) ALLOCATE (matrix%row_blk_size, source=matrix_in%row_blk_size) ALLOCATE (matrix%col_blk_size, source=matrix_in%col_blk_size) matrix%nblkrows = matrix_in%nblkrows matrix%nblkcols = matrix_in%nblkcols matrix%nblkrowscols_split = matrix_in%nblkrowscols_split matrix%nfullrows = matrix_in%nfullrows matrix%nfullcols = matrix_in%nfullcols matrix%valid = .TRUE. IF (PRESENT(name)) THEN matrix%matrix%name = name ELSE matrix%matrix%name = matrix_in%matrix%name END IF END SUBROUTINE SUBROUTINE dbcsr_tas_destroy(matrix) TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix CALL dbcsr_release(matrix%matrix) CALL dbcsr_tas_distribution_destroy(matrix%dist) DEALLOCATE (matrix%row_blk_size) DEALLOCATE (matrix%col_blk_size) matrix%valid = .FALSE. END SUBROUTINE SUBROUTINE dbcsr_tas_copy(matrix_b, matrix_a, summation) !! Copy matrix_a to matrix_b TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix_b TYPE(dbcsr_tas_type), INTENT(IN) :: matrix_a LOGICAL, INTENT(IN), OPTIONAL :: summation !! Whether to sum matrices b = a + b CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_copy' INTEGER :: handle TYPE(dbcsr_tas_iterator) :: iter TYPE(dbcsr_data_obj) :: block LOGICAL :: transposed INTEGER :: data_type INTEGER(KIND=int_8) :: row, column CALL timeset(routineN, handle) DBCSR_ASSERT(matrix_b%valid) CALL dbcsr_tas_get_info(matrix_a, data_type=data_type) IF (PRESENT(summation)) THEN IF (.NOT. summation) CALL dbcsr_tas_clear(matrix_b) ELSE CALL dbcsr_tas_clear(matrix_b) END IF CALL dbcsr_tas_reserve_blocks(matrix_a, matrix_b) CALL dbcsr_data_init(block) CALL dbcsr_data_new(block, dbcsr_type_1d_to_2d(data_type)) CALL dbcsr_tas_iterator_start(iter, matrix_a) DO WHILE (dbcsr_tas_iterator_blocks_left(iter)) CALL dbcsr_tas_iterator_next_block(iter, row, column, block, transposed) CALL dbcsr_tas_put_block(matrix_b, row, column, block, transposed, summation=summation) END DO CALL dbcsr_tas_iterator_stop(iter) CALL dbcsr_data_clear_pointer(block) CALL dbcsr_data_release(block) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_tas_reserve_blocks_template(matrix_in, matrix_out) !! Make sure that matrix_out has same blocks reserved as matrix_in. This assumes that both !! matrices have same number of block rows and block columns. TYPE(dbcsr_tas_type), INTENT(IN) :: matrix_in TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix_out TYPE(dbcsr_tas_iterator) :: iter INTEGER :: iblk, nblk INTEGER(KIND=int_8) :: row, column INTEGER :: blk INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE :: row_res, col_res nblk = dbcsr_tas_get_num_blocks(matrix_in) ALLOCATE (row_res(nblk), col_res(nblk)) CALL dbcsr_tas_iterator_start(iter, matrix_in) DO iblk = 1, nblk CALL dbcsr_tas_iterator_next_block(iter, row, column, blk) row_res(iblk) = row col_res(iblk) = column END DO DBCSR_ASSERT(.NOT. dbcsr_tas_iterator_blocks_left(iter)) CALL dbcsr_tas_iterator_stop(iter) CALL dbcsr_tas_reserve_blocks(matrix_out, row_res, col_res) END SUBROUTINE SUBROUTINE dbcsr_tas_finalize(matrix) TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix CALL dbcsr_finalize(matrix%matrix) END SUBROUTINE SUBROUTINE dbcsr_tas_distribution_new(dist, mp_comm, & row_dist, col_dist, split_info, nosplit) !! create new distribution. !! Exactly like dbcsr_distribution_new but with custom types for row_dist and col_dist instead of !! arrays. TYPE(dbcsr_tas_distribution_type), INTENT(OUT) :: dist TYPE(mp_comm_type), INTENT(IN) :: mp_comm CLASS(dbcsr_tas_distribution), INTENT(IN) :: row_dist, col_dist TYPE(dbcsr_tas_split_info), INTENT(IN), OPTIONAL :: split_info !! Strategy of how to split process grid (optional). If not present a default split heuristic is applied. LOGICAL, INTENT(IN), OPTIONAL :: nosplit !! if .TRUE. don't split process grid (optional) !LOGICAL, INTENT(IN), OPTIONAL :: strict_split TYPE(dbcsr_tas_split_info) :: split_info_prv INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: row_dist_vec INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_dist_vec TYPE(dbcsr_mp_obj) :: mp_environ_tmp INTEGER :: nrows, ncols, irow, col, icol, row, & split_rowcol, nsplit, handle LOGICAL :: opt_nsplit CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_distribution_new' CALL timeset(routineN, handle) IF (PRESENT(split_info)) THEN CALL dbcsr_tas_info_hold(split_info) split_info_prv = split_info ELSE ! default split heuristic: split into submatrices that have roughly same block dimensions IF (row_dist%nmrowcol >= col_dist%nmrowcol) THEN split_rowcol = rowsplit nsplit = INT((row_dist%nmrowcol - 1)/col_dist%nmrowcol + 1) ELSE split_rowcol = colsplit nsplit = INT((col_dist%nmrowcol - 1)/row_dist%nmrowcol + 1) END IF opt_nsplit = .TRUE. IF (PRESENT(nosplit)) THEN IF (nosplit) THEN nsplit = 1 opt_nsplit = .FALSE. END IF END IF CALL dbcsr_tas_create_split(split_info_prv, mp_comm, split_rowcol, nsplit=nsplit, opt_nsplit=opt_nsplit) END IF SELECT CASE (split_info_prv%split_rowcol) CASE (rowsplit) CALL group_to_mrowcol(split_info_prv, row_dist, split_info_prv%igroup, dist%local_rowcols) nrows = SIZE(dist%local_rowcols) ncols = INT(col_dist%nmrowcol) ALLOCATE (row_dist_vec(nrows)) ALLOCATE (col_dist_vec(ncols)) DO irow = 1, nrows row_dist_vec(irow) = row_dist%dist(dist%local_rowcols(irow)) - split_info_prv%pgrid_split_size*split_info_prv%igroup END DO DO col = 1, ncols col_dist_vec(col) = col_dist%dist(INT(col, KIND=int_8)) END DO CASE (colsplit) CALL group_to_mrowcol(split_info_prv, col_dist, split_info_prv%igroup, dist%local_rowcols) ncols = SIZE(dist%local_rowcols) nrows = INT(row_dist%nmrowcol) ALLOCATE (col_dist_vec(ncols)) ALLOCATE (row_dist_vec(nrows)) DO icol = 1, ncols col_dist_vec(icol) = col_dist%dist(dist%local_rowcols(icol)) - split_info_prv%pgrid_split_size*split_info_prv%igroup END DO DO row = 1, nrows row_dist_vec(row) = row_dist%dist(INT(row, KIND=int_8)) END DO END SELECT mp_environ_tmp = dbcsr_mp_environ(split_info_prv%mp_comm_group) dist%info = split_info_prv CALL dbcsr_distribution_new(dist%dbcsr_dist, mp_environ_tmp, row_dist_vec, col_dist_vec, reuse_arrays=.TRUE.) ALLOCATE (dist%row_dist, source=row_dist) ALLOCATE (dist%col_dist, source=col_dist) CALL dbcsr_mp_release(mp_environ_tmp) !IF(PRESENT(strict_split)) dist%strict_split = strict_split CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_tas_distribution_destroy(dist) TYPE(dbcsr_tas_distribution_type), INTENT(INOUT) :: dist ! Note: Issue with Cray CCE compiler ! commented out the following deallocate statements on polymorphic variables, ! these cause segfaults with CCE compiler at a later point !IF (ALLOCATED(dist%row_dist)) THEN ! DEALLOCATE (dist%row_dist) !ENDIF !IF (ALLOCATED(dist%col_dist)) THEN ! DEALLOCATE (dist%col_dist) !ENDIF IF (ALLOCATED(dist%local_rowcols)) THEN DEALLOCATE (dist%local_rowcols) END IF CALL dbcsr_tas_release_info(dist%info) CALL dbcsr_distribution_release(dist%dbcsr_dist) END SUBROUTINE SUBROUTINE dbcsr_tas_get_stored_coordinates(matrix, row, column, processor) !! As dbcsr_get_stored_coordinates TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER(KIND=int_8), INTENT(IN) :: row, column !! global matrix blocked row !! global matrix blocked column INTEGER, INTENT(OUT) :: processor !! process ID INTEGER, DIMENSION(2) :: pcoord TYPE(dbcsr_tas_split_info) :: info pcoord(1) = matrix%dist%row_dist%dist(row) pcoord(2) = matrix%dist%col_dist%dist(column) info = dbcsr_tas_info(matrix) ! workaround for inefficient mpi_cart_rank processor = pcoord(1)*info%pdims(2) + pcoord(2) END SUBROUTINE SUBROUTINE dbcsr_repl_get_stored_coordinates(matrix, row, column, processors) !! Get all processors for a given row/col combination if matrix is replicated on each process !! subgroup. TYPE(dbcsr_tas_type), INTENT(IN) :: matrix !! tall-and-skinny matrix whose DBCSR submatrices are replicated matrices INTEGER, INTENT(IN) :: row, column !! row of a submatrix !! column of a submatrix INTEGER, DIMENSION(:), INTENT(OUT) :: processors INTEGER :: igroup INTEGER(KIND=int_8) :: col_s, row_s INTEGER, DIMENSION(2) :: pcoord TYPE(dbcsr_tas_split_info) :: info row_s = INT(row, KIND=int_8); col_s = INT(column, KIND=int_8) info = dbcsr_tas_info(matrix) pcoord(1) = matrix%dist%row_dist%dist(row_s) pcoord(2) = matrix%dist%col_dist%dist(col_s) DO igroup = 0, info%ngroup - 1 CALL mp_cart_rank(info%mp_comm, pcoord, processors(igroup + 1)) SELECT CASE (info%split_rowcol) CASE (rowsplit) row_s = row_s + dbcsr_tas_nblkrows_local(matrix) pcoord(1) = matrix%dist%row_dist%dist(row_s) CASE (colsplit) col_s = col_s + dbcsr_tas_nblkcols_local(matrix) pcoord(2) = matrix%dist%col_dist%dist(col_s) END SELECT END DO END SUBROUTINE SUBROUTINE dbcsr_tas_convert_to_dbcsr(matrix_rect, matrix_dbcsr) !! Convert a tall-and-skinny matrix into a normal DBCSR matrix. !! This is not recommended for matrices with a very large dimension. TYPE(dbcsr_tas_type), INTENT(IN) :: matrix_rect TYPE(dbcsr_type), INTENT(OUT) :: matrix_dbcsr CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_convert_to_dbcsr' INTEGER :: handle INTEGER(KIND=int_8) :: col, row INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_dist_vec, col_size_vec, & row_dist_vec, row_size_vec LOGICAL :: tr TYPE(dbcsr_data_obj) :: block TYPE(dbcsr_distribution_obj) :: dist TYPE(dbcsr_mp_obj) :: mp_environ_tmp TYPE(dbcsr_tas_iterator) :: iter TYPE(dbcsr_tas_split_info) :: info INTEGER :: block_number, rb_count, nblks_local INTEGER, DIMENSION(:), ALLOCATABLE :: nz_rows, nz_cols CALL timeset(routineN, handle) info = dbcsr_tas_info(matrix_rect) ALLOCATE (row_dist_vec(matrix_rect%nblkrows)) ALLOCATE (row_size_vec(matrix_rect%nblkrows)) ALLOCATE (col_dist_vec(matrix_rect%nblkcols)) ALLOCATE (col_size_vec(matrix_rect%nblkcols)) DO row = 1, matrix_rect%nblkrows row_dist_vec(row) = matrix_rect%dist%row_dist%dist(row) row_size_vec(row) = matrix_rect%row_blk_size%data(row) END DO DO col = 1, matrix_rect%nblkcols col_dist_vec(col) = matrix_rect%dist%col_dist%dist(col) col_size_vec(col) = matrix_rect%col_blk_size%data(col) END DO mp_environ_tmp = dbcsr_mp_environ(info%mp_comm) CALL dbcsr_distribution_new(dist, mp_environ_tmp, row_dist_vec, col_dist_vec, reuse_arrays=.TRUE.) CALL dbcsr_mp_release(mp_environ_tmp) CALL dbcsr_create(matrix=matrix_dbcsr, & name=TRIM(matrix_rect%matrix%name), & dist=dist, & matrix_type=dbcsr_type_no_symmetry, & row_blk_size=row_size_vec, & col_blk_size=col_size_vec, & data_type=dbcsr_get_data_type(matrix_rect%matrix), & reuse_arrays=.TRUE.) CALL dbcsr_distribution_release(dist) CALL dbcsr_data_init(block) CALL dbcsr_data_new(block, dbcsr_type_1d_to_2d(dbcsr_tas_get_data_type(matrix_rect))) nblks_local = dbcsr_tas_get_num_blocks(matrix_rect) CALL dbcsr_tas_iterator_start(iter, matrix_rect) ALLOCATE (nz_rows(nblks_local), nz_cols(nblks_local)) rb_count = 0 DO WHILE (dbcsr_tas_iterator_blocks_left(iter)) CALL dbcsr_tas_iterator_next_block(iter, row, col, block_number) rb_count = rb_count + 1 nz_rows(rb_count) = INT(row) nz_cols(rb_count) = INT(col) END DO CALL dbcsr_reserve_blocks(matrix_dbcsr, nz_rows, nz_cols) CALL dbcsr_tas_iterator_stop(iter) CALL dbcsr_tas_iterator_start(iter, matrix_rect) DO WHILE (dbcsr_tas_iterator_blocks_left(iter)) CALL dbcsr_tas_iterator_next_block(iter, row, col, block, tr) CALL dbcsr_put_block(matrix_dbcsr, INT(row), INT(col), block) END DO CALL dbcsr_tas_iterator_stop(iter) CALL dbcsr_data_clear_pointer(block) CALL dbcsr_data_release(block) CALL dbcsr_finalize(matrix_dbcsr) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_tas_convert_to_tas(info, matrix_rect, matrix_dbcsr) !! Converts a DBCSR matrix into the tall-and-skinny matrix type. TYPE(dbcsr_tas_split_info), INTENT(IN) :: info !! Strategy of how to split process grid TYPE(dbcsr_tas_type), INTENT(OUT) :: matrix_rect TYPE(dbcsr_type), INTENT(IN) :: matrix_dbcsr CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_convert_to_tas' CHARACTER(len=default_string_length) :: name INTEGER :: col, data_type, handle, numnodes, row INTEGER(KIND=int_8) :: nbcols, nbrows INTEGER, DIMENSION(2) :: pcoord, pdims INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_blk_size, row_blk_size LOGICAL :: tr TYPE(dbcsr_data_obj) :: block TYPE(dbcsr_distribution_obj) :: dbcsr_dist TYPE(dbcsr_iterator) :: iter TYPE(dbcsr_tas_blk_size_arb) :: col_blk_size_obj, row_blk_size_obj TYPE(dbcsr_tas_dist_arb) :: col_dist_obj, row_dist_obj TYPE(dbcsr_tas_distribution_type) :: dist NULLIFY (col_blk_size, row_blk_size) CALL timeset(routineN, handle) CALL mp_environ(numnodes, pdims, pcoord, info%mp_comm) CALL dbcsr_get_info(matrix_dbcsr, distribution=dbcsr_dist, name=name, data_type=data_type, & row_blk_size=row_blk_size, col_blk_size=col_blk_size) nbrows = dbcsr_nblkrows_total(matrix_dbcsr) nbcols = dbcsr_nblkcols_total(matrix_dbcsr) row_dist_obj = dbcsr_tas_dist_arb(dbcsr_distribution_row_dist(dbcsr_dist), pdims(1), nbrows) col_dist_obj = dbcsr_tas_dist_arb(dbcsr_distribution_col_dist(dbcsr_dist), pdims(2), nbcols) row_blk_size_obj = dbcsr_tas_blk_size_arb(row_blk_size) col_blk_size_obj = dbcsr_tas_blk_size_arb(col_blk_size) CALL dbcsr_tas_distribution_new(dist, info%mp_comm, row_dist_obj, col_dist_obj) CALL dbcsr_tas_create(matrix_rect, TRIM(name)//"_compressed", & dist, data_type, row_blk_size_obj, col_blk_size_obj) CALL dbcsr_data_init(block) CALL dbcsr_data_new(block, dbcsr_type_1d_to_2d(data_type)) CALL dbcsr_iterator_start(iter, matrix_dbcsr) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, block, tr) CALL dbcsr_tas_put_block(matrix_rect, INT(row, KIND=int_8), INT(col, KIND=int_8), block) END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(block) CALL dbcsr_data_release(block) CALL dbcsr_tas_finalize(matrix_rect) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_tas_iterator_start(iter, matrix_in) !! As dbcsr_iterator_start TYPE(dbcsr_tas_iterator), INTENT(INOUT) :: iter TYPE(dbcsr_tas_type), INTENT(IN) :: matrix_in CALL dbcsr_iterator_start(iter%iter, matrix_in%matrix) iter%dist = matrix_in%dist END SUBROUTINE FUNCTION dbcsr_tas_iterator_blocks_left(iter) !! As dbcsr_iterator_blocks_left TYPE(dbcsr_tas_iterator), INTENT(IN) :: iter LOGICAL :: dbcsr_tas_iterator_blocks_left dbcsr_tas_iterator_blocks_left = dbcsr_iterator_blocks_left(iter%iter) END FUNCTION SUBROUTINE dbcsr_tas_iterator_stop(iter) !! As dbcsr_iterator_stop TYPE(dbcsr_tas_iterator), INTENT(INOUT) :: iter CALL dbcsr_iterator_stop(iter%iter) END SUBROUTINE SUBROUTINE dbcsr_tas_iterator_next_area_block(iterator, row, column, block, transposed, block_number, & !! As dbcsr_iterator_next_block row_size, col_size) TYPE(dbcsr_tas_iterator), INTENT(INOUT) :: iterator INTEGER(KIND=int_8), INTENT(OUT) :: row, column TYPE(dbcsr_data_obj), INTENT(INOUT) :: block LOGICAL, INTENT(OUT) :: transposed INTEGER, INTENT(OUT), OPTIONAL :: block_number, row_size, col_size INTEGER :: column_group, row_group CALL dbcsr_iterator_next_block(iterator%iter, row_group, column_group, block, transposed, block_number, & row_size, col_size) CALL block_index_local_to_global(iterator%dist%info, iterator%dist, row_group=row_group, column_group=column_group, & row=row, column=column) END SUBROUTINE SUBROUTINE dbcsr_tas_iterator_next_block_index(iterator, row, column, block_number, & transposed, blk_p, row_size, col_size) !! As dbcsr_iterator_next_block TYPE(dbcsr_tas_iterator), INTENT(INOUT) :: iterator INTEGER(KIND=int_8), INTENT(OUT) :: row, column !! global block row !! global block column INTEGER, INTENT(OUT) :: block_number LOGICAL, INTENT(OUT), OPTIONAL :: transposed INTEGER, INTENT(OUT), OPTIONAL :: blk_p, row_size, col_size INTEGER :: column_group, row_group CALL dbcsr_iterator_next_block(iterator%iter, row_group, column_group, block_number, transposed, blk_p, & row_size, col_size) CALL block_index_local_to_global(iterator%dist%info, iterator%dist, row_group=row_group, column_group=column_group, & row=row, column=column) END SUBROUTINE SUBROUTINE dbcsr_tas_reserve_blocks_index(matrix, rows, columns) !! As dbcsr_reserve_blocks TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix INTEGER(KIND=int_8), DIMENSION(:), INTENT(IN) :: rows, columns CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_reserve_blocks_index' INTEGER :: handle, icol, irow INTEGER, DIMENSION(SIZE(rows), 2) :: rowcols_group INTEGER, DIMENSION(:, :), ALLOCATABLE :: rowcols_group_u CALL timeset(routineN, handle) DO irow = 1, SIZE(rows) CALL block_index_global_to_local(dbcsr_tas_info(matrix), matrix%dist, row=rows(irow), & row_group=rowcols_group(irow, 1)) END DO DO icol = 1, SIZE(columns) CALL block_index_global_to_local(dbcsr_tas_info(matrix), matrix%dist, column=columns(icol), & column_group=rowcols_group(icol, 2)) END DO CALL index_unique(rowcols_group, rowcols_group_u) ! make sure that index is unique, not sure ! if this is really needed or whether DBCSR ! takes care of duplicate indices CALL dbcsr_reserve_blocks(matrix%matrix, rowcols_group_u(:, 1), rowcols_group_u(:, 2)) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_tas_put_block_area(matrix, row, col, block, transposed, summation, & !! As dbcsr_put_block scale) TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix INTEGER(KIND=int_8), INTENT(IN) :: row, col TYPE(dbcsr_data_obj) :: block LOGICAL, INTENT(IN), OPTIONAL :: transposed, summation TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: scale INTEGER :: col_group, row_group CALL block_index_global_to_local(dbcsr_tas_info(matrix), matrix%dist, row=row, column=col, & row_group=row_group, column_group=col_group) CALL dbcsr_put_block(matrix%matrix, row_group, col_group, block, transposed=transposed, summation=summation, scale=scale) END SUBROUTINE SUBROUTINE dbcsr_tas_get_block_p_area(matrix, row, col, block, transposed, found, row_size, col_size) !! As dbcsr_get_block_p TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix INTEGER(KIND=int_8), INTENT(IN) :: row, col TYPE(dbcsr_data_obj), INTENT(INOUT) :: block LOGICAL, INTENT(OUT) :: transposed, found INTEGER, INTENT(OUT), OPTIONAL :: row_size, col_size INTEGER :: col_group, row_group CALL block_index_global_to_local(dbcsr_tas_info(matrix), matrix%dist, row=row, column=col, & row_group=row_group, column_group=col_group) CALL dbcsr_get_block_p(matrix%matrix, row_group, col_group, block, transposed, found, row_size=row_size, col_size=col_size) END SUBROUTINE SUBROUTINE dbcsr_tas_copy_distribution(dist_in, dist_out, own_dist) !! Copy a distribution TYPE(dbcsr_tas_distribution_type), INTENT(INOUT) :: dist_in TYPE(dbcsr_tas_distribution_type), INTENT(OUT) :: dist_out LOGICAL, INTENT(IN), OPTIONAL :: own_dist !! Whether distribution should be owned by dist_out LOGICAL :: own_dist_prv IF (PRESENT(own_dist)) THEN own_dist_prv = own_dist ELSE own_dist_prv = .FALSE. END IF IF (.NOT. own_dist_prv) THEN CALL dbcsr_distribution_hold(dist_in%dbcsr_dist) CALL dbcsr_tas_info_hold(dist_in%info) END IF dist_out = dist_in END SUBROUTINE SUBROUTINE dbcsr_tas_blk_sizes(matrix, row, col, row_size, col_size) !! Get block size for a given row & column TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER(KIND=int_8), INTENT(IN) :: row, col INTEGER, INTENT(OUT) :: row_size, col_size CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_blk_sizes' INTEGER :: handle CALL timeset(routineN, handle) row_size = matrix%row_blk_size%data(row) col_size = matrix%col_blk_size%data(col) CALL timestop(handle) END SUBROUTINE FUNCTION dbcsr_tas_info(matrix) !! get info on mpi grid splitting TYPE(dbcsr_tas_type), INTENT(IN) :: matrix TYPE(dbcsr_tas_split_info) :: dbcsr_tas_info dbcsr_tas_info = matrix%dist%info END FUNCTION FUNCTION dbcsr_tas_nblkrows_total(matrix) RESULT(nblkrows_total) TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER(KIND=int_8) :: nblkrows_total nblkrows_total = matrix%nblkrows END FUNCTION FUNCTION dbcsr_tas_nfullrows_total(matrix) RESULT(nfullrows_total) TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER(KIND=int_8) :: nfullrows_total nfullrows_total = matrix%nfullrows END FUNCTION FUNCTION dbcsr_tas_nblkcols_total(matrix) RESULT(nblkcols_total) TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER(KIND=int_8) :: nblkcols_total nblkcols_total = matrix%nblkcols END FUNCTION FUNCTION dbcsr_tas_nfullcols_total(matrix) RESULT(nfullcols_total) TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER(KIND=int_8) :: nfullcols_total nfullcols_total = matrix%nfullcols END FUNCTION FUNCTION dbcsr_tas_nblkcols_local(matrix) RESULT(nblkcols_local) TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER :: nblkcols_local nblkcols_local = dbcsr_nblkcols_total(matrix%matrix) END FUNCTION FUNCTION dbcsr_tas_nblkrows_local(matrix) RESULT(nblkrows_local) TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER :: nblkrows_local nblkrows_local = dbcsr_nblkrows_total(matrix%matrix) END FUNCTION PURE FUNCTION dbcsr_tas_get_num_blocks(matrix) RESULT(num_blocks) !! As dbcsr_get_num_blocks: get number of local blocks TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER :: num_blocks num_blocks = dbcsr_get_num_blocks(matrix%matrix) END FUNCTION FUNCTION dbcsr_tas_get_num_blocks_total(matrix) RESULT(num_blocks) !! get total number of blocks TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER(KIND=int_8) :: num_blocks TYPE(dbcsr_tas_split_info) :: info info = dbcsr_tas_info(matrix) num_blocks = dbcsr_tas_get_num_blocks(matrix) CALL mp_sum(num_blocks, info%mp_comm) END FUNCTION PURE FUNCTION dbcsr_tas_get_nze(matrix) !! As dbcsr_get_nze: get number of local non-zero elements TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER :: dbcsr_tas_get_nze dbcsr_tas_get_nze = dbcsr_get_nze(matrix%matrix) END FUNCTION FUNCTION dbcsr_tas_get_nze_total(matrix) !! Get total number of non-zero elements TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER(KIND=int_8) :: dbcsr_tas_get_nze_total TYPE(dbcsr_tas_split_info) :: info dbcsr_tas_get_nze_total = dbcsr_tas_get_nze(matrix) info = dbcsr_tas_info(matrix) CALL mp_sum(dbcsr_tas_get_nze_total, info%mp_comm) END FUNCTION FUNCTION dbcsr_tas_get_data_type(matrix) RESULT(data_type) !! As dbcsr_get_data_type TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER :: data_type data_type = dbcsr_get_data_type(matrix%matrix) END FUNCTION FUNCTION dbcsr_tas_get_data_size(matrix) RESULT(data_size) !! As dbcsr_get_data_size TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER :: data_size data_size = dbcsr_get_data_size(matrix%matrix) END FUNCTION SUBROUTINE dbcsr_tas_clear(matrix) !! Clear matrix (erase all data) TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix CALL dbcsr_clear(matrix%matrix) END SUBROUTINE SUBROUTINE dbcsr_tas_get_info(matrix, nblkrows_total, nblkcols_total, & nfullrows_total, nfullcols_total, & nblkrows_local, nblkcols_local, & nfullrows_local, nfullcols_local, & nprow, npcol, my_prow, my_pcol, & local_rows, local_cols, proc_row_dist, proc_col_dist, & row_blk_size, col_blk_size, distribution, name, data_area, & matrix_type, data_type) TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL :: nblkrows_total, nblkcols_total, nfullrows_total, & nfullcols_total INTEGER, INTENT(OUT), OPTIONAL :: nblkrows_local, nblkcols_local, nfullrows_local, & nfullcols_local, nprow, npcol, my_prow, my_pcol INTEGER(KIND=int_8), DIMENSION(:), OPTIONAL, ALLOCATABLE :: local_rows, local_cols CLASS(dbcsr_tas_distribution), ALLOCATABLE, OPTIONAL, & INTENT(OUT) :: proc_row_dist, proc_col_dist CLASS(dbcsr_tas_rowcol_data), ALLOCATABLE, OPTIONAL, & INTENT(OUT) :: row_blk_size, col_blk_size TYPE(dbcsr_tas_distribution_type), OPTIONAL :: distribution CHARACTER(len=*), INTENT(OUT), OPTIONAL :: name TYPE(dbcsr_data_obj), INTENT(OUT), OPTIONAL :: data_area CHARACTER, OPTIONAL :: matrix_type INTEGER, OPTIONAL :: data_type TYPE(dbcsr_tas_split_info) :: info INTEGER :: numnodes, irow, icol INTEGER, DIMENSION(2) :: pdims, pcoord INTEGER, DIMENSION(:), POINTER :: local_rows_local, local_cols_local NULLIFY (local_rows_local, local_cols_local) CALL dbcsr_get_info(matrix%matrix, nblkrows_local=nblkrows_local, nblkcols_local=nblkcols_local, & nfullrows_local=nfullrows_local, nfullcols_local=nfullcols_local, & local_rows=local_rows_local, local_cols=local_cols_local, & name=name, data_area=data_area, matrix_type=matrix_type, data_type=data_type) IF (PRESENT(nblkrows_total)) nblkrows_total = dbcsr_tas_nblkrows_total(matrix) IF (PRESENT(nblkcols_total)) nblkcols_total = dbcsr_tas_nblkcols_total(matrix) IF (PRESENT(nfullrows_total)) nfullrows_total = dbcsr_tas_nfullrows_total(matrix) IF (PRESENT(nfullcols_total)) nfullcols_total = dbcsr_tas_nfullcols_total(matrix) info = dbcsr_tas_info(matrix) CALL mp_environ(numnodes, pdims, pcoord, info%mp_comm) IF (PRESENT(my_prow)) my_prow = pcoord(1) IF (PRESENT(my_pcol)) my_pcol = pcoord(2) IF (PRESENT(nprow)) nprow = pdims(1) IF (PRESENT(npcol)) npcol = pdims(2) IF (PRESENT(local_rows)) THEN ALLOCATE (local_rows(SIZE(local_rows_local))) DO irow = 1, SIZE(local_rows_local) CALL block_index_local_to_global(info, matrix%dist, row_group=local_rows_local(irow), row=local_rows(irow)) END DO END IF IF (PRESENT(local_cols)) THEN ALLOCATE (local_cols(SIZE(local_cols_local))) DO icol = 1, SIZE(local_cols_local) CALL block_index_local_to_global(info, matrix%dist, column_group=local_cols_local(icol), column=local_cols(icol)) END DO END IF IF (PRESENT(proc_row_dist)) ALLOCATE (proc_row_dist, SOURCE=matrix%dist%row_dist) IF (PRESENT(proc_col_dist)) ALLOCATE (proc_col_dist, SOURCE=matrix%dist%col_dist) IF (PRESENT(row_blk_size)) ALLOCATE (row_blk_size, SOURCE=matrix%row_blk_size) IF (PRESENT(col_blk_size)) ALLOCATE (col_blk_size, SOURCE=matrix%col_blk_size) IF (PRESENT(distribution)) distribution = matrix%dist END SUBROUTINE #:for dparam, dtype, dsuffix in dtype_float_list SUBROUTINE dbcsr_tas_iterator_next_block_${dsuffix}$ (iterator, row, column, block, transposed, block_number, & !! As dbcsr_iterator_next_block row_size, col_size) TYPE(dbcsr_tas_iterator), INTENT(INOUT) :: iterator INTEGER(KIND=int_8), INTENT(OUT) :: row, column ${dtype}$, DIMENSION(:, :), POINTER :: block LOGICAL, INTENT(OUT) :: transposed INTEGER, INTENT(OUT), OPTIONAL :: block_number INTEGER, INTENT(OUT), OPTIONAL :: row_size, col_size INTEGER :: row_group, column_group CALL dbcsr_iterator_next_block(iterator%iter, row_group, column_group, block, transposed, block_number, & row_size, col_size) CALL block_index_local_to_global(iterator%dist%info, iterator%dist, row_group=row_group, column_group=column_group, & row=row, column=column) END SUBROUTINE #:endfor #:for dparam, dtype, dsuffix in dtype_float_list !! As dbcsr_put_block SUBROUTINE dbcsr_tas_put_block_${dsuffix}$ (matrix, row, col, block, transposed, summation, & scale) TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix ${dtype}$, DIMENSION(:, :), INTENT(IN) :: block LOGICAL, INTENT(IN), OPTIONAL :: transposed, summation INTEGER(KIND=int_8), INTENT(IN) :: row, col ${dtype}$, INTENT(IN), OPTIONAL :: scale INTEGER :: col_group, row_group CALL block_index_global_to_local(matrix%dist%info, matrix%dist, row=row, column=col, & row_group=row_group, column_group=col_group) CALL dbcsr_put_block(matrix%matrix, row_group, col_group, block, transposed=transposed, summation=summation, scale=scale) END SUBROUTINE #:endfor #:for dparam, dtype, dsuffix in dtype_float_list SUBROUTINE dbcsr_tas_get_block_p_${dsuffix}$ (matrix, row, col, block, transposed, found, row_size, col_size) !! As dbcsr_get_block_p TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix INTEGER(KIND=int_8), INTENT(IN) :: row, col ${dtype}$, DIMENSION(:, :), POINTER :: block LOGICAL, INTENT(OUT) :: transposed LOGICAL, INTENT(OUT) :: found INTEGER, INTENT(OUT), OPTIONAL :: row_size, col_size INTEGER :: col_group, row_group CALL block_index_global_to_local(matrix%dist%info, matrix%dist, row=row, column=col, & row_group=row_group, column_group=col_group) CALL dbcsr_get_block_p(matrix%matrix, row_group, col_group, block, transposed, found, row_size=row_size, col_size=col_size) END SUBROUTINE #:endfor #:for dparam, dtype, dsuffix in dtype_float_list SUBROUTINE dbcsr_tas_set_${dsuffix}$ (matrix, alpha) !! As dbcsr_set TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix ${dtype}$, INTENT(IN) :: alpha CALL dbcsr_set(matrix%matrix, alpha) END SUBROUTINE #:endfor #:for dparam, dtype, dsuffix in dtype_float_list SUBROUTINE dbcsr_tas_filter_${dsuffix}$ (matrix, eps, method, use_absolute) !! As dbcsr_filter TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix ${dtype}$, INTENT(IN) :: eps INTEGER, INTENT(IN), OPTIONAL :: method LOGICAL, INTENT(IN), OPTIONAL :: use_absolute CALL dbcsr_filter(matrix%matrix, eps, method, use_absolute) END SUBROUTINE #:endfor END MODULE ================================================ FILE: src/tas/dbcsr_tas_global.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tas_global !! Global data (distribution and block sizes) for tall-and-skinny matrices !! For very sparse matrices with one very large dimension, storing array data of the same size !! as the matrix dimensions may require too much memory and we need to compute them on the fly for a !! given row or column. Hence global array data such as distribution and block sizes are specified as !! function objects, leaving up to the caller how to efficiently store global data. USE dbcsr_kinds, ONLY: int_8, dp USE dbcsr_toollib, ONLY: sort #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_global' PUBLIC :: & dbcsr_tas_blk_size_arb, & dbcsr_tas_blk_size_repl, & dbcsr_tas_blk_size_one, & dbcsr_tas_dist_arb, & dbcsr_tas_dist_arb_default, & dbcsr_tas_dist_cyclic, & dbcsr_tas_dist_repl, & dbcsr_tas_distribution, & dbcsr_tas_rowcol_data, & dbcsr_tas_default_distvec ! abstract type for distribution vectors along one dimension TYPE, ABSTRACT :: dbcsr_tas_distribution ! number of process rows / columns: INTEGER :: nprowcol = -1 ! number of matrix rows / columns: INTEGER(KIND=int_8) :: nmrowcol = -1_int_8 CONTAINS ! map matrix rows/cols to distribution rows/cols: PROCEDURE(rowcol_dist), deferred :: dist ! map distribution rows/cols to matrix rows/cols: PROCEDURE(dist_rowcols), deferred :: rowcols END TYPE ! type for cyclic (round robin) distribution: ! - may not be load balanced for arbitrary block sizes ! - memory efficient for large dimensions TYPE, EXTENDS(dbcsr_tas_distribution) :: dbcsr_tas_dist_cyclic INTEGER :: split_size = -1 CONTAINS PROCEDURE :: dist => cyclic_dist PROCEDURE :: rowcols => cyclic_rowcols END TYPE ! type for arbitrary distributions ! - stored as an array ! - not memory efficient for large dimensions TYPE, EXTENDS(dbcsr_tas_distribution) :: dbcsr_tas_dist_arb INTEGER, DIMENSION(:), ALLOCATABLE :: dist_vec CONTAINS PROCEDURE :: dist => arb_dist PROCEDURE :: rowcols => arb_rowcols END TYPE ! type for replicated distribution ! - a submatrix distribution replicated on all process groups ! - memory efficient for large dimensions TYPE, EXTENDS(dbcsr_tas_distribution) :: dbcsr_tas_dist_repl INTEGER, DIMENSION(:), ALLOCATABLE :: dist_vec INTEGER :: nmrowcol_local = -1 INTEGER :: n_repl = -1 INTEGER :: dist_size = -1 CONTAINS PROCEDURE :: dist => repl_dist PROCEDURE :: rowcols => repl_rowcols END TYPE ! abstract type for integer data (e.g. block sizes) along one dimension TYPE, ABSTRACT :: dbcsr_tas_rowcol_data ! number of matrix rows / columns (blocks): INTEGER(KIND=int_8) :: nmrowcol = -1_int_8 ! number of matrix rows / columns (elements): INTEGER(KIND=int_8) :: nfullrowcol = -1_int_8 CONTAINS ! integer data for each block row / col PROCEDURE(rowcol_data), deferred :: DATA END TYPE ! type for arbitrary block sizes ! - stored as an array ! - not memory efficient for large dimensions TYPE, EXTENDS(dbcsr_tas_rowcol_data) :: dbcsr_tas_blk_size_arb INTEGER, DIMENSION(:), ALLOCATABLE :: blk_size_vec CONTAINS PROCEDURE :: DATA => blk_size_arb END TYPE ! type for replicated block sizes ! - submatrix block sizes replicated on all process groups ! - memory efficient for large dimensions TYPE, EXTENDS(dbcsr_tas_rowcol_data) :: dbcsr_tas_blk_size_repl INTEGER, DIMENSION(:), ALLOCATABLE :: blk_size_vec INTEGER :: nmrowcol_local = -1 CONTAINS PROCEDURE :: DATA => blk_size_repl END TYPE ! type for blocks of size one ! - memory efficient for large dimensions TYPE, EXTENDS(dbcsr_tas_rowcol_data) :: dbcsr_tas_blk_size_one CONTAINS PROCEDURE :: DATA => blk_size_one END TYPE ABSTRACT INTERFACE FUNCTION rowcol_dist(t, rowcol) !! map matrix rows/cols to distribution rows/cols: IMPORT :: dbcsr_tas_distribution, int_8 CLASS(dbcsr_tas_distribution), INTENT(IN) :: t INTEGER(KIND=int_8), INTENT(IN) :: rowcol INTEGER :: rowcol_dist END FUNCTION FUNCTION dist_rowcols(t, dist) !! map distribution rows/cols to matrix rows/cols: IMPORT :: dbcsr_tas_distribution, int_8 CLASS(dbcsr_tas_distribution), INTENT(IN) :: t INTEGER, INTENT(IN) :: dist INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE :: dist_rowcols END FUNCTION FUNCTION rowcol_data(t, rowcol) !! integer data for each block row / col IMPORT :: dbcsr_tas_rowcol_data, int_8 CLASS(dbcsr_tas_rowcol_data), INTENT(IN) :: t INTEGER(KIND=int_8), INTENT(IN) :: rowcol INTEGER :: rowcol_data END FUNCTION END INTERFACE INTERFACE dbcsr_tas_dist_cyclic MODULE PROCEDURE new_dbcsr_tas_dist_cyclic END INTERFACE INTERFACE dbcsr_tas_dist_arb MODULE PROCEDURE new_dbcsr_tas_dist_arb END INTERFACE INTERFACE dbcsr_tas_dist_repl MODULE PROCEDURE new_dbcsr_tas_dist_repl END INTERFACE INTERFACE dbcsr_tas_blk_size_arb MODULE PROCEDURE new_dbcsr_tas_blk_size_arb END INTERFACE INTERFACE dbcsr_tas_blk_size_repl MODULE PROCEDURE new_dbcsr_tas_blk_size_repl END INTERFACE INTERFACE dbcsr_tas_blk_size_one MODULE PROCEDURE new_dbcsr_tas_blk_size_one END INTERFACE CONTAINS FUNCTION blk_size_arb(t, rowcol) CLASS(dbcsr_tas_blk_size_arb), INTENT(IN) :: t INTEGER(KIND=int_8), INTENT(IN) :: rowcol INTEGER :: blk_size_arb blk_size_arb = t%blk_size_vec(rowcol) END FUNCTION FUNCTION blk_size_repl(t, rowcol) CLASS(dbcsr_tas_blk_size_repl), INTENT(IN) :: t INTEGER(KIND=int_8), INTENT(IN) :: rowcol INTEGER :: blk_size_repl INTEGER :: igroup INTEGER :: rowcol_local igroup = INT((rowcol - 1_int_8)/t%nmrowcol_local) rowcol_local = INT(MOD(rowcol - 1_int_8, INT(t%nmrowcol_local, KIND=int_8))) + 1 blk_size_repl = t%blk_size_vec(rowcol_local) END FUNCTION FUNCTION blk_size_one(t, rowcol) CLASS(dbcsr_tas_blk_size_one), INTENT(IN) :: t INTEGER(KIND=int_8), INTENT(IN) :: rowcol INTEGER :: blk_size_one MARK_USED(t) MARK_USED(rowcol) blk_size_one = 1 END FUNCTION FUNCTION new_dbcsr_tas_blk_size_arb(blk_size_vec) INTEGER, DIMENSION(:), INTENT(IN) :: blk_size_vec TYPE(dbcsr_tas_blk_size_arb) :: new_dbcsr_tas_blk_size_arb ALLOCATE (new_dbcsr_tas_blk_size_arb%blk_size_vec(SIZE(blk_size_vec))) new_dbcsr_tas_blk_size_arb%blk_size_vec(:) = blk_size_vec(:) new_dbcsr_tas_blk_size_arb%nmrowcol = SIZE(blk_size_vec) new_dbcsr_tas_blk_size_arb%nfullrowcol = SUM(blk_size_vec) END FUNCTION FUNCTION new_dbcsr_tas_blk_size_repl(blk_size_vec, n_repl) INTEGER, DIMENSION(:), INTENT(IN) :: blk_size_vec INTEGER, INTENT(IN) :: n_repl TYPE(dbcsr_tas_blk_size_repl) :: new_dbcsr_tas_blk_size_repl new_dbcsr_tas_blk_size_repl%nmrowcol_local = SIZE(blk_size_vec) ALLOCATE (new_dbcsr_tas_blk_size_repl%blk_size_vec(new_dbcsr_tas_blk_size_repl%nmrowcol_local)) new_dbcsr_tas_blk_size_repl%blk_size_vec(:) = blk_size_vec(:) new_dbcsr_tas_blk_size_repl%nmrowcol = new_dbcsr_tas_blk_size_repl%nmrowcol_local*n_repl new_dbcsr_tas_blk_size_repl%nfullrowcol = SUM(blk_size_vec)*n_repl END FUNCTION FUNCTION new_dbcsr_tas_blk_size_one(nrowcol) INTEGER(KIND=int_8), INTENT(IN) :: nrowcol TYPE(dbcsr_tas_blk_size_one) :: new_dbcsr_tas_blk_size_one new_dbcsr_tas_blk_size_one%nmrowcol = nrowcol new_dbcsr_tas_blk_size_one%nfullrowcol = nrowcol END FUNCTION FUNCTION arb_dist(t, rowcol) CLASS(dbcsr_tas_dist_arb), INTENT(IN) :: t INTEGER(KIND=int_8), INTENT(IN) :: rowcol INTEGER :: arb_dist arb_dist = t%dist_vec(rowcol) END FUNCTION FUNCTION repl_dist(t, rowcol) CLASS(dbcsr_tas_dist_repl), INTENT(IN) :: t INTEGER(KIND=int_8), INTENT(IN) :: rowcol INTEGER :: repl_dist INTEGER :: rowcol_local INTEGER :: igroup igroup = INT((rowcol - 1_int_8)/t%nmrowcol_local) rowcol_local = INT(MOD(rowcol - 1_int_8, INT(t%nmrowcol_local, KIND=int_8))) + 1 repl_dist = t%dist_vec(rowcol_local) + igroup*t%dist_size END FUNCTION FUNCTION repl_rowcols(t, dist) CLASS(dbcsr_tas_dist_repl), INTENT(IN) :: t INTEGER, INTENT(IN) :: dist INTEGER :: nrowcols INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE :: repl_rowcols, rowcols_tmp INTEGER :: igroup INTEGER :: rowcol, count LOGICAL :: cond igroup = dist/t%dist_size nrowcols = t%nmrowcol_local count = 0 ALLOCATE (rowcols_tmp(nrowcols)) rowcols_tmp(:) = 0 DO rowcol = 1, nrowcols cond = t%dist_vec(rowcol) + igroup*t%dist_size == dist IF (cond) THEN count = count + 1 rowcols_tmp(count) = rowcol END IF END DO ALLOCATE (repl_rowcols(count)) repl_rowcols(:) = rowcols_tmp(1:count) + igroup*t%nmrowcol_local END FUNCTION FUNCTION arb_rowcols(t, dist) CLASS(dbcsr_tas_dist_arb), INTENT(IN) :: t INTEGER, INTENT(IN) :: dist INTEGER(KIND=int_8) :: rowcol, nrowcols INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE :: arb_rowcols, rowcols_tmp INTEGER :: count nrowcols = t%nmrowcol count = 0 ALLOCATE (rowcols_tmp(nrowcols)) rowcols_tmp(:) = 0 DO rowcol = 1, nrowcols IF (t%dist_vec(rowcol) == dist) THEN count = count + 1 rowcols_tmp(count) = rowcol END IF END DO ALLOCATE (arb_rowcols(count)) arb_rowcols(:) = rowcols_tmp(1:count) END FUNCTION FUNCTION new_dbcsr_tas_dist_cyclic(split_size, nprowcol, nmrowcol) INTEGER, INTENT(IN) :: split_size, nprowcol INTEGER(KIND=int_8), INTENT(IN) :: nmrowcol TYPE(dbcsr_tas_dist_cyclic) :: new_dbcsr_tas_dist_cyclic new_dbcsr_tas_dist_cyclic%split_size = split_size new_dbcsr_tas_dist_cyclic%nprowcol = nprowcol new_dbcsr_tas_dist_cyclic%nmrowcol = nmrowcol END FUNCTION FUNCTION new_dbcsr_tas_dist_arb(dist_vec, nprowcol, nmrowcol) INTEGER, DIMENSION(:), INTENT(IN) :: dist_vec INTEGER, INTENT(IN) :: nprowcol INTEGER(KIND=int_8), INTENT(IN) :: nmrowcol TYPE(dbcsr_tas_dist_arb) :: new_dbcsr_tas_dist_arb ALLOCATE (new_dbcsr_tas_dist_arb%dist_vec(nmrowcol)) new_dbcsr_tas_dist_arb%dist_vec(:) = dist_vec(:) new_dbcsr_tas_dist_arb%nprowcol = nprowcol new_dbcsr_tas_dist_arb%nmrowcol = nmrowcol END FUNCTION FUNCTION dbcsr_tas_dist_arb_default(nprowcol, nmrowcol, block_sizes) !! Distribution that is more or less cyclic (round robin) and load balanced with different !! weights for each element. !! This is used for creating adhoc distributions whenever matrices are mapped to new grids. !! Only for small dimensions since distribution is created as an array INTEGER :: nprowcol INTEGER(KIND=int_8), INTENT(IN) :: nmrowcol CLASS(dbcsr_tas_rowcol_data), INTENT(IN) :: block_sizes TYPE(dbcsr_tas_dist_arb) :: dbcsr_tas_dist_arb_default INTEGER, DIMENSION(nmrowcol) :: dist_vec, bsize_vec INTEGER(KIND=int_8) :: ind DO ind = 1, nmrowcol bsize_vec(ind) = block_sizes%data(ind) END DO CALL dbcsr_tas_default_distvec(INT(nmrowcol), nprowcol, bsize_vec, dist_vec) dbcsr_tas_dist_arb_default = dbcsr_tas_dist_arb(dist_vec, nprowcol, nmrowcol) END FUNCTION SUBROUTINE dbcsr_tas_default_distvec(nblk, nproc, blk_size, dist) !! get a load-balanced and randomized distribution along one tensor dimension INTEGER, INTENT(IN) :: nblk !! number of blocks (along one tensor dimension) INTEGER, INTENT(IN) :: nproc !! number of processes (along one process grid dimension) INTEGER, DIMENSION(nblk), INTENT(IN) :: blk_size !! block sizes INTEGER, DIMENSION(nblk), INTENT(OUT) :: dist !! distribution CALL distribute_lpt_random(nblk, nproc, blk_size, dist) END SUBROUTINE SUBROUTINE distribute_lpt_random(nel, nbin, weights, dist) !! distribute `nel` elements with weights `weights` over `nbin` bins. !! load balanced distribution is obtained by using LPT algorithm together with randomization over equivalent bins !! (i.e. randomization over all bins with the smallest accumulated weight) INTEGER, INTENT(IN) :: nel, nbin INTEGER, DIMENSION(nel), INTENT(IN) :: weights INTEGER, DIMENSION(nel), INTENT(OUT) :: dist INTEGER :: i, i_select, ibin, iel, min_occup, & n_avail INTEGER, ALLOCATABLE, DIMENSION(:) :: bins_avail INTEGER, DIMENSION(4) :: iseed INTEGER, DIMENSION(nel) :: sort_index, weights_s INTEGER, DIMENSION(nbin) :: occup LOGICAL, DIMENSION(nbin) :: bin_mask REAL(dp) :: rand INTEGER, PARAMETER :: n_idle = 1000 ! initialize seed based on input arguments such that random numbers are deterministic across all processes iseed(1) = nel; iseed(2) = nbin; iseed(3) = MAXVAL(weights); iseed(4) = MINVAL(weights) iseed(4) = iseed(4)*2 + 1 ! odd iseed(:) = MODULO(iseed(:), 2**12) DO i = 1, n_idle CALL dlarnv(1, iseed, 1, rand) END DO occup(:) = 0 weights_s = weights CALL sort(weights_s, nel, sort_index) occup(:) = 0 DO iel = nel, 1, -1 min_occup = MINVAL(occup, 1) ! available bins with min. occupancy bin_mask = occup == min_occup n_avail = COUNT(bin_mask) ALLOCATE (bins_avail(n_avail)) bins_avail(:) = PACK((/(i, i=1, nbin)/), MASK=bin_mask) CALL dlarnv(1, iseed, 1, rand) i_select = FLOOR(rand*n_avail) + 1 ibin = bins_avail(i_select) DEALLOCATE (bins_avail) dist(sort_index(iel)) = ibin - 1 occup(ibin) = occup(ibin) + weights_s(iel) END DO END SUBROUTINE FUNCTION new_dbcsr_tas_dist_repl(dist_vec, nprowcol, nmrowcol, n_repl, dist_size) INTEGER, DIMENSION(:), INTENT(IN) :: dist_vec INTEGER, INTENT(IN) :: nprowcol, nmrowcol, n_repl, dist_size TYPE(dbcsr_tas_dist_repl) :: new_dbcsr_tas_dist_repl new_dbcsr_tas_dist_repl%n_repl = n_repl new_dbcsr_tas_dist_repl%dist_size = dist_size ALLOCATE (new_dbcsr_tas_dist_repl%dist_vec(nmrowcol)) new_dbcsr_tas_dist_repl%dist_vec(:) = MOD(dist_vec(:), dist_size) new_dbcsr_tas_dist_repl%nprowcol = nprowcol new_dbcsr_tas_dist_repl%nmrowcol_local = nmrowcol new_dbcsr_tas_dist_repl%nmrowcol = nmrowcol*n_repl END FUNCTION FUNCTION cyclic_dist(t, rowcol) CLASS(dbcsr_tas_dist_cyclic), INTENT(IN) :: t INTEGER(KIND=int_8), INTENT(IN) :: rowcol INTEGER :: cyclic_dist cyclic_dist = INT(MOD((rowcol - 1)/INT(t%split_size, KIND=int_8), INT(t%nprowcol, KIND=int_8))) END FUNCTION FUNCTION cyclic_rowcols(t, dist) CLASS(dbcsr_tas_dist_cyclic), INTENT(IN) :: t INTEGER, INTENT(IN) :: dist INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE :: cyclic_rowcols INTEGER :: count, nsplit, isplit, irowcol, max_size INTEGER(KIND=int_8) :: rowcol INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE :: rowcols_tmp nsplit = INT((t%nmrowcol - 1)/INT(t%split_size, KIND=int_8) + 1_int_8) max_size = nsplit*t%split_size ALLOCATE (rowcols_tmp(max_size)) rowcols_tmp(:) = 0 count = 0 loop: DO isplit = 1, nsplit DO irowcol = 1, t%split_size rowcol = INT((dist + (isplit - 1)*t%nprowcol), KIND=int_8)*INT(t%split_size, KIND=int_8) + & INT(irowcol, KIND=int_8) IF (rowcol > t%nmrowcol) THEN EXIT loop ELSE count = count + 1 rowcols_tmp(count) = rowcol END IF END DO END DO loop ALLOCATE (cyclic_rowcols(count)) cyclic_rowcols(:) = rowcols_tmp(1:count) END FUNCTION END MODULE ================================================ FILE: src/tas/dbcsr_tas_io.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tas_io !! tall-and-skinny matrices: Input / Output USE dbcsr_tas_types, ONLY: & dbcsr_tas_type, dbcsr_tas_split_info USE dbcsr_tas_global, ONLY: & dbcsr_tas_rowcol_data, dbcsr_tas_distribution USE dbcsr_kinds, ONLY: & int_8, real_8, default_string_length USE dbcsr_tas_base, ONLY: & dbcsr_tas_get_info, dbcsr_tas_get_num_blocks, dbcsr_tas_get_num_blocks_total, dbcsr_tas_get_nze_total, & dbcsr_tas_get_nze, dbcsr_tas_nblkrows_total, dbcsr_tas_nblkcols_total, dbcsr_tas_info USE dbcsr_tas_split, ONLY: & dbcsr_tas_get_split_info, rowsplit, colsplit USE dbcsr_mpiwrap, ONLY: & mp_environ, mp_sum, mp_max, mp_comm_type USE dbcsr_dist_methods, ONLY: & dbcsr_distribution_row_dist, dbcsr_distribution_col_dist IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_io' PUBLIC :: & dbcsr_tas_write_dist, & dbcsr_tas_write_matrix_info, & dbcsr_tas_write_split_info, & prep_output_unit CONTAINS SUBROUTINE dbcsr_tas_write_matrix_info(matrix, unit_nr, full_info) !! Write basic infos of tall-and-skinny matrix: block dimensions, full dimensions, process grid dimensions TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: unit_nr LOGICAL, OPTIONAL, INTENT(IN) :: full_info !! Whether to print distribution and block size vectors INTEGER(KIND=int_8) :: nblkrows_total, nblkcols_total, nfullrows_total, & nfullcols_total INTEGER :: nprow, npcol, unit_nr_prv CLASS(dbcsr_tas_distribution), ALLOCATABLE :: proc_row_dist, proc_col_dist CLASS(dbcsr_tas_rowcol_data), ALLOCATABLE :: row_blk_size, col_blk_size INTEGER(KIND=int_8) :: iblk CHARACTER(default_string_length) :: name unit_nr_prv = prep_output_unit(unit_nr) IF (unit_nr_prv == 0) RETURN CALL dbcsr_tas_get_info(matrix, nblkrows_total=nblkrows_total, nblkcols_total=nblkcols_total, & nfullrows_total=nfullrows_total, nfullcols_total=nfullcols_total, & nprow=nprow, npcol=npcol, proc_row_dist=proc_row_dist, proc_col_dist=proc_col_dist, & row_blk_size=row_blk_size, col_blk_size=col_blk_size, name=name) IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T2,A)") & "GLOBAL INFO OF "//TRIM(name) WRITE (unit_nr_prv, "(T4,A,1X)", advance="no") "block dimensions:" WRITE (unit_nr_prv, "(I12,I12)", advance="no") nblkrows_total, nblkcols_total WRITE (unit_nr_prv, "(/T4,A,1X)", advance="no") "full dimensions:" WRITE (unit_nr_prv, "(I14,I14)", advance="no") nfullrows_total, nfullcols_total WRITE (unit_nr_prv, "(/T4,A,1X)", advance="no") "process grid dimensions:" WRITE (unit_nr_prv, "(I10,I10)", advance="no") nprow, npcol IF (PRESENT(full_info)) THEN IF (full_info) THEN WRITE (unit_nr_prv, '(/T4,A)', advance='no') "Block sizes:" WRITE (unit_nr_prv, '(/T8,A)', advance='no') 'Row:' DO iblk = 1, row_blk_size%nmrowcol WRITE (unit_nr_prv, '(I4,1X)', advance='no') row_blk_size%data(iblk) END DO WRITE (unit_nr_prv, '(/T8,A)', advance='no') 'Column:' DO iblk = 1, col_blk_size%nmrowcol WRITE (unit_nr_prv, '(I4,1X)', advance='no') col_blk_size%data(iblk) END DO WRITE (unit_nr_prv, '(/T4,A)', advance='no') "Block distribution:" WRITE (unit_nr_prv, '(/T8,A)', advance='no') 'Row:' DO iblk = 1, proc_row_dist%nmrowcol WRITE (unit_nr_prv, '(I4,1X)', advance='no') proc_row_dist%dist(iblk) END DO WRITE (unit_nr_prv, '(/T8,A)', advance='no') 'Column:' DO iblk = 1, proc_col_dist%nmrowcol WRITE (unit_nr_prv, '(I4,1X)', advance='no') proc_col_dist%dist(iblk) END DO END IF END IF WRITE (unit_nr_prv, *) END IF END SUBROUTINE SUBROUTINE dbcsr_tas_write_dist(matrix, unit_nr, full_info) !! Write info on tall-and-skinny matrix distribution & load balance TYPE(dbcsr_tas_type), INTENT(IN) :: matrix INTEGER, INTENT(IN) :: unit_nr LOGICAL, INTENT(IN), OPTIONAL :: full_info !! Whether to print subgroup DBCSR distribution CHARACTER(default_string_length) :: name INTEGER :: ngroup, igroup, nproc, iproc, & nblock_p_max, nelement_p_max, & nblock, nelement INTEGER(KIND=int_8), DIMENSION(2) :: tmp_i8 INTEGER, DIMENSION(2) :: tmp INTEGER(KIND=int_8) :: nblock_tot, nblock_p_sum, nelement_p_sum, nelement_s_max, & nblock_s, nelement_s, nblock_s_max REAL(KIND=real_8) :: occupation INTEGER, DIMENSION(:), POINTER :: rowdist, coldist INTEGER :: split_rowcol, icol, irow, unit_nr_prv TYPE(mp_comm_type) :: mp_comm, mp_comm_group unit_nr_prv = prep_output_unit(unit_nr) IF (unit_nr_prv == 0) RETURN CALL dbcsr_tas_get_split_info(matrix%dist%info, mp_comm, ngroup, igroup, mp_comm_group, split_rowcol) CALL dbcsr_tas_get_info(matrix, name=name) CALL mp_environ(nproc, iproc, mp_comm) nblock = dbcsr_tas_get_num_blocks(matrix) nelement = dbcsr_tas_get_nze(matrix) nblock_p_sum = dbcsr_tas_get_num_blocks_total(matrix) nelement_p_sum = dbcsr_tas_get_nze_total(matrix) tmp = (/nblock, nelement/) CALL mp_max(tmp, mp_comm) nblock_p_max = tmp(1); nelement_p_max = tmp(2) nblock_s = nblock nelement_s = nelement CALL mp_sum(nblock_s, mp_comm_group) CALL mp_sum(nelement_s, mp_comm_group) tmp_i8 = (/nblock_s, nelement_s/) CALL mp_max(tmp_i8, mp_comm) nblock_s_max = tmp_i8(1); nelement_s_max = tmp_i8(2) nblock_tot = dbcsr_tas_nblkrows_total(matrix)*dbcsr_tas_nblkcols_total(matrix) occupation = -1.0_real_8 IF (nblock_tot .NE. 0) occupation = 100.0_real_8*REAL(nblock_p_sum, real_8)/REAL(nblock_tot, real_8) rowdist => dbcsr_distribution_row_dist(matrix%matrix%dist) coldist => dbcsr_distribution_col_dist(matrix%matrix%dist) IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T2,A)") & "DISTRIBUTION OF "//TRIM(name) WRITE (unit_nr_prv, "(T15,A,T68,I13)") "Number of non-zero blocks:", nblock_p_sum WRITE (unit_nr_prv, "(T15,A,T75,F6.2)") "Percentage of non-zero blocks:", occupation WRITE (unit_nr_prv, "(T15,A,T68,I13)") "Average number of blocks per group:", (nblock_p_sum + ngroup - 1)/ngroup WRITE (unit_nr_prv, "(T15,A,T68,I13)") "Maximum number of blocks per group:", nblock_s_max WRITE (unit_nr_prv, "(T15,A,T68,I13)") "Average number of matrix elements per group:", (nelement_p_sum + ngroup - 1)/ngroup WRITE (unit_nr_prv, "(T15,A,T68,I13)") "Maximum number of matrix elements per group:", nelement_s_max WRITE (unit_nr_prv, "(T15,A,T68,I13)") "Average number of blocks per CPU:", (nblock_p_sum + nproc - 1)/nproc WRITE (unit_nr_prv, "(T15,A,T68,I13)") "Maximum number of blocks per CPU:", nblock_p_max WRITE (unit_nr_prv, "(T15,A,T68,I13)") "Average number of matrix elements per CPU:", (nelement_p_sum + nproc - 1)/nproc WRITE (unit_nr_prv, "(T15,A,T68,I13)") "Maximum number of matrix elements per CPU:", nelement_p_max IF (PRESENT(full_info)) THEN IF (full_info) THEN WRITE (unit_nr_prv, "(T15,A)") "Row distribution on subgroup:" WRITE (unit_nr_prv, '(T15)', advance='no') DO irow = 1, SIZE(rowdist) WRITE (unit_nr_prv, '(I3, 1X)', advance='no') rowdist(irow) END DO WRITE (unit_nr_prv, "(/T15,A)") "Column distribution on subgroup:" WRITE (unit_nr_prv, '(T15)', advance='no') DO icol = 1, SIZE(coldist) WRITE (unit_nr_prv, '(I3, 1X)', advance='no') coldist(icol) END DO WRITE (unit_nr_prv, *) END IF END IF END IF END SUBROUTINE SUBROUTINE dbcsr_tas_write_split_info(info, unit_nr, name) !! Print info on how matrix is split TYPE(dbcsr_tas_split_info), INTENT(IN) :: info INTEGER, INTENT(IN) :: unit_nr CHARACTER(len=*), INTENT(IN), OPTIONAL :: name INTEGER :: groupsize, igroup, & mynode, nsplit, & numnodes, split_rowcol, unit_nr_prv INTEGER, DIMENSION(2) :: coord, dims, groupcoord, groupdims, & pgrid_offset CHARACTER(len=:), ALLOCATABLE :: name_prv TYPE(mp_comm_type) :: mp_comm, mp_comm_group unit_nr_prv = prep_output_unit(unit_nr) IF (unit_nr_prv == 0) RETURN IF (PRESENT(name)) THEN ALLOCATE (name_prv, SOURCE=TRIM(name)) ELSE ALLOCATE (name_prv, SOURCE="") END IF CALL dbcsr_tas_get_split_info(info, mp_comm, nsplit, igroup, mp_comm_group, split_rowcol, pgrid_offset) CALL mp_environ(numnodes, mynode, mp_comm) CALL mp_environ(numnodes, dims, coord, mp_comm) CALL mp_environ(groupsize, groupdims, groupcoord, mp_comm_group) IF (unit_nr_prv > 0) THEN SELECT CASE (split_rowcol) CASE (rowsplit) WRITE (unit_nr_prv, "(T4,A,I4,1X,A,I4)") name_prv//"splitting rows by factor", nsplit CASE (colsplit) WRITE (unit_nr_prv, "(T4,A,I4,1X,A,I4)") name_prv//"splitting columns by factor", nsplit END SELECT WRITE (unit_nr_prv, "(T4,A,I4,A1,I4)") name_prv//"global grid sizes:", dims(1), "x", dims(2) END IF IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T4,A,I4,A1,I4)") & name_prv//"grid sizes on subgroups:", & groupdims(1), "x", groupdims(2) END IF END SUBROUTINE FUNCTION prep_output_unit(unit_nr) RESULT(unit_nr_out) INTEGER, INTENT(IN), OPTIONAL :: unit_nr INTEGER :: unit_nr_out IF (PRESENT(unit_nr)) THEN unit_nr_out = unit_nr ELSE unit_nr_out = 0 END IF END FUNCTION END MODULE ================================================ FILE: src/tas/dbcsr_tas_mm.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tas_mm !! Matrix multiplication for tall-and-skinny matrices. This uses the k-split (non-recursive) CARMA !! algorithm that is communication-optimal as long as the two smaller dimensions have !! the same size. !! Submatrices are obtained by splitting a dimension of the process grid. Multiplication of !! submatrices uses DBCSR Cannon algorithm. Due to unknown sparsity pattern of result matrix, parameters !! (group sizes and process grid dimensions) can not be derived from matrix dimensions and need to be !! set manually. #:include "dbcsr_tas.fypp" USE dbcsr_data_methods, ONLY: & dbcsr_scalar_zero, dbcsr_scalar, dbcsr_scalar_multiply USE dbcsr_data_types, ONLY: & dbcsr_scalar_type, dbcsr_type_real_8, dbcsr_type_real_4, dbcsr_type_complex_8, dbcsr_type_complex_4 USE dbcsr_multiply_api, ONLY: dbcsr_multiply USE dbcsr_tas_base, ONLY: & dbcsr_tas_create, dbcsr_tas_destroy, dbcsr_tas_distribution_destroy, dbcsr_tas_distribution_new, & dbcsr_tas_get_data_type, dbcsr_tas_info, dbcsr_tas_nblkcols_total, & dbcsr_tas_nblkrows_total, dbcsr_tas_filter, dbcsr_tas_get_info, dbcsr_tas_iterator_blocks_left, & dbcsr_tas_get_nze_total, dbcsr_tas_reserve_blocks, dbcsr_tas_iterator_start, dbcsr_tas_iterator_next_block, & dbcsr_tas_iterator_stop, dbcsr_tas_copy, dbcsr_tas_get_block_p, dbcsr_tas_clear, dbcsr_tas_get_num_blocks, & dbcsr_tas_nfullrows_total, dbcsr_tas_nfullcols_total USE dbcsr_tas_types, ONLY: & dbcsr_tas_distribution_type, dbcsr_tas_split_info, dbcsr_tas_type, dbcsr_tas_iterator USE dbcsr_tas_global, ONLY: & dbcsr_tas_dist_cyclic, dbcsr_tas_dist_arb, dbcsr_tas_distribution, dbcsr_tas_dist_arb_default, & dbcsr_tas_rowcol_data, dbcsr_tas_blk_size_one, dbcsr_tas_default_distvec USE dbcsr_tas_reshape_ops, ONLY: & dbcsr_tas_merge, dbcsr_tas_replicate, dbcsr_tas_reshape USE dbcsr_tas_split, ONLY: & rowsplit, colsplit, dbcsr_tas_get_split_info, dbcsr_tas_create_split, dbcsr_tas_mp_comm, & dbcsr_tas_release_info, accept_pgrid_dims, dbcsr_tas_info_hold, default_nsplit_accept_ratio USE dbcsr_tas_util, ONLY: & swap, invert_transpose_flag, array_eq, dbcsr_mp_environ USE dbcsr_types, ONLY: & dbcsr_no_transpose, dbcsr_transpose, dbcsr_type, dbcsr_distribution_obj, dbcsr_mp_obj, & dbcsr_type_no_symmetry USE dbcsr_kinds, ONLY: & int_8, real_8, real_4, default_string_length USE dbcsr_mpiwrap, ONLY: & mp_environ, mp_sum, mp_comm_free, mp_cart_create, mp_max, mp_sync, mp_comm_type USE dbcsr_operations, ONLY: & dbcsr_scale, dbcsr_get_info, dbcsr_copy, dbcsr_clear, dbcsr_add, dbcsr_zero USE dbcsr_tas_io, ONLY: & dbcsr_tas_write_dist, dbcsr_tas_write_matrix_info, dbcsr_tas_write_split_info, prep_output_unit USE dbcsr_work_operations, ONLY: dbcsr_create, dbcsr_finalize USE dbcsr_transformations, ONLY: dbcsr_redistribute USE dbcsr_dist_methods, ONLY: dbcsr_distribution_new USE dbcsr_methods, ONLY: & dbcsr_mp_release, dbcsr_release, dbcsr_distribution_release, dbcsr_get_nze, dbcsr_nfullrows_total, dbcsr_nfullcols_total USE dbcsr_config, ONLY: dbcsr_cfg #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_mm' PUBLIC :: & dbcsr_tas_multiply, & dbcsr_tas_batched_mm_init, & dbcsr_tas_batched_mm_finalize, & dbcsr_tas_result_index, & dbcsr_tas_set_batched_state, & dbcsr_tas_batched_mm_complete CONTAINS RECURSIVE SUBROUTINE dbcsr_tas_multiply(transa, transb, transc, alpha, matrix_a, matrix_b, beta, matrix_c, & optimize_dist, split_opt, filter_eps, flop, move_data_a, & move_data_b, retain_sparsity, simple_split, result_index, unit_nr, log_verbose) !! tall-and-skinny matrix-matrix multiplication. Undocumented dummy arguments are identical to !! arguments of dbcsr_multiply (see dbcsr_mm, dbcsr_multiply_generic). CHARACTER(LEN=1), INTENT(IN) :: transa, transb, transc TYPE(dbcsr_scalar_type), INTENT(IN) :: alpha, beta TYPE(dbcsr_tas_type), TARGET, & INTENT(INOUT) :: matrix_a, matrix_b, matrix_c LOGICAL, INTENT(IN), OPTIONAL :: optimize_dist !! Whether distribution should be optimized internally. In the current implementation this guarantees optimal parameters !! only for dense matrices. TYPE(dbcsr_tas_split_info), INTENT(OUT), & OPTIONAL :: split_opt !! optionally return split info containing optimal grid and split parameters. This can be used to choose optimal process !! grids for subsequent matrix multiplications with matrices of similar shape and sparsity. REAL(KIND=real_8), INTENT(IN), OPTIONAL :: filter_eps INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL :: flop LOGICAL, INTENT(IN), OPTIONAL :: move_data_a, move_data_b, simple_split, retain_sparsity !! memory optimization: move data to matrix_c such that matrix_a is empty on return !! memory optimization: move data to matrix_c such that matrix_b is empty on return !! for internal use only INTEGER(int_8), DIMENSION(:, :), ALLOCATABLE, INTENT(OUT), OPTIONAL :: result_index INTEGER, OPTIONAL, INTENT(IN) :: unit_nr !! unit number for logging output LOGICAL, OPTIONAL, INTENT(IN) :: log_verbose !! only for testing: verbose output TYPE(dbcsr_tas_type), POINTER :: matrix_b_rs, matrix_a_rs, matrix_c_rs, & matrix_c_rep, matrix_b_rep, matrix_a_rep REAL(KIND=real_8) :: filter_eps_prv INTEGER(KIND=int_8), DIMENSION(2) :: dims_a, dims_b, dims_c INTEGER, DIMENSION(2) :: pdims, pcoord, pcoord_sub, pdims_sub INTEGER(KIND=int_8), DIMENSION(3) :: dims INTEGER :: max_mm_dim, data_type, handle, handle2, handle3, handle4, & unit_nr_prv, nsplit, nsplit_opt, numproc, numproc_sub, iproc, & split_rc, split_a, split_b, split_c, & batched_repl, max_mm_dim_batched, nsplit_batched CHARACTER(LEN=1) :: tr_case, transa_prv, transb_prv, transc_prv TYPE(dbcsr_scalar_type) :: zero LOGICAL :: new_a, new_b, new_c, simple_split_prv, opt_pgrid, & move_a, move_b, do_batched, & nodata_3 TYPE(dbcsr_tas_split_info) :: info, info_a, info_b, info_c CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_multiply' INTEGER(KIND=int_8) :: nze_a, nze_b, nze_c, nze_c_sum TYPE(dbcsr_type) :: matrix_a_mm, matrix_b_mm, matrix_c_mm TYPE(mp_comm_type) :: mp_comm, comm_tmp, mp_comm_group, mp_comm_mm, mp_comm_opt CALL timeset(routineN, handle) CALL mp_sync(matrix_a%dist%info%mp_comm) CALL timeset("dbcsr_tas_total", handle2) NULLIFY (matrix_b_rs, matrix_a_rs, matrix_c_rs) unit_nr_prv = prep_output_unit(unit_nr) IF (PRESENT(simple_split)) THEN simple_split_prv = simple_split ELSE simple_split_prv = .FALSE. info_a = dbcsr_tas_info(matrix_a); info_b = dbcsr_tas_info(matrix_b); info_c = dbcsr_tas_info(matrix_c) IF (info_a%strict_split(1) .OR. info_b%strict_split(1) .OR. info_c%strict_split(1)) simple_split_prv = .TRUE. END IF nodata_3 = .TRUE. IF (PRESENT(retain_sparsity)) THEN IF (retain_sparsity) nodata_3 = .FALSE. END IF ! get prestored info for multiplication strategy in case of batched mm batched_repl = 0 do_batched = .FALSE. IF (matrix_a%do_batched > 0) THEN do_batched = .TRUE. IF (matrix_a%do_batched == 3) THEN DBCSR_ASSERT(batched_repl == 0) batched_repl = 1 CALL dbcsr_tas_get_split_info( & dbcsr_tas_info(matrix_a%mm_storage%store_batched_repl), & nsplit=nsplit_batched) DBCSR_ASSERT(nsplit_batched > 0) max_mm_dim_batched = 3 END IF END IF IF (matrix_b%do_batched > 0) THEN do_batched = .TRUE. IF (matrix_b%do_batched == 3) THEN DBCSR_ASSERT(batched_repl == 0) batched_repl = 2 CALL dbcsr_tas_get_split_info( & dbcsr_tas_info(matrix_b%mm_storage%store_batched_repl), & nsplit=nsplit_batched) DBCSR_ASSERT(nsplit_batched > 0) max_mm_dim_batched = 1 END IF END IF IF (matrix_c%do_batched > 0) THEN do_batched = .TRUE. IF (matrix_c%do_batched == 3) THEN DBCSR_ASSERT(batched_repl == 0) batched_repl = 3 CALL dbcsr_tas_get_split_info( & dbcsr_tas_info(matrix_c%mm_storage%store_batched_repl), & nsplit=nsplit_batched) DBCSR_ASSERT(nsplit_batched > 0) max_mm_dim_batched = 2 END IF END IF move_a = .FALSE. move_b = .FALSE. IF (PRESENT(move_data_a)) move_a = move_data_a IF (PRESENT(move_data_b)) move_b = move_data_b IF (.NOT. dbcsr_tas_get_data_type(matrix_a) .EQ. dbcsr_tas_get_data_type(matrix_b)) THEN DBCSR_ABORT("matrices must have same datatype") END IF data_type = dbcsr_tas_get_data_type(matrix_a) transa_prv = transa; transb_prv = transb; transc_prv = transc dims_a = [dbcsr_tas_nblkrows_total(matrix_a), dbcsr_tas_nblkcols_total(matrix_a)] dims_b = [dbcsr_tas_nblkrows_total(matrix_b), dbcsr_tas_nblkcols_total(matrix_b)] dims_c = [dbcsr_tas_nblkrows_total(matrix_c), dbcsr_tas_nblkcols_total(matrix_c)] IF (unit_nr_prv .GT. 0) THEN WRITE (unit_nr_prv, '(A)') repeat("-", 80) WRITE (unit_nr_prv, '(A,1X,A,1X,A,1X,A,1X,A,1X,A)') "DBCSR TAS MATRIX MULTIPLICATION:", & TRIM(matrix_a%matrix%name), 'x', TRIM(matrix_b%matrix%name), '=', TRIM(matrix_c%matrix%name) WRITE (unit_nr_prv, '(A)') repeat("-", 80) END IF IF (do_batched) THEN IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T2,A)") & "BATCHED PROCESSING OF MATMUL" IF (batched_repl > 0) THEN WRITE (unit_nr_prv, "(T4,A,T80,I1)") "reusing replicated matrix:", batched_repl END IF END IF END IF IF (transa_prv .EQ. dbcsr_transpose) THEN CALL swap(dims_a) END IF IF (transb_prv .EQ. dbcsr_transpose) THEN CALL swap(dims_b) END IF dims_c = [dims_a(1), dims_b(2)] IF (.NOT. (dims_a(2) .EQ. dims_b(1))) THEN DBCSR_ABORT("inconsistent matrix dimensions") END IF dims(:) = [dims_a(1), dims_a(2), dims_b(2)] tr_case = '' IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T2,A, 1X, I12, 1X, I12, 1X, I12)") "mm dims:", dims(1), dims(2), dims(3) END IF CALL dbcsr_tas_get_split_info(dbcsr_tas_info(matrix_a), mp_comm=mp_comm) CALL mp_environ(numproc, iproc, mp_comm) ! derive optimal matrix layout and split factor from occupancies nze_a = dbcsr_tas_get_nze_total(matrix_a) nze_b = dbcsr_tas_get_nze_total(matrix_b) IF (.NOT. simple_split_prv) THEN CALL dbcsr_tas_result_index(transa, transb, transc, matrix_a, matrix_b, matrix_c, filter_eps, & blk_ind=result_index, nze=nze_c, retain_sparsity=retain_sparsity) IF (PRESENT(result_index)) THEN CALL mp_sync(matrix_a%dist%info%mp_comm) CALL timestop(handle2) CALL timestop(handle) RETURN END IF max_mm_dim = MAXLOC(dims, 1) nsplit = split_factor_estimate(max_mm_dim, nze_a, nze_b, nze_c, numproc) nsplit_opt = nsplit IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T2,A)") & "MM PARAMETERS" WRITE (unit_nr_prv, "(T4,A,T68,I13)") "Est. number of matrix elements per CPU of result matrix:", & (nze_c + numproc - 1)/numproc WRITE (unit_nr_prv, "(T4,A,T68,I13)") "Est. optimal split factor:", nsplit END IF ELSEIF (batched_repl > 0) THEN nsplit = nsplit_batched nsplit_opt = nsplit max_mm_dim = max_mm_dim_batched IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T2,A)") & "MM PARAMETERS" WRITE (unit_nr_prv, "(T4,A,T68,I13)") "Est. optimal split factor:", nsplit END IF ELSE nsplit = 0 max_mm_dim = MAXLOC(dims, 1) END IF ! reshape matrices to the optimal layout and split factor split_a = rowsplit; split_b = rowsplit; split_c = rowsplit SELECT CASE (max_mm_dim) CASE (1) split_a = rowsplit; split_c = rowsplit CALL reshape_mm_compatible(matrix_a, matrix_c, matrix_a_rs, matrix_c_rs, & new_a, new_c, transa_prv, transc_prv, optimize_dist=optimize_dist, & nsplit=nsplit, & opt_nsplit=batched_repl == 0, & split_rc_1=split_a, split_rc_2=split_c, & nodata2=nodata_3, comm_new=comm_tmp, & move_data_1=move_a, unit_nr=unit_nr_prv) info = dbcsr_tas_info(matrix_a_rs) CALL dbcsr_tas_get_split_info(info, split_rowcol=split_rc, mp_comm=mp_comm) new_b = .FALSE. IF (matrix_b%do_batched <= 2) THEN ALLOCATE (matrix_b_rs) CALL reshape_mm_small(mp_comm, matrix_b, matrix_b_rs, transb_prv == dbcsr_transpose, transb_prv, move_data=move_b) new_b = .TRUE. END IF tr_case = transa_prv IF (unit_nr_prv > 0) THEN IF (tr_case == 'N') THEN WRITE (unit_nr_prv, "(T2,A, 1X, A)") "mm case:", "| x + = |" ELSE WRITE (unit_nr_prv, "(T2,A, 1X, A)") "mm case:", "--T x + = --T" END IF END IF CASE (2) split_a = colsplit; split_b = rowsplit CALL reshape_mm_compatible(matrix_a, matrix_b, matrix_a_rs, matrix_b_rs, new_a, new_b, transa_prv, transb_prv, & optimize_dist=optimize_dist, & nsplit=nsplit, & opt_nsplit=batched_repl == 0, & split_rc_1=split_a, split_rc_2=split_b, & comm_new=comm_tmp, & move_data_1=move_a, move_data_2=move_b, unit_nr=unit_nr_prv) info = dbcsr_tas_info(matrix_a_rs) CALL dbcsr_tas_get_split_info(info, split_rowcol=split_rc, mp_comm=mp_comm) IF (matrix_c%do_batched == 1) THEN matrix_c%mm_storage%batched_beta = beta ELSEIF (matrix_c%do_batched > 1) THEN matrix_c%mm_storage%batched_beta = & dbcsr_scalar_multiply(matrix_c%mm_storage%batched_beta, beta) END IF IF (matrix_c%do_batched <= 2) THEN ALLOCATE (matrix_c_rs) CALL reshape_mm_small(mp_comm, matrix_c, matrix_c_rs, transc_prv == dbcsr_transpose, transc_prv, nodata=nodata_3) ! just leave sparsity structure for retain sparsity but no values IF (.NOT. nodata_3) CALL dbcsr_zero(matrix_c_rs%matrix) IF (matrix_c%do_batched >= 1) matrix_c%mm_storage%store_batched => matrix_c_rs ELSEIF (matrix_c%do_batched == 3) THEN matrix_c_rs => matrix_c%mm_storage%store_batched END IF new_c = matrix_c%do_batched == 0 tr_case = transa_prv IF (unit_nr_prv > 0) THEN IF (tr_case == 'N') THEN WRITE (unit_nr_prv, "(T2,A, 1X, A)") "mm case:", "-- x --T = +" ELSE WRITE (unit_nr_prv, "(T2,A, 1X, A)") "mm case:", "|T x | = +" END IF END IF CASE (3) split_b = colsplit; split_c = colsplit CALL reshape_mm_compatible(matrix_b, matrix_c, matrix_b_rs, matrix_c_rs, new_b, new_c, transb_prv, & transc_prv, optimize_dist=optimize_dist, & nsplit=nsplit, & opt_nsplit=batched_repl == 0, & split_rc_1=split_b, split_rc_2=split_c, & nodata2=nodata_3, comm_new=comm_tmp, & move_data_1=move_b, unit_nr=unit_nr_prv) info = dbcsr_tas_info(matrix_b_rs) CALL dbcsr_tas_get_split_info(info, split_rowcol=split_rc, mp_comm=mp_comm) new_a = .FALSE. IF (matrix_a%do_batched <= 2) THEN ALLOCATE (matrix_a_rs) CALL reshape_mm_small(mp_comm, matrix_a, matrix_a_rs, transa_prv == dbcsr_transpose, transa_prv, move_data=move_a) new_a = .TRUE. END IF tr_case = transb_prv IF (unit_nr_prv > 0) THEN IF (tr_case == 'N') THEN WRITE (unit_nr_prv, "(T2,A, 1X, A)") "mm case:", "+ x -- = --" ELSE WRITE (unit_nr_prv, "(T2,A, 1X, A)") "mm case:", "+ x |T = |T" END IF END IF END SELECT CALL dbcsr_tas_get_split_info(info, nsplit=nsplit, mp_comm=mp_comm, mp_comm_group=mp_comm_group) CALL mp_environ(numproc, pdims, pcoord, mp_comm) CALL mp_environ(numproc_sub, pdims_sub, pcoord_sub, mp_comm_group) opt_pgrid = .NOT. accept_pgrid_dims(pdims_sub, relative=.TRUE.) IF (PRESENT(filter_eps)) THEN filter_eps_prv = filter_eps ELSE filter_eps_prv = 0.0_real_8 END IF IF (unit_nr_prv /= 0) THEN IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T2, A)") "SPLIT / PARALLELIZATION INFO" END IF CALL dbcsr_tas_write_split_info(info, unit_nr_prv) IF (ASSOCIATED(matrix_a_rs)) CALL dbcsr_tas_write_matrix_info(matrix_a_rs, unit_nr_prv, full_info=log_verbose) IF (ASSOCIATED(matrix_b_rs)) CALL dbcsr_tas_write_matrix_info(matrix_b_rs, unit_nr_prv, full_info=log_verbose) IF (ASSOCIATED(matrix_c_rs)) CALL dbcsr_tas_write_matrix_info(matrix_c_rs, unit_nr_prv, full_info=log_verbose) IF (unit_nr_prv > 0) THEN IF (opt_pgrid) THEN WRITE (unit_nr_prv, "(T4, A, 1X, A)") "Change process grid:", "Yes" ELSE WRITE (unit_nr_prv, "(T4, A, 1X, A)") "Change process grid:", "No" END IF END IF END IF zero = dbcsr_scalar_zero(data_type) pdims = 0 CALL mp_cart_create(mp_comm_group, 2, pdims, pcoord, mp_comm_mm) ! Convert DBCSR submatrices to optimized process grids and multiply SELECT CASE (max_mm_dim) CASE (1) IF (matrix_b%do_batched <= 2) THEN ALLOCATE (matrix_b_rep) CALL dbcsr_tas_replicate(matrix_b_rs%matrix, dbcsr_tas_info(matrix_a_rs), matrix_b_rep, move_data=.TRUE.) IF (matrix_b%do_batched == 1 .or. matrix_b%do_batched == 2) THEN matrix_b%mm_storage%store_batched_repl => matrix_b_rep CALL dbcsr_tas_set_batched_state(matrix_b, state=3) END IF ELSEIF (matrix_b%do_batched == 3) THEN matrix_b_rep => matrix_b%mm_storage%store_batched_repl END IF IF (new_b) THEN CALL dbcsr_tas_destroy(matrix_b_rs) DEALLOCATE (matrix_b_rs) END IF IF (unit_nr_prv /= 0) THEN CALL dbcsr_tas_write_dist(matrix_a_rs, unit_nr_prv) CALL dbcsr_tas_write_dist(matrix_b_rep, unit_nr_prv, full_info=log_verbose) END IF CALL convert_to_new_pgrid(mp_comm_mm, matrix_a_rs%matrix, matrix_a_mm, optimize_pgrid=opt_pgrid, move_data=move_a) ! keep communicators alive even after releasing TAS matrices (communicator management does not work between DBCSR and TAS) info_a = dbcsr_tas_info(matrix_a_rs) CALL dbcsr_tas_info_hold(info_a) IF (new_a) THEN CALL dbcsr_tas_destroy(matrix_a_rs) DEALLOCATE (matrix_a_rs) END IF CALL convert_to_new_pgrid(mp_comm_mm, matrix_b_rep%matrix, matrix_b_mm, optimize_pgrid=opt_pgrid, & move_data=matrix_b%do_batched == 0) info_b = dbcsr_tas_info(matrix_b_rep) CALL dbcsr_tas_info_hold(info_b) IF (matrix_b%do_batched == 0) THEN CALL dbcsr_tas_destroy(matrix_b_rep) DEALLOCATE (matrix_b_rep) END IF CALL convert_to_new_pgrid(mp_comm_mm, matrix_c_rs%matrix, matrix_c_mm, nodata=nodata_3, optimize_pgrid=opt_pgrid) info_c = dbcsr_tas_info(matrix_c_rs) CALL dbcsr_tas_info_hold(info_c) CALL mp_sync(matrix_a%dist%info%mp_comm) CALL timeset("dbcsr_tas_dbcsr", handle4) SELECT CASE (tr_case) CASE (dbcsr_no_transpose) CALL timeset("dbcsr_tas_mm_1N", handle3) CALL dbcsr_multiply(transa=dbcsr_no_transpose, transb=dbcsr_no_transpose, alpha=alpha, & matrix_a=matrix_a_mm, matrix_b=matrix_b_mm, beta=beta, matrix_c=matrix_c_mm, & filter_eps=filter_eps_prv, retain_sparsity=retain_sparsity, flop=flop) CALL timestop(handle3) CASE (dbcsr_transpose) CALL timeset("dbcsr_tas_mm_1T", handle3) CALL dbcsr_multiply(transa=dbcsr_transpose, transb=dbcsr_no_transpose, alpha=alpha, & matrix_a=matrix_b_mm, matrix_b=matrix_a_mm, beta=beta, matrix_c=matrix_c_mm, & filter_eps=filter_eps_prv, retain_sparsity=retain_sparsity, flop=flop) CALL timestop(handle3) END SELECT CALL mp_sync(matrix_a%dist%info%mp_comm) CALL timestop(handle4) CALL dbcsr_release(matrix_a_mm) CALL dbcsr_release(matrix_b_mm) nze_c = dbcsr_get_nze(matrix_c_mm) IF (.NOT. new_c) THEN CALL redistribute_and_sum(matrix_c_mm, matrix_c_rs%matrix, local_copy=.NOT. opt_pgrid, alpha=beta) ELSE CALL redistribute_and_sum(matrix_c_mm, matrix_c_rs%matrix, local_copy=.NOT. opt_pgrid) END IF CALL dbcsr_release(matrix_c_mm) IF (PRESENT(filter_eps)) CALL dbcsr_tas_filter(matrix_c_rs, filter_eps) IF (unit_nr_prv /= 0) THEN CALL dbcsr_tas_write_dist(matrix_c_rs, unit_nr_prv) END IF CASE (2) IF (matrix_c%do_batched <= 1) THEN ALLOCATE (matrix_c_rep) CALL dbcsr_tas_replicate(matrix_c_rs%matrix, dbcsr_tas_info(matrix_a_rs), matrix_c_rep, nodata=nodata_3) IF (matrix_c%do_batched == 1) THEN matrix_c%mm_storage%store_batched_repl => matrix_c_rep CALL dbcsr_tas_set_batched_state(matrix_c, state=3) END IF ELSEIF (matrix_c%do_batched == 2) THEN ALLOCATE (matrix_c_rep) CALL dbcsr_tas_replicate(matrix_c_rs%matrix, dbcsr_tas_info(matrix_a_rs), matrix_c_rep, nodata=nodata_3) ! just leave sparsity structure for retain sparsity but no values IF (.not. nodata_3) CALL dbcsr_zero(matrix_c_rep%matrix) matrix_c%mm_storage%store_batched_repl => matrix_c_rep CALL dbcsr_tas_set_batched_state(matrix_c, state=3) ELSEIF (matrix_c%do_batched == 3) THEN matrix_c_rep => matrix_c%mm_storage%store_batched_repl END IF IF (unit_nr_prv /= 0) THEN CALL dbcsr_tas_write_dist(matrix_a_rs, unit_nr_prv) CALL dbcsr_tas_write_dist(matrix_b_rs, unit_nr_prv) END IF CALL convert_to_new_pgrid(mp_comm_mm, matrix_a_rs%matrix, matrix_a_mm, optimize_pgrid=opt_pgrid, move_data=move_a) ! keep communicators alive even after releasing TAS matrices (communicator management does not work between DBCSR and TAS) info_a = dbcsr_tas_info(matrix_a_rs) CALL dbcsr_tas_info_hold(info_a) IF (new_a) THEN CALL dbcsr_tas_destroy(matrix_a_rs) DEALLOCATE (matrix_a_rs) END IF CALL convert_to_new_pgrid(mp_comm_mm, matrix_b_rs%matrix, matrix_b_mm, optimize_pgrid=opt_pgrid, move_data=move_b) info_b = dbcsr_tas_info(matrix_b_rs) CALL dbcsr_tas_info_hold(info_b) IF (new_b) THEN CALL dbcsr_tas_destroy(matrix_b_rs) DEALLOCATE (matrix_b_rs) END IF CALL convert_to_new_pgrid(mp_comm_mm, matrix_c_rep%matrix, matrix_c_mm, nodata=nodata_3, optimize_pgrid=opt_pgrid) info_c = dbcsr_tas_info(matrix_c_rep) CALL dbcsr_tas_info_hold(info_c) CALL mp_sync(matrix_a%dist%info%mp_comm) CALL timeset("dbcsr_tas_dbcsr", handle4) CALL timeset("dbcsr_tas_mm_2", handle3) CALL dbcsr_multiply(transa=transa_prv, transb=transb_prv, alpha=alpha, matrix_a=matrix_a_mm, & matrix_b=matrix_b_mm, beta=beta, matrix_c=matrix_c_mm, & filter_eps=filter_eps_prv/REAL(nsplit, KIND=real_8), retain_sparsity=retain_sparsity, flop=flop) CALL mp_sync(matrix_a%dist%info%mp_comm) CALL timestop(handle3) CALL timestop(handle4) CALL dbcsr_release(matrix_a_mm) CALL dbcsr_release(matrix_b_mm) nze_c = dbcsr_get_nze(matrix_c_mm) CALL redistribute_and_sum(matrix_c_mm, matrix_c_rep%matrix, local_copy=.NOT. opt_pgrid, alpha=beta) nze_c_sum = dbcsr_tas_get_nze_total(matrix_c_rep) CALL dbcsr_release(matrix_c_mm) IF (unit_nr_prv /= 0) THEN CALL dbcsr_tas_write_dist(matrix_c_rep, unit_nr_prv, full_info=log_verbose) END IF IF (matrix_c%do_batched == 0) THEN CALL dbcsr_tas_merge(matrix_c_rs%matrix, matrix_c_rep, move_data=.TRUE.) ELSE matrix_c%mm_storage%batched_out = .TRUE. ! postpone merging submatrices to dbcsr_tas_batched_mm_finalize END IF IF (matrix_c%do_batched == 0) THEN CALL dbcsr_tas_destroy(matrix_c_rep) DEALLOCATE (matrix_c_rep) END IF IF (PRESENT(filter_eps)) CALL dbcsr_tas_filter(matrix_c_rs, filter_eps) ! set upper limit on memory consumption for replicated matrix and complete batched mm ! if limit is exceeded IF (nze_c_sum > default_nsplit_accept_ratio*MAX(nze_a, nze_b)) THEN CALL dbcsr_tas_batched_mm_complete(matrix_c) END IF CASE (3) IF (matrix_a%do_batched <= 2) THEN ALLOCATE (matrix_a_rep) CALL dbcsr_tas_replicate(matrix_a_rs%matrix, dbcsr_tas_info(matrix_b_rs), matrix_a_rep, move_data=.TRUE.) IF (matrix_a%do_batched == 1 .or. matrix_a%do_batched == 2) THEN matrix_a%mm_storage%store_batched_repl => matrix_a_rep CALL dbcsr_tas_set_batched_state(matrix_a, state=3) END IF ELSEIF (matrix_a%do_batched == 3) THEN matrix_a_rep => matrix_a%mm_storage%store_batched_repl END IF IF (new_a) THEN CALL dbcsr_tas_destroy(matrix_a_rs) DEALLOCATE (matrix_a_rs) END IF IF (unit_nr_prv /= 0) THEN CALL dbcsr_tas_write_dist(matrix_a_rep, unit_nr_prv, full_info=log_verbose) CALL dbcsr_tas_write_dist(matrix_b_rs, unit_nr_prv) END IF CALL convert_to_new_pgrid(mp_comm_mm, matrix_a_rep%matrix, matrix_a_mm, optimize_pgrid=opt_pgrid, & move_data=matrix_a%do_batched == 0) ! keep communicators alive even after releasing TAS matrices (communicator management does not work between DBCSR and TAS) info_a = dbcsr_tas_info(matrix_a_rep) CALL dbcsr_tas_info_hold(info_a) IF (matrix_a%do_batched == 0) THEN CALL dbcsr_tas_destroy(matrix_a_rep) DEALLOCATE (matrix_a_rep) END IF CALL convert_to_new_pgrid(mp_comm_mm, matrix_b_rs%matrix, matrix_b_mm, optimize_pgrid=opt_pgrid, move_data=move_b) info_b = dbcsr_tas_info(matrix_b_rs) CALL dbcsr_tas_info_hold(info_b) IF (new_b) THEN CALL dbcsr_tas_destroy(matrix_b_rs) DEALLOCATE (matrix_b_rs) END IF CALL convert_to_new_pgrid(mp_comm_mm, matrix_c_rs%matrix, matrix_c_mm, nodata=nodata_3, optimize_pgrid=opt_pgrid) info_c = dbcsr_tas_info(matrix_c_rs) CALL dbcsr_tas_info_hold(info_c) CALL mp_sync(matrix_a%dist%info%mp_comm) CALL timeset("dbcsr_tas_dbcsr", handle4) SELECT CASE (tr_case) CASE (dbcsr_no_transpose) CALL timeset("dbcsr_tas_mm_3N", handle3) CALL dbcsr_multiply(transa=dbcsr_no_transpose, transb=dbcsr_no_transpose, alpha=alpha, & matrix_a=matrix_a_mm, matrix_b=matrix_b_mm, beta=beta, matrix_c=matrix_c_mm, & filter_eps=filter_eps_prv, retain_sparsity=retain_sparsity, flop=flop) CALL timestop(handle3) CASE (dbcsr_transpose) CALL timeset("dbcsr_tas_mm_3T", handle3) CALL dbcsr_multiply(transa=dbcsr_no_transpose, transb=dbcsr_transpose, alpha=alpha, & matrix_a=matrix_b_mm, matrix_b=matrix_a_mm, beta=beta, matrix_c=matrix_c_mm, & filter_eps=filter_eps_prv, retain_sparsity=retain_sparsity, flop=flop) CALL timestop(handle3) END SELECT CALL mp_sync(matrix_a%dist%info%mp_comm) CALL timestop(handle4) CALL dbcsr_release(matrix_a_mm) CALL dbcsr_release(matrix_b_mm) nze_c = dbcsr_get_nze(matrix_c_mm) IF (.NOT. new_c) THEN CALL redistribute_and_sum(matrix_c_mm, matrix_c_rs%matrix, local_copy=.NOT. opt_pgrid, alpha=beta) ELSE CALL redistribute_and_sum(matrix_c_mm, matrix_c_rs%matrix, local_copy=.NOT. opt_pgrid) END IF CALL dbcsr_release(matrix_c_mm) IF (PRESENT(filter_eps)) CALL dbcsr_tas_filter(matrix_c_rs, filter_eps) IF (unit_nr_prv /= 0) THEN CALL dbcsr_tas_write_dist(matrix_c_rs, unit_nr_prv) END IF END SELECT CALL mp_comm_free(mp_comm_mm) CALL dbcsr_tas_get_split_info(info_c, mp_comm=mp_comm) IF (PRESENT(split_opt)) THEN SELECT CASE (max_mm_dim) CASE (1, 3) CALL mp_sum(nze_c, mp_comm) CASE (2) CALL dbcsr_tas_get_split_info(info_c, mp_comm=mp_comm, mp_comm_group=mp_comm_group) CALL mp_sum(nze_c, mp_comm_group) CALL mp_max(nze_c, mp_comm) END SELECT nsplit_opt = split_factor_estimate(max_mm_dim, nze_a, nze_b, nze_c, numproc) ! ideally we should rederive the split factor from the actual sparsity of C, but ! due to parameter beta, we can not get the sparsity of AxB from DBCSR if not new_c mp_comm_opt = dbcsr_tas_mp_comm(mp_comm, split_rc, nsplit_opt) CALL dbcsr_tas_create_split(split_opt, mp_comm_opt, split_rc, nsplit_opt, own_comm=.TRUE.) IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T2,A)") & "MM PARAMETERS" WRITE (unit_nr_prv, "(T4,A,T68,I13)") "Number of matrix elements per CPU of result matrix:", & (nze_c + numproc - 1)/numproc WRITE (unit_nr_prv, "(T4,A,T68,I13)") "Optimal split factor:", nsplit_opt END IF END IF IF (new_c) THEN CALL dbcsr_scale(matrix_c%matrix, beta) CALL dbcsr_tas_reshape(matrix_c_rs, matrix_c, summation=.TRUE., transposed=transc_prv /= transc, & move_data=.TRUE.) CALL dbcsr_tas_destroy(matrix_c_rs) DEALLOCATE (matrix_c_rs) IF (PRESENT(filter_eps)) CALL dbcsr_tas_filter(matrix_c, filter_eps) ELSEIF (matrix_c%do_batched > 0) THEN IF (matrix_c%mm_storage%batched_out) THEN matrix_c%mm_storage%batched_trans = transc_prv /= transc END IF END IF IF (PRESENT(move_data_a)) THEN IF (move_data_a) CALL dbcsr_tas_clear(matrix_a) END IF IF (PRESENT(move_data_b)) THEN IF (move_data_b) CALL dbcsr_tas_clear(matrix_b) END IF IF (PRESENT(flop)) THEN CALL mp_sum(flop, mp_comm) flop = (flop + numproc - 1)/numproc END IF IF (PRESENT(optimize_dist)) THEN IF (optimize_dist) CALL mp_comm_free(comm_tmp) END IF IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, '(A)') repeat("-", 80) WRITE (unit_nr_prv, '(A,1X,A,1X,A,1X,A,1X,A,1X,A)') "TAS MATRIX MULTIPLICATION DONE" WRITE (unit_nr_prv, '(A)') repeat("-", 80) END IF CALL dbcsr_tas_release_info(info_a) CALL dbcsr_tas_release_info(info_b) CALL dbcsr_tas_release_info(info_c) CALL mp_sync(matrix_a%dist%info%mp_comm) CALL timestop(handle2) CALL timestop(handle) END SUBROUTINE SUBROUTINE redistribute_and_sum(matrix_in, matrix_out, local_copy, alpha) TYPE(dbcsr_type), INTENT(IN) :: matrix_in TYPE(dbcsr_type), INTENT(INOUT) :: matrix_out LOGICAL, INTENT(IN), OPTIONAL :: local_copy TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: alpha TYPE(dbcsr_type) :: matrix_tmp LOGICAL :: local_copy_prv IF (PRESENT(local_copy)) THEN local_copy_prv = local_copy ELSE local_copy_prv = .FALSE. END IF IF (.NOT. local_copy_prv) THEN CALL dbcsr_create(matrix_tmp, matrix_out) CALL dbcsr_redistribute(matrix_in, matrix_tmp) CALL dbcsr_add(matrix_out, matrix_tmp, alpha_scalar=alpha) CALL dbcsr_release(matrix_tmp) ELSE CALL dbcsr_add(matrix_out, matrix_in, alpha_scalar=alpha) END IF END SUBROUTINE SUBROUTINE reshape_mm_small(mp_comm, matrix_in, matrix_out, transposed, trans, nodata, move_data) !! Make sure that smallest matrix involved in a multiplication is not split and bring it to !! the same process grid as the other 2 matrices. TYPE(mp_comm_type), INTENT(IN) :: mp_comm !! communicator that defines Cartesian topology TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix_in TYPE(dbcsr_tas_type), INTENT(OUT) :: matrix_out LOGICAL, INTENT(IN) :: transposed !! Whether matrix_out should be transposed CHARACTER(LEN=1), INTENT(INOUT) :: trans !! update transpose flag for DBCSR mm according to 'transposed' argument LOGICAL, INTENT(IN), OPTIONAL :: nodata, move_data !! Data of matrix_in should not be copied to matrix_out !! memory optimization: move data such that matrix_in is empty on return. INTEGER :: numnodes INTEGER(KIND=int_8), DIMENSION(2) :: dims INTEGER, DIMENSION(2) :: pdims, pcoord TYPE(dbcsr_tas_dist_arb) :: new_row_dist, new_col_dist TYPE(dbcsr_tas_distribution_type) :: dist LOGICAL :: nodata_prv CHARACTER(LEN=*), PARAMETER :: routineN = 'reshape_mm_small' INTEGER :: handle CALL timeset(routineN, handle) IF (PRESENT(nodata)) THEN nodata_prv = nodata ELSE nodata_prv = .FALSE. END IF IF (transposed) THEN SELECT CASE (trans) CASE (dbcsr_transpose) trans = dbcsr_no_transpose CASE (dbcsr_no_transpose) trans = dbcsr_transpose END SELECT END IF CALL mp_environ(numnodes, pdims, pcoord, mp_comm) dims = [dbcsr_tas_nblkrows_total(matrix_in), dbcsr_tas_nblkcols_total(matrix_in)] IF (transposed) CALL swap(dims) IF (.NOT. transposed) THEN new_row_dist = dbcsr_tas_dist_arb_default(pdims(1), dims(1), matrix_in%row_blk_size) new_col_dist = dbcsr_tas_dist_arb_default(pdims(2), dims(2), matrix_in%col_blk_size) CALL dbcsr_tas_distribution_new(dist, mp_comm, new_row_dist, new_col_dist, nosplit=.TRUE.) CALL dbcsr_tas_create(matrix_out, matrix_in%matrix%name, dist, dbcsr_tas_get_data_type(matrix_in), & matrix_in%row_blk_size, matrix_in%col_blk_size, own_dist=.TRUE.) ELSE new_row_dist = dbcsr_tas_dist_arb_default(pdims(1), dims(1), matrix_in%col_blk_size) new_col_dist = dbcsr_tas_dist_arb_default(pdims(2), dims(2), matrix_in%row_blk_size) CALL dbcsr_tas_distribution_new(dist, mp_comm, new_row_dist, new_col_dist, nosplit=.TRUE.) CALL dbcsr_tas_create(matrix_out, matrix_in%matrix%name, dist, dbcsr_tas_get_data_type(matrix_in), & matrix_in%col_blk_size, matrix_in%row_blk_size, own_dist=.TRUE.) END IF IF (.NOT. nodata_prv) CALL dbcsr_tas_reshape(matrix_in, matrix_out, transposed=transposed, move_data=move_data) CALL timestop(handle) END SUBROUTINE SUBROUTINE reshape_mm_compatible(matrix1_in, matrix2_in, matrix1_out, matrix2_out, new1, new2, trans1, trans2, & optimize_dist, nsplit, opt_nsplit, split_rc_1, split_rc_2, nodata1, nodata2, & move_data_1, move_data_2, comm_new, unit_nr) !! Reshape either matrix1 or matrix2 to make sure that their process grids are compatible with !! the same split factor. TYPE(dbcsr_tas_type), TARGET, & INTENT(INOUT) :: matrix1_in, matrix2_in TYPE(dbcsr_tas_type), POINTER, INTENT(OUT) :: matrix1_out, matrix2_out LOGICAL, INTENT(OUT) :: new1, new2 !! Whether matrix1_out is a new matrix or simply pointing to matrix1_in !! Whether matrix2_out is a new matrix or simply pointing to matrix2_in CHARACTER(LEN=1), INTENT(INOUT) :: trans1, trans2 !! transpose flag of matrix1_in for multiplication !! transpose flag of matrix2_in for multiplication LOGICAL, INTENT(IN), OPTIONAL :: optimize_dist !! experimental: optimize matrix splitting and distribution INTEGER, INTENT(IN), OPTIONAL :: nsplit !! Optimal split factor (set to 0 if split factor should not be changed) LOGICAL, INTENT(IN), OPTIONAL :: opt_nsplit INTEGER, INTENT(INOUT) :: split_rc_1, split_rc_2 !! Whether to split rows or columns for matrix 1 !! Whether to split rows or columns for matrix 2 TYPE(mp_comm_type), INTENT(OUT), OPTIONAL :: comm_new !! returns the new communicator only if optimize_dist LOGICAL, OPTIONAL, INTENT(IN) :: nodata1, nodata2 !! Don't copy matrix data from matrix1_in to matrix1_out !! Don't copy matrix data from matrix2_in to matrix2_out LOGICAL, OPTIONAL, INTENT(INOUT) :: move_data_1, move_data_2 !! memory optimization: move data such that matrix1_in may be empty on return. !! memory optimization: move data such that matrix2_in may be empty on return. INTEGER, INTENT(IN), OPTIONAL :: unit_nr !! output unit INTEGER(KIND=int_8), DIMENSION(2) :: dims1, dims2, dims_ref INTEGER(KIND=int_8) :: d1, d2 CHARACTER(LEN=*), PARAMETER :: routineN = 'reshape_mm_compatible' INTEGER :: handle, numnodes, unit_nr_prv, & nsplit_prv, ref, split_rc_ref INTEGER, DIMENSION(2) :: pcoord, pdims LOGICAL :: optimize_dist_prv, trans1_newdist, trans2_newdist TYPE(dbcsr_tas_dist_cyclic) :: row_dist_1, col_dist_1, row_dist_2, col_dist_2 TYPE(dbcsr_tas_distribution_type) :: dist_1, dist_2 TYPE(dbcsr_tas_split_info) :: split_info INTEGER(KIND=int_8) :: nze1, nze2 LOGICAL :: nodata1_prv, nodata2_prv TYPE(mp_comm_type) :: mp_comm CALL timeset(routineN, handle) new1 = .FALSE.; new2 = .FALSE. IF (PRESENT(nodata1)) THEN nodata1_prv = nodata1 ELSE nodata1_prv = .FALSE. END IF IF (PRESENT(nodata2)) THEN nodata2_prv = nodata2 ELSE nodata2_prv = .FALSE. END IF unit_nr_prv = prep_output_unit(unit_nr) NULLIFY (matrix1_out, matrix2_out) IF (PRESENT(optimize_dist)) THEN optimize_dist_prv = optimize_dist ELSE optimize_dist_prv = .FALSE. END IF dims1 = [dbcsr_tas_nblkrows_total(matrix1_in), dbcsr_tas_nblkcols_total(matrix1_in)] dims2 = [dbcsr_tas_nblkrows_total(matrix2_in), dbcsr_tas_nblkcols_total(matrix2_in)] nze1 = dbcsr_tas_get_nze_total(matrix1_in) nze2 = dbcsr_tas_get_nze_total(matrix2_in) IF (trans1 == dbcsr_transpose) split_rc_1 = MOD(split_rc_1, 2) + 1 IF (trans2 == dbcsr_transpose) split_rc_2 = MOD(split_rc_2, 2) + 1 IF (nze1 >= nze2) THEN ref = 1 split_rc_ref = split_rc_1 dims_ref = dims1 ELSE ref = 2 split_rc_ref = split_rc_2 dims_ref = dims2 END IF IF (PRESENT(nsplit)) THEN nsplit_prv = nsplit ELSE nsplit_prv = 0 END IF IF (optimize_dist_prv) THEN DBCSR_ASSERT(PRESENT(comm_new)) END IF IF ((.NOT. optimize_dist_prv) .AND. dist_compatible(matrix1_in, matrix2_in, split_rc_1, split_rc_2)) THEN CALL change_split(matrix1_in, matrix1_out, nsplit_prv, split_rc_1, new1, & move_data=move_data_1, nodata=nodata1, opt_nsplit=opt_nsplit) CALL dbcsr_tas_get_split_info(dbcsr_tas_info(matrix1_out), nsplit=nsplit_prv) CALL change_split(matrix2_in, matrix2_out, nsplit_prv, split_rc_2, new2, & move_data=move_data_2, nodata=nodata2, opt_nsplit=.FALSE.) IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T2,A,1X,A,1X,A,1X,A)") "No redistribution of", TRIM(matrix1_in%matrix%name), & "and", TRIM(matrix2_in%matrix%name) IF (new1) THEN WRITE (unit_nr_prv, "(T2,A,1X,A,1X,A)") "Change split factor of", TRIM(matrix1_in%matrix%name), ": Yes" ELSE WRITE (unit_nr_prv, "(T2,A,1X,A,1X,A)") "Change split factor of", TRIM(matrix1_in%matrix%name), ": No" END IF IF (new2) THEN WRITE (unit_nr_prv, "(T2,A,1X,A,1X,A)") "Change split factor of", TRIM(matrix2_in%matrix%name), ": Yes" ELSE WRITE (unit_nr_prv, "(T2,A,1X,A,1X,A)") "Change split factor of", TRIM(matrix2_in%matrix%name), ": No" END IF END IF ELSE IF (optimize_dist_prv) THEN IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T2,A,1X,A,1X,A,1X,A)") "Optimizing distribution of", TRIM(matrix1_in%matrix%name), & "and", TRIM(matrix2_in%matrix%name) END IF trans1_newdist = (split_rc_1 == colsplit) trans2_newdist = (split_rc_2 == colsplit) IF (trans1_newdist) THEN CALL swap(dims1) CALL invert_transpose_flag(trans1) END IF IF (trans2_newdist) THEN CALL swap(dims2) CALL invert_transpose_flag(trans2) END IF IF (nsplit_prv == 0) THEN SELECT CASE (split_rc_ref) CASE (rowsplit) d1 = dims_ref(1) d2 = dims_ref(2) CASE (colsplit) d1 = dims_ref(2) d2 = dims_ref(1) END SELECT nsplit_prv = INT((d1 - 1)/d2 + 1) END IF DBCSR_ASSERT(nsplit_prv > 0) CALL dbcsr_tas_get_split_info(dbcsr_tas_info(matrix1_in), mp_comm=mp_comm) comm_new = dbcsr_tas_mp_comm(mp_comm, rowsplit, nsplit_prv) CALL dbcsr_tas_create_split(split_info, comm_new, rowsplit, nsplit_prv) CALL mp_environ(numnodes, pdims, pcoord, comm_new) ! use a very simple cyclic distribution that may not be load balanced if block ! sizes are not equal. However we can not use arbitrary distributions ! for large dimensions since this would require storing distribution vectors as arrays ! which can not be stored for large dimensions. row_dist_1 = dbcsr_tas_dist_cyclic(1, pdims(1), dims1(1)) col_dist_1 = dbcsr_tas_dist_cyclic(1, pdims(2), dims1(2)) row_dist_2 = dbcsr_tas_dist_cyclic(1, pdims(1), dims2(1)) col_dist_2 = dbcsr_tas_dist_cyclic(1, pdims(2), dims2(2)) CALL dbcsr_tas_distribution_new(dist_1, comm_new, row_dist_1, col_dist_1, split_info=split_info) CALL dbcsr_tas_distribution_new(dist_2, comm_new, row_dist_2, col_dist_2, split_info=split_info) CALL dbcsr_tas_release_info(split_info) ALLOCATE (matrix1_out) IF (.NOT. trans1_newdist) THEN CALL dbcsr_tas_create(matrix1_out, matrix1_in%matrix%name, dist_1, dbcsr_tas_get_data_type(matrix1_in), & matrix1_in%row_blk_size, matrix1_in%col_blk_size, own_dist=.TRUE.) ELSE CALL dbcsr_tas_create(matrix1_out, matrix1_in%matrix%name, dist_1, dbcsr_tas_get_data_type(matrix1_in), & matrix1_in%col_blk_size, matrix1_in%row_blk_size, own_dist=.TRUE.) END IF ALLOCATE (matrix2_out) IF (.NOT. trans2_newdist) THEN CALL dbcsr_tas_create(matrix2_out, matrix2_in%matrix%name, dist_2, dbcsr_tas_get_data_type(matrix2_in), & matrix2_in%row_blk_size, matrix2_in%col_blk_size, own_dist=.TRUE.) ELSE CALL dbcsr_tas_create(matrix2_out, matrix2_in%matrix%name, dist_2, dbcsr_tas_get_data_type(matrix2_in), & matrix2_in%col_blk_size, matrix2_in%row_blk_size, own_dist=.TRUE.) END IF IF (.NOT. nodata1_prv) CALL dbcsr_tas_reshape(matrix1_in, matrix1_out, transposed=trans1_newdist, move_data=move_data_1) IF (.NOT. nodata2_prv) CALL dbcsr_tas_reshape(matrix2_in, matrix2_out, transposed=trans2_newdist, move_data=move_data_2) new1 = .TRUE. new2 = .TRUE. ELSE SELECT CASE (ref) CASE (1) IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T2,A,1X,A)") "Redistribution of", TRIM(matrix2_in%matrix%name) END IF CALL change_split(matrix1_in, matrix1_out, nsplit_prv, split_rc_1, new1, & move_data=move_data_1, nodata=nodata1, opt_nsplit=opt_nsplit) ALLOCATE (matrix2_out) CALL reshape_mm_template(matrix1_out, matrix2_in, matrix2_out, trans2, split_rc_2, & nodata=nodata2, move_data=move_data_2) new2 = .TRUE. CASE (2) IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T2,A,1X,A)") "Redistribution of", TRIM(matrix1_in%matrix%name) END IF CALL change_split(matrix2_in, matrix2_out, nsplit_prv, split_rc_2, new2, & move_data=move_data_2, nodata=nodata2, opt_nsplit=opt_nsplit) ALLOCATE (matrix1_out) CALL reshape_mm_template(matrix2_out, matrix1_in, matrix1_out, trans1, split_rc_1, & nodata=nodata1, move_data=move_data_1) new1 = .TRUE. END SELECT END IF END IF IF (PRESENT(move_data_1) .AND. new1) move_data_1 = .TRUE. IF (PRESENT(move_data_2) .AND. new2) move_data_2 = .TRUE. CALL timestop(handle) END SUBROUTINE SUBROUTINE change_split(matrix_in, matrix_out, nsplit, split_rowcol, is_new, opt_nsplit, move_data, nodata) !! Change split factor without redistribution TYPE(dbcsr_tas_type), TARGET, & INTENT(INOUT) :: matrix_in TYPE(dbcsr_tas_type), POINTER, INTENT(OUT) :: matrix_out INTEGER, INTENT(IN) :: nsplit !! new split factor, set to 0 to not change split of matrix_in INTEGER, INTENT(IN) :: split_rowcol !! split rows or columns LOGICAL, INTENT(OUT) :: is_new !! whether matrix_out is new or a pointer to matrix_in LOGICAL, INTENT(IN), OPTIONAL :: opt_nsplit !! whether nsplit should be optimized for current process grid LOGICAL, INTENT(IN), OPTIONAL :: nodata !! Data of matrix_in should not be copied to matrix_out LOGICAL, INTENT(INOUT), OPTIONAL :: move_data !! memory optimization: move data such that matrix_in is empty on return. INTEGER :: & split_rc, nsplit_old, handle, data_type, nsplit_new, nsplit_prv TYPE(dbcsr_tas_split_info) :: split_info CHARACTER(len=default_string_length) :: name TYPE(dbcsr_tas_distribution_type) :: dist LOGICAL :: nodata_prv CLASS(dbcsr_tas_distribution), ALLOCATABLE :: rdist, cdist CLASS(dbcsr_tas_rowcol_data), ALLOCATABLE :: rbsize, cbsize TYPE(mp_comm_type) :: mp_comm CHARACTER(LEN=*), PARAMETER :: routineN = 'change_split' NULLIFY (matrix_out) is_new = .TRUE. CALL dbcsr_tas_get_split_info(dbcsr_tas_info(matrix_in), mp_comm=mp_comm, & split_rowcol=split_rc, nsplit=nsplit_old) IF (nsplit == 0) THEN IF (split_rowcol == split_rc) THEN matrix_out => matrix_in is_new = .FALSE. RETURN ELSE nsplit_prv = 1 END IF ELSE nsplit_prv = nsplit END IF CALL timeset(routineN, handle) nodata_prv = .FALSE. IF (PRESENT(nodata)) nodata_prv = nodata CALL dbcsr_tas_get_info(matrix_in, data_type=data_type, name=name, & row_blk_size=rbsize, col_blk_size=cbsize, & proc_row_dist=rdist, proc_col_dist=cdist) CALL dbcsr_tas_create_split(split_info, mp_comm, split_rowcol, nsplit_prv, opt_nsplit=opt_nsplit) CALL dbcsr_tas_get_split_info(split_info, nsplit=nsplit_new) IF (nsplit_old == nsplit_new .AND. split_rc == split_rowcol) THEN matrix_out => matrix_in is_new = .FALSE. CALL dbcsr_tas_release_info(split_info) CALL timestop(handle) RETURN END IF CALL dbcsr_tas_distribution_new(dist, mp_comm, rdist, cdist, & split_info=split_info) CALL dbcsr_tas_release_info(split_info) ALLOCATE (matrix_out) CALL dbcsr_tas_create(matrix_out, name, dist, & data_type, & rbsize, cbsize, own_dist=.TRUE.) IF (.NOT. nodata_prv) CALL dbcsr_tas_copy(matrix_out, matrix_in) IF (PRESENT(move_data)) THEN IF (.NOT. nodata_prv) THEN IF (move_data) CALL dbcsr_tas_clear(matrix_in) move_data = .TRUE. END IF END IF CALL timestop(handle) END SUBROUTINE FUNCTION dist_compatible(mat_a, mat_b, split_rc_a, split_rc_b, unit_nr) !! Check whether matrices have same distribution and same split. TYPE(dbcsr_tas_type), INTENT(IN) :: mat_a, mat_b INTEGER, INTENT(IN) :: split_rc_a, split_rc_b INTEGER, INTENT(IN), OPTIONAL :: unit_nr LOGICAL :: dist_compatible INTEGER :: same_local_rowcols, split_check_a, split_check_b TYPE(dbcsr_tas_split_info) :: info_a, info_b INTEGER :: unit_nr_prv, numproc INTEGER, DIMENSION(2) :: pdims_a, pdims_b, pcoord_a, pcoord_b INTEGER(int_8), DIMENSION(:), ALLOCATABLE :: local_rowcols_a, local_rowcols_b unit_nr_prv = prep_output_unit(unit_nr) dist_compatible = .FALSE. info_a = dbcsr_tas_info(mat_a) info_b = dbcsr_tas_info(mat_b) CALL dbcsr_tas_get_split_info(info_a, split_rowcol=split_check_a) CALL dbcsr_tas_get_split_info(info_b, split_rowcol=split_check_b) IF (split_check_b /= split_rc_b .OR. split_check_a /= split_rc_a .OR. split_rc_a /= split_rc_b) THEN IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, *) "matrix layout a not compatible", split_check_a, split_rc_a WRITE (unit_nr_prv, *) "matrix layout b not compatible", split_check_b, split_rc_b END IF RETURN END IF ! check if communicators are equivalent ! Note: mpi_comm_compare is not sufficient since this does not compare associated Cartesian grids. ! It's sufficient to check dimensions of global grid, subgrids will be determined later on (change_split) CALL mp_environ(numproc, pdims_a, pcoord_a, info_a%mp_comm) CALL mp_environ(numproc, pdims_b, pcoord_b, info_b%mp_comm) IF (.NOT. array_eq(pdims_a, pdims_b)) THEN IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, *) "mp dims not compatible:", pdims_a, "|", pdims_b END IF RETURN END IF ! check that distribution is the same by comparing local rows / columns for each matrix SELECT CASE (split_rc_a) CASE (rowsplit) CALL dbcsr_tas_get_info(mat_a, local_rows=local_rowcols_a) CALL dbcsr_tas_get_info(mat_b, local_rows=local_rowcols_b) CASE (colsplit) CALL dbcsr_tas_get_info(mat_a, local_cols=local_rowcols_a) CALL dbcsr_tas_get_info(mat_b, local_cols=local_rowcols_b) END SELECT same_local_rowcols = MERGE(1, 0, array_eq(local_rowcols_a, local_rowcols_b)) CALL mp_sum(same_local_rowcols, info_a%mp_comm) IF (same_local_rowcols == numproc) THEN dist_compatible = .TRUE. ELSE IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, *) "local rowcols not compatible" WRITE (unit_nr_prv, *) "local rowcols A", local_rowcols_a WRITE (unit_nr_prv, *) "local rowcols B", local_rowcols_b END IF END IF END FUNCTION SUBROUTINE reshape_mm_template(template, matrix_in, matrix_out, trans, split_rc, nodata, move_data) !! Reshape matrix_in s.t. it has same process grid, distribution and split as template TYPE(dbcsr_tas_type), INTENT(IN) :: template TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix_in TYPE(dbcsr_tas_type), INTENT(OUT) :: matrix_out CHARACTER(LEN=1), INTENT(INOUT) :: trans INTEGER, INTENT(IN) :: split_rc LOGICAL, INTENT(IN), OPTIONAL :: nodata, move_data CLASS(dbcsr_tas_distribution), ALLOCATABLE :: row_dist, col_dist TYPE(dbcsr_tas_distribution_type) :: dist_new TYPE(dbcsr_tas_split_info) :: info_template, info_matrix INTEGER :: dim_split_template, dim_split_matrix, & numnodes, handle INTEGER, DIMENSION(2) :: pcoord, pdims LOGICAL :: nodata_prv, transposed TYPE(mp_comm_type) :: mp_comm CHARACTER(LEN=*), PARAMETER :: routineN = 'reshape_mm_template' CALL timeset(routineN, handle) IF (PRESENT(nodata)) THEN nodata_prv = nodata ELSE nodata_prv = .FALSE. END IF info_template = dbcsr_tas_info(template) info_matrix = dbcsr_tas_info(matrix_in) dim_split_template = info_template%split_rowcol dim_split_matrix = split_rc transposed = dim_split_template .NE. dim_split_matrix IF (transposed) THEN SELECT CASE (trans) CASE (dbcsr_transpose) trans = dbcsr_no_transpose CASE (dbcsr_no_transpose) trans = dbcsr_transpose END SELECT END IF CALL mp_environ(numnodes, pdims, pcoord, info_template%mp_comm) SELECT CASE (dim_split_template) CASE (1) IF (.NOT. transposed) THEN ALLOCATE (row_dist, source=template%dist%row_dist) ALLOCATE (col_dist, source=dbcsr_tas_dist_arb_default(pdims(2), matrix_in%nblkcols, matrix_in%col_blk_size)) ELSE ALLOCATE (row_dist, source=template%dist%row_dist) ALLOCATE (col_dist, source=dbcsr_tas_dist_arb_default(pdims(2), matrix_in%nblkrows, matrix_in%row_blk_size)) END IF CASE (2) IF (.NOT. transposed) THEN ALLOCATE (row_dist, source=dbcsr_tas_dist_arb_default(pdims(1), matrix_in%nblkrows, matrix_in%row_blk_size)) ALLOCATE (col_dist, source=template%dist%col_dist) ELSE ALLOCATE (row_dist, source=dbcsr_tas_dist_arb_default(pdims(1), matrix_in%nblkcols, matrix_in%col_blk_size)) ALLOCATE (col_dist, source=template%dist%col_dist) END IF END SELECT CALL dbcsr_tas_get_split_info(info_template, mp_comm=mp_comm) CALL dbcsr_tas_distribution_new(dist_new, mp_comm, row_dist, col_dist, split_info=info_template) IF (.NOT. transposed) THEN CALL dbcsr_tas_create(matrix_out, matrix_in%matrix%name, dist_new, dbcsr_tas_get_data_type(matrix_in), & matrix_in%row_blk_size, matrix_in%col_blk_size, own_dist=.TRUE.) ELSE CALL dbcsr_tas_create(matrix_out, matrix_in%matrix%name, dist_new, dbcsr_tas_get_data_type(matrix_in), & matrix_in%col_blk_size, matrix_in%row_blk_size, own_dist=.TRUE.) END IF IF (.NOT. nodata_prv) CALL dbcsr_tas_reshape(matrix_in, matrix_out, transposed=transposed, move_data=move_data) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_tas_result_index(transa, transb, transc, matrix_a, matrix_b, matrix_c, filter_eps, & unit_nr, blk_ind, nze, retain_sparsity) !! Estimate sparsity pattern of C resulting from A x B = C by multiplying the block norms of A and B !! Same dummy arguments as dbcsr_tas_multiply CHARACTER(LEN=1), INTENT(IN) :: transa, transb, transc TYPE(dbcsr_tas_type), INTENT(INOUT), TARGET :: matrix_a, matrix_b, matrix_c TYPE(dbcsr_tas_type), POINTER :: matrix_a_bnorm, matrix_b_bnorm, matrix_c_bnorm REAL(KIND=real_8), INTENT(IN), OPTIONAL :: filter_eps INTEGER, INTENT(IN), OPTIONAL :: unit_nr INTEGER(int_8), DIMENSION(:, :), ALLOCATABLE, INTENT(OUT), OPTIONAL :: blk_ind LOGICAL, INTENT(IN), OPTIONAL :: retain_sparsity INTEGER(int_8), INTENT(OUT), OPTIONAL :: nze CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_result_index' LOGICAL :: retain_sparsity_prv INTEGER :: bn, row_size, col_size, handle, iblk, nblk INTEGER(int_8) :: row, col TYPE(dbcsr_tas_iterator) :: iter TYPE(mp_comm_type) :: mp_comm CALL timeset(routineN, handle) IF (PRESENT(retain_sparsity)) THEN retain_sparsity_prv = retain_sparsity ELSE retain_sparsity_prv = .FALSE. END IF IF (.NOT. retain_sparsity_prv) THEN ALLOCATE (matrix_a_bnorm, matrix_b_bnorm, matrix_c_bnorm) CALL create_block_norms_matrix(matrix_a, matrix_a_bnorm) CALL create_block_norms_matrix(matrix_b, matrix_b_bnorm) CALL create_block_norms_matrix(matrix_c, matrix_c_bnorm, nodata=.TRUE.) CALL dbcsr_tas_multiply(transa, transb, transc, dbcsr_scalar(1.0_real_8), matrix_a_bnorm, & matrix_b_bnorm, dbcsr_scalar(0.0_real_8), matrix_c_bnorm, & filter_eps=filter_eps, move_data_a=.TRUE., move_data_b=.TRUE., & simple_split=.TRUE., unit_nr=unit_nr) CALL dbcsr_tas_destroy(matrix_a_bnorm) CALL dbcsr_tas_destroy(matrix_b_bnorm) DEALLOCATE (matrix_a_bnorm, matrix_b_bnorm) ELSE matrix_c_bnorm => matrix_c END IF nblk = dbcsr_tas_get_num_blocks(matrix_c_bnorm) IF (PRESENT(blk_ind)) ALLOCATE (blk_ind(nblk, 2)) CALL dbcsr_tas_iterator_start(iter, matrix_c_bnorm) IF (PRESENT(nze)) nze = 0 DO iblk = 1, nblk CALL dbcsr_tas_iterator_next_block(iter, row, col, bn) row_size = matrix_c%row_blk_size%data(row) col_size = matrix_c%col_blk_size%data(col) IF (PRESENT(nze)) nze = nze + row_size*col_size IF (PRESENT(blk_ind)) blk_ind(iblk, :) = [row, col] END DO CALL dbcsr_tas_iterator_stop(iter) IF (PRESENT(nze)) THEN CALL dbcsr_tas_get_split_info(dbcsr_tas_info(matrix_a), mp_comm=mp_comm) CALL mp_sum(nze, mp_comm) END IF IF (.NOT. retain_sparsity_prv) THEN CALL dbcsr_tas_destroy(matrix_c_bnorm) DEALLOCATE (matrix_c_bnorm) END IF CALL timestop(handle) END SUBROUTINE FUNCTION split_factor_estimate(max_mm_dim, nze_a, nze_b, nze_c, numnodes) RESULT(nsplit) !! Estimate optimal split factor for AxB=C from occupancies (number of non-zero elements) !! This estimate is based on the minimization of communication volume whereby !! the communication of CARMA n-split step and CANNON-multiplication of submatrices are !! considered. !! \result estimated split factor INTEGER, INTENT(IN) :: max_mm_dim INTEGER(KIND=int_8), INTENT(IN) :: nze_a, nze_b, nze_c !! number of non-zeroes in A !! number of non-zeroes in B !! number of non-zeroes in C INTEGER, INTENT(IN) :: numnodes !! number of MPI ranks INTEGER :: nsplit INTEGER(KIND=int_8) :: max_nze, min_nze REAL(real_8) :: s_opt_factor s_opt_factor = dbcsr_cfg%tas_split_factor%val SELECT CASE (max_mm_dim) CASE (1) min_nze = MAX(nze_b, 1_int_8) max_nze = MAX(MAXVAL([nze_a, nze_c]), 1_int_8) CASE (2) min_nze = MAX(nze_c, 1_int_8) max_nze = MAX(MAXVAL([nze_a, nze_b]), 1_int_8) CASE (3) min_nze = MAX(nze_a, 1_int_8) max_nze = MAX(MAXVAL([nze_b, nze_c]), 1_int_8) CASE DEFAULT DBCSR_ABORT("") END SELECT nsplit = INT(MIN(INT(numnodes, KIND=int_8), NINT(REAL(max_nze, real_8)/(REAL(min_nze, real_8)*s_opt_factor), KIND=int_8))) IF (nsplit == 0) nsplit = 1 END FUNCTION SUBROUTINE create_block_norms_matrix(matrix_in, matrix_out, nodata) !! Create a matrix with block sizes one that contains the block norms of matrix_in TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix_in TYPE(dbcsr_tas_type), INTENT(OUT) :: matrix_out LOGICAL, INTENT(IN), OPTIONAL :: nodata TYPE(dbcsr_tas_blk_size_one) :: row_blk_size, col_blk_size TYPE(dbcsr_tas_iterator) :: iter INTEGER(KIND=int_8) :: row, column, nblkrows, nblkcols CHARACTER(len=default_string_length) :: name INTEGER :: data_type #:for dparam, dtype, dsuffix in dtype_float_list ${dtype}$, DIMENSION(:, :), POINTER :: block_get_${dsuffix}$ ${dtype}$, DIMENSION(:, :), POINTER :: block_put_${dsuffix}$ #:endfor LOGICAL :: tr, nodata_prv, found DBCSR_ASSERT(matrix_in%valid) IF (PRESENT(nodata)) THEN nodata_prv = nodata ELSE nodata_prv = .FALSE. END IF CALL dbcsr_tas_get_info(matrix_in, data_type=data_type, name=name, & nblkrows_total=nblkrows, nblkcols_total=nblkcols) row_blk_size = dbcsr_tas_blk_size_one(nblkrows) col_blk_size = dbcsr_tas_blk_size_one(nblkcols) ! not sure if assumption that same distribution can be taken still holds CALL dbcsr_tas_create(matrix_out, name, matrix_in%dist, & data_type, & row_blk_size, col_blk_size) IF (.NOT. nodata_prv) THEN CALL dbcsr_tas_reserve_blocks(matrix_in, matrix_out) CALL dbcsr_tas_iterator_start(iter, matrix_in) DO WHILE (dbcsr_tas_iterator_blocks_left(iter)) #:for dparam, dtype, dsuffix in dtype_float_list IF (data_type == ${dparam}$) THEN CALL dbcsr_tas_iterator_next_block(iter, row, column, block_get_${dsuffix}$, tr) CALL dbcsr_tas_get_block_p(matrix_out, row, column, block_put_${dsuffix}$, tr, found) DBCSR_ASSERT(found) block_put_${dsuffix}$ (1, 1) = SQRT(SUM(block_get_${dsuffix}$**2)) ! norm2 works only for real END IF #:endfor END DO CALL dbcsr_tas_iterator_stop(iter) END IF END SUBROUTINE SUBROUTINE convert_to_new_pgrid(mp_comm_cart, matrix_in, matrix_out, move_data, nodata, optimize_pgrid) !! Convert a DBCSR matrix to a new process grid TYPE(mp_comm_type), INTENT(IN) :: mp_comm_cart !! new process grid TYPE(dbcsr_type), INTENT(INOUT) :: matrix_in TYPE(dbcsr_type), INTENT(OUT) :: matrix_out LOGICAL, INTENT(IN), OPTIONAL :: move_data, nodata !! memory optimization: move data such that matrix_in is empty on return. !! Data of matrix_in should not be copied to matrix_out LOGICAL, INTENT(IN), OPTIONAL :: optimize_pgrid !! Whether to change process grid INTEGER :: & nbrows, nbcols, data_type, nproc, handle INTEGER, DIMENSION(2) :: pdims, pcoord INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: row_dist, col_dist, rbsize, rcsize TYPE(dbcsr_distribution_obj) :: dist, dist_old TYPE(dbcsr_mp_obj) :: mp_obj CHARACTER(len=default_string_length) :: name LOGICAL :: nodata_prv, optimize_pgrid_prv CHARACTER(LEN=*), PARAMETER :: routineN = 'convert_to_new_pgrid' NULLIFY (row_dist, col_dist, rbsize, rcsize) CALL timeset(routineN, handle) IF (PRESENT(optimize_pgrid)) THEN optimize_pgrid_prv = optimize_pgrid ELSE optimize_pgrid_prv = .TRUE. END IF IF (PRESENT(nodata)) THEN nodata_prv = nodata ELSE nodata_prv = .FALSE. END IF IF (.NOT. optimize_pgrid_prv) THEN CALL dbcsr_create(matrix_out, template=matrix_in) IF (.NOT. nodata_prv) CALL dbcsr_copy(matrix_out, matrix_in) CALL timestop(handle) RETURN END IF CALL dbcsr_get_info(matrix_in, nblkrows_total=nbrows, nblkcols_total=nbcols, & row_blk_size=rbsize, col_blk_size=rcsize, & data_type=data_type, distribution=dist_old, name=name) CALL mp_environ(nproc, pdims, pcoord, mp_comm_cart) ALLOCATE (row_dist(nbrows), col_dist(nbcols)) CALL dbcsr_tas_default_distvec(nbrows, pdims(1), rbsize, row_dist) CALL dbcsr_tas_default_distvec(nbcols, pdims(2), rcsize, col_dist) mp_obj = dbcsr_mp_environ(mp_comm_cart) CALL dbcsr_distribution_new(dist, mp_obj, row_dist, col_dist, reuse_arrays=.TRUE.) CALL dbcsr_mp_release(mp_obj) CALL dbcsr_create(matrix_out, name, dist, dbcsr_type_no_symmetry, rbsize, rcsize, data_type=data_type) CALL dbcsr_distribution_release(dist) IF (.NOT. nodata_prv) THEN CALL dbcsr_redistribute(matrix_in, matrix_out) IF (PRESENT(move_data)) THEN IF (move_data) CALL dbcsr_clear(matrix_in) END IF END IF CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_tas_batched_mm_init(matrix) TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix CALL dbcsr_tas_set_batched_state(matrix, state=1) ALLOCATE (matrix%mm_storage) matrix%mm_storage%batched_out = .FALSE. END SUBROUTINE SUBROUTINE dbcsr_tas_batched_mm_finalize(matrix) TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix INTEGER :: handle CALL mp_sync(matrix%dist%info%mp_comm) CALL timeset("dbcsr_tas_total", handle) IF (matrix%do_batched == 0) RETURN IF (matrix%mm_storage%batched_out) THEN CALL dbcsr_scale(matrix%matrix, matrix%mm_storage%batched_beta) END IF CALL dbcsr_tas_batched_mm_complete(matrix) matrix%mm_storage%batched_out = .FALSE. DEALLOCATE (matrix%mm_storage) CALL dbcsr_tas_set_batched_state(matrix, state=0) CALL mp_sync(matrix%dist%info%mp_comm) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_tas_set_batched_state(matrix, state, opt_grid) !! set state flags during batched multiplication TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix LOGICAL, INTENT(IN), OPTIONAL :: opt_grid !! whether process grid was already optimized and should not be changed INTEGER, INTENT(IN), OPTIONAL :: state !! - 0 no batched MM !! - 1 batched MM but mm_storage not yet initialized !! - 2 batched MM and mm_storage requires update !! - 3 batched MM and mm_storage initialized IF (PRESENT(opt_grid)) THEN matrix%has_opt_pgrid = opt_grid matrix%dist%info%strict_split(1) = .TRUE. END IF IF (PRESENT(state)) THEN matrix%do_batched = state SELECT CASE (state) CASE (0, 1) ! reset to default IF (matrix%has_opt_pgrid) THEN matrix%dist%info%strict_split(1) = .TRUE. ELSE matrix%dist%info%strict_split(1) = matrix%dist%info%strict_split(2) END IF CASE (2, 3) matrix%dist%info%strict_split(1) = .TRUE. CASE DEFAULT DBCSR_ABORT("should not happen") END SELECT END IF END SUBROUTINE SUBROUTINE dbcsr_tas_batched_mm_complete(matrix, warn) TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix LOGICAL, INTENT(IN), OPTIONAL :: warn IF (matrix%do_batched == 0) RETURN ASSOCIATE (storage => matrix%mm_storage) IF (PRESENT(warn)) THEN IF (warn .AND. matrix%do_batched == 3) THEN CALL dbcsr_warn(__LOCATION__, & "Optimizations for batched multiplication are disabled because of conflicting data access") END IF END IF IF (storage%batched_out .AND. matrix%do_batched == 3) THEN CALL dbcsr_tas_merge(storage%store_batched%matrix, & storage%store_batched_repl, move_data=.TRUE.) CALL dbcsr_tas_reshape(storage%store_batched, matrix, summation=.TRUE., & transposed=storage%batched_trans, move_data=.TRUE.) CALL dbcsr_tas_destroy(storage%store_batched) DEALLOCATE (storage%store_batched) END IF IF (ASSOCIATED(storage%store_batched_repl)) THEN CALL dbcsr_tas_destroy(storage%store_batched_repl) DEALLOCATE (storage%store_batched_repl) END IF END ASSOCIATE CALL dbcsr_tas_set_batched_state(matrix, state=2) END SUBROUTINE END MODULE ================================================ FILE: src/tas/dbcsr_tas_reshape_ops.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tas_reshape_ops !! communication routines to reshape / replicate / merge tall-and-skinny matrices. #:include "dbcsr_tas.fypp" USE dbcsr_block_access, ONLY: & dbcsr_put_block, dbcsr_reserve_blocks USE dbcsr_data_methods, ONLY: & dbcsr_data_clear_pointer, dbcsr_data_init, dbcsr_data_new, dbcsr_data_release, & dbcsr_type_1d_to_2d, dbcsr_data_get_sizes, dbcsr_data_set_pointer USE dbcsr_data_methods_low, ONLY: & internal_data_allocate, internal_data_deallocate, dbcsr_get_data_p_2d_d, dbcsr_get_data_p_2d_s, & dbcsr_get_data_p_2d_z, dbcsr_get_data_p_2d_c USE dbcsr_data_types, ONLY: & dbcsr_data_obj, dbcsr_type_real_8, dbcsr_type_real_4, dbcsr_type_complex_8, dbcsr_type_complex_4 USE dbcsr_dist_methods, ONLY: & dbcsr_distribution_col_dist, dbcsr_distribution_row_dist USE dbcsr_dist_operations, ONLY: & dbcsr_get_stored_coordinates USE dbcsr_iterator_operations, ONLY: & dbcsr_iterator_blocks_left, dbcsr_iterator_next_block, dbcsr_iterator_start, dbcsr_iterator_stop USE dbcsr_methods, ONLY: & dbcsr_blk_column_size, dbcsr_blk_row_size USE dbcsr_operations, ONLY: & dbcsr_get_info, dbcsr_clear USE dbcsr_tas_base, ONLY: & dbcsr_tas_blk_sizes, dbcsr_tas_create, dbcsr_tas_distribution_new, dbcsr_tas_finalize, & dbcsr_tas_get_data_type, dbcsr_tas_get_stored_coordinates, dbcsr_tas_info, & dbcsr_tas_iterator_blocks_left, dbcsr_tas_iterator_next_block, dbcsr_tas_iterator_start, & dbcsr_tas_iterator_stop, dbcsr_tas_put_block, dbcsr_tas_reserve_blocks, & dbcsr_repl_get_stored_coordinates, dbcsr_tas_clear USE dbcsr_tas_types, ONLY: & dbcsr_tas_distribution_type, dbcsr_tas_iterator, dbcsr_tas_split_info, dbcsr_tas_type USE dbcsr_tas_global, ONLY: & dbcsr_tas_blk_size_arb, dbcsr_tas_blk_size_repl, dbcsr_tas_dist_arb, dbcsr_tas_dist_repl, & dbcsr_tas_distribution, dbcsr_tas_rowcol_data USE dbcsr_tas_split, ONLY: & colsplit, dbcsr_tas_get_split_info, rowsplit USE dbcsr_types, ONLY: & dbcsr_distribution_obj, dbcsr_iterator, dbcsr_type USE dbcsr_work_operations, ONLY: & dbcsr_finalize USE dbcsr_kinds, ONLY: & int_8, real_8, real_4 USE dbcsr_mpiwrap, ONLY: & mp_alltoall, mp_environ, mp_isend, mp_irecv, mp_waitall, mp_comm_type, mp_request_type USE dbcsr_tas_util, ONLY: & swap, index_unique #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_reshape_ops' PUBLIC :: & dbcsr_tas_merge, & dbcsr_tas_replicate, & dbcsr_tas_reshape TYPE block_buffer_type INTEGER :: nblock = -1 INTEGER(KIND=int_8), DIMENSION(:, :), ALLOCATABLE :: indx #:for dparam, dtype, dsuffix in dtype_float_list ${dtype}$, DIMENSION(:), ALLOCATABLE :: msg_${dsuffix}$ #:endfor INTEGER :: data_type = -1 INTEGER :: endpos = -1 END TYPE INTERFACE block_buffer_get_next_block MODULE PROCEDURE block_buffer_get_next_area_block #!for dparam, dtype, dsuffix in dtype_float_list !MODULE PROCEDURE block_buffer_get_next_block_${dsuffix}$ ! issue: ambiguous interface #!endfor END INTERFACE INTERFACE block_buffer_add_block MODULE PROCEDURE block_buffer_add_area_block #:for dparam, dtype, dsuffix in dtype_float_list MODULE PROCEDURE block_buffer_add_block_${dsuffix}$ #:endfor END INTERFACE CONTAINS RECURSIVE SUBROUTINE dbcsr_tas_reshape(matrix_in, matrix_out, summation, transposed, move_data) !! copy data (involves reshape) TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix_in, matrix_out LOGICAL, INTENT(IN), OPTIONAL :: summation !! whether matrix_out = matrix_out + matrix_in LOGICAL, INTENT(IN), OPTIONAL :: transposed LOGICAL, INTENT(IN), OPTIONAL :: move_data !! memory optimization: move data to matrix_out such that matrix_in is empty on return CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_reshape' INTEGER :: handle, handle2, iproc, mynode, nblock, & ndata, numnodes, bcount, nblk INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:, :) :: index_recv, blks_to_allocate INTEGER(KIND=int_8), DIMENSION(2) :: blk_index INTEGER, ALLOCATABLE, DIMENSION(:) :: num_blocks_recv, num_blocks_send, & num_entries_recv, num_entries_send, & num_rec, num_send TYPE(mp_request_type), ALLOCATABLE, DIMENSION(:, :) :: req_array INTEGER, DIMENSION(2) :: blk_size LOGICAL :: tr, tr_in, move_prv TYPE(block_buffer_type), ALLOCATABLE, DIMENSION(:) :: buffer_recv, buffer_send TYPE(dbcsr_data_obj) :: block TYPE(dbcsr_tas_iterator) :: iter TYPE(dbcsr_tas_split_info) :: info TYPE(mp_comm_type) :: mp_comm CALL timeset(routineN, handle) IF (PRESENT(summation)) THEN IF (.NOT. summation) CALL dbcsr_clear(matrix_out%matrix) ELSE CALL dbcsr_clear(matrix_out%matrix) END IF IF (PRESENT(move_data)) THEN move_prv = move_data ELSE move_prv = .FALSE. END IF IF (PRESENT(transposed)) THEN tr_in = transposed ELSE tr_in = .FALSE. END IF IF (.NOT. matrix_out%valid) THEN DBCSR_ABORT("can not reshape into invalid matrix") END IF info = dbcsr_tas_info(matrix_in) mp_comm = info%mp_comm CALL mp_environ(numnodes, mynode, mp_comm) ALLOCATE (buffer_send(0:numnodes - 1)) ALLOCATE (buffer_recv(0:numnodes - 1)) ALLOCATE (num_blocks_recv(0:numnodes - 1)) ALLOCATE (num_blocks_send(0:numnodes - 1)) ALLOCATE (num_entries_recv(0:numnodes - 1)) ALLOCATE (num_entries_send(0:numnodes - 1)) ALLOCATE (num_rec(0:2*numnodes - 1)) ALLOCATE (num_send(0:2*numnodes - 1)) num_send(:) = 0 ALLOCATE (req_array(1:numnodes, 4)) CALL dbcsr_tas_iterator_start(iter, matrix_in) CALL timeset(routineN//"_get_coord", handle2) DO WHILE (dbcsr_tas_iterator_blocks_left(iter)) CALL dbcsr_tas_iterator_next_block(iter, blk_index(1), blk_index(2), nblock, transposed=tr, & row_size=blk_size(1), col_size=blk_size(2)) IF (tr_in) THEN CALL dbcsr_tas_get_stored_coordinates(matrix_out, blk_index(2), blk_index(1), iproc) ELSE CALL dbcsr_tas_get_stored_coordinates(matrix_out, blk_index(1), blk_index(2), iproc) END IF num_send(2*iproc) = num_send(2*iproc) + PRODUCT(blk_size) num_send(2*iproc + 1) = num_send(2*iproc + 1) + 1 END DO CALL dbcsr_tas_iterator_stop(iter) CALL timestop(handle2) CALL timeset(routineN//"_alltoall", handle2) CALL mp_alltoall(num_send, num_rec, 2, mp_comm) CALL timestop(handle2) CALL timeset(routineN//"_buffer_fill", handle2) DO iproc = 0, numnodes - 1 num_entries_recv(iproc) = num_rec(2*iproc) num_blocks_recv(iproc) = num_rec(2*iproc + 1) num_entries_send(iproc) = num_send(2*iproc) num_blocks_send(iproc) = num_send(2*iproc + 1) CALL block_buffer_create(buffer_send(iproc), num_blocks_send(iproc), num_entries_send(iproc), & dbcsr_tas_get_data_type(matrix_in)) CALL block_buffer_create(buffer_recv(iproc), num_blocks_recv(iproc), num_entries_recv(iproc), & dbcsr_tas_get_data_type(matrix_in)) END DO CALL dbcsr_data_init(block) CALL dbcsr_data_new(block, dbcsr_type_1d_to_2d(dbcsr_tas_get_data_type(matrix_in))) ! need to convert to 2d data type CALL dbcsr_tas_iterator_start(iter, matrix_in) DO WHILE (dbcsr_tas_iterator_blocks_left(iter)) CALL dbcsr_tas_iterator_next_block(iter, blk_index(1), blk_index(2), block, tr, & row_size=blk_size(1), col_size=blk_size(2)) DBCSR_ASSERT(tr .EQV. .FALSE.) IF (tr_in) THEN CALL dbcsr_tas_get_stored_coordinates(matrix_out, blk_index(2), blk_index(1), iproc) ELSE CALL dbcsr_tas_get_stored_coordinates(matrix_out, blk_index(1), blk_index(2), iproc) END IF CALL block_buffer_add_block(buffer_send(iproc), blk_index, block, transposed=tr_in) END DO CALL dbcsr_tas_iterator_stop(iter) CALL dbcsr_data_clear_pointer(block) IF (move_prv) CALL dbcsr_tas_clear(matrix_in) CALL timestop(handle2) CALL timeset(routineN//"_communicate_buffer", handle2) CALL dbcsr_tas_communicate_buffer(mp_comm, buffer_recv, buffer_send, req_array) DO iproc = 0, numnodes - 1 CALL block_buffer_destroy(buffer_send(iproc)) END DO CALL timestop(handle2) CALL timeset(routineN//"_buffer_obtain", handle2) nblk = SUM(num_blocks_recv) ALLOCATE (blks_to_allocate(nblk, 2)) bcount = 0 DO iproc = 0, numnodes - 1 CALL block_buffer_get_index(buffer_recv(iproc), index_recv) blks_to_allocate(bcount + 1:bcount + SIZE(index_recv, 1), :) = index_recv(:, :) bcount = bcount + SIZE(index_recv, 1) DEALLOCATE (index_recv) END DO CALL dbcsr_tas_reserve_blocks(matrix_out, blks_to_allocate(:, 1), blks_to_allocate(:, 2)) DEALLOCATE (blks_to_allocate) DO iproc = 0, numnodes - 1 ! First, we need to get the index to create block DO WHILE (block_buffer_blocks_left(buffer_recv(iproc))) CALL block_buffer_get_next_block(buffer_recv(iproc), ndata, blk_index) CALL dbcsr_tas_blk_sizes(matrix_out, blk_index(1), blk_index(2), blk_size(1), blk_size(2)) CALL internal_data_allocate(block%d, blk_size) CALL block_buffer_get_next_block(buffer_recv(iproc), ndata, blk_index, block) CALL dbcsr_tas_put_block(matrix_out, blk_index(1), blk_index(2), block, summation=summation) CALL internal_data_deallocate(block%d) END DO CALL block_buffer_destroy(buffer_recv(iproc)) END DO CALL dbcsr_data_clear_pointer(block) CALL dbcsr_data_release(block) CALL timestop(handle2) CALL dbcsr_tas_finalize(matrix_out) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_tas_replicate(matrix_in, info, matrix_out, nodata, move_data) !! Replicate matrix_in such that each submatrix of matrix_out is an exact copy of matrix_in TYPE(dbcsr_type), INTENT(INOUT) :: matrix_in TYPE(dbcsr_tas_split_info), INTENT(IN) :: info TYPE(dbcsr_tas_type), INTENT(OUT) :: matrix_out LOGICAL, INTENT(IN), OPTIONAL :: nodata !! Don't copy data but create matrix_out LOGICAL, INTENT(IN), OPTIONAL :: move_data !! memory optimization: move data to matrix_out such that matrix_in is empty on return INTEGER :: data_type, nblkcols, nblkrows INTEGER, DIMENSION(2) :: pcoord, pdims INTEGER, DIMENSION(:), POINTER :: col_blk_size, col_dist, & row_blk_size, row_dist TYPE(dbcsr_distribution_obj) :: dbcsr_dist TYPE(dbcsr_tas_dist_arb), TARGET :: dir_dist TYPE(dbcsr_tas_dist_repl), TARGET :: repl_dist CLASS(dbcsr_tas_distribution), ALLOCATABLE :: col_dist_obj, row_dist_obj CLASS(dbcsr_tas_rowcol_data), ALLOCATABLE :: row_bsize_obj, col_bsize_obj TYPE(dbcsr_tas_blk_size_repl), TARGET :: repl_blksize TYPE(dbcsr_tas_blk_size_arb), TARGET :: dir_blksize TYPE(dbcsr_tas_distribution_type) :: dist INTEGER :: numnodes, mynode TYPE(block_buffer_type), ALLOCATABLE, DIMENSION(:) :: buffer_recv, buffer_send INTEGER, ALLOCATABLE, DIMENSION(:) :: num_blocks_recv, num_blocks_send, & num_entries_recv, num_entries_send, & num_rec, num_send INTEGER, ALLOCATABLE, DIMENSION(:, :) :: blks_to_allocate INTEGER, DIMENSION(2) :: blk_size INTEGER, DIMENSION(2) :: blk_index INTEGER(KIND=int_8), DIMENSION(2) :: blk_index_i8 TYPE(dbcsr_iterator) :: iter INTEGER :: nblock, i, iproc, bcount, nblk INTEGER, DIMENSION(:), ALLOCATABLE :: iprocs LOGICAL :: tr, nodata_prv, move_prv INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:, :) :: index_recv INTEGER :: ndata TYPE(mp_comm_type) :: mp_comm TYPE(mp_request_type), ALLOCATABLE, DIMENSION(:, :) :: req_array TYPE(dbcsr_data_obj) :: block CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_replicate' INTEGER :: handle, handle2 NULLIFY (col_blk_size, row_blk_size) CALL timeset(routineN, handle) IF (PRESENT(nodata)) THEN nodata_prv = nodata ELSE nodata_prv = .FALSE. END IF IF (PRESENT(move_data)) THEN move_prv = move_data ELSE move_prv = .FALSE. END IF CALL dbcsr_get_info(matrix_in, distribution=dbcsr_dist, data_type=data_type, & nblkrows_total=nblkrows, nblkcols_total=nblkcols, & row_blk_size=row_blk_size, col_blk_size=col_blk_size) row_dist => dbcsr_distribution_row_dist(dbcsr_dist) col_dist => dbcsr_distribution_col_dist(dbcsr_dist) mp_comm = info%mp_comm CALL mp_environ(numnodes, mynode, mp_comm) CALL mp_environ(numnodes, pdims, pcoord, mp_comm) SELECT CASE (info%split_rowcol) CASE (rowsplit) repl_dist = dbcsr_tas_dist_repl(row_dist, pdims(1), nblkrows, info%ngroup, info%pgrid_split_size) dir_dist = dbcsr_tas_dist_arb(col_dist, pdims(2), INT(nblkcols, KIND=int_8)) repl_blksize = dbcsr_tas_blk_size_repl(row_blk_size, info%ngroup) dir_blksize = dbcsr_tas_blk_size_arb(col_blk_size) ALLOCATE (row_dist_obj, source=repl_dist) ALLOCATE (col_dist_obj, source=dir_dist) ALLOCATE (row_bsize_obj, source=repl_blksize) ALLOCATE (col_bsize_obj, source=dir_blksize) CASE (colsplit) dir_dist = dbcsr_tas_dist_arb(row_dist, pdims(1), INT(nblkrows, KIND=int_8)) repl_dist = dbcsr_tas_dist_repl(col_dist, pdims(2), nblkcols, info%ngroup, info%pgrid_split_size) dir_blksize = dbcsr_tas_blk_size_arb(row_blk_size) repl_blksize = dbcsr_tas_blk_size_repl(col_blk_size, info%ngroup) ALLOCATE (row_dist_obj, source=dir_dist) ALLOCATE (col_dist_obj, source=repl_dist) ALLOCATE (row_bsize_obj, source=dir_blksize) ALLOCATE (col_bsize_obj, source=repl_blksize) END SELECT CALL dbcsr_tas_distribution_new(dist, mp_comm, row_dist_obj, col_dist_obj, split_info=info) CALL dbcsr_tas_create(matrix_out, TRIM(matrix_in%name)//" replicated", & dist, data_type, row_bsize_obj, col_bsize_obj, own_dist=.TRUE.) IF (nodata_prv) THEN CALL dbcsr_tas_finalize(matrix_out) CALL timestop(handle) RETURN END IF ALLOCATE (buffer_send(0:numnodes - 1)) ALLOCATE (buffer_recv(0:numnodes - 1)) ALLOCATE (num_blocks_recv(0:numnodes - 1)) ALLOCATE (num_blocks_send(0:numnodes - 1)) ALLOCATE (num_entries_recv(0:numnodes - 1)) ALLOCATE (num_entries_send(0:numnodes - 1)) ALLOCATE (num_rec(0:2*numnodes - 1)) ALLOCATE (num_send(0:2*numnodes - 1)) num_send(:) = 0 ALLOCATE (req_array(1:numnodes, 4)) ALLOCATE (iprocs(info%ngroup)) CALL dbcsr_iterator_start(iter, matrix_in) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, blk_index(1), blk_index(2), nblock, transposed=tr, & row_size=blk_size(1), col_size=blk_size(2)) CALL dbcsr_repl_get_stored_coordinates(matrix_out, blk_index(1), blk_index(2), iprocs) DO i = 1, SIZE(iprocs) num_send(2*iprocs(i)) = num_send(2*iprocs(i)) + PRODUCT(blk_size) num_send(2*iprocs(i) + 1) = num_send(2*iprocs(i) + 1) + 1 END DO END DO CALL dbcsr_iterator_stop(iter) CALL timeset(routineN//"_alltoall", handle2) CALL mp_alltoall(num_send, num_rec, 2, mp_comm) CALL timestop(handle2) DO iproc = 0, numnodes - 1 num_entries_recv(iproc) = num_rec(2*iproc) num_blocks_recv(iproc) = num_rec(2*iproc + 1) num_entries_send(iproc) = num_send(2*iproc) num_blocks_send(iproc) = num_send(2*iproc + 1) CALL block_buffer_create(buffer_send(iproc), num_blocks_send(iproc), num_entries_send(iproc), & data_type) CALL block_buffer_create(buffer_recv(iproc), num_blocks_recv(iproc), num_entries_recv(iproc), & data_type) END DO CALL dbcsr_data_init(block) CALL dbcsr_data_new(block, dbcsr_type_1d_to_2d(data_type)) CALL dbcsr_iterator_start(iter, matrix_in) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, blk_index(1), blk_index(2), block, tr, & row_size=blk_size(1), col_size=blk_size(2)) CALL dbcsr_repl_get_stored_coordinates(matrix_out, blk_index(1), blk_index(2), iprocs) DO i = 1, SIZE(iprocs) CALL block_buffer_add_block(buffer_send(iprocs(i)), INT(blk_index, KIND=int_8), block) END DO END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(block) IF (move_prv) CALL dbcsr_clear(matrix_in) CALL timeset(routineN//"_communicate_buffer", handle2) CALL dbcsr_tas_communicate_buffer(mp_comm, buffer_recv, buffer_send, req_array) DO iproc = 0, numnodes - 1 CALL block_buffer_destroy(buffer_send(iproc)) END DO CALL timestop(handle2) nblk = SUM(num_blocks_recv) ALLOCATE (blks_to_allocate(nblk, 2)) bcount = 0 DO iproc = 0, numnodes - 1 CALL block_buffer_get_index(buffer_recv(iproc), index_recv) blks_to_allocate(bcount + 1:bcount + SIZE(index_recv, 1), :) = INT(index_recv(:, :)) bcount = bcount + SIZE(index_recv, 1) DEALLOCATE (index_recv) END DO CALL dbcsr_reserve_blocks(matrix_out%matrix, blks_to_allocate(:, 1), blks_to_allocate(:, 2)) DEALLOCATE (blks_to_allocate) DO iproc = 0, numnodes - 1 ! First, we need to get the index to create block DO WHILE (block_buffer_blocks_left(buffer_recv(iproc))) CALL block_buffer_get_next_block(buffer_recv(iproc), ndata, blk_index_i8) CALL dbcsr_tas_blk_sizes(matrix_out, blk_index_i8(1), blk_index_i8(2), blk_size(1), blk_size(2)) CALL internal_data_allocate(block%d, blk_size) CALL block_buffer_get_next_block(buffer_recv(iproc), ndata, blk_index_i8, block) CALL dbcsr_put_block(matrix_out%matrix, INT(blk_index_i8(1)), INT(blk_index_i8(2)), block) CALL internal_data_deallocate(block%d) END DO CALL block_buffer_destroy(buffer_recv(iproc)) END DO CALL dbcsr_data_clear_pointer(block) CALL dbcsr_data_release(block) CALL dbcsr_tas_finalize(matrix_out) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_tas_merge(matrix_out, matrix_in, summation, move_data) !! Merge submatrices of matrix_in to matrix_out by sum TYPE(dbcsr_type), INTENT(INOUT) :: matrix_out TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix_in LOGICAL, INTENT(IN), OPTIONAL :: summation LOGICAL, INTENT(IN), OPTIONAL :: move_data !! memory optimization: move data to matrix_out such that matrix_in is empty on return CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_merge' INTEGER :: data_type, handle, handle2, iproc, & mynode, nblock, ndata, numnodes, nblk, bcount INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:, :) :: index_recv INTEGER(KIND=int_8), DIMENSION(2) :: blk_index_i8 INTEGER, ALLOCATABLE, DIMENSION(:) :: iprocs, num_blocks_recv, & num_blocks_send, num_entries_recv, & num_entries_send, num_rec, num_send INTEGER, ALLOCATABLE, DIMENSION(:, :) :: blks_to_allocate, blks_to_allocate_u INTEGER, DIMENSION(2) :: blk_index, blk_size LOGICAL :: tr, move_prv TYPE(block_buffer_type), ALLOCATABLE, DIMENSION(:) :: buffer_recv, buffer_send TYPE(dbcsr_data_obj) :: block TYPE(dbcsr_iterator) :: iter TYPE(dbcsr_tas_split_info) :: info TYPE(mp_comm_type) :: mp_comm TYPE(mp_request_type), ALLOCATABLE, DIMENSION(:, :) :: req_array CALL timeset(routineN, handle) IF (PRESENT(summation)) THEN IF (.NOT. summation) CALL dbcsr_clear(matrix_out) ELSE CALL dbcsr_clear(matrix_out) END IF IF (PRESENT(move_data)) THEN move_prv = move_data ELSE move_prv = .FALSE. END IF data_type = dbcsr_tas_get_data_type(matrix_in) info = dbcsr_tas_info(matrix_in) CALL dbcsr_tas_get_split_info(info, mp_comm=mp_comm) CALL mp_environ(numnodes, mynode, mp_comm) ALLOCATE (buffer_send(0:numnodes - 1)) ALLOCATE (buffer_recv(0:numnodes - 1)) ALLOCATE (num_blocks_recv(0:numnodes - 1)) ALLOCATE (num_blocks_send(0:numnodes - 1)) ALLOCATE (num_entries_recv(0:numnodes - 1)) ALLOCATE (num_entries_send(0:numnodes - 1)) ALLOCATE (num_rec(0:2*numnodes - 1)) ALLOCATE (num_send(0:2*numnodes - 1)) num_send(:) = 0 ALLOCATE (req_array(1:numnodes, 4)) ALLOCATE (iprocs(info%ngroup)) CALL dbcsr_iterator_start(iter, matrix_in%matrix) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, blk_index(1), blk_index(2), nblock, transposed=tr, & row_size=blk_size(1), col_size=blk_size(2)) CALL dbcsr_get_stored_coordinates(matrix_out, blk_index(1), blk_index(2), iproc) num_send(2*iproc) = num_send(2*iproc) + PRODUCT(blk_size) num_send(2*iproc + 1) = num_send(2*iproc + 1) + 1 END DO CALL dbcsr_iterator_stop(iter) CALL timeset(routineN//"_alltoall", handle2) CALL mp_alltoall(num_send, num_rec, 2, mp_comm) CALL timestop(handle2) DO iproc = 0, numnodes - 1 num_entries_recv(iproc) = num_rec(2*iproc) num_blocks_recv(iproc) = num_rec(2*iproc + 1) num_entries_send(iproc) = num_send(2*iproc) num_blocks_send(iproc) = num_send(2*iproc + 1) CALL block_buffer_create(buffer_send(iproc), num_blocks_send(iproc), num_entries_send(iproc), & data_type) CALL block_buffer_create(buffer_recv(iproc), num_blocks_recv(iproc), num_entries_recv(iproc), & data_type) END DO CALL dbcsr_data_init(block) CALL dbcsr_data_new(block, dbcsr_type_1d_to_2d(data_type)) CALL dbcsr_iterator_start(iter, matrix_in%matrix) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, blk_index(1), blk_index(2), block, tr, & row_size=blk_size(1), col_size=blk_size(2)) CALL dbcsr_get_stored_coordinates(matrix_out, blk_index(1), blk_index(2), iproc) CALL block_buffer_add_block(buffer_send(iproc), INT(blk_index, KIND=int_8), block) END DO CALL dbcsr_iterator_stop(iter) IF (move_prv) CALL dbcsr_tas_clear(matrix_in) CALL timeset(routineN//"_communicate_buffer", handle2) CALL dbcsr_tas_communicate_buffer(mp_comm, buffer_recv, buffer_send, req_array) DO iproc = 0, numnodes - 1 CALL block_buffer_destroy(buffer_send(iproc)) END DO CALL timestop(handle2) nblk = SUM(num_blocks_recv) ALLOCATE (blks_to_allocate(nblk, 2)) bcount = 0 DO iproc = 0, numnodes - 1 CALL block_buffer_get_index(buffer_recv(iproc), index_recv) blks_to_allocate(bcount + 1:bcount + SIZE(index_recv, 1), :) = INT(index_recv(:, :)) bcount = bcount + SIZE(index_recv, 1) DEALLOCATE (index_recv) END DO CALL index_unique(blks_to_allocate, blks_to_allocate_u) CALL dbcsr_reserve_blocks(matrix_out, blks_to_allocate_u(:, 1), blks_to_allocate_u(:, 2)) DEALLOCATE (blks_to_allocate, blks_to_allocate_u) DO iproc = 0, numnodes - 1 ! First, we need to get the index to create block DO WHILE (block_buffer_blocks_left(buffer_recv(iproc))) CALL block_buffer_get_next_block(buffer_recv(iproc), ndata, blk_index_i8) blk_size(1) = dbcsr_blk_row_size(matrix_out, INT(blk_index_i8(1))) blk_size(2) = dbcsr_blk_column_size(matrix_out, INT(blk_index_i8(2))) CALL internal_data_allocate(block%d, blk_size) CALL block_buffer_get_next_block(buffer_recv(iproc), ndata, blk_index_i8, block) CALL dbcsr_put_block(matrix_out, INT(blk_index_i8(1)), INT(blk_index_i8(2)), block, summation=.TRUE.) CALL internal_data_deallocate(block%d) END DO CALL block_buffer_destroy(buffer_recv(iproc)) END DO CALL dbcsr_data_clear_pointer(block) CALL dbcsr_data_release(block) CALL dbcsr_finalize(matrix_out) CALL timestop(handle) END SUBROUTINE SUBROUTINE block_buffer_get_index(buffer, index) !! get all indices from buffer TYPE(block_buffer_type), INTENT(IN) :: buffer INTEGER(KIND=int_8), ALLOCATABLE, & DIMENSION(:, :), INTENT(OUT) :: index INTEGER, DIMENSION(2) :: indx_shape CHARACTER(LEN=*), PARAMETER :: routineN = 'block_buffer_get_index' INTEGER :: handle CALL timeset(routineN, handle) indx_shape = SHAPE(buffer%indx) - [0, 1] ALLOCATE (INDEX(indx_shape(1), indx_shape(2))) INDEX(:, :) = buffer%indx(1:indx_shape(1), 1:indx_shape(2)) CALL timestop(handle) END SUBROUTINE PURE FUNCTION block_buffer_blocks_left(buffer) !! how many blocks left in iterator TYPE(block_buffer_type), INTENT(IN) :: buffer LOGICAL :: block_buffer_blocks_left block_buffer_blocks_left = buffer%endpos .LT. buffer%nblock END FUNCTION SUBROUTINE block_buffer_create(buffer, nblock, ndata, data_type) !! Create block buffer for MPI communication. TYPE(block_buffer_type), INTENT(OUT) :: buffer !! block buffer INTEGER, INTENT(IN) :: nblock, ndata, data_type !! number of blocks !! total number of block entries buffer%nblock = nblock buffer%data_type = data_type buffer%endpos = 0 SELECT CASE (data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) ALLOCATE (buffer%msg_${dsuffix}$ (ndata)) #:endfor END SELECT ALLOCATE (buffer%indx(nblock, 3)) END SUBROUTINE SUBROUTINE block_buffer_destroy(buffer) TYPE(block_buffer_type), INTENT(INOUT) :: buffer SELECT CASE (buffer%data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) DEALLOCATE (buffer%msg_${dsuffix}$) #:endfor END SELECT DEALLOCATE (buffer%indx) buffer%nblock = -1 buffer%data_type = -1 buffer%endpos = -1 END SUBROUTINE block_buffer_destroy SUBROUTINE block_buffer_add_area_block(buffer, index, block, transposed) TYPE(block_buffer_type), INTENT(INOUT) :: buffer INTEGER(KIND=int_8), DIMENSION(2), & INTENT(IN) :: index TYPE(dbcsr_data_obj), INTENT(IN) :: block LOGICAL, INTENT(IN), OPTIONAL :: transposed #:for dparam, dtype, dsuffix in dtype_float_list ${dtype}$, DIMENSION(:, :), POINTER :: block_${dsuffix}$ #:endfor SELECT CASE (buffer%data_type) #:for dparam, dtype, dsuffix, dsuffix_dbcsr in dtype_float_list_dbcsr CASE (${dparam}$) block_${dsuffix}$ => dbcsr_get_data_p_2d_${dsuffix_dbcsr}$ (block) CALL block_buffer_add_block_${dsuffix}$ (buffer, index, block_${dsuffix}$, transposed) #:endfor END SELECT END SUBROUTINE SUBROUTINE block_buffer_get_next_area_block(buffer, ndata, index, block, advance_iter) TYPE(block_buffer_type), INTENT(INOUT) :: buffer INTEGER, INTENT(OUT) :: ndata INTEGER(KIND=int_8), DIMENSION(2), & INTENT(OUT) :: index TYPE(dbcsr_data_obj), INTENT(INOUT), OPTIONAL :: block LOGICAL, INTENT(IN), OPTIONAL :: advance_iter LOGICAL :: valid INTEGER, DIMENSION(2) :: sizes #:for dparam, dtype, dsuffix in dtype_float_list ${dtype}$, DIMENSION(:, :), POINTER :: data_${dsuffix}$ #:endfor IF (PRESENT(block)) THEN CALL dbcsr_data_get_sizes(block, sizes, valid) DBCSR_ASSERT(valid) CALL internal_data_deallocate(block%d) END IF SELECT CASE (buffer%data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) IF (PRESENT(block)) THEN ALLOCATE (data_${dsuffix}$ (sizes(1), sizes(2))) CALL block_buffer_get_next_block_${dsuffix}$ (buffer, ndata, index, data_${dsuffix}$, advance_iter=advance_iter) CALL dbcsr_data_set_pointer(block, data_${dsuffix}$) ELSE CALL block_buffer_get_next_block_${dsuffix}$ (buffer, ndata, index, advance_iter=advance_iter) END IF #:endfor END SELECT END SUBROUTINE #:for dparam, dtype, dsuffix in dtype_float_list SUBROUTINE block_buffer_add_block_${dsuffix}$ (buffer, index, block, transposed) !! insert a block into block buffer (at current iterator position) TYPE(block_buffer_type), INTENT(INOUT) :: buffer INTEGER(KIND=int_8), DIMENSION(2), & INTENT(IN) :: index !! index of block ${dtype}$, DIMENSION(:, :), INTENT(IN) :: block !! block LOGICAL, INTENT(IN), OPTIONAL :: transposed INTEGER(KIND=int_8), DIMENSION(2) :: index_prv LOGICAL :: tr INTEGER :: p INTEGER :: ndata INTEGER :: p_data IF (PRESENT(transposed)) THEN tr = transposed ELSE tr = .FALSE. END IF index_prv(:) = index(:) IF (tr) THEN CALL swap(index_prv) END IF ndata = PRODUCT(SHAPE(block)) DBCSR_ASSERT(buffer%data_type .EQ. ${dparam}$) p = buffer%endpos IF (p .EQ. 0) THEN p_data = 0 ELSE p_data = INT(buffer%indx(p, 3)) END IF IF (tr) THEN buffer%msg_${dsuffix}$ (p_data + 1:p_data + ndata) = RESHAPE(TRANSPOSE(block), [ndata]) ELSE buffer%msg_${dsuffix}$ (p_data + 1:p_data + ndata) = RESHAPE(block, [ndata]) END IF buffer%indx(p + 1, 1:2) = index_prv(:) IF (p > 0) THEN buffer%indx(p + 1, 3) = buffer%indx(p, 3) + INT(ndata, KIND=int_8) ELSE buffer%indx(p + 1, 3) = INT(ndata, KIND=int_8) END IF buffer%endpos = buffer%endpos + 1 END SUBROUTINE #:endfor #:for dparam, dtype, dsuffix in dtype_float_list SUBROUTINE block_buffer_get_next_block_${dsuffix}$ (buffer, ndata, index, block, advance_iter) !! get next block from buffer. Iterator is advanced only if block is retrieved or advance_iter. TYPE(block_buffer_type), INTENT(INOUT) :: buffer INTEGER, INTENT(OUT) :: ndata INTEGER(KIND=int_8), DIMENSION(2), & INTENT(OUT) :: index ${dtype}$, DIMENSION(:, :), INTENT(OUT), OPTIONAL :: block LOGICAL, INTENT(IN), OPTIONAL :: advance_iter INTEGER :: p, p_data LOGICAL :: do_advance do_advance = .FALSE. IF (PRESENT(advance_iter)) THEN do_advance = advance_iter ELSE IF (PRESENT(block)) THEN do_advance = .TRUE. END IF DBCSR_ASSERT(buffer%data_type .EQ. ${dparam}$) p = buffer%endpos IF (p .EQ. 0) THEN p_data = 0 ELSE p_data = INT(buffer%indx(p, 3)) END IF IF (p > 0) THEN ndata = INT(buffer%indx(p + 1, 3) - buffer%indx(p, 3)) ELSE ndata = INT(buffer%indx(p + 1, 3)) END IF index(:) = buffer%indx(p + 1, 1:2) IF (PRESENT(block)) THEN block(:, :) = RESHAPE(buffer%msg_${dsuffix}$ (p_data + 1:p_data + ndata), SHAPE(block)) END IF IF (do_advance) buffer%endpos = buffer%endpos + 1 END SUBROUTINE #:endfor SUBROUTINE dbcsr_tas_communicate_buffer(mp_comm, buffer_recv, buffer_send, req_array) !! communicate buffer TYPE(mp_comm_type), INTENT(IN) :: mp_comm TYPE(block_buffer_type), DIMENSION(0:), INTENT(INOUT) :: buffer_recv, buffer_send TYPE(mp_request_type), DIMENSION(:, :), INTENT(OUT) :: req_array INTEGER :: iproc, mynode, numnodes, rec_counter, & send_counter INTEGER :: handle CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_communicate_buffer' CALL timeset(routineN, handle) CALL mp_environ(numnodes, mynode, mp_comm) IF (numnodes > 1) THEN send_counter = 0 rec_counter = 0 DO iproc = 0, numnodes - 1 IF (buffer_recv(iproc)%nblock > 0) THEN rec_counter = rec_counter + 1 CALL mp_irecv(buffer_recv(iproc)%indx, iproc, mp_comm, req_array(rec_counter, 3), tag=4) SELECT CASE (buffer_recv(iproc)%data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) CALL mp_irecv(buffer_recv(iproc)%msg_${dsuffix}$, iproc, mp_comm, req_array(rec_counter, 4), tag=7) #:endfor END SELECT END IF END DO DO iproc = 0, numnodes - 1 IF (buffer_send(iproc)%nblock > 0) THEN send_counter = send_counter + 1 CALL mp_isend(buffer_send(iproc)%indx, iproc, mp_comm, req_array(send_counter, 1), tag=4) SELECT CASE (buffer_recv(iproc)%data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) CALL mp_isend(buffer_send(iproc)%msg_${dsuffix}$, iproc, mp_comm, req_array(send_counter, 2), tag=7) #:endfor END SELECT END IF END DO IF (send_counter > 0) THEN CALL mp_waitall(req_array(1:send_counter, 1:2)) END IF IF (rec_counter > 0) THEN CALL mp_waitall(req_array(1:rec_counter, 3:4)) END IF ELSE IF (buffer_recv(0)%nblock > 0) THEN buffer_recv(0)%indx(:, :) = buffer_send(0)%indx(:, :) SELECT CASE (buffer_recv(0)%data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) buffer_recv(0)%msg_${dsuffix}$ (:) = buffer_send(0)%msg_${dsuffix}$ (:) #:endfor END SELECT END IF END IF CALL timestop(handle) END SUBROUTINE END MODULE ================================================ FILE: src/tas/dbcsr_tas_split.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tas_split !! methods to split tall-and-skinny matrices along longest dimension. !! Basically, we are splitting process grid and each subgrid holds its own DBCSR matrix. USE dbcsr_tas_types, ONLY: & dbcsr_tas_distribution_type, dbcsr_tas_split_info USE dbcsr_tas_global, ONLY: & dbcsr_tas_distribution USE dbcsr_tas_util, ONLY: & swap USE dbcsr_toollib, ONLY: & sort USE dbcsr_kinds, ONLY: & int_8 USE dbcsr_mpiwrap, ONLY: & mp_bcast, mp_cart_create, mp_comm_dup, mp_comm_free, mp_comm_split_direct, mp_dims_create, mp_environ, mp_comm_type USE dbcsr_kinds, ONLY: & real_8 #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE PUBLIC :: & block_index_global_to_local, & block_index_local_to_global, & colsplit, & dbcsr_tas_get_split_info, & dbcsr_tas_info_hold, & dbcsr_tas_mp_comm, & dbcsr_tas_mp_dims, & dbcsr_tas_release_info, & dbcsr_tas_create_split, & dbcsr_tas_create_split_rows_or_cols, & dbcsr_tas_set_strict_split, & group_to_mrowcol, & group_to_world_proc_map, & rowsplit, & world_to_group_proc_map, & accept_pgrid_dims, & default_nsplit_accept_ratio, & default_pdims_accept_ratio CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_split' INTEGER, PARAMETER :: rowsplit = 1, colsplit = 2 REAL(real_8), PARAMETER :: default_pdims_accept_ratio = 1.2_real_8 REAL(real_8), PARAMETER :: default_nsplit_accept_ratio = 3.0_real_8 INTERFACE dbcsr_tas_mp_comm MODULE PROCEDURE dbcsr_tas_mp_comm MODULE PROCEDURE dbcsr_tas_mp_comm_from_matrix_sizes END INTERFACE CONTAINS SUBROUTINE dbcsr_tas_create_split_rows_or_cols(split_info, mp_comm, ngroup, igroup, split_rowcol, own_comm) !! split mpi grid by rows or columns TYPE(dbcsr_tas_split_info), INTENT(OUT) :: split_info TYPE(mp_comm_type), INTENT(IN) :: mp_comm !! global mpi communicator with a 2d cartesian grid INTEGER, INTENT(INOUT) :: ngroup !! number of groups INTEGER, INTENT(IN) :: igroup, split_rowcol !! my group ID !! split rows or columns LOGICAL, INTENT(IN), OPTIONAL :: own_comm !! Whether split_info should own communicator INTEGER :: & igroup_check, iproc, iproc_group, iproc_group_check, numproc, & numproc_group, numproc_group_check, handle INTEGER, DIMENSION(2) :: pcoord, pcoord_group, pdims, pdims_group LOGICAL :: to_assert, own_comm_prv TYPE(mp_comm_type) :: mp_comm_group CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_create_split_rows_or_cols' CALL timeset(routineN, handle) IF (PRESENT(own_comm)) THEN own_comm_prv = own_comm ELSE own_comm_prv = .FALSE. END IF IF (own_comm_prv) THEN split_info%mp_comm = mp_comm ELSE CALL mp_comm_dup(mp_comm, split_info%mp_comm) END IF split_info%igroup = igroup split_info%split_rowcol = split_rowcol CALL mp_comm_split_direct(mp_comm, mp_comm_group, igroup) CALL mp_environ(numproc, iproc, mp_comm) CALL mp_environ(numproc, pdims, pcoord, mp_comm) split_info%pdims = pdims CALL mp_environ(numproc_group, iproc_group, mp_comm_group) IF (iproc == 0) THEN to_assert = MOD(numproc_group, pdims(MOD(split_rowcol, 2) + 1)) == 0 DBCSR_ASSERT(to_assert) split_info%pgrid_split_size = numproc_group/pdims(MOD(split_rowcol, 2) + 1) END IF CALL mp_bcast(split_info%pgrid_split_size, 0, split_info%mp_comm) ngroup = (pdims(split_rowcol) + split_info%pgrid_split_size - 1)/split_info%pgrid_split_size split_info%ngroup = ngroup split_info%group_size = split_info%pgrid_split_size*pdims(MOD(split_rowcol, 2) + 1) CALL world_to_group_proc_map(iproc, pdims, split_rowcol, split_info%pgrid_split_size, igroup_check, pdims_group, iproc_group) IF (igroup_check .NE. split_info%igroup) THEN DBCSR_ABORT('inconsistent subgroups') END IF CALL mp_cart_create(mp_comm_group, 2, pdims_group, pcoord_group, split_info%mp_comm_group) CALL mp_environ(numproc_group_check, iproc_group_check, split_info%mp_comm_group) DBCSR_ASSERT(iproc_group_check .EQ. iproc_group) CALL mp_comm_free(mp_comm_group) ALLOCATE (split_info%refcount) split_info%refcount = 1 CALL timestop(handle) END SUBROUTINE FUNCTION dbcsr_tas_mp_comm(mp_comm, split_rowcol, nsplit) !! Create default cartesian process grid that is consistent with default split heuristic !! of dbcsr_tas_create_split !! \return new communicator TYPE(mp_comm_type), INTENT(IN) :: mp_comm INTEGER, INTENT(IN) :: split_rowcol INTEGER, INTENT(IN) :: nsplit TYPE(mp_comm_type) :: dbcsr_tas_mp_comm CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_mp_comm' INTEGER :: handle, iproc, numproc INTEGER, DIMENSION(2) :: myploc, npdims CALL timeset(routineN, handle) CALL mp_environ(numproc, iproc, mp_comm) npdims = dbcsr_tas_mp_dims(numproc, split_rowcol, nsplit) CALL mp_cart_create(mp_comm, 2, npdims, myploc, dbcsr_tas_mp_comm) CALL timestop(handle) END FUNCTION FUNCTION dbcsr_tas_mp_dims(numproc, split_rowcol, nsplit) !! Get optimal process grid dimensions consistent with dbcsr_tas_create_split INTEGER, INTENT(IN) :: numproc INTEGER, INTENT(IN) :: split_rowcol INTEGER, INTENT(IN) :: nsplit INTEGER, DIMENSION(2) :: dbcsr_tas_mp_dims INTEGER :: nsplit_opt INTEGER :: group_size INTEGER, DIMENSION(2) :: group_dims nsplit_opt = get_opt_nsplit(numproc, nsplit, split_pgrid=.FALSE.) group_size = numproc/nsplit_opt group_dims(:) = 0 CALL mp_dims_create(group_size, group_dims) ! here we choose order of group dims s.t. a split factor < nsplit_opt is favoured w.r.t. ! optimal subgrid dimensions SELECT CASE (split_rowcol) CASE (rowsplit) group_dims = [MINVAL(group_dims), MAXVAL(group_dims)] CASE (colsplit) group_dims = [MAXVAL(group_dims), MINVAL(group_dims)] END SELECT SELECT CASE (split_rowcol) CASE (rowsplit) dbcsr_tas_mp_dims(:) = [group_dims(1)*nsplit_opt, group_dims(2)] CASE (colsplit) dbcsr_tas_mp_dims(:) = [group_dims(1), group_dims(2)*nsplit_opt] END SELECT END FUNCTION FUNCTION get_opt_nsplit(numproc, nsplit, split_pgrid, pdim_nonsplit) !! Heuristic to get good split factor for a given process grid OR a given number of processes !! \return split factor consistent with process grid or number of processes INTEGER, INTENT(IN) :: numproc, nsplit !! total number of processes or (if split_pgrid) process grid dimension to split !! Desired split factor LOGICAL, INTENT(IN) :: split_pgrid !! whether to split process grid INTEGER, INTENT(IN), OPTIONAL :: pdim_nonsplit !! if split_pgrid: other process grid dimension INTEGER, ALLOCATABLE, DIMENSION(:) :: nsplit_list, nsplit_list_square, nsplit_list_accept INTEGER :: lb, ub, count, count_square, count_accept, split, & minpos, get_opt_nsplit INTEGER, DIMENSION(2) :: dims_sub DBCSR_ASSERT(nsplit > 0) IF (split_pgrid) THEN DBCSR_ASSERT(PRESENT(pdim_nonsplit)) END IF lb = CEILING(REAL(nsplit, real_8)/default_nsplit_accept_ratio) ub = FLOOR(REAL(nsplit, real_8)*default_nsplit_accept_ratio) IF (ub < lb) ub = lb ALLOCATE (nsplit_list(1:ub - lb + 1), nsplit_list_square(1:ub - lb + 1), nsplit_list_accept(1:ub - lb + 1)) count = 0 count_square = 0 count_accept = 0 DO split = lb, ub IF (MOD(numproc, split) == 0) THEN count = count + 1 nsplit_list(count) = split dims_sub = 0 IF (.NOT. split_pgrid) THEN CALL mp_dims_create(numproc/split, dims_sub) ELSE dims_sub = [numproc/split, pdim_nonsplit] END IF IF (dims_sub(1) == dims_sub(2)) THEN count_square = count_square + 1 nsplit_list_square(count_square) = split count_accept = count_accept + 1 nsplit_list_accept(count_accept) = split ELSEIF (accept_pgrid_dims(dims_sub, relative=.FALSE.)) THEN count_accept = count_accept + 1 nsplit_list_accept(count_accept) = split END IF END IF END DO IF (count_square > 0) THEN minpos = MINLOC(ABS(nsplit_list_square(1:count_square) - nsplit), DIM=1) get_opt_nsplit = nsplit_list_square(minpos) ELSEIF (count_accept > 0) THEN minpos = MINLOC(ABS(nsplit_list_accept(1:count_accept) - nsplit), DIM=1) get_opt_nsplit = nsplit_list_accept(minpos) ELSEIF (count > 0) THEN minpos = MINLOC(ABS(nsplit_list(1:count) - nsplit), DIM=1) get_opt_nsplit = nsplit_list(minpos) ELSE get_opt_nsplit = nsplit DO WHILE (MOD(numproc, get_opt_nsplit) .NE. 0) get_opt_nsplit = get_opt_nsplit - 1 END DO END IF END FUNCTION FUNCTION dbcsr_tas_mp_comm_from_matrix_sizes(mp_comm, nblkrows, nblkcols) RESULT(mp_comm_new) !! Derive optimal cartesian process grid from matrix sizes. This ensures optimality for !! dense matrices only TYPE(mp_comm_type), INTENT(IN) :: mp_comm INTEGER(KIND=int_8), INTENT(IN) :: nblkrows, nblkcols !! total number of block rows !! total number of block columns INTEGER :: nsplit, split_rowcol TYPE(mp_comm_type) :: mp_comm_new !! MPI communicator IF (nblkrows >= nblkcols) THEN split_rowcol = rowsplit nsplit = INT((nblkrows - 1)/nblkcols + 1) ELSE split_rowcol = colsplit nsplit = INT((nblkcols - 1)/nblkrows + 1) END IF mp_comm_new = dbcsr_tas_mp_comm(mp_comm, split_rowcol, nsplit) END FUNCTION SUBROUTINE dbcsr_tas_create_split(split_info, mp_comm, split_rowcol, nsplit, own_comm, opt_nsplit) !! Split Cartesian process grid using a default split heuristic. TYPE(dbcsr_tas_split_info), INTENT(OUT) :: split_info !! object storing all data corresponding to split, submatrices and parallelization TYPE(mp_comm_type), INTENT(IN) :: mp_comm !! MPI communicator with associated cartesian grid INTEGER, INTENT(IN) :: split_rowcol !! split rows or columns INTEGER, INTENT(IN) :: nsplit !! desired split factor, set to 0 if split factor of exactly 1 is required LOGICAL, INTENT(IN), OPTIONAL :: own_comm !! whether split_info should own communicator LOGICAL, INTENT(IN), OPTIONAL :: opt_nsplit !! whether nsplit should be optimized to process grid CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_create_split' INTEGER :: & handle, iproc, numproc, igroup, nsplit_opt, pdim_split, pdim_nonsplit INTEGER, DIMENSION(2) :: pcoord, pdims, pdims_group LOGICAL :: opt_nsplit_prv CALL timeset(routineN, handle) IF (PRESENT(opt_nsplit)) THEN opt_nsplit_prv = opt_nsplit ELSE opt_nsplit_prv = .TRUE. END IF DBCSR_ASSERT(nsplit > 0) CALL mp_environ(numproc, iproc, mp_comm) CALL mp_environ(numproc, pdims, pcoord, mp_comm) SELECT CASE (split_rowcol) CASE (rowsplit) pdim_split = pdims(1) pdim_nonsplit = pdims(2) CASE (colsplit) pdim_split = pdims(2) pdim_nonsplit = pdims(1) END SELECT IF (opt_nsplit_prv) THEN nsplit_opt = get_opt_nsplit(pdim_split, nsplit, split_pgrid=.TRUE., pdim_nonsplit=pdim_nonsplit) ELSE IF (MOD(pdims(split_rowcol), nsplit) .NE. 0) THEN DBCSR_ABORT("Split factor does not divide process grid dimension") END IF nsplit_opt = nsplit END IF pdims_group = pdims pdims_group(split_rowcol) = pdims_group(split_rowcol)/nsplit_opt igroup = pcoord(split_rowcol)/pdims_group(split_rowcol) CALL dbcsr_tas_create_split_rows_or_cols(split_info, mp_comm, nsplit_opt, igroup, split_rowcol, own_comm=own_comm) IF (nsplit > 0) THEN ALLOCATE (split_info%ngroup_opt, SOURCE=nsplit) END IF CALL timestop(handle) END SUBROUTINE FUNCTION accept_pgrid_dims(dims, relative) !! Whether to accept proposed process grid dimensions (based on ratio of dimensions) INTEGER, DIMENSION(2), INTENT(IN) :: dims LOGICAL, INTENT(IN) :: relative INTEGER, DIMENSION(2) :: dims_opt LOGICAL :: accept_pgrid_dims IF (relative) THEN dims_opt = 0 CALL mp_dims_create(PRODUCT(dims), dims_opt) accept_pgrid_dims = (MAXVAL(REAL(dims, real_8))/MAXVAL(dims_opt) .LT. default_pdims_accept_ratio) ELSE accept_pgrid_dims = (MAXVAL(REAL(dims, real_8))/MINVAL(dims) .LT. default_pdims_accept_ratio**2) END IF END FUNCTION SUBROUTINE dbcsr_tas_get_split_info(info, mp_comm, nsplit, igroup, mp_comm_group, split_rowcol, pgrid_offset) !! Get info on split TYPE(dbcsr_tas_split_info), INTENT(IN) :: info TYPE(mp_comm_type), INTENT(OUT), OPTIONAL :: mp_comm, mp_comm_group INTEGER, INTENT(OUT), OPTIONAL :: nsplit, igroup, & split_rowcol !! communicator (global process grid) !! split factor !! which group do I belong to !! subgroup communicator (group-local process grid) !! split rows or columns INTEGER, DIMENSION(2), INTENT(OUT), OPTIONAL :: pgrid_offset !! group-local offset in process grid IF (PRESENT(mp_comm)) mp_comm = info%mp_comm IF (PRESENT(mp_comm_group)) mp_comm_group = info%mp_comm_group IF (PRESENT(split_rowcol)) split_rowcol = info%split_rowcol IF (PRESENT(igroup)) igroup = info%igroup IF (PRESENT(nsplit)) nsplit = info%ngroup IF (PRESENT(pgrid_offset)) THEN SELECT CASE (info%split_rowcol) CASE (rowsplit) pgrid_offset(:) = [info%igroup*info%pgrid_split_size, 0] CASE (colsplit) pgrid_offset(:) = [0, info%igroup*info%pgrid_split_size] END SELECT END IF END SUBROUTINE SUBROUTINE dbcsr_tas_release_info(split_info) TYPE(dbcsr_tas_split_info), INTENT(INOUT) :: split_info LOGICAL :: abort abort = .FALSE. IF (.NOT. ASSOCIATED(split_info%refcount)) THEN abort = .TRUE. ELSEIF (split_info%refcount < 1) THEN abort = .TRUE. END IF IF (abort) THEN DBCSR_ABORT("can not destroy non-existing split_info") END IF split_info%refcount = split_info%refcount - 1 IF (split_info%refcount == 0) THEN CALL mp_comm_free(split_info%mp_comm_group) CALL mp_comm_free(split_info%mp_comm) DEALLOCATE (split_info%refcount) END IF split_info%pdims = 0 IF (ALLOCATED(split_info%ngroup_opt)) DEALLOCATE (split_info%ngroup_opt) END SUBROUTINE SUBROUTINE dbcsr_tas_info_hold(split_info) TYPE(dbcsr_tas_split_info), INTENT(IN) :: split_info INTEGER, POINTER :: ref IF (split_info%refcount < 1) THEN DBCSR_ABORT("can not hold non-existing split_info") END IF ref => split_info%refcount ref = ref + 1 END SUBROUTINE SUBROUTINE world_to_group_proc_map(iproc, pdims, split_rowcol, pgrid_split_size, igroup, & pdims_group, iproc_group) !! map global process info to group INTEGER, INTENT(IN) :: iproc !! global process ID INTEGER, DIMENSION(2), INTENT(IN) :: pdims !! global process dimensions INTEGER, INTENT(IN) :: split_rowcol, pgrid_split_size !! split rows or column !! how many process rows/cols per group INTEGER, INTENT(OUT) :: igroup !! group ID INTEGER, DIMENSION(2), INTENT(OUT), OPTIONAL :: pdims_group !! local process grid dimensions INTEGER, INTENT(OUT), OPTIONAL :: iproc_group !! group local process ID INTEGER, DIMENSION(2) :: pcoord, pcoord_group IF (PRESENT(iproc_group)) THEN DBCSR_ASSERT(PRESENT(pdims_group)) END IF pcoord = [iproc/pdims(2), MOD(iproc, pdims(2))] igroup = pcoord(split_rowcol)/pgrid_split_size SELECT CASE (split_rowcol) CASE (rowsplit) IF (PRESENT(pdims_group)) pdims_group = [pgrid_split_size, pdims(2)] IF (PRESENT(iproc_group)) pcoord_group = [MOD(pcoord(1), pgrid_split_size), pcoord(2)] CASE (colsplit) IF (PRESENT(pdims_group)) pdims_group = [pdims(1), pgrid_split_size] IF (PRESENT(iproc_group)) pcoord_group = [pcoord(1), MOD(pcoord(2), pgrid_split_size)] END SELECT IF (PRESENT(iproc_group)) iproc_group = pcoord_group(1)*pdims_group(2) + pcoord_group(2) END SUBROUTINE SUBROUTINE group_to_world_proc_map(iproc, pdims, split_rowcol, pgrid_split_size, & igroup, iproc_group) !! map local process info to global info INTEGER, INTENT(OUT) :: iproc !! global process id INTEGER, DIMENSION(2), INTENT(IN) :: pdims !! global process grid dimensions INTEGER, INTENT(IN) :: split_rowcol, pgrid_split_size, & igroup, iproc_group !! split rows or column !! how many process rows/cols per group !! group ID !! local process ID INTEGER, DIMENSION(2) :: pcoord, pcoord_group, pdims_group SELECT CASE (split_rowcol) CASE (rowsplit) pdims_group = [pgrid_split_size, pdims(2)] CASE (colsplit) pdims_group = [pdims(1), pgrid_split_size] END SELECT pcoord_group = [iproc_group/pdims_group(2), MOD(iproc_group, pdims_group(2))] SELECT CASE (split_rowcol) CASE (rowsplit) pcoord = [igroup*pgrid_split_size + pcoord_group(1), pcoord_group(2)] CASE (colsplit) pcoord = [pcoord_group(1), igroup*pgrid_split_size + pcoord_group(2)] END SELECT iproc = pcoord(1)*pdims(2) + pcoord(2) END SUBROUTINE SUBROUTINE block_index_local_to_global(info, dist, row_group, column_group, & row, column) !! map group local block index to global matrix index TYPE(dbcsr_tas_split_info), INTENT(IN) :: info TYPE(dbcsr_tas_distribution_type), INTENT(IN) :: dist INTEGER, INTENT(IN), OPTIONAL :: row_group, column_group !! group local row block index !! group local column block index INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL :: row, column !! global block row !! global block column SELECT CASE (info%split_rowcol) CASE (rowsplit) ASSOCIATE (rows => dist%local_rowcols) IF (PRESENT(row)) row = rows(row_group) IF (PRESENT(column)) column = column_group END ASSOCIATE CASE (colsplit) ASSOCIATE (cols => dist%local_rowcols) IF (PRESENT(row)) row = row_group IF (PRESENT(column)) column = cols(column_group) END ASSOCIATE END SELECT END SUBROUTINE SUBROUTINE block_index_global_to_local(info, dist, row, column, row_group, column_group) !! map global block index to group local index TYPE(dbcsr_tas_split_info), INTENT(IN) :: info TYPE(dbcsr_tas_distribution_type), INTENT(IN) :: dist INTEGER(KIND=int_8), INTENT(IN), OPTIONAL :: row, column INTEGER, INTENT(OUT), OPTIONAL :: row_group, column_group SELECT CASE (info%split_rowcol) CASE (rowsplit) IF (PRESENT(row_group)) row_group = i8_bsearch(dist%local_rowcols, row) IF (PRESENT(column_group)) column_group = INT(column) CASE (colsplit) IF (PRESENT(row_group)) row_group = INT(row) IF (PRESENT(column_group)) column_group = i8_bsearch(dist%local_rowcols, column) END SELECT END SUBROUTINE FUNCTION i8_bsearch(array, el, l_index, u_index) result(res) !! binary search for 8-byte integers INTEGER(KIND=int_8), intent(in) :: array(:) INTEGER(KIND=int_8), intent(in) :: el INTEGER, INTENT(in), OPTIONAL :: l_index, u_index INTEGER :: res, lindex, uindex, aindex lindex = 1 uindex = size(array) if (present(l_index)) lindex = l_index if (present(u_index)) uindex = u_index DO WHILE (lindex <= uindex) aindex = (lindex + uindex)/2 IF (array(aindex) < el) THEN lindex = aindex + 1 ELSE uindex = aindex - 1 END IF END DO res = lindex END FUNCTION SUBROUTINE group_to_mrowcol(info, rowcol_dist, igroup, rowcols) !! maps a process subgroup to matrix rows/columns TYPE(dbcsr_tas_split_info), INTENT(IN) :: info CLASS(dbcsr_tas_distribution), INTENT(IN) :: rowcol_dist INTEGER, INTENT(IN) :: igroup !! group ID INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE, INTENT(OUT) :: rowcols !! rows/ columns on this group INTEGER, DIMENSION(0:info%pgrid_split_size - 1) :: nrowcols_group INTEGER :: pcoord, nrowcols, count, pcoord_group INTEGER, DIMENSION(:), ALLOCATABLE :: sort_indices nrowcols_group(:) = 0 DO pcoord = igroup*info%pgrid_split_size, (igroup + 1)*info%pgrid_split_size - 1 pcoord_group = pcoord - igroup*info%pgrid_split_size nrowcols_group(pcoord_group) = SIZE(rowcol_dist%rowcols(pcoord)) END DO nrowcols = SUM(nrowcols_group) ALLOCATE (rowcols(nrowcols)) count = 0 DO pcoord = igroup*info%pgrid_split_size, (igroup + 1)*info%pgrid_split_size - 1 pcoord_group = pcoord - igroup*info%pgrid_split_size rowcols(count + 1:count + nrowcols_group(pcoord_group)) = rowcol_dist%rowcols(pcoord) count = count + nrowcols_group(pcoord_group) END DO ALLOCATE (sort_indices(nrowcols)) CALL sort(rowcols, nrowcols, sort_indices) END SUBROUTINE SUBROUTINE dbcsr_tas_set_strict_split(info) !! freeze current split factor such that it is never changed during multiplication TYPE(dbcsr_tas_split_info), INTENT(INOUT) :: info info%strict_split = [.TRUE., .TRUE.] END SUBROUTINE END MODULE ================================================ FILE: src/tas/dbcsr_tas_test.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tas_test !! testing infrastructure for tall-and-skinny matrices USE dbcsr_types, ONLY: dbcsr_type_real_8 USE dbcsr_data_methods, ONLY: dbcsr_scalar USE dbcsr_methods, ONLY: & dbcsr_release, dbcsr_nblkcols_total, dbcsr_nblkrows_total, dbcsr_row_block_sizes, dbcsr_col_block_sizes, & dbcsr_mp_release, dbcsr_distribution_release USE dbcsr_multiply_api, ONLY: dbcsr_multiply USE dbcsr_tas_base, ONLY: & dbcsr_tas_convert_to_dbcsr, dbcsr_tas_create, dbcsr_tas_distribution_new, & dbcsr_tas_finalize, dbcsr_tas_get_stored_coordinates, dbcsr_tas_nblkcols_total, & dbcsr_tas_nblkrows_total, dbcsr_tas_put_block, dbcsr_tas_info USE dbcsr_tas_types, ONLY: dbcsr_tas_distribution_type, & dbcsr_tas_type USE dbcsr_tas_global, ONLY: dbcsr_tas_blk_size_arb, & dbcsr_tas_dist_cyclic, & dbcsr_tas_default_distvec USE dbcsr_tas_mm, ONLY: dbcsr_tas_multiply USE dbcsr_tas_split, ONLY: dbcsr_tas_mp_comm, & dbcsr_tas_get_split_info USE dbcsr_tas_util, ONLY: dbcsr_mp_environ, & invert_transpose_flag USE dbcsr_types, ONLY: & dbcsr_type, dbcsr_distribution_obj, dbcsr_mp_obj, dbcsr_no_transpose, dbcsr_transpose, & dbcsr_type_no_symmetry USE dbcsr_kinds, ONLY: int_8, & real_8 USE dbcsr_mpiwrap, ONLY: mp_environ, & mp_cart_create, & mp_comm_free, mp_comm_type USE dbcsr_dist_methods, ONLY: dbcsr_distribution_new USE dbcsr_work_operations, ONLY: dbcsr_create, & dbcsr_finalize USE dbcsr_dist_util, ONLY: dbcsr_checksum USE dbcsr_operations, ONLY: dbcsr_maxabs, & dbcsr_add USE dbcsr_transformations, ONLY: dbcsr_complete_redistribute USE dbcsr_blas_operations, ONLY: & set_larnv_seed #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE PUBLIC :: & dbcsr_tas_benchmark_mm, & dbcsr_tas_checksum, & dbcsr_tas_random_bsizes, & dbcsr_tas_setup_test_matrix, & dbcsr_tas_test_mm, & dbcsr_tas_reset_randmat_seed INTEGER, SAVE :: randmat_counter = 0 INTEGER, PARAMETER, PRIVATE :: rand_seed_init = 12341313 CONTAINS SUBROUTINE dbcsr_tas_setup_test_matrix(matrix, mp_comm_out, mp_comm, nrows, ncols, rbsizes, cbsizes, & !! Setup tall-and-skinny matrix for testing dist_splitsize, name, sparsity, reuse_comm) TYPE(dbcsr_tas_type), INTENT(OUT) :: matrix TYPE(mp_comm_type), INTENT(OUT) :: mp_comm_out TYPE(mp_comm_type), INTENT(IN) :: mp_comm INTEGER(KIND=int_8), INTENT(IN) :: nrows, ncols INTEGER, DIMENSION(nrows), INTENT(IN) :: rbsizes INTEGER, DIMENSION(ncols), INTENT(IN) :: cbsizes INTEGER, DIMENSION(2), INTENT(IN) :: dist_splitsize CHARACTER(len=*), INTENT(IN) :: name REAL(KIND=real_8), INTENT(IN) :: sparsity LOGICAL, INTENT(IN), OPTIONAL :: reuse_comm INTEGER :: col_size, max_col_size, max_nze, & max_row_size, mynode, node_holds_blk, & numnodes, nze, row_size INTEGER(KIND=int_8) :: col, col_s, row, row_s, nrow, ncol INTEGER, DIMENSION(2) :: pcoord, pdims LOGICAL :: reuse_comm_prv, tr REAL(KIND=real_8), DIMENSION(1) :: rn REAL(KIND=real_8), ALLOCATABLE, DIMENSION(:, :) :: values TYPE(dbcsr_tas_blk_size_arb) :: cbsize_obj, rbsize_obj TYPE(dbcsr_tas_dist_cyclic) :: col_dist_obj, row_dist_obj TYPE(dbcsr_tas_distribution_type) :: dist CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_setup_test_matrix' INTEGER :: handle INTEGER, DIMENSION(4) :: iseed, jseed ! we don't reserve blocks prior to putting them, so this time is meaningless and should not ! be considered in benchmark! CALL timeset(routineN, handle) ! Check that the counter was initialised (or has not overflowed) DBCSR_ASSERT(randmat_counter .NE. 0) ! the counter goes into the seed. Every new call gives a new random matrix randmat_counter = randmat_counter + 1 IF (PRESENT(reuse_comm)) THEN reuse_comm_prv = reuse_comm ELSE reuse_comm_prv = .FALSE. END IF IF (reuse_comm_prv) THEN mp_comm_out = mp_comm ELSE mp_comm_out = dbcsr_tas_mp_comm(mp_comm, nrows, ncols) END IF CALL mp_environ(numnodes, mynode, mp_comm_out) CALL mp_environ(numnodes, pdims, pcoord, mp_comm_out) row_dist_obj = dbcsr_tas_dist_cyclic(dist_splitsize(1), pdims(1), nrows) col_dist_obj = dbcsr_tas_dist_cyclic(dist_splitsize(2), pdims(2), ncols) rbsize_obj = dbcsr_tas_blk_size_arb(rbsizes) cbsize_obj = dbcsr_tas_blk_size_arb(cbsizes) CALL dbcsr_tas_distribution_new(dist, mp_comm_out, row_dist_obj, col_dist_obj) CALL dbcsr_tas_create(matrix, name, dist=dist, data_type=dbcsr_type_real_8, & row_blk_size=rbsize_obj, col_blk_size=cbsize_obj, own_dist=.TRUE.) max_row_size = MAXVAL(rbsizes) max_col_size = MAXVAL(cbsizes) max_nze = max_row_size*max_col_size nrow = dbcsr_tas_nblkrows_total(matrix) ncol = dbcsr_tas_nblkcols_total(matrix) ALLOCATE (values(max_row_size, max_col_size)) CALL set_larnv_seed(7, 42, 3, 42, randmat_counter, jseed) DO row = 1, dbcsr_tas_nblkrows_total(matrix) DO col = 1, dbcsr_tas_nblkcols_total(matrix) CALL dlarnv(1, jseed, 1, rn) IF (rn(1) .LT. sparsity) THEN tr = .FALSE. row_s = row; col_s = col CALL dbcsr_tas_get_stored_coordinates(matrix, row_s, col_s, node_holds_blk) IF (node_holds_blk .EQ. mynode) THEN row_size = rbsize_obj%data(row_s) col_size = cbsize_obj%data(col_s) nze = row_size*col_size CALL set_larnv_seed(INT(row_s), INT(nrow), INT(col_s), INT(ncol), randmat_counter, iseed) CALL dlarnv(1, iseed, max_nze, values) CALL dbcsr_tas_put_block(matrix, row_s, col_s, values(1:row_size, 1:col_size)) END IF END IF END DO END DO CALL dbcsr_tas_finalize(matrix) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_tas_benchmark_mm(transa, transb, transc, matrix_a, matrix_b, matrix_c, compare_dbcsr, filter_eps, io_unit) !! Benchmark routine. Due to random sparsity (as opposed to structured sparsity pattern), this !! may not be representative for actual applications. CHARACTER(LEN=1), INTENT(IN) :: transa, transb, transc TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix_a, matrix_b, matrix_c REAL(KIND=real_8), INTENT(IN), OPTIONAL :: filter_eps INTEGER, INTENT(IN), OPTIONAL :: io_unit LOGICAL, INTENT(IN) :: compare_dbcsr INTEGER :: handle1, handle2 TYPE(dbcsr_type) :: dbcsr_a, dbcsr_b, dbcsr_c, & dbcsr_a_mm, dbcsr_b_mm, dbcsr_c_mm TYPE(mp_comm_type) :: mp_comm, comm_dbcsr TYPE(dbcsr_distribution_obj) :: dist_a, dist_b, dist_c INTEGER, DIMENSION(2) :: npdims, myploc INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: cd_a, cd_b, cd_c, & rd_a, rd_b, rd_c TYPE(dbcsr_mp_obj) :: mp_environ_tmp INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: row_blk_size, col_blk_size IF (PRESENT(io_unit)) THEN IF (io_unit > 0) THEN WRITE (io_unit, "(A)") "starting tall-and-skinny benchmark" END IF END IF CALL timeset("benchmark_tas_mm", handle1) CALL dbcsr_tas_multiply(transa, transb, transc, dbcsr_scalar(1.0_real_8), matrix_a, matrix_b, & dbcsr_scalar(0.0_real_8), matrix_c, & filter_eps=filter_eps, unit_nr=io_unit) CALL timestop(handle1) IF (PRESENT(io_unit)) THEN IF (io_unit > 0) THEN WRITE (io_unit, "(A)") "tall-and-skinny benchmark completed" END IF END IF IF (compare_dbcsr) THEN CALL dbcsr_tas_convert_to_dbcsr(matrix_a, dbcsr_a) CALL dbcsr_tas_convert_to_dbcsr(matrix_b, dbcsr_b) CALL dbcsr_tas_convert_to_dbcsr(matrix_c, dbcsr_c) CALL dbcsr_tas_get_split_info(dbcsr_tas_info(matrix_a), mp_comm=mp_comm) npdims(:) = 0 CALL mp_cart_create(mp_comm, 2, npdims, myploc, comm_dbcsr) ALLOCATE (rd_a(dbcsr_nblkrows_total(dbcsr_a))); ALLOCATE (cd_a(dbcsr_nblkcols_total(dbcsr_a))) ALLOCATE (rd_b(dbcsr_nblkrows_total(dbcsr_b))); ALLOCATE (cd_b(dbcsr_nblkcols_total(dbcsr_b))) ALLOCATE (rd_c(dbcsr_nblkrows_total(dbcsr_c))); ALLOCATE (cd_c(dbcsr_nblkcols_total(dbcsr_c))) CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkrows_total(dbcsr_a)), npdims(1), dbcsr_row_block_sizes(dbcsr_a), rd_a) CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkcols_total(dbcsr_a)), npdims(2), dbcsr_col_block_sizes(dbcsr_a), cd_a) CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkrows_total(dbcsr_b)), npdims(1), dbcsr_row_block_sizes(dbcsr_b), rd_b) CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkcols_total(dbcsr_b)), npdims(2), dbcsr_col_block_sizes(dbcsr_b), cd_b) CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkrows_total(dbcsr_c)), npdims(1), dbcsr_row_block_sizes(dbcsr_c), rd_c) CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkcols_total(dbcsr_c)), npdims(2), dbcsr_col_block_sizes(dbcsr_c), cd_c) mp_environ_tmp = dbcsr_mp_environ(comm_dbcsr) CALL dbcsr_distribution_new(dist_a, mp_environ_tmp, rd_a, cd_a, reuse_arrays=.TRUE.) CALL dbcsr_distribution_new(dist_b, mp_environ_tmp, rd_b, cd_b, reuse_arrays=.TRUE.) CALL dbcsr_distribution_new(dist_c, mp_environ_tmp, rd_c, cd_c, reuse_arrays=.TRUE.) CALL dbcsr_mp_release(mp_environ_tmp) row_blk_size => dbcsr_row_block_sizes(dbcsr_a) col_blk_size => dbcsr_col_block_sizes(dbcsr_a) CALL dbcsr_create(matrix=dbcsr_a_mm, name=dbcsr_a%name, dist=dist_a, matrix_type=dbcsr_type_no_symmetry, & row_blk_size=row_blk_size, col_blk_size=col_blk_size, & data_type=dbcsr_type_real_8) row_blk_size => dbcsr_row_block_sizes(dbcsr_b) col_blk_size => dbcsr_col_block_sizes(dbcsr_b) CALL dbcsr_create(matrix=dbcsr_b_mm, name=dbcsr_b%name, dist=dist_b, matrix_type=dbcsr_type_no_symmetry, & row_blk_size=row_blk_size, col_blk_size=col_blk_size, & data_type=dbcsr_type_real_8) row_blk_size => dbcsr_row_block_sizes(dbcsr_c) col_blk_size => dbcsr_col_block_sizes(dbcsr_c) CALL dbcsr_create(matrix=dbcsr_c_mm, name=dbcsr_c%name, dist=dist_c, matrix_type=dbcsr_type_no_symmetry, & row_blk_size=row_blk_size, col_blk_size=col_blk_size, & data_type=dbcsr_type_real_8) CALL dbcsr_finalize(dbcsr_a_mm) CALL dbcsr_finalize(dbcsr_b_mm) CALL dbcsr_finalize(dbcsr_c_mm) CALL dbcsr_complete_redistribute(dbcsr_a, dbcsr_a_mm) CALL dbcsr_complete_redistribute(dbcsr_b, dbcsr_b_mm) IF (PRESENT(io_unit)) THEN IF (io_unit > 0) THEN WRITE (io_unit, "(A)") "starting dbcsr benchmark" END IF END IF CALL timeset("benchmark_dbcsr_mm", handle2) CALL dbcsr_multiply(transa, transb, dbcsr_scalar(1.0_real_8), dbcsr_a_mm, dbcsr_b_mm, & dbcsr_scalar(0.0_real_8), dbcsr_c_mm, filter_eps=filter_eps) CALL timestop(handle2) IF (PRESENT(io_unit)) THEN IF (io_unit > 0) THEN WRITE (io_unit, "(A)") "dbcsr benchmark completed" END IF END IF CALL dbcsr_release(dbcsr_a) CALL dbcsr_release(dbcsr_b) CALL dbcsr_release(dbcsr_c) CALL dbcsr_release(dbcsr_a_mm) CALL dbcsr_release(dbcsr_b_mm) CALL dbcsr_release(dbcsr_c_mm) CALL dbcsr_distribution_release(dist_a) CALL dbcsr_distribution_release(dist_b) CALL dbcsr_distribution_release(dist_c) CALL mp_comm_free(comm_dbcsr) END IF END SUBROUTINE SUBROUTINE dbcsr_tas_test_mm(transa, transb, transc, matrix_a, matrix_b, matrix_c, filter_eps, unit_nr, log_verbose) !! Test tall-and-skinny matrix multiplication for accuracy CHARACTER(LEN=1), INTENT(IN) :: transa, transb, transc TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix_a, matrix_b, matrix_c INTEGER, INTENT(IN) :: unit_nr LOGICAL, INTENT(IN), OPTIONAL :: log_verbose REAL(KIND=real_8), INTENT(IN), OPTIONAL :: filter_eps CHARACTER(LEN=1) :: transa_prv, transb_prv INTEGER :: io_unit, mynode, & numnodes INTEGER, DIMENSION(2) :: myploc, npdims INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: cd_a, cd_b, cd_c, & rd_a, rd_b, rd_c REAL(KIND=real_8) :: norm, rc_cs, sq_cs TYPE(dbcsr_distribution_obj) :: dist_a, dist_b, dist_c TYPE(dbcsr_mp_obj) :: mp_environ_tmp TYPE(dbcsr_type) :: dbcsr_a, dbcsr_a_mm, dbcsr_b, & dbcsr_b_mm, dbcsr_c, dbcsr_c_mm, & dbcsr_c_mm_check TYPE(mp_comm_type) :: comm_dbcsr, mp_comm REAL(KIND=real_8), PARAMETER :: test_tol = 1.0E-10_real_8 CALL dbcsr_tas_get_split_info(dbcsr_tas_info(matrix_a), mp_comm=mp_comm) CALL mp_environ(numnodes, mynode, mp_comm) io_unit = -1 IF (mynode .EQ. 0) io_unit = unit_nr CALL dbcsr_tas_multiply(transa, transb, transc, dbcsr_scalar(1.0_real_8), matrix_a, matrix_b, & dbcsr_scalar(0.0_real_8), matrix_c, & filter_eps=filter_eps, unit_nr=io_unit, log_verbose=log_verbose, optimize_dist=.TRUE.) CALL dbcsr_tas_convert_to_dbcsr(matrix_a, dbcsr_a) CALL dbcsr_tas_convert_to_dbcsr(matrix_b, dbcsr_b) CALL dbcsr_tas_convert_to_dbcsr(matrix_c, dbcsr_c) npdims(:) = 0 CALL mp_cart_create(mp_comm, 2, npdims, myploc, comm_dbcsr) ALLOCATE (rd_a(dbcsr_nblkrows_total(dbcsr_a))); ALLOCATE (cd_a(dbcsr_nblkcols_total(dbcsr_a))) ALLOCATE (rd_b(dbcsr_nblkrows_total(dbcsr_b))); ALLOCATE (cd_b(dbcsr_nblkcols_total(dbcsr_b))) ALLOCATE (rd_c(dbcsr_nblkrows_total(dbcsr_c))); ALLOCATE (cd_c(dbcsr_nblkcols_total(dbcsr_c))) CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkrows_total(dbcsr_a)), npdims(1), dbcsr_row_block_sizes(dbcsr_a), rd_a) CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkcols_total(dbcsr_a)), npdims(2), dbcsr_col_block_sizes(dbcsr_a), cd_a) CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkrows_total(dbcsr_b)), npdims(1), dbcsr_row_block_sizes(dbcsr_b), rd_b) CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkcols_total(dbcsr_b)), npdims(2), dbcsr_col_block_sizes(dbcsr_b), cd_b) CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkrows_total(dbcsr_c)), npdims(1), dbcsr_row_block_sizes(dbcsr_c), rd_c) CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkcols_total(dbcsr_c)), npdims(2), dbcsr_col_block_sizes(dbcsr_c), cd_c) mp_environ_tmp = dbcsr_mp_environ(comm_dbcsr) CALL dbcsr_distribution_new(dist_a, mp_environ_tmp, rd_a, cd_a, reuse_arrays=.TRUE.) CALL dbcsr_distribution_new(dist_b, mp_environ_tmp, rd_b, cd_b, reuse_arrays=.TRUE.) CALL dbcsr_distribution_new(dist_c, mp_environ_tmp, rd_c, cd_c, reuse_arrays=.TRUE.) CALL dbcsr_mp_release(mp_environ_tmp) CALL dbcsr_create(matrix=dbcsr_a_mm, name="matrix a", dist=dist_a, matrix_type=dbcsr_type_no_symmetry, & row_blk_size_obj=dbcsr_a%row_blk_size, col_blk_size_obj=dbcsr_a%col_blk_size, & data_type=dbcsr_type_real_8) CALL dbcsr_create(matrix=dbcsr_b_mm, name="matrix b", dist=dist_b, matrix_type=dbcsr_type_no_symmetry, & row_blk_size_obj=dbcsr_b%row_blk_size, col_blk_size_obj=dbcsr_b%col_blk_size, & data_type=dbcsr_type_real_8) CALL dbcsr_create(matrix=dbcsr_c_mm, name="matrix c", dist=dist_c, matrix_type=dbcsr_type_no_symmetry, & row_blk_size_obj=dbcsr_c%row_blk_size, col_blk_size_obj=dbcsr_c%col_blk_size, & data_type=dbcsr_type_real_8) CALL dbcsr_create(matrix=dbcsr_c_mm_check, name="matrix c check", dist=dist_c, matrix_type=dbcsr_type_no_symmetry, & row_blk_size_obj=dbcsr_c%row_blk_size, col_blk_size_obj=dbcsr_c%col_blk_size, & data_type=dbcsr_type_real_8) CALL dbcsr_finalize(dbcsr_a_mm) CALL dbcsr_finalize(dbcsr_b_mm) CALL dbcsr_finalize(dbcsr_c_mm) CALL dbcsr_finalize(dbcsr_c_mm_check) CALL dbcsr_complete_redistribute(dbcsr_a, dbcsr_a_mm) CALL dbcsr_complete_redistribute(dbcsr_b, dbcsr_b_mm) CALL dbcsr_complete_redistribute(dbcsr_c, dbcsr_c_mm_check) transa_prv = transa; transb_prv = transb IF (transc == dbcsr_no_transpose) THEN CALL dbcsr_multiply(transa_prv, transb_prv, dbcsr_scalar(1.0_real_8), & dbcsr_a_mm, dbcsr_b_mm, dbcsr_scalar(0.0_real_8), dbcsr_c_mm, filter_eps=filter_eps) ELSEIF (transc == dbcsr_transpose) THEN CALL invert_transpose_flag(transa_prv) CALL invert_transpose_flag(transb_prv) CALL dbcsr_multiply(transb_prv, transa_prv, dbcsr_scalar(1.0_real_8), & dbcsr_b_mm, dbcsr_a_mm, dbcsr_scalar(0.0_real_8), dbcsr_c_mm, filter_eps=filter_eps) END IF sq_cs = dbcsr_checksum(dbcsr_c_mm) rc_cs = dbcsr_checksum(dbcsr_c_mm_check) CALL dbcsr_add(dbcsr_c_mm_check, dbcsr_c_mm, -1.0_real_8, 1.0_real_8) norm = dbcsr_maxabs(dbcsr_c_mm_check) IF (io_unit > 0) THEN IF (ABS(norm) .GT. test_tol) THEN WRITE (io_unit, '(A, A, A, A, A, 1X, A)') TRIM(matrix_a%matrix%name), transa, ' X ', TRIM(matrix_b%matrix%name), & transb, 'failed!' WRITE (io_unit, "(A,1X,E9.2,1X,E9.2)") "checksums", sq_cs, rc_cs WRITE (io_unit, "(A,1X,E9.2)") "difference norm", norm DBCSR_ABORT("") ELSE WRITE (io_unit, '(A, A, A, A, A, 1X, A)') TRIM(matrix_a%matrix%name), transa, ' X ', TRIM(matrix_b%matrix%name), & transb, 'passed!' WRITE (io_unit, "(A,1X,E9.2,1X,E9.2)") "checksums", sq_cs, rc_cs WRITE (io_unit, "(A,1X,E9.2)") "difference norm", norm END IF END IF CALL dbcsr_release(dbcsr_a) CALL dbcsr_release(dbcsr_a_mm) CALL dbcsr_release(dbcsr_b) CALL dbcsr_release(dbcsr_b_mm) CALL dbcsr_release(dbcsr_c) CALL dbcsr_release(dbcsr_c_mm) CALL dbcsr_release(dbcsr_c_mm_check) CALL dbcsr_distribution_release(dist_a) CALL dbcsr_distribution_release(dist_b) CALL dbcsr_distribution_release(dist_c) CALL mp_comm_free(comm_dbcsr) END SUBROUTINE FUNCTION dbcsr_tas_checksum(matrix, local, pos) !! Calculate checksum of tall-and-skinny matrix consistent with dbcsr_checksum TYPE(dbcsr_tas_type), INTENT(IN) :: matrix LOGICAL, INTENT(IN), OPTIONAL :: local, pos TYPE(dbcsr_type) :: dbcsr_m REAL(KIND=real_8) :: dbcsr_tas_checksum CALL dbcsr_tas_convert_to_dbcsr(matrix, dbcsr_m) dbcsr_tas_checksum = dbcsr_checksum(dbcsr_m, local, pos) CALL dbcsr_release(dbcsr_m) END FUNCTION SUBROUTINE dbcsr_tas_random_bsizes(sizes, repeat, block_sizes) !! Create random block sizes INTEGER, DIMENSION(:), INTENT(IN) :: sizes INTEGER, INTENT(IN) :: repeat INTEGER, DIMENSION(:), INTENT(OUT) :: block_sizes INTEGER :: d, size_i DO d = 1, SIZE(block_sizes) size_i = MOD((d - 1)/repeat, SIZE(sizes)) + 1 block_sizes(d) = sizes(size_i) END DO END SUBROUTINE SUBROUTINE dbcsr_tas_reset_randmat_seed() !! Reset the seed used for generating random matrices to default value randmat_counter = rand_seed_init END SUBROUTINE END MODULE ================================================ FILE: src/tas/dbcsr_tas_types.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tas_types !! DBCSR tall-and-skinny base types. !! Mostly wrappers around existing DBCSR routines. USE dbcsr_tas_global, ONLY: & dbcsr_tas_distribution, dbcsr_tas_rowcol_data USE dbcsr_types, ONLY: & dbcsr_distribution_obj, dbcsr_iterator, dbcsr_type USE dbcsr_kinds, ONLY: int_8 USE dbcsr_data_types, ONLY: dbcsr_scalar_type USE dbcsr_mpiwrap, ONLY: mp_comm_type #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_types' PUBLIC :: & dbcsr_tas_distribution_type, & dbcsr_tas_iterator, & dbcsr_tas_split_info, & dbcsr_tas_type, & dbcsr_tas_mm_storage ! info on MPI Cartesian grid that is split on MPI subgroups. ! info on distribution of matrix rows / columns to different subgroups. TYPE dbcsr_tas_split_info TYPE(mp_comm_type) :: mp_comm = mp_comm_type() ! global communicator INTEGER, DIMENSION(2) :: pdims = -1 ! dimensions of process grid INTEGER :: igroup = -1 ! which subgroup do I belong to INTEGER :: ngroup = -1 ! how many groups in total INTEGER :: split_rowcol = -1 ! split row or column? INTEGER :: pgrid_split_size = -1 ! how many process rows/cols in subgroups INTEGER :: group_size = -1 ! group size (how many cores) of subgroups TYPE(mp_comm_type) :: mp_comm_group = mp_comm_type() ! sub communicator INTEGER, ALLOCATABLE :: ngroup_opt ! optimal number of groups (split factor) LOGICAL, DIMENSION(2) :: strict_split = [.FALSE., .FALSE.] ! if .true., split factor should not be modified (2 parameters for current and general settings) INTEGER, POINTER :: refcount => NULL() ! lightweight reference counting for communicators END TYPE TYPE dbcsr_tas_distribution_type #if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__)) TYPE(dbcsr_tas_split_info) :: info = dbcsr_tas_split_info(ngroup_opt=NULL()) #else TYPE(dbcsr_tas_split_info) :: info = dbcsr_tas_split_info() #endif TYPE(dbcsr_distribution_obj) :: dbcsr_dist = dbcsr_distribution_obj() CLASS(dbcsr_tas_distribution), ALLOCATABLE :: row_dist CLASS(dbcsr_tas_distribution), ALLOCATABLE :: col_dist INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:) :: local_rowcols END TYPE ! storage for batched matrix multiplication TYPE dbcsr_tas_mm_storage TYPE(dbcsr_tas_type), POINTER :: store_batched => NULL() ! intermediate replicated matrix TYPE(dbcsr_tas_type), POINTER :: store_batched_repl => NULL() ! intermediate replicated matrix LOGICAL :: batched_out = .FALSE. ! whether replicated matrix has been changed in mm and should be copied to actual matrix LOGICAL :: batched_trans = .FALSE. #if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__)) TYPE(dbcsr_scalar_type) :: batched_beta #else TYPE(dbcsr_scalar_type) :: batched_beta = dbcsr_scalar_type() #endif END TYPE ! type for tall-and-skinny matrices TYPE dbcsr_tas_type #if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__)) TYPE(dbcsr_tas_distribution_type) :: dist #else TYPE(dbcsr_tas_distribution_type) :: dist = dbcsr_tas_distribution_type() #endif CLASS(dbcsr_tas_rowcol_data), ALLOCATABLE :: row_blk_size CLASS(dbcsr_tas_rowcol_data), ALLOCATABLE :: col_blk_size TYPE(dbcsr_type) :: matrix = dbcsr_type() ! matrix on subgroup INTEGER(KIND=int_8) :: nblkrows = -1_int_8 ! total number of rows INTEGER(KIND=int_8) :: nblkcols = -1_int_8 ! total number of columns INTEGER(KIND=int_8) :: nblkrowscols_split = -1_int_8 ! nblkrows or nblkcols depending on which is splitted INTEGER(KIND=int_8) :: nfullrows = -1_int_8 ! total number of full (not blocked) rows INTEGER(KIND=int_8) :: nfullcols = -1_int_8 ! total number of full (not blocked) columns LOGICAL :: valid = .FALSE. ! has been created? ! storage and flags for batched matrix multiplication INTEGER :: do_batched = 0 ! state flag for batched multiplication TYPE(dbcsr_tas_mm_storage), ALLOCATABLE :: mm_storage ! storage for batched processing of matrix matrix multiplication. LOGICAL :: has_opt_pgrid = .FALSE. ! whether pgrid was automatically optimized END TYPE TYPE dbcsr_tas_iterator #if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__)) TYPE(dbcsr_tas_split_info) :: info = dbcsr_tas_split_info(ngroup_opt=NULL()) TYPE(dbcsr_tas_distribution_type) :: dist #else TYPE(dbcsr_tas_split_info) :: info = dbcsr_tas_split_info() TYPE(dbcsr_tas_distribution_type) :: dist = dbcsr_tas_distribution_type() #endif TYPE(dbcsr_iterator) :: iter = dbcsr_iterator() END TYPE dbcsr_tas_iterator END MODULE ================================================ FILE: src/tas/dbcsr_tas_util.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tas_util !! often used utilities for tall-and-skinny matrices USE dbcsr_mp_methods, ONLY: dbcsr_mp_new USE dbcsr_types, ONLY: dbcsr_mp_obj, & dbcsr_transpose, & dbcsr_no_transpose USE dbcsr_kinds, ONLY: int_8 USE dbcsr_mpiwrap, ONLY: mp_cart_rank, & mp_environ, mp_comm_type USE dbcsr_index_operations, ONLY: dbcsr_sort_indices #include "base/dbcsr_base_uses.f90" #if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) USE libxsmm, ONLY: libxsmm_diff # define PURE_ARRAY_EQ #else # define PURE_ARRAY_EQ PURE #endif IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_util' PUBLIC :: & array_eq, & dbcsr_mp_environ, & index_unique, & invert_transpose_flag, & swap INTERFACE swap MODULE PROCEDURE swap_i8 MODULE PROCEDURE swap_i END INTERFACE INTERFACE array_eq MODULE PROCEDURE array_eq_i8 MODULE PROCEDURE array_eq_i END INTERFACE CONTAINS FUNCTION dbcsr_mp_environ(mp_comm) !! Create a dbcsr mp environment from communicator TYPE(mp_comm_type), INTENT(IN) :: mp_comm TYPE(dbcsr_mp_obj) :: dbcsr_mp_environ INTEGER :: mynode, numnodes, pcol, prow INTEGER, ALLOCATABLE, DIMENSION(:, :) :: pgrid INTEGER, DIMENSION(2) :: coord, mycoord, npdims CALL mp_environ(numnodes, npdims, mycoord, mp_comm) CALL mp_environ(numnodes, mynode, mp_comm) ALLOCATE (pgrid(0:npdims(1) - 1, 0:npdims(2) - 1)) DO prow = 0, npdims(1) - 1 DO pcol = 0, npdims(2) - 1 coord = (/prow, pcol/) CALL mp_cart_rank(mp_comm, coord, pgrid(prow, pcol)) END DO END DO DBCSR_ASSERT(mynode == pgrid(mycoord(1), mycoord(2))) CALL dbcsr_mp_new(dbcsr_mp_environ, mp_comm, pgrid, mynode, numnodes, mycoord(1), mycoord(2)) END FUNCTION SUBROUTINE swap_i8(arr) INTEGER(KIND=int_8), DIMENSION(2), INTENT(INOUT) :: arr INTEGER(KIND=int_8) :: tmp tmp = arr(1) arr(1) = arr(2) arr(2) = tmp END SUBROUTINE SUBROUTINE swap_i(arr) INTEGER, DIMENSION(2), INTENT(INOUT) :: arr INTEGER :: tmp tmp = arr(1) arr(1) = arr(2) arr(2) = tmp END SUBROUTINE SUBROUTINE index_unique(index_in, index_out) !! Get all unique elements in index_in INTEGER, DIMENSION(:, :), INTENT(IN) :: index_in INTEGER, ALLOCATABLE, & DIMENSION(:, :), INTENT(OUT) :: index_out INTEGER :: blk, count, orig_size INTEGER, ALLOCATABLE, DIMENSION(:, :) :: index_tmp INTEGER, DIMENSION(2) :: prev_index INTEGER, DIMENSION(1:SIZE(index_in, 1) & , 1:SIZE(index_in, 2)) :: index_sorted orig_size = SIZE(index_in, 1) ALLOCATE (index_tmp(orig_size, 2)) index_sorted(:, :) = index_in(:, :) CALL dbcsr_sort_indices(orig_size, index_sorted(:, 1), index_sorted(:, 2)) count = 0 prev_index(:) = [0, 0] DO blk = 1, orig_size IF (ANY(index_sorted(blk, :) .NE. prev_index(:))) THEN count = count + 1 index_tmp(count, :) = index_sorted(blk, :) prev_index(:) = index_sorted(blk, :) END IF END DO ALLOCATE (index_out(count, 2)) index_out(:, :) = index_tmp(1:count, :) END SUBROUTINE SUBROUTINE invert_transpose_flag(trans_flag) CHARACTER(LEN=1), INTENT(INOUT) :: trans_flag IF (trans_flag == dbcsr_transpose) THEN trans_flag = dbcsr_no_transpose ELSEIF (trans_flag == dbcsr_no_transpose) THEN trans_flag = dbcsr_transpose END IF END SUBROUTINE PURE_ARRAY_EQ FUNCTION array_eq_i(arr1, arr2) INTEGER, DIMENSION(:), INTENT(IN) :: arr1, arr2 LOGICAL :: array_eq_i #if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) array_eq_i = .NOT. libxsmm_diff(arr1, arr2) #else array_eq_i = .FALSE. IF (SIZE(arr1) .EQ. SIZE(arr2)) array_eq_i = ALL(arr1 == arr2) #endif END FUNCTION PURE_ARRAY_EQ FUNCTION array_eq_i8(arr1, arr2) INTEGER(KIND=int_8), DIMENSION(:), INTENT(IN) :: arr1, arr2 LOGICAL :: array_eq_i8 #if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) array_eq_i8 = .NOT. libxsmm_diff(arr1, arr2) #else array_eq_i8 = .FALSE. IF (SIZE(arr1) .EQ. SIZE(arr2)) array_eq_i8 = ALL(arr1 == arr2) #endif END FUNCTION END MODULE ================================================ FILE: src/tensors/PACKAGE ================================================ { "description": "block-sparse tensor framework on top of DBCSR", "archive": "libdbcsr", "requires": ["../base","../mpi", "../ops", "../", "../utils", "../tas", "../data", "../dist"] } ================================================ FILE: src/tensors/dbcsr_allocate_wrap.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_allocate_wrap !! Wrapper for allocating, copying and reshaping arrays. !! @todo: with fortran 2008 support, this should be replaced by plain ALLOCATE !! @note !! in particular ALLOCATE(..., SOURCE=...) does not work in gcc 5.4.0, see also !! https://gcc.gnu.org/bugzilla/show_bug.cgi?id=44672 !! @endnote #:include "dbcsr_tensor.fypp" #:set maxdim = fortran_max_ndim USE dbcsr_kinds, ONLY: ${uselist(dtype_float_prec)}$ #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE PUBLIC :: allocate_any INTERFACE allocate_any #:for dparam, dtype, dsuffix in dtype_all_list #:for dim in range(1, maxdim+1) MODULE PROCEDURE allocate_${dim}$d_${dsuffix}$ #:endfor #:endfor END INTERFACE CONTAINS #:for dparam, dtype, dsuffix in dtype_all_list #:for dim in range(1, maxdim+1) SUBROUTINE allocate_${dim}$d_${dsuffix}$ (array, shape_spec, source, order) !! Allocate array according to shape_spec. Possibly assign array from source. !! @note !! this does not fully replace Fortran RESHAPE intrinsic since source and target array must !! have same rank. !! @endnote ${dtype}$, DIMENSION(${shape_colon(dim)}$), ALLOCATABLE, INTENT(OUT) :: array !! target array. INTEGER, DIMENSION(${dim}$), INTENT(IN), OPTIONAL :: shape_spec !! shape of array to be allocated. If shape is not specified, it is derived from source. ${dtype}$, DIMENSION(${shape_colon(dim)}$), INTENT(IN), OPTIONAL :: source !! source array to be copied to target array, must have same rank as target array. INTEGER, DIMENSION(${dim}$), INTENT(IN), OPTIONAL :: order !! in which order to copy source to array (same convention as RESHAPE intrinsic). INTEGER, DIMENSION(${dim}$) :: shape_prv IF (PRESENT(shape_spec)) THEN IF (PRESENT(order)) THEN shape_prv(order) = shape_spec ELSE shape_prv = shape_spec END IF ELSEIF (PRESENT(source)) THEN IF (PRESENT(order)) THEN shape_prv(order) = SHAPE(source) ELSE shape_prv = SHAPE(source) END IF ELSE DBCSR_ABORT("either source or shape_spec must be present") END IF IF (PRESENT(source)) THEN IF (PRESENT(order)) THEN ALLOCATE (array(${arrlist("shape_prv", nmax=dim)}$)) array(${shape_colon(dim)}$) = RESHAPE(source, shape_prv, order=order) ELSE ALLOCATE (array(${arrlist("shape_prv", nmax=dim)}$), source=source) END IF ELSE ALLOCATE (array(${arrlist("shape_prv", nmax=dim)}$)) END IF END SUBROUTINE #:endfor #:endfor END MODULE ================================================ FILE: src/tensors/dbcsr_array_list_methods.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_array_list_methods !! Representation of arbitrary number of 1d integer arrays with arbitrary sizes. !! This is needed for generic handling of dimension-specific tensor quantities (such as block index). #:include "dbcsr_tensor.fypp" #:set maxdim = maxrank #:set ndims = range(2,maxdim+1) USE dbcsr_tensor_index, ONLY: dbcsr_t_inverse_order USE dbcsr_allocate_wrap, ONLY: allocate_any #include "base/dbcsr_base_uses.f90" #if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) USE libxsmm, ONLY: libxsmm_diff # define PURE_ARRAY_EQ #else # define PURE_ARRAY_EQ PURE #endif IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_array_list_methods' PUBLIC :: & array_eq_i, & array_list, & array_offsets, & array_sublist, & create_array_list, & destroy_array_list, & get_array_elements, & get_arrays, & get_ith_array, & number_of_arrays, & reorder_arrays, & sizes_of_arrays, & sum_of_arrays, & check_equal TYPE array_list INTEGER, DIMENSION(:), ALLOCATABLE :: col_data INTEGER, DIMENSION(:), ALLOCATABLE :: ptr END TYPE INTERFACE get_ith_array MODULE PROCEDURE allocate_and_get_ith_array MODULE PROCEDURE get_ith_array END INTERFACE CONTAINS PURE FUNCTION number_of_arrays(list) !! number of arrays stored in list TYPE(array_list), INTENT(IN) :: list INTEGER :: number_of_arrays number_of_arrays = SIZE(list%ptr) - 1 END FUNCTION number_of_arrays PURE FUNCTION get_array_elements(list, indices) !! Get an element for each array. TYPE(array_list), INTENT(IN) :: list INTEGER, DIMENSION(number_of_arrays(list)), INTENT(IN) :: indices !! element index for each array INTEGER, DIMENSION(number_of_arrays(list)) :: get_array_elements INTEGER :: i, ind DO i = 1, SIZE(indices) ind = indices(i) + list%ptr(i) - 1 get_array_elements(i) = list%col_data(ind) END DO END FUNCTION get_array_elements SUBROUTINE create_array_list(list, ndata, ${varlist("data")}$) !! collects any number of arrays of different sizes into a single array (list%col_data), !! storing the indices that start a new array (list%ptr). TYPE(array_list), INTENT(OUT) :: list !! list of arrays INTEGER, INTENT(IN) :: ndata !! number of arrays INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: ${varlist("data")}$ !! arrays 1 and 2 INTEGER :: ptr, size_all size_all = 0 #:for dim in range(1, maxdim+1) IF (ndata .GE. ${dim}$) THEN DBCSR_ASSERT(PRESENT(data_${dim}$)) size_all = size_all + SIZE(data_${dim}$) END IF #:endfor ALLOCATE (list%ptr(ndata + 1)) ALLOCATE (list%col_data(size_all)) ptr = 1 list%ptr(1) = ptr #:for dim in range(1, maxdim+1) IF (ndata .GE. ${dim}$) THEN list%col_data(ptr:ptr + SIZE(data_${dim}$) - 1) = data_${dim}$ (:) ptr = ptr + SIZE(data_${dim}$) list%ptr(${dim+1}$) = ptr END IF #:endfor END SUBROUTINE FUNCTION array_sublist(list, i_selected) !! extract a subset of arrays TYPE(array_list), INTENT(IN) :: list !! list of arrays INTEGER, DIMENSION(:), INTENT(IN) :: i_selected !! array numbers to retrieve TYPE(array_list) :: array_sublist INTEGER :: ndata INTEGER, ALLOCATABLE, DIMENSION(:) :: ${varlist("data")}$ ndata = SIZE(i_selected) #:for dim in range(1, maxdim+1) IF (ndata == ${dim}$) THEN CALL get_arrays(list, ${varlist("data", nmax=dim)}$, i_selected=i_selected) CALL create_array_list(array_sublist, ndata, ${varlist("data", nmax=dim)}$) END IF #:endfor END FUNCTION SUBROUTINE destroy_array_list(list) !! destroy array list. TYPE(array_list), INTENT(INOUT) :: list DEALLOCATE (list%ptr, list%col_data) END SUBROUTINE SUBROUTINE get_arrays(list, ${varlist("data")}$, i_selected) !! Get all arrays contained in list TYPE(array_list), INTENT(IN) :: list INTEGER, ALLOCATABLE, DIMENSION(:), INTENT(OUT), & OPTIONAL :: ${varlist("data")}$ !! arrays 1 and 2 INTEGER, DIMENSION(:), INTENT(IN), & OPTIONAL :: i_selected !! array numbers to retrieve (if not present, all arrays are returned) INTEGER :: i, ndata INTEGER, DIMENSION(number_of_arrays(list)) :: o o(:) = 0 IF (PRESENT(i_selected)) THEN ndata = SIZE(i_selected) o(1:ndata) = i_selected(:) ELSE ndata = number_of_arrays(list) o(1:ndata) = (/(i, i=1, ndata)/) END IF ASSOCIATE (ptr => list%ptr, col_data => list%col_data) #:for dim in range(1, maxdim+1) IF (ndata > ${dim-1}$) THEN CALL allocate_any(data_${dim}$, source=col_data(ptr(o(${dim}$)):ptr(o(${dim}$) + 1) - 1)) END IF #:endfor END ASSOCIATE END SUBROUTINE get_arrays SUBROUTINE get_ith_array(list, i, array_size, array) !! get ith array TYPE(array_list), INTENT(IN) :: list INTEGER, INTENT(IN) :: i INTEGER, INTENT(IN) :: array_size INTEGER, DIMENSION(array_size), INTENT(OUT) :: array ASSOCIATE (ptr => list%ptr, col_data => list%col_data) DBCSR_ASSERT(i <= number_of_arrays(list)) array(:) = col_data(ptr(i):ptr(i + 1) - 1) END ASSOCIATE END SUBROUTINE SUBROUTINE allocate_and_get_ith_array(list, i, array) !! get ith array TYPE(array_list), INTENT(IN) :: list INTEGER, INTENT(IN) :: i INTEGER, DIMENSION(:), ALLOCATABLE, INTENT(OUT) :: array ASSOCIATE (ptr => list%ptr, col_data => list%col_data) DBCSR_ASSERT(i <= number_of_arrays(list)) CALL allocate_any(array, source=col_data(ptr(i):ptr(i + 1) - 1)) END ASSOCIATE END SUBROUTINE FUNCTION sizes_of_arrays(list) !! sizes of arrays stored in list TYPE(array_list), INTENT(IN) :: list INTEGER, ALLOCATABLE, DIMENSION(:) :: sizes_of_arrays INTEGER :: i_data, num_data num_data = number_of_arrays(list) ALLOCATE (sizes_of_arrays(num_data)) DO i_data = 1, num_data sizes_of_arrays(i_data) = list%ptr(i_data + 1) - list%ptr(i_data) END DO END FUNCTION sizes_of_arrays FUNCTION sum_of_arrays(list) !! sum of all elements for each array stored in list TYPE(array_list), INTENT(IN) :: list INTEGER, ALLOCATABLE, DIMENSION(:) :: sum_of_arrays INTEGER :: i_data, num_data num_data = number_of_arrays(list) ALLOCATE (sum_of_arrays(num_data)) DO i_data = 1, num_data sum_of_arrays(i_data) = SUM(list%col_data(list%ptr(i_data):list%ptr(i_data + 1) - 1)) END DO END FUNCTION sum_of_arrays SUBROUTINE array_offsets(list_in, list_out) !! partial sums of array elements. TYPE(array_list), INTENT(IN) :: list_in TYPE(array_list), INTENT(OUT) :: list_out INTEGER :: i_data, i_ptr, num_data, partial_sum num_data = number_of_arrays(list_in) CALL allocate_any(list_out%ptr, source=list_in%ptr) ALLOCATE (list_out%col_data(SIZE(list_in%col_data))) DO i_data = 1, num_data partial_sum = 1 DO i_ptr = list_out%ptr(i_data), list_out%ptr(i_data + 1) - 1 list_out%col_data(i_ptr) = partial_sum partial_sum = partial_sum + list_in%col_data(i_ptr) END DO END DO END SUBROUTINE SUBROUTINE reorder_arrays(list_in, list_out, order) !! reorder array list. TYPE(array_list), INTENT(IN) :: list_in TYPE(array_list), INTENT(OUT) :: list_out INTEGER, ALLOCATABLE, DIMENSION(:) :: ${varlist("data")}$ INTEGER, DIMENSION(number_of_arrays(list_in)), & INTENT(IN) :: order #:for ndim in ndims IF (number_of_arrays(list_in) == ${ndim}$) THEN CALL get_arrays(list_in, ${varlist("data", nmax=ndim)}$, i_selected=dbcsr_t_inverse_order(order)) CALL create_array_list(list_out, number_of_arrays(list_in), & ${varlist("data", nmax=ndim)}$) END IF #:endfor END SUBROUTINE FUNCTION check_equal(list1, list2) !! check whether two array lists are equal TYPE(array_list), INTENT(IN) :: list1, list2 LOGICAL :: check_equal check_equal = array_eq_i(list1%col_data, list2%col_data) .AND. array_eq_i(list1%ptr, list2%ptr) END FUNCTION PURE_ARRAY_EQ FUNCTION array_eq_i(arr1, arr2) !! check whether two arrays are equal INTEGER, INTENT(IN), DIMENSION(:) :: arr1 INTEGER, INTENT(IN), DIMENSION(:) :: arr2 LOGICAL :: array_eq_i #if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) array_eq_i = .NOT. libxsmm_diff(arr1, arr2) #else array_eq_i = .FALSE. IF (SIZE(arr1) .EQ. SIZE(arr2)) array_eq_i = ALL(arr1 == arr2) #endif END FUNCTION END MODULE dbcsr_array_list_methods ================================================ FILE: src/tensors/dbcsr_tensor.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tensor !! DBCSR tensor framework for block-sparse tensor contraction. !! Representation of n-rank tensors as DBCSR tall-and-skinny matrices. !! Support for arbitrary redistribution between different representations. !! Support for arbitrary tensor contractions !! \todo implement checks and error messages #:include "dbcsr_tensor.fypp" #:set maxdim = maxrank #:set ndims = range(2,maxdim+1) USE dbcsr_allocate_wrap, ONLY: & allocate_any USE dbcsr_array_list_methods, ONLY: & get_arrays, reorder_arrays, get_ith_array, array_list, array_sublist, check_equal, array_eq_i, & create_array_list, destroy_array_list, sizes_of_arrays USE dbcsr_api, ONLY: & dbcsr_type, dbcsr_iterator_type, dbcsr_iterator_blocks_left, & dbcsr_iterator_next_block, dbcsr_iterator_start, dbcsr_iterator_stop, & dbcsr_transpose, dbcsr_no_transpose, dbcsr_scalar, dbcsr_put_block, & ${uselist(dtype_float_param)}$, dbcsr_clear, & dbcsr_release, dbcsr_desymmetrize, dbcsr_has_symmetry USE dbcsr_tas_types, ONLY: & dbcsr_tas_split_info USE dbcsr_tas_base, ONLY: & dbcsr_tas_copy, dbcsr_tas_finalize, dbcsr_tas_get_data_type, dbcsr_tas_get_info, dbcsr_tas_info USE dbcsr_tas_mm, ONLY: & dbcsr_tas_multiply, dbcsr_tas_batched_mm_init, dbcsr_tas_batched_mm_finalize, dbcsr_tas_result_index, & dbcsr_tas_batched_mm_complete, dbcsr_tas_set_batched_state USE dbcsr_tensor_block, ONLY: & dbcsr_t_iterator_type, dbcsr_t_get_block, dbcsr_t_put_block, dbcsr_t_iterator_start, & dbcsr_t_iterator_blocks_left, dbcsr_t_iterator_stop, dbcsr_t_iterator_next_block, & ndims_iterator, dbcsr_t_reserve_blocks, block_nd, destroy_block USE dbcsr_tensor_index, ONLY: & dbcsr_t_get_mapping_info, nd_to_2d_mapping, dbcsr_t_inverse_order, permute_index, get_nd_indices_tensor, & ndims_mapping_row, ndims_mapping_column, ndims_mapping USE dbcsr_tensor_types, ONLY: & dbcsr_t_create, dbcsr_t_get_data_type, dbcsr_t_type, ndims_tensor, dims_tensor, & dbcsr_t_distribution_type, dbcsr_t_distribution, dbcsr_t_nd_mp_comm, dbcsr_t_destroy, & dbcsr_t_distribution_destroy, dbcsr_t_distribution_new_expert, dbcsr_t_get_stored_coordinates, & blk_dims_tensor, dbcsr_t_hold, dbcsr_t_pgrid_type, mp_environ_pgrid, dbcsr_t_filter, & dbcsr_t_clear, dbcsr_t_finalize, dbcsr_t_get_num_blocks, dbcsr_t_scale, & dbcsr_t_get_num_blocks_total, dbcsr_t_get_info, ndims_matrix_row, ndims_matrix_column, & dbcsr_t_max_nblks_local, dbcsr_t_default_distvec, dbcsr_t_contraction_storage, dbcsr_t_nblks_total, & dbcsr_t_distribution_new, dbcsr_t_copy_contraction_storage, dbcsr_t_pgrid_destroy USE dbcsr_kinds, ONLY: & ${uselist(dtype_float_prec)}$, default_string_length, int_8, dp USE dbcsr_mpiwrap, ONLY: & mp_environ, mp_max, mp_comm_free, mp_cart_create, mp_sync, mp_comm_type USE dbcsr_toollib, ONLY: & sort USE dbcsr_tensor_reshape, ONLY: & dbcsr_t_reshape USE dbcsr_tas_split, ONLY: & dbcsr_tas_mp_comm, rowsplit, colsplit, dbcsr_tas_info_hold, dbcsr_tas_release_info, default_nsplit_accept_ratio, & default_pdims_accept_ratio, dbcsr_tas_create_split USE dbcsr_data_types, ONLY: & dbcsr_scalar_type USE dbcsr_tensor_split, ONLY: & dbcsr_t_split_copyback, dbcsr_t_make_compatible_blocks, dbcsr_t_crop USE dbcsr_tensor_io, ONLY: & dbcsr_t_write_tensor_info, dbcsr_t_write_tensor_dist, prep_output_unit, dbcsr_t_write_split_info USE dbcsr_dist_operations, ONLY: & checker_tr USE dbcsr_toollib, ONLY: & swap #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor' PUBLIC :: & dbcsr_t_contract, & dbcsr_t_copy, & dbcsr_t_get_block, & dbcsr_t_get_stored_coordinates, & dbcsr_t_inverse_order, & dbcsr_t_iterator_blocks_left, & dbcsr_t_iterator_next_block, & dbcsr_t_iterator_start, & dbcsr_t_iterator_stop, & dbcsr_t_iterator_type, & dbcsr_t_put_block, & dbcsr_t_reserve_blocks, & dbcsr_t_copy_matrix_to_tensor, & dbcsr_t_copy_tensor_to_matrix, & dbcsr_t_contract_index, & dbcsr_t_batched_contract_init, & dbcsr_t_batched_contract_finalize CONTAINS SUBROUTINE dbcsr_t_copy(tensor_in, tensor_out, order, summation, bounds, move_data, unit_nr) !! Copy tensor data. !! Redistributes tensor data according to distributions of target and source tensor. !! Permutes tensor index according to `order` argument (if present). !! Source and target tensor formats are arbitrary as long as the following requirements are met: !! * source and target tensors have the same rank and the same sizes in each dimension in terms !! of tensor elements (block sizes don't need to be the same). !! If `order` argument is present, sizes must match after index permutation. !! OR !! * target tensor is not yet created, in this case an exact copy of source tensor is returned. TYPE(dbcsr_t_type), INTENT(INOUT), TARGET :: tensor_in, tensor_out !! Source !! Target INTEGER, DIMENSION(ndims_tensor(tensor_in)), & INTENT(IN), OPTIONAL :: order !! Permutation of target tensor index. Exact same convention as order argument of RESHAPE intrinsic LOGICAL, INTENT(IN), OPTIONAL :: summation, move_data INTEGER, DIMENSION(2, ndims_tensor(tensor_in)), & INTENT(IN), OPTIONAL :: bounds !! crop tensor data: start and end index for each tensor dimension INTEGER, INTENT(IN), OPTIONAL :: unit_nr INTEGER :: handle CALL mp_sync(tensor_in%pgrid%mp_comm_2d) CALL timeset("dbcsr_t_total", handle) ! make sure that it is safe to use dbcsr_t_copy during a batched contraction CALL dbcsr_tas_batched_mm_complete(tensor_in%matrix_rep, warn=.TRUE.) CALL dbcsr_tas_batched_mm_complete(tensor_out%matrix_rep, warn=.TRUE.) CALL dbcsr_t_copy_expert(tensor_in, tensor_out, order, summation, bounds, move_data, unit_nr) CALL mp_sync(tensor_in%pgrid%mp_comm_2d) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_copy_expert(tensor_in, tensor_out, order, summation, bounds, move_data, unit_nr) !! expert routine for copying a tensor. For internal use only. TYPE(dbcsr_t_type), INTENT(INOUT), TARGET :: tensor_in, tensor_out INTEGER, DIMENSION(ndims_tensor(tensor_in)), & INTENT(IN), OPTIONAL :: order LOGICAL, INTENT(IN), OPTIONAL :: summation, move_data INTEGER, DIMENSION(2, ndims_tensor(tensor_in)), & INTENT(IN), OPTIONAL :: bounds INTEGER, INTENT(IN), OPTIONAL :: unit_nr TYPE(dbcsr_t_type), POINTER :: in_tmp_1, in_tmp_2, & in_tmp_3, out_tmp_1 INTEGER :: handle, unit_nr_prv INTEGER, DIMENSION(:), ALLOCATABLE :: map1_in_1, map1_in_2, map2_in_1, map2_in_2 CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_copy' LOGICAL :: dist_compatible_tas, dist_compatible_tensor, & summation_prv, new_in_1, new_in_2, & new_in_3, new_out_1, block_compatible, & move_prv TYPE(array_list) :: blk_sizes_in CALL timeset(routineN, handle) DBCSR_ASSERT(tensor_out%valid) unit_nr_prv = prep_output_unit(unit_nr) IF (PRESENT(move_data)) THEN move_prv = move_data ELSE move_prv = .FALSE. END IF dist_compatible_tas = .FALSE. dist_compatible_tensor = .FALSE. block_compatible = .FALSE. new_in_1 = .FALSE. new_in_2 = .FALSE. new_in_3 = .FALSE. new_out_1 = .FALSE. IF (PRESENT(summation)) THEN summation_prv = summation ELSE summation_prv = .FALSE. END IF IF (PRESENT(bounds)) THEN ALLOCATE (in_tmp_1) CALL dbcsr_t_crop(tensor_in, in_tmp_1, bounds=bounds, move_data=move_prv) new_in_1 = .TRUE. move_prv = .TRUE. ELSE in_tmp_1 => tensor_in END IF IF (PRESENT(order)) THEN CALL reorder_arrays(in_tmp_1%blk_sizes, blk_sizes_in, order=order) block_compatible = check_equal(blk_sizes_in, tensor_out%blk_sizes) ELSE block_compatible = check_equal(in_tmp_1%blk_sizes, tensor_out%blk_sizes) END IF IF (.NOT. block_compatible) THEN ALLOCATE (in_tmp_2, out_tmp_1) CALL dbcsr_t_make_compatible_blocks(in_tmp_1, tensor_out, in_tmp_2, out_tmp_1, order=order, & nodata2=.NOT. summation_prv, move_data=move_prv) new_in_2 = .TRUE.; new_out_1 = .TRUE. move_prv = .TRUE. ELSE in_tmp_2 => in_tmp_1 out_tmp_1 => tensor_out END IF IF (PRESENT(order)) THEN ALLOCATE (in_tmp_3) CALL dbcsr_t_permute_index(in_tmp_2, in_tmp_3, order) new_in_3 = .TRUE. ELSE in_tmp_3 => in_tmp_2 END IF ALLOCATE (map1_in_1(ndims_matrix_row(in_tmp_3))) ALLOCATE (map1_in_2(ndims_matrix_column(in_tmp_3))) CALL dbcsr_t_get_mapping_info(in_tmp_3%nd_index, map1_2d=map1_in_1, map2_2d=map1_in_2) ALLOCATE (map2_in_1(ndims_matrix_row(out_tmp_1))) ALLOCATE (map2_in_2(ndims_matrix_column(out_tmp_1))) CALL dbcsr_t_get_mapping_info(out_tmp_1%nd_index, map1_2d=map2_in_1, map2_2d=map2_in_2) IF (.NOT. PRESENT(order)) THEN IF (array_eq_i(map1_in_1, map2_in_1) .AND. array_eq_i(map1_in_2, map2_in_2)) THEN dist_compatible_tas = check_equal(in_tmp_3%nd_dist, out_tmp_1%nd_dist) ELSEIF (array_eq_i([map1_in_1, map1_in_2], [map2_in_1, map2_in_2])) THEN dist_compatible_tensor = check_equal(in_tmp_3%nd_dist, out_tmp_1%nd_dist) END IF END IF IF (dist_compatible_tas) THEN CALL dbcsr_tas_copy(out_tmp_1%matrix_rep, in_tmp_3%matrix_rep, summation) IF (move_prv) CALL dbcsr_t_clear(in_tmp_3) ELSEIF (dist_compatible_tensor) THEN CALL dbcsr_t_copy_nocomm(in_tmp_3, out_tmp_1, summation) IF (move_prv) CALL dbcsr_t_clear(in_tmp_3) ELSE CALL dbcsr_t_reshape(in_tmp_3, out_tmp_1, summation, move_data=move_prv) END IF IF (new_in_1) THEN CALL dbcsr_t_destroy(in_tmp_1) DEALLOCATE (in_tmp_1) END IF IF (new_in_2) THEN CALL dbcsr_t_destroy(in_tmp_2) DEALLOCATE (in_tmp_2) END IF IF (new_in_3) THEN CALL dbcsr_t_destroy(in_tmp_3) DEALLOCATE (in_tmp_3) END IF IF (new_out_1) THEN IF (unit_nr_prv /= 0) THEN CALL dbcsr_t_write_tensor_dist(out_tmp_1, unit_nr) END IF CALL dbcsr_t_split_copyback(out_tmp_1, tensor_out, summation) CALL dbcsr_t_destroy(out_tmp_1) DEALLOCATE (out_tmp_1) END IF CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_copy_nocomm(tensor_in, tensor_out, summation) !! copy without communication, requires that both tensors have same process grid and distribution TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_in TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_out LOGICAL, INTENT(IN), OPTIONAL :: summation !! Whether to sum matrices b = a + b TYPE(dbcsr_t_iterator_type) :: iter INTEGER, DIMENSION(ndims_tensor(tensor_in)) :: ind_nd INTEGER :: blk TYPE(block_nd) :: blk_data LOGICAL :: found CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_copy_nocomm' INTEGER :: handle CALL timeset(routineN, handle) DBCSR_ASSERT(tensor_out%valid) IF (PRESENT(summation)) THEN IF (.NOT. summation) CALL dbcsr_t_clear(tensor_out) ELSE CALL dbcsr_t_clear(tensor_out) END IF CALL dbcsr_t_reserve_blocks(tensor_in, tensor_out) CALL dbcsr_t_iterator_start(iter, tensor_in) DO WHILE (dbcsr_t_iterator_blocks_left(iter)) CALL dbcsr_t_iterator_next_block(iter, ind_nd, blk) CALL dbcsr_t_get_block(tensor_in, ind_nd, blk_data, found) DBCSR_ASSERT(found) CALL dbcsr_t_put_block(tensor_out, ind_nd, blk_data, summation=summation) CALL destroy_block(blk_data) END DO CALL dbcsr_t_iterator_stop(iter) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_copy_matrix_to_tensor(matrix_in, tensor_out, summation) !! copy matrix to tensor. TYPE(dbcsr_type), TARGET, INTENT(IN) :: matrix_in TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_out LOGICAL, INTENT(IN), OPTIONAL :: summation !! tensor_out = tensor_out + matrix_in TYPE(dbcsr_type), POINTER :: matrix_in_desym INTEGER, DIMENSION(2) :: ind_2d REAL(KIND=real_8), ALLOCATABLE, DIMENSION(:, :) :: block_arr REAL(KIND=real_8), DIMENSION(:, :), POINTER :: block TYPE(dbcsr_iterator_type) :: iter LOGICAL :: tr INTEGER :: handle CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_copy_matrix_to_tensor' CALL timeset(routineN, handle) DBCSR_ASSERT(tensor_out%valid) NULLIFY (block) IF (dbcsr_has_symmetry(matrix_in)) THEN ALLOCATE (matrix_in_desym) CALL dbcsr_desymmetrize(matrix_in, matrix_in_desym) ELSE matrix_in_desym => matrix_in END IF IF (PRESENT(summation)) THEN IF (.NOT. summation) CALL dbcsr_t_clear(tensor_out) ELSE CALL dbcsr_t_clear(tensor_out) END IF CALL dbcsr_t_reserve_blocks(matrix_in_desym, tensor_out) CALL dbcsr_iterator_start(iter, matrix_in_desym) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, ind_2d(1), ind_2d(2), block, tr) CALL allocate_any(block_arr, source=block) CALL dbcsr_t_put_block(tensor_out, ind_2d, SHAPE(block_arr), block_arr, summation=summation) DEALLOCATE (block_arr) END DO CALL dbcsr_iterator_stop(iter) IF (dbcsr_has_symmetry(matrix_in)) THEN CALL dbcsr_release(matrix_in_desym) DEALLOCATE (matrix_in_desym) END IF CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_copy_tensor_to_matrix(tensor_in, matrix_out, summation) !! copy tensor to matrix TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_in TYPE(dbcsr_type), INTENT(INOUT) :: matrix_out LOGICAL, INTENT(IN), OPTIONAL :: summation !! matrix_out = matrix_out + tensor_in TYPE(dbcsr_t_iterator_type) :: iter INTEGER :: blk, handle INTEGER, DIMENSION(2) :: ind_2d REAL(KIND=real_8), DIMENSION(:, :), ALLOCATABLE :: block CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_copy_tensor_to_matrix' LOGICAL :: found CALL timeset(routineN, handle) IF (PRESENT(summation)) THEN IF (.NOT. summation) CALL dbcsr_clear(matrix_out) ELSE CALL dbcsr_clear(matrix_out) END IF CALL dbcsr_t_reserve_blocks(tensor_in, matrix_out) CALL dbcsr_t_iterator_start(iter, tensor_in) DO WHILE (dbcsr_t_iterator_blocks_left(iter)) CALL dbcsr_t_iterator_next_block(iter, ind_2d, blk) IF (dbcsr_has_symmetry(matrix_out) .AND. checker_tr(ind_2d(1), ind_2d(2))) CYCLE CALL dbcsr_t_get_block(tensor_in, ind_2d, block, found) DBCSR_ASSERT(found) IF (dbcsr_has_symmetry(matrix_out) .AND. ind_2d(1) > ind_2d(2)) THEN CALL dbcsr_put_block(matrix_out, ind_2d(2), ind_2d(1), TRANSPOSE(block), summation=summation) ELSE CALL dbcsr_put_block(matrix_out, ind_2d(1), ind_2d(2), block, summation=summation) END IF DEALLOCATE (block) END DO CALL dbcsr_t_iterator_stop(iter) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_contract(alpha, tensor_1, tensor_2, beta, tensor_3, & contract_1, notcontract_1, & contract_2, notcontract_2, & map_1, map_2, & bounds_1, bounds_2, bounds_3, & optimize_dist, pgrid_opt_1, pgrid_opt_2, pgrid_opt_3, & filter_eps, flop, move_data, retain_sparsity, unit_nr, log_verbose) !! Contract tensors by multiplying matrix representations. !! tensor_3(map_1, map_2) := alpha * tensor_1(notcontract_1, contract_1) !! * tensor_2(contract_2, notcontract_2) !! + beta * tensor_3(map_1, map_2) !! !! @note !! note 1: block sizes of the corresponding indices need to be the same in all tensors. !! !! note 2: for best performance the tensors should have been created in matrix layouts !! compatible with the contraction, e.g. tensor_1 should have been created with either !! map1_2d == contract_1 and map2_2d == notcontract_1 or map1_2d == notcontract_1 and !! map2_2d == contract_1 (the same with tensor_2 and contract_2 / notcontract_2 and with !! tensor_3 and map_1 / map_2). !! Furthermore the two largest tensors involved in the contraction should map both to either !! tall or short matrices: the largest matrix dimension should be "on the same side" !! and should have identical distribution (which is always the case if the distributions were !! obtained with dbcsr_t_default_distvec). !! !! note 3: if the same tensor occurs in multiple contractions, a different tensor object should !! be created for each contraction and the data should be copied between the tensors by use of !! dbcsr_t_copy. If the same tensor object is used in multiple contractions, matrix layouts are !! not compatible for all contractions (see note 2). !! !! note 4: automatic optimizations are enabled by using the feature of batched contraction, see !! dbcsr_t_batched_contract_init, dbcsr_t_batched_contract_finalize. The arguments bounds_1, !! bounds_2, bounds_3 give the index ranges of the batches. !! @endnote TYPE(dbcsr_scalar_type), INTENT(IN) :: alpha TYPE(dbcsr_t_type), INTENT(INOUT), TARGET :: tensor_1 !! first tensor (in) TYPE(dbcsr_t_type), INTENT(INOUT), TARGET :: tensor_2 !! second tensor (in) TYPE(dbcsr_scalar_type), INTENT(IN) :: beta INTEGER, DIMENSION(:), INTENT(IN) :: contract_1 !! indices of tensor_1 to contract INTEGER, DIMENSION(:), INTENT(IN) :: contract_2 !! indices of tensor_2 to contract (1:1 with contract_1) INTEGER, DIMENSION(:), INTENT(IN) :: map_1 !! which indices of tensor_3 map to non-contracted indices of tensor_1 (1:1 with notcontract_1) INTEGER, DIMENSION(:), INTENT(IN) :: map_2 !! which indices of tensor_3 map to non-contracted indices of tensor_2 (1:1 with notcontract_2) INTEGER, DIMENSION(:), INTENT(IN) :: notcontract_1 !! indices of tensor_1 not to contract INTEGER, DIMENSION(:), INTENT(IN) :: notcontract_2 !! indices of tensor_2 not to contract TYPE(dbcsr_t_type), INTENT(INOUT), TARGET :: tensor_3 !! contracted tensor (out) INTEGER, DIMENSION(2, SIZE(contract_1)), & INTENT(IN), OPTIONAL :: bounds_1 !! bounds corresponding to contract_1 AKA contract_2: start and end index of an index range over !! which to contract. For use in batched contraction. INTEGER, DIMENSION(2, SIZE(notcontract_1)), & INTENT(IN), OPTIONAL :: bounds_2 !! bounds corresponding to notcontract_1: start and end index of an index range. !! For use in batched contraction. INTEGER, DIMENSION(2, SIZE(notcontract_2)), & INTENT(IN), OPTIONAL :: bounds_3 !! bounds corresponding to notcontract_2: start and end index of an index range. !! For use in batched contraction. LOGICAL, INTENT(IN), OPTIONAL :: optimize_dist !! Whether distribution should be optimized internally. In the current implementation this guarantees optimal parameters !! only for dense matrices. TYPE(dbcsr_t_pgrid_type), INTENT(OUT), & POINTER, OPTIONAL :: pgrid_opt_1 !! Optionally return optimal process grid for tensor_1. This can be used to choose optimal process grids for subsequent !! tensor contractions with tensors of similar shape and sparsity. Under some conditions, pgrid_opt_1 can not be returned, !! in this case the pointer is not associated. TYPE(dbcsr_t_pgrid_type), INTENT(OUT), & POINTER, OPTIONAL :: pgrid_opt_2 !! Optionally return optimal process grid for tensor_2. TYPE(dbcsr_t_pgrid_type), INTENT(OUT), & POINTER, OPTIONAL :: pgrid_opt_3 !! Optionally return optimal process grid for tensor_3. REAL(KIND=real_8), INTENT(IN), OPTIONAL :: filter_eps !! As in DBCSR mm INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL :: flop !! As in DBCSR mm LOGICAL, INTENT(IN), OPTIONAL :: move_data !! memory optimization: transfer data such that tensor_1 and tensor_2 are empty on return LOGICAL, INTENT(IN), OPTIONAL :: retain_sparsity !! enforce the sparsity pattern of the existing tensor_3; default is no INTEGER, OPTIONAL, INTENT(IN) :: unit_nr !! output unit for logging !! set it to -1 on ranks that should not write (and any valid unit number on ranks that should write output) !! if 0 on ALL ranks, no output is written LOGICAL, INTENT(IN), OPTIONAL :: log_verbose !! verbose logging (for testing only) INTEGER :: handle CALL mp_sync(tensor_1%pgrid%mp_comm_2d) CALL timeset("dbcsr_t_total", handle) CALL dbcsr_t_contract_expert(alpha, tensor_1, tensor_2, beta, tensor_3, & contract_1, notcontract_1, & contract_2, notcontract_2, & map_1, map_2, & bounds_1=bounds_1, & bounds_2=bounds_2, & bounds_3=bounds_3, & optimize_dist=optimize_dist, & pgrid_opt_1=pgrid_opt_1, & pgrid_opt_2=pgrid_opt_2, & pgrid_opt_3=pgrid_opt_3, & filter_eps=filter_eps, & flop=flop, & move_data=move_data, & retain_sparsity=retain_sparsity, & unit_nr=unit_nr, & log_verbose=log_verbose) CALL mp_sync(tensor_1%pgrid%mp_comm_2d) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_contract_expert(alpha, tensor_1, tensor_2, beta, tensor_3, & contract_1, notcontract_1, & contract_2, notcontract_2, & map_1, map_2, & bounds_1, bounds_2, bounds_3, & optimize_dist, pgrid_opt_1, pgrid_opt_2, pgrid_opt_3, & filter_eps, flop, move_data, retain_sparsity, & nblks_local, result_index, unit_nr, log_verbose) !! expert routine for tensor contraction. For internal use only. TYPE(dbcsr_scalar_type), INTENT(IN) :: alpha TYPE(dbcsr_t_type), INTENT(INOUT), TARGET :: tensor_1 TYPE(dbcsr_t_type), INTENT(INOUT), TARGET :: tensor_2 TYPE(dbcsr_scalar_type), INTENT(IN) :: beta INTEGER, DIMENSION(:), INTENT(IN) :: contract_1 INTEGER, DIMENSION(:), INTENT(IN) :: contract_2 INTEGER, DIMENSION(:), INTENT(IN) :: map_1 INTEGER, DIMENSION(:), INTENT(IN) :: map_2 INTEGER, DIMENSION(:), INTENT(IN) :: notcontract_1 INTEGER, DIMENSION(:), INTENT(IN) :: notcontract_2 TYPE(dbcsr_t_type), INTENT(INOUT), TARGET :: tensor_3 INTEGER, DIMENSION(2, SIZE(contract_1)), & INTENT(IN), OPTIONAL :: bounds_1 INTEGER, DIMENSION(2, SIZE(notcontract_1)), & INTENT(IN), OPTIONAL :: bounds_2 INTEGER, DIMENSION(2, SIZE(notcontract_2)), & INTENT(IN), OPTIONAL :: bounds_3 LOGICAL, INTENT(IN), OPTIONAL :: optimize_dist TYPE(dbcsr_t_pgrid_type), INTENT(OUT), & POINTER, OPTIONAL :: pgrid_opt_1 TYPE(dbcsr_t_pgrid_type), INTENT(OUT), & POINTER, OPTIONAL :: pgrid_opt_2 TYPE(dbcsr_t_pgrid_type), INTENT(OUT), & POINTER, OPTIONAL :: pgrid_opt_3 REAL(KIND=real_8), INTENT(IN), OPTIONAL :: filter_eps INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL :: flop LOGICAL, INTENT(IN), OPTIONAL :: move_data LOGICAL, INTENT(IN), OPTIONAL :: retain_sparsity INTEGER, INTENT(OUT), OPTIONAL :: nblks_local !! number of local blocks on this MPI rank INTEGER, DIMENSION(dbcsr_t_max_nblks_local(tensor_3), ndims_tensor(tensor_3)), & OPTIONAL, INTENT(OUT) :: result_index !! get indices of non-zero tensor blocks for tensor_3 without actually performing contraction !! this is an estimate based on block norm multiplication INTEGER, OPTIONAL, INTENT(IN) :: unit_nr LOGICAL, INTENT(IN), OPTIONAL :: log_verbose TYPE(dbcsr_t_type), POINTER :: tensor_contr_1, tensor_contr_2, tensor_contr_3 TYPE(dbcsr_t_type), TARGET :: tensor_algn_1, tensor_algn_2, tensor_algn_3 TYPE(dbcsr_t_type), POINTER :: tensor_crop_1, tensor_crop_2 TYPE(dbcsr_t_type), POINTER :: tensor_small, tensor_large INTEGER(int_8), DIMENSION(:, :), ALLOCATABLE :: result_index_2d LOGICAL :: assert_stmt, tensors_remapped INTEGER :: data_type, max_mm_dim, max_tensor, & iblk, nblk, unit_nr_prv, ref_tensor, & handle INTEGER, DIMENSION(SIZE(contract_1)) :: contract_1_mod INTEGER, DIMENSION(SIZE(notcontract_1)) :: notcontract_1_mod INTEGER, DIMENSION(SIZE(contract_2)) :: contract_2_mod INTEGER, DIMENSION(SIZE(notcontract_2)) :: notcontract_2_mod INTEGER, DIMENSION(SIZE(map_1)) :: map_1_mod INTEGER, DIMENSION(SIZE(map_2)) :: map_2_mod CHARACTER(LEN=1) :: trans_1, trans_2, trans_3 LOGICAL :: new_1, new_2, new_3, move_data_1, move_data_2 INTEGER :: ndims1, ndims2, ndims3 INTEGER :: occ_1, occ_2 INTEGER, DIMENSION(:), ALLOCATABLE :: dims1, dims2, dims3 CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_contract' CHARACTER(LEN=1), DIMENSION(:), ALLOCATABLE :: indchar1, indchar2, indchar3, indchar1_mod, & indchar2_mod, indchar3_mod CHARACTER(LEN=1), DIMENSION(15) :: alph = & ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o'] INTEGER, DIMENSION(2, ndims_tensor(tensor_1)) :: bounds_t1 INTEGER, DIMENSION(2, ndims_tensor(tensor_2)) :: bounds_t2 LOGICAL :: do_crop_1, do_crop_2, do_write_3, nodata_3, do_batched, pgrid_changed, & pgrid_changed_any, do_change_pgrid(2) TYPE(dbcsr_tas_split_info) :: split_opt, split, split_opt_avg INTEGER, DIMENSION(2) :: pdims_2d_opt, pdims_2d, pcoord_2d, pdims_sub, pdims_sub_opt LOGICAL, DIMENSION(2) :: periods_2d REAL(real_8) :: pdim_ratio, pdim_ratio_opt TYPE(mp_comm_type) :: mp_comm, mp_comm_opt NULLIFY (tensor_contr_1, tensor_contr_2, tensor_contr_3, tensor_crop_1, tensor_crop_2, & tensor_small) CALL timeset(routineN, handle) DBCSR_ASSERT(tensor_1%valid) DBCSR_ASSERT(tensor_2%valid) DBCSR_ASSERT(tensor_3%valid) assert_stmt = SIZE(contract_1) .EQ. SIZE(contract_2) DBCSR_ASSERT(assert_stmt) assert_stmt = SIZE(map_1) .EQ. SIZE(notcontract_1) DBCSR_ASSERT(assert_stmt) assert_stmt = SIZE(map_2) .EQ. SIZE(notcontract_2) DBCSR_ASSERT(assert_stmt) assert_stmt = SIZE(notcontract_1) + SIZE(contract_1) .EQ. ndims_tensor(tensor_1) DBCSR_ASSERT(assert_stmt) assert_stmt = SIZE(notcontract_2) + SIZE(contract_2) .EQ. ndims_tensor(tensor_2) DBCSR_ASSERT(assert_stmt) assert_stmt = SIZE(map_1) + SIZE(map_2) .EQ. ndims_tensor(tensor_3) DBCSR_ASSERT(assert_stmt) assert_stmt = dbcsr_t_get_data_type(tensor_1) .EQ. dbcsr_t_get_data_type(tensor_2) DBCSR_ASSERT(assert_stmt) unit_nr_prv = prep_output_unit(unit_nr) IF (PRESENT(flop)) flop = 0 IF (PRESENT(result_index)) result_index = 0 IF (PRESENT(nblks_local)) nblks_local = 0 IF (PRESENT(move_data)) THEN move_data_1 = move_data move_data_2 = move_data ELSE move_data_1 = .FALSE. move_data_2 = .FALSE. END IF nodata_3 = .TRUE. IF (PRESENT(retain_sparsity)) THEN IF (retain_sparsity) nodata_3 = .FALSE. END IF CALL dbcsr_t_map_bounds_to_tensors(tensor_1, tensor_2, & contract_1, notcontract_1, & contract_2, notcontract_2, & bounds_t1, bounds_t2, & bounds_1=bounds_1, bounds_2=bounds_2, bounds_3=bounds_3, & do_crop_1=do_crop_1, do_crop_2=do_crop_2) IF (do_crop_1) THEN ALLOCATE (tensor_crop_1) CALL dbcsr_t_crop(tensor_1, tensor_crop_1, bounds_t1, move_data=move_data_1) move_data_1 = .TRUE. ELSE tensor_crop_1 => tensor_1 END IF IF (do_crop_2) THEN ALLOCATE (tensor_crop_2) CALL dbcsr_t_crop(tensor_2, tensor_crop_2, bounds_t2, move_data=move_data_2) move_data_2 = .TRUE. ELSE tensor_crop_2 => tensor_2 END IF ! shortcut for empty tensors ! this is needed to avoid unnecessary work in case user contracts different portions of a ! tensor consecutively to save memory mp_comm = tensor_crop_1%pgrid%mp_comm_2d occ_1 = dbcsr_t_get_num_blocks(tensor_crop_1) CALL mp_max(occ_1, mp_comm) occ_2 = dbcsr_t_get_num_blocks(tensor_crop_2) CALL mp_max(occ_2, mp_comm) IF (occ_1 == 0 .OR. occ_2 == 0) THEN CALL dbcsr_t_scale(tensor_3, beta) IF (do_crop_1) THEN CALL dbcsr_t_destroy(tensor_crop_1) DEALLOCATE (tensor_crop_1) END IF IF (do_crop_2) THEN CALL dbcsr_t_destroy(tensor_crop_2) DEALLOCATE (tensor_crop_2) END IF CALL timestop(handle) RETURN END IF IF (unit_nr_prv /= 0) THEN IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, '(A)') repeat("-", 80) WRITE (unit_nr_prv, '(A,1X,A,1X,A,1X,A,1X,A,1X,A)') "DBCSR TENSOR CONTRACTION:", & TRIM(tensor_crop_1%name), 'x', TRIM(tensor_crop_2%name), '=', TRIM(tensor_3%name) WRITE (unit_nr_prv, '(A)') repeat("-", 80) END IF CALL dbcsr_t_write_tensor_info(tensor_crop_1, unit_nr_prv, full_info=log_verbose) CALL dbcsr_t_write_tensor_dist(tensor_crop_1, unit_nr_prv) CALL dbcsr_t_write_tensor_info(tensor_crop_2, unit_nr_prv, full_info=log_verbose) CALL dbcsr_t_write_tensor_dist(tensor_crop_2, unit_nr_prv) END IF data_type = dbcsr_t_get_data_type(tensor_crop_1) ! align tensor index with data, tensor data is not modified ndims1 = ndims_tensor(tensor_crop_1) ndims2 = ndims_tensor(tensor_crop_2) ndims3 = ndims_tensor(tensor_3) ALLOCATE (indchar1(ndims1), indchar1_mod(ndims1)) ALLOCATE (indchar2(ndims2), indchar2_mod(ndims2)) ALLOCATE (indchar3(ndims3), indchar3_mod(ndims3)) ! labeling tensor index with letters indchar1([notcontract_1, contract_1]) = alph(1:ndims1) ! arb. choice indchar2(notcontract_2) = alph(ndims1 + 1:ndims1 + SIZE(notcontract_2)) ! arb. choice indchar2(contract_2) = indchar1(contract_1) indchar3(map_1) = indchar1(notcontract_1) indchar3(map_2) = indchar2(notcontract_2) IF (unit_nr_prv /= 0) CALL dbcsr_t_print_contraction_index(tensor_crop_1, indchar1, & tensor_crop_2, indchar2, & tensor_3, indchar3, unit_nr_prv) IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, '(T2,A)') "aligning tensor index with data" END IF CALL align_tensor(tensor_crop_1, contract_1, notcontract_1, & tensor_algn_1, contract_1_mod, notcontract_1_mod, indchar1, indchar1_mod) CALL align_tensor(tensor_crop_2, contract_2, notcontract_2, & tensor_algn_2, contract_2_mod, notcontract_2_mod, indchar2, indchar2_mod) CALL align_tensor(tensor_3, map_1, map_2, & tensor_algn_3, map_1_mod, map_2_mod, indchar3, indchar3_mod) IF (unit_nr_prv /= 0) CALL dbcsr_t_print_contraction_index(tensor_algn_1, indchar1_mod, & tensor_algn_2, indchar2_mod, & tensor_algn_3, indchar3_mod, unit_nr_prv) ALLOCATE (dims1(ndims1)) ALLOCATE (dims2(ndims2)) ALLOCATE (dims3(ndims3)) ! ideally we should consider block sizes and occupancy to measure tensor sizes but current solution should work for most ! cases and is more elegant. Note that we can not easily consider occupancy since it is unknown for result tensor CALL blk_dims_tensor(tensor_crop_1, dims1) CALL blk_dims_tensor(tensor_crop_2, dims2) CALL blk_dims_tensor(tensor_3, dims3) max_mm_dim = MAXLOC([PRODUCT(INT(dims1(notcontract_1), int_8)), & PRODUCT(INT(dims1(contract_1), int_8)), & PRODUCT(INT(dims2(notcontract_2), int_8))], DIM=1) max_tensor = MAXLOC([PRODUCT(INT(dims1, int_8)), PRODUCT(INT(dims2, int_8)), PRODUCT(INT(dims3, int_8))], DIM=1) SELECT CASE (max_mm_dim) CASE (1) IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, '(T2,A)') "large tensors: 1, 3; small tensor: 2" WRITE (unit_nr_prv, '(T2,A)') "sorting contraction indices" END IF CALL index_linked_sort(contract_1_mod, contract_2_mod) CALL index_linked_sort(map_2_mod, notcontract_2_mod) SELECT CASE (max_tensor) CASE (1) CALL index_linked_sort(notcontract_1_mod, map_1_mod) CASE (3) CALL index_linked_sort(map_1_mod, notcontract_1_mod) CASE DEFAULT DBCSR_ABORT("should not happen") END SELECT CALL reshape_mm_compatible(tensor_algn_1, tensor_algn_3, tensor_contr_1, tensor_contr_3, & contract_1_mod, notcontract_1_mod, map_2_mod, map_1_mod, & trans_1, trans_3, new_1, new_3, ref_tensor, nodata2=nodata_3, optimize_dist=optimize_dist, & move_data_1=move_data_1, unit_nr=unit_nr_prv) CALL reshape_mm_small(tensor_algn_2, contract_2_mod, notcontract_2_mod, tensor_contr_2, trans_2, & new_2, move_data=move_data_2, unit_nr=unit_nr_prv) SELECT CASE (ref_tensor) CASE (1) tensor_large => tensor_contr_1 CASE (2) tensor_large => tensor_contr_3 END SELECT tensor_small => tensor_contr_2 CASE (2) IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, '(T2,A)') "large tensors: 1, 2; small tensor: 3" WRITE (unit_nr_prv, '(T2,A)') "sorting contraction indices" END IF CALL index_linked_sort(notcontract_1_mod, map_1_mod) CALL index_linked_sort(notcontract_2_mod, map_2_mod) SELECT CASE (max_tensor) CASE (1) CALL index_linked_sort(contract_1_mod, contract_2_mod) CASE (2) CALL index_linked_sort(contract_2_mod, contract_1_mod) CASE DEFAULT DBCSR_ABORT("should not happen") END SELECT CALL reshape_mm_compatible(tensor_algn_1, tensor_algn_2, tensor_contr_1, tensor_contr_2, & notcontract_1_mod, contract_1_mod, notcontract_2_mod, contract_2_mod, & trans_1, trans_2, new_1, new_2, ref_tensor, optimize_dist=optimize_dist, & move_data_1=move_data_1, move_data_2=move_data_2, unit_nr=unit_nr_prv) CALL invert_transpose_flag(trans_1) CALL reshape_mm_small(tensor_algn_3, map_1_mod, map_2_mod, tensor_contr_3, trans_3, & new_3, nodata=nodata_3, unit_nr=unit_nr_prv) SELECT CASE (ref_tensor) CASE (1) tensor_large => tensor_contr_1 CASE (2) tensor_large => tensor_contr_2 END SELECT tensor_small => tensor_contr_3 CASE (3) IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, '(T2,A)') "large tensors: 2, 3; small tensor: 1" WRITE (unit_nr_prv, '(T2,A)') "sorting contraction indices" END IF CALL index_linked_sort(map_1_mod, notcontract_1_mod) CALL index_linked_sort(contract_2_mod, contract_1_mod) SELECT CASE (max_tensor) CASE (2) CALL index_linked_sort(notcontract_2_mod, map_2_mod) CASE (3) CALL index_linked_sort(map_2_mod, notcontract_2_mod) CASE DEFAULT DBCSR_ABORT("should not happen") END SELECT CALL reshape_mm_compatible(tensor_algn_2, tensor_algn_3, tensor_contr_2, tensor_contr_3, & contract_2_mod, notcontract_2_mod, map_1_mod, map_2_mod, & trans_2, trans_3, new_2, new_3, ref_tensor, nodata2=nodata_3, optimize_dist=optimize_dist, & move_data_1=move_data_2, unit_nr=unit_nr_prv) CALL invert_transpose_flag(trans_2) CALL invert_transpose_flag(trans_3) CALL reshape_mm_small(tensor_algn_1, notcontract_1_mod, contract_1_mod, tensor_contr_1, & trans_1, new_1, move_data=move_data_1, unit_nr=unit_nr_prv) SELECT CASE (ref_tensor) CASE (1) tensor_large => tensor_contr_2 CASE (2) tensor_large => tensor_contr_3 END SELECT tensor_small => tensor_contr_1 END SELECT IF (unit_nr_prv /= 0) CALL dbcsr_t_print_contraction_index(tensor_contr_1, indchar1_mod, & tensor_contr_2, indchar2_mod, & tensor_contr_3, indchar3_mod, unit_nr_prv) IF (unit_nr_prv /= 0) THEN IF (new_1) CALL dbcsr_t_write_tensor_info(tensor_contr_1, unit_nr_prv, full_info=log_verbose) IF (new_1) CALL dbcsr_t_write_tensor_dist(tensor_contr_1, unit_nr_prv) IF (new_2) CALL dbcsr_t_write_tensor_info(tensor_contr_2, unit_nr_prv, full_info=log_verbose) IF (new_2) CALL dbcsr_t_write_tensor_dist(tensor_contr_2, unit_nr_prv) END IF IF (.NOT. PRESENT(result_index)) THEN CALL dbcsr_tas_multiply(trans_1, trans_2, trans_3, alpha, & tensor_contr_1%matrix_rep, tensor_contr_2%matrix_rep, & beta, & tensor_contr_3%matrix_rep, filter_eps=filter_eps, flop=flop, & unit_nr=unit_nr_prv, log_verbose=log_verbose, & split_opt=split_opt, & move_data_a=move_data_1, move_data_b=move_data_2, retain_sparsity=retain_sparsity) ELSE CALL dbcsr_tas_result_index(trans_1, trans_2, trans_3, tensor_contr_1%matrix_rep, tensor_contr_2%matrix_rep, & tensor_contr_3%matrix_rep, filter_eps=filter_eps, blk_ind=result_index_2d) nblk = SIZE(result_index_2d, 1) IF (PRESENT(nblks_local)) nblks_local = nblk IF (SIZE(result_index, 1) < nblk) THEN CALL dbcsr_abort(__LOCATION__, & "allocated size of `result_index` is too small. This error occurs due to a high load imbalance of distributed tensor data.") END IF DO iblk = 1, nblk result_index(iblk, :) = get_nd_indices_tensor(tensor_contr_3%nd_index_blk, result_index_2d(iblk, :)) END DO IF (new_1) THEN CALL dbcsr_t_destroy(tensor_contr_1) DEALLOCATE (tensor_contr_1) END IF IF (new_2) THEN CALL dbcsr_t_destroy(tensor_contr_2) DEALLOCATE (tensor_contr_2) END IF IF (new_3) THEN CALL dbcsr_t_destroy(tensor_contr_3) DEALLOCATE (tensor_contr_3) END IF IF (do_crop_1) THEN CALL dbcsr_t_destroy(tensor_crop_1) DEALLOCATE (tensor_crop_1) END IF IF (do_crop_2) THEN CALL dbcsr_t_destroy(tensor_crop_2) DEALLOCATE (tensor_crop_2) END IF CALL dbcsr_t_destroy(tensor_algn_1) CALL dbcsr_t_destroy(tensor_algn_2) CALL dbcsr_t_destroy(tensor_algn_3) CALL timestop(handle) RETURN END IF IF (PRESENT(pgrid_opt_1)) THEN IF (.NOT. new_1) THEN ALLOCATE (pgrid_opt_1) pgrid_opt_1 = opt_pgrid(tensor_1, split_opt) END IF END IF IF (PRESENT(pgrid_opt_2)) THEN IF (.NOT. new_2) THEN ALLOCATE (pgrid_opt_2) pgrid_opt_2 = opt_pgrid(tensor_2, split_opt) END IF END IF IF (PRESENT(pgrid_opt_3)) THEN IF (.NOT. new_3) THEN ALLOCATE (pgrid_opt_3) pgrid_opt_3 = opt_pgrid(tensor_3, split_opt) END IF END IF do_batched = tensor_small%matrix_rep%do_batched > 0 tensors_remapped = .FALSE. IF (new_1 .OR. new_2 .OR. new_3) tensors_remapped = .TRUE. IF (tensors_remapped .AND. do_batched) THEN CALL dbcsr_warn(__LOCATION__, & "Internal process grid optimization disabled because tensors are not in contraction-compatible format") END IF CALL mp_environ(tensor_large%pgrid%mp_comm_2d, 2, pdims_2d, pcoord_2d, periods_2d) ! optimize process grid during batched contraction do_change_pgrid(:) = .FALSE. IF ((.NOT. tensors_remapped) .AND. do_batched) THEN ASSOCIATE (storage => tensor_small%contraction_storage) DBCSR_ASSERT(storage%static) split = dbcsr_tas_info(tensor_large%matrix_rep) do_change_pgrid(:) = & update_contraction_storage(storage, split_opt, split) IF (ANY(do_change_pgrid)) THEN mp_comm_opt = dbcsr_tas_mp_comm(tensor_small%pgrid%mp_comm_2d, split_opt%split_rowcol, NINT(storage%nsplit_avg)) CALL dbcsr_tas_create_split(split_opt_avg, mp_comm_opt, split_opt%split_rowcol, & NINT(storage%nsplit_avg), own_comm=.TRUE.) CALL mp_environ(split_opt_avg%mp_comm, 2, pdims_2d_opt, pcoord_2d, periods_2d) END IF END ASSOCIATE IF (do_change_pgrid(1) .AND. .NOT. do_change_pgrid(2)) THEN ! check if new grid has better subgrid, if not there is no need to change process grid CALL mp_environ(split_opt_avg%mp_comm_group, 2, pdims_sub_opt, pcoord_2d, periods_2d) CALL mp_environ(split%mp_comm_group, 2, pdims_sub, pcoord_2d, periods_2d) pdim_ratio = MAXVAL(REAL(pdims_sub, real_8))/MINVAL(pdims_sub) pdim_ratio_opt = MAXVAL(REAL(pdims_sub_opt, real_8))/MINVAL(pdims_sub_opt) IF (pdim_ratio/pdim_ratio_opt <= default_pdims_accept_ratio**2) THEN do_change_pgrid(1) = .FALSE. CALL dbcsr_tas_release_info(split_opt_avg) END IF END IF END IF IF (unit_nr_prv /= 0) THEN do_write_3 = .TRUE. IF (tensor_contr_3%matrix_rep%do_batched > 0) THEN IF (tensor_contr_3%matrix_rep%mm_storage%batched_out) do_write_3 = .FALSE. END IF IF (do_write_3) THEN CALL dbcsr_t_write_tensor_info(tensor_contr_3, unit_nr_prv, full_info=log_verbose) CALL dbcsr_t_write_tensor_dist(tensor_contr_3, unit_nr_prv) END IF END IF IF (new_3) THEN ! need redistribute if we created new tensor for tensor 3 CALL dbcsr_t_scale(tensor_algn_3, beta) CALL dbcsr_t_copy_expert(tensor_contr_3, tensor_algn_3, summation=.TRUE., move_data=.TRUE.) IF (PRESENT(filter_eps)) CALL dbcsr_t_filter(tensor_algn_3, filter_eps) ! tensor_3 automatically has correct data because tensor_algn_3 contains a matrix ! pointer to data of tensor_3 END IF ! transfer contraction storage CALL dbcsr_t_copy_contraction_storage(tensor_contr_1, tensor_1) CALL dbcsr_t_copy_contraction_storage(tensor_contr_2, tensor_2) CALL dbcsr_t_copy_contraction_storage(tensor_contr_3, tensor_3) IF (unit_nr_prv /= 0) THEN IF (new_3 .AND. do_write_3) CALL dbcsr_t_write_tensor_info(tensor_3, unit_nr_prv, full_info=log_verbose) IF (new_3 .AND. do_write_3) CALL dbcsr_t_write_tensor_dist(tensor_3, unit_nr_prv) END IF CALL dbcsr_t_destroy(tensor_algn_1) CALL dbcsr_t_destroy(tensor_algn_2) CALL dbcsr_t_destroy(tensor_algn_3) IF (do_crop_1) THEN CALL dbcsr_t_destroy(tensor_crop_1) DEALLOCATE (tensor_crop_1) END IF IF (do_crop_2) THEN CALL dbcsr_t_destroy(tensor_crop_2) DEALLOCATE (tensor_crop_2) END IF IF (new_1) THEN CALL dbcsr_t_destroy(tensor_contr_1) DEALLOCATE (tensor_contr_1) END IF IF (new_2) THEN CALL dbcsr_t_destroy(tensor_contr_2) DEALLOCATE (tensor_contr_2) END IF IF (new_3) THEN CALL dbcsr_t_destroy(tensor_contr_3) DEALLOCATE (tensor_contr_3) END IF IF (PRESENT(move_data)) THEN IF (move_data) THEN CALL dbcsr_t_clear(tensor_1) CALL dbcsr_t_clear(tensor_2) END IF END IF IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, '(A)') repeat("-", 80) WRITE (unit_nr_prv, '(A)') "TENSOR CONTRACTION DONE" WRITE (unit_nr_prv, '(A)') repeat("-", 80) END IF IF (ANY(do_change_pgrid)) THEN pgrid_changed_any = .FALSE. SELECT CASE (max_mm_dim) CASE (1) IF (ALLOCATED(tensor_1%contraction_storage) .AND. ALLOCATED(tensor_3%contraction_storage)) THEN CALL dbcsr_t_change_pgrid_2d(tensor_1, tensor_1%pgrid%mp_comm_2d, pdims=pdims_2d_opt, & nsplit=split_opt_avg%ngroup, dimsplit=split_opt_avg%split_rowcol, & pgrid_changed=pgrid_changed, & unit_nr=unit_nr_prv) IF (pgrid_changed) pgrid_changed_any = .TRUE. CALL dbcsr_t_change_pgrid_2d(tensor_3, tensor_3%pgrid%mp_comm_2d, pdims=pdims_2d_opt, & nsplit=split_opt_avg%ngroup, dimsplit=split_opt_avg%split_rowcol, & pgrid_changed=pgrid_changed, & unit_nr=unit_nr_prv) IF (pgrid_changed) pgrid_changed_any = .TRUE. END IF IF (pgrid_changed_any) THEN IF (tensor_2%matrix_rep%do_batched == 3) THEN ! set flag that process grid has been optimized to make sure that no grid optimizations are done ! in TAS multiply algorithm CALL dbcsr_tas_batched_mm_complete(tensor_2%matrix_rep) END IF END IF CASE (2) IF (ALLOCATED(tensor_1%contraction_storage) .AND. ALLOCATED(tensor_2%contraction_storage)) THEN CALL dbcsr_t_change_pgrid_2d(tensor_1, tensor_1%pgrid%mp_comm_2d, pdims=pdims_2d_opt, & nsplit=split_opt_avg%ngroup, dimsplit=split_opt_avg%split_rowcol, & pgrid_changed=pgrid_changed, & unit_nr=unit_nr_prv) IF (pgrid_changed) pgrid_changed_any = .TRUE. CALL dbcsr_t_change_pgrid_2d(tensor_2, tensor_2%pgrid%mp_comm_2d, pdims=pdims_2d_opt, & nsplit=split_opt_avg%ngroup, dimsplit=split_opt_avg%split_rowcol, & pgrid_changed=pgrid_changed, & unit_nr=unit_nr_prv) IF (pgrid_changed) pgrid_changed_any = .TRUE. END IF IF (pgrid_changed_any) THEN IF (tensor_3%matrix_rep%do_batched == 3) THEN CALL dbcsr_tas_batched_mm_complete(tensor_3%matrix_rep) END IF END IF CASE (3) IF (ALLOCATED(tensor_2%contraction_storage) .AND. ALLOCATED(tensor_3%contraction_storage)) THEN CALL dbcsr_t_change_pgrid_2d(tensor_2, tensor_2%pgrid%mp_comm_2d, pdims=pdims_2d_opt, & nsplit=split_opt_avg%ngroup, dimsplit=split_opt_avg%split_rowcol, & pgrid_changed=pgrid_changed, & unit_nr=unit_nr_prv) IF (pgrid_changed) pgrid_changed_any = .TRUE. CALL dbcsr_t_change_pgrid_2d(tensor_3, tensor_3%pgrid%mp_comm_2d, pdims=pdims_2d_opt, & nsplit=split_opt_avg%ngroup, dimsplit=split_opt_avg%split_rowcol, & pgrid_changed=pgrid_changed, & unit_nr=unit_nr_prv) IF (pgrid_changed) pgrid_changed_any = .TRUE. END IF IF (pgrid_changed_any) THEN IF (tensor_1%matrix_rep%do_batched == 3) THEN CALL dbcsr_tas_batched_mm_complete(tensor_1%matrix_rep) END IF END IF END SELECT CALL dbcsr_tas_release_info(split_opt_avg) END IF IF ((.NOT. tensors_remapped) .AND. do_batched) THEN ! freeze TAS process grids if tensor grids were optimized CALL dbcsr_tas_set_batched_state(tensor_1%matrix_rep, opt_grid=.TRUE.) CALL dbcsr_tas_set_batched_state(tensor_2%matrix_rep, opt_grid=.TRUE.) CALL dbcsr_tas_set_batched_state(tensor_3%matrix_rep, opt_grid=.TRUE.) END IF CALL dbcsr_tas_release_info(split_opt) CALL timestop(handle) END SUBROUTINE SUBROUTINE align_tensor(tensor_in, contract_in, notcontract_in, & !! align tensor index with data tensor_out, contract_out, notcontract_out, indp_in, indp_out) TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_in INTEGER, DIMENSION(:), INTENT(IN) :: contract_in, notcontract_in TYPE(dbcsr_t_type), INTENT(OUT) :: tensor_out INTEGER, DIMENSION(SIZE(contract_in)), & INTENT(OUT) :: contract_out INTEGER, DIMENSION(SIZE(notcontract_in)), & INTENT(OUT) :: notcontract_out CHARACTER(LEN=1), DIMENSION(ndims_tensor(tensor_in)), INTENT(IN) :: indp_in CHARACTER(LEN=1), DIMENSION(ndims_tensor(tensor_in)), INTENT(OUT) :: indp_out INTEGER, DIMENSION(ndims_tensor(tensor_in)) :: align CALL dbcsr_t_align_index(tensor_in, tensor_out, order=align) contract_out = align(contract_in) notcontract_out = align(notcontract_in) indp_out(align) = indp_in END SUBROUTINE SUBROUTINE reshape_mm_compatible(tensor1, tensor2, tensor1_out, tensor2_out, ind1_free, ind1_linked, & ind2_free, ind2_linked, trans1, trans2, new1, new2, ref_tensor, & nodata1, nodata2, move_data_1, & move_data_2, optimize_dist, unit_nr) !! Prepare tensor for contraction: redistribute to a 2d format which can be contracted by !! matrix multiplication. This routine reshapes the two largest of the three tensors. Redistribution !! is avoided if tensors already in a consistent layout. TYPE(dbcsr_t_type), TARGET, INTENT(INOUT) :: tensor1 !! tensor 1 in TYPE(dbcsr_t_type), TARGET, INTENT(INOUT) :: tensor2 !! tensor 2 in TYPE(dbcsr_t_type), POINTER, INTENT(OUT) :: tensor1_out, tensor2_out !! tensor 1 out !! tensor 2 out INTEGER, DIMENSION(:), INTENT(IN) :: ind1_free, ind2_free !! indices of tensor 1 that are "free" (not linked to any index of tensor 2) INTEGER, DIMENSION(:), INTENT(IN) :: ind1_linked, ind2_linked !! indices of tensor 1 that are linked to indices of tensor 2 !! 1:1 correspondence with ind1_linked CHARACTER(LEN=1), INTENT(OUT) :: trans1, trans2 !! transpose flag of matrix rep. of tensor 1 !! transpose flag of matrix rep. tensor 2 LOGICAL, INTENT(OUT) :: new1, new2 !! whether a new tensor 1 was created !! whether a new tensor 2 was created INTEGER, INTENT(OUT) :: ref_tensor LOGICAL, INTENT(IN), OPTIONAL :: nodata1, nodata2 !! don't copy data of tensor 1 !! don't copy data of tensor 2 LOGICAL, INTENT(INOUT), OPTIONAL :: move_data_1, move_data_2 !! memory optimization: transfer data s.t. tensor1 may be empty on return !! memory optimization: transfer data s.t. tensor2 may be empty on return LOGICAL, INTENT(IN), OPTIONAL :: optimize_dist !! experimental: optimize distribution INTEGER, INTENT(IN), OPTIONAL :: unit_nr !! output unit INTEGER :: compat1, compat1_old, compat2, compat2_old, & unit_nr_prv TYPE(array_list) :: dist_list INTEGER, DIMENSION(:), ALLOCATABLE :: mp_dims TYPE(dbcsr_t_distribution_type) :: dist_in INTEGER(KIND=int_8) :: nblkrows, nblkcols LOGICAL :: optimize_dist_prv INTEGER, DIMENSION(ndims_tensor(tensor1)) :: dims1 INTEGER, DIMENSION(ndims_tensor(tensor2)) :: dims2 TYPE(mp_comm_type) :: comm_2d NULLIFY (tensor1_out, tensor2_out) unit_nr_prv = prep_output_unit(unit_nr) CALL blk_dims_tensor(tensor1, dims1) CALL blk_dims_tensor(tensor2, dims2) IF (PRODUCT(int(dims1, int_8)) .GE. PRODUCT(int(dims2, int_8))) THEN ref_tensor = 1 ELSE ref_tensor = 2 END IF IF (PRESENT(optimize_dist)) THEN optimize_dist_prv = optimize_dist ELSE optimize_dist_prv = .FALSE. END IF compat1 = compat_map(tensor1%nd_index, ind1_linked) compat2 = compat_map(tensor2%nd_index, ind2_linked) compat1_old = compat1 compat2_old = compat2 IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, '(T2,A,1X,A,A,1X)', advance='no') "compatibility of", TRIM(tensor1%name), ":" SELECT CASE (compat1) CASE (0) WRITE (unit_nr_prv, '(A)') "Not compatible" CASE (1) WRITE (unit_nr_prv, '(A)') "Normal" CASE (2) WRITE (unit_nr_prv, '(A)') "Transposed" END SELECT WRITE (unit_nr_prv, '(T2,A,1X,A,A,1X)', advance='no') "compatibility of", TRIM(tensor2%name), ":" SELECT CASE (compat2) CASE (0) WRITE (unit_nr_prv, '(A)') "Not compatible" CASE (1) WRITE (unit_nr_prv, '(A)') "Normal" CASE (2) WRITE (unit_nr_prv, '(A)') "Transposed" END SELECT END IF new1 = .FALSE. new2 = .FALSE. IF (compat1 == 0 .OR. optimize_dist_prv) THEN new1 = .TRUE. END IF IF (compat2 == 0 .OR. optimize_dist_prv) THEN new2 = .TRUE. END IF IF (ref_tensor == 1) THEN ! tensor 1 is reference and tensor 2 is reshaped compatible with tensor 1 IF (compat1 == 0 .OR. optimize_dist_prv) THEN ! tensor 1 is not contraction compatible --> reshape IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') "Redistribution of", TRIM(tensor1%name) nblkrows = PRODUCT(INT(dims1(ind1_linked), KIND=int_8)) nblkcols = PRODUCT(INT(dims1(ind1_free), KIND=int_8)) comm_2d = dbcsr_tas_mp_comm(tensor1%pgrid%mp_comm_2d, nblkrows, nblkcols) ALLOCATE (tensor1_out) CALL dbcsr_t_remap(tensor1, ind1_linked, ind1_free, tensor1_out, comm_2d=comm_2d, & nodata=nodata1, move_data=move_data_1) CALL mp_comm_free(comm_2d) compat1 = 1 ELSE IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') "No redistribution of", TRIM(tensor1%name) tensor1_out => tensor1 END IF IF (compat2 == 0 .OR. optimize_dist_prv) THEN ! tensor 2 is not contraction compatible --> reshape IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A,1X,A,1X,A)') "Redistribution of", & TRIM(tensor2%name), "compatible with", TRIM(tensor1%name) dist_in = dbcsr_t_distribution(tensor1_out) dist_list = array_sublist(dist_in%nd_dist, ind1_linked) IF (compat1 == 1) THEN ! linked index is first 2d dimension ! get distribution of linked index, tensor 2 must adopt this distribution ! get grid dimensions of linked index ALLOCATE (mp_dims(ndims_mapping_row(dist_in%pgrid%nd_index_grid))) CALL dbcsr_t_get_mapping_info(dist_in%pgrid%nd_index_grid, dims1_2d=mp_dims) ALLOCATE (tensor2_out) CALL dbcsr_t_remap(tensor2, ind2_linked, ind2_free, tensor2_out, comm_2d=dist_in%pgrid%mp_comm_2d, & dist1=dist_list, mp_dims_1=mp_dims, nodata=nodata2, move_data=move_data_2) ELSEIF (compat1 == 2) THEN ! linked index is second 2d dimension ! get distribution of linked index, tensor 2 must adopt this distribution ! get grid dimensions of linked index ALLOCATE (mp_dims(ndims_mapping_column(dist_in%pgrid%nd_index_grid))) CALL dbcsr_t_get_mapping_info(dist_in%pgrid%nd_index_grid, dims2_2d=mp_dims) ALLOCATE (tensor2_out) CALL dbcsr_t_remap(tensor2, ind2_free, ind2_linked, tensor2_out, comm_2d=dist_in%pgrid%mp_comm_2d, & dist2=dist_list, mp_dims_2=mp_dims, nodata=nodata2, move_data=move_data_2) ELSE DBCSR_ABORT("should not happen") END IF compat2 = compat1 ELSE IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') "No redistribution of", TRIM(tensor2%name) tensor2_out => tensor2 END IF ELSE ! tensor 2 is reference and tensor 1 is reshaped compatible with tensor 2 IF (compat2 == 0 .OR. optimize_dist_prv) THEN ! tensor 2 is not contraction compatible --> reshape IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') "Redistribution of", TRIM(tensor2%name) nblkrows = PRODUCT(INT(dims2(ind2_linked), KIND=int_8)) nblkcols = PRODUCT(INT(dims2(ind2_free), KIND=int_8)) comm_2d = dbcsr_tas_mp_comm(tensor2%pgrid%mp_comm_2d, nblkrows, nblkcols) ALLOCATE (tensor2_out) CALL dbcsr_t_remap(tensor2, ind2_linked, ind2_free, tensor2_out, nodata=nodata2, move_data=move_data_2) CALL mp_comm_free(comm_2d) compat2 = 1 ELSE IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') "No redistribution of", TRIM(tensor2%name) tensor2_out => tensor2 END IF IF (compat1 == 0 .OR. optimize_dist_prv) THEN ! tensor 1 is not contraction compatible --> reshape IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A,1X,A,1X,A)') "Redistribution of", TRIM(tensor1%name), & "compatible with", TRIM(tensor2%name) dist_in = dbcsr_t_distribution(tensor2_out) dist_list = array_sublist(dist_in%nd_dist, ind2_linked) IF (compat2 == 1) THEN ALLOCATE (mp_dims(ndims_mapping_row(dist_in%pgrid%nd_index_grid))) CALL dbcsr_t_get_mapping_info(dist_in%pgrid%nd_index_grid, dims1_2d=mp_dims) ALLOCATE (tensor1_out) CALL dbcsr_t_remap(tensor1, ind1_linked, ind1_free, tensor1_out, comm_2d=dist_in%pgrid%mp_comm_2d, & dist1=dist_list, mp_dims_1=mp_dims, nodata=nodata1, move_data=move_data_1) ELSEIF (compat2 == 2) THEN ALLOCATE (mp_dims(ndims_mapping_column(dist_in%pgrid%nd_index_grid))) CALL dbcsr_t_get_mapping_info(dist_in%pgrid%nd_index_grid, dims2_2d=mp_dims) ALLOCATE (tensor1_out) CALL dbcsr_t_remap(tensor1, ind1_free, ind1_linked, tensor1_out, comm_2d=dist_in%pgrid%mp_comm_2d, & dist2=dist_list, mp_dims_2=mp_dims, nodata=nodata1, move_data=move_data_1) ELSE DBCSR_ABORT("should not happen") END IF compat1 = compat2 ELSE IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') "No redistribution of", TRIM(tensor1%name) tensor1_out => tensor1 END IF END IF SELECT CASE (compat1) CASE (1) trans1 = dbcsr_no_transpose CASE (2) trans1 = dbcsr_transpose CASE DEFAULT DBCSR_ABORT("should not happen") END SELECT SELECT CASE (compat2) CASE (1) trans2 = dbcsr_no_transpose CASE (2) trans2 = dbcsr_transpose CASE DEFAULT DBCSR_ABORT("should not happen") END SELECT IF (unit_nr_prv > 0) THEN IF (compat1 .NE. compat1_old) THEN WRITE (unit_nr_prv, '(T2,A,1X,A,A,1X)', advance='no') "compatibility of", TRIM(tensor1_out%name), ":" SELECT CASE (compat1) CASE (0) WRITE (unit_nr_prv, '(A)') "Not compatible" CASE (1) WRITE (unit_nr_prv, '(A)') "Normal" CASE (2) WRITE (unit_nr_prv, '(A)') "Transposed" END SELECT END IF IF (compat2 .NE. compat2_old) THEN WRITE (unit_nr_prv, '(T2,A,1X,A,A,1X)', advance='no') "compatibility of", TRIM(tensor2_out%name), ":" SELECT CASE (compat2) CASE (0) WRITE (unit_nr_prv, '(A)') "Not compatible" CASE (1) WRITE (unit_nr_prv, '(A)') "Normal" CASE (2) WRITE (unit_nr_prv, '(A)') "Transposed" END SELECT END IF END IF IF (new1 .AND. PRESENT(move_data_1)) move_data_1 = .TRUE. IF (new2 .AND. PRESENT(move_data_2)) move_data_2 = .TRUE. END SUBROUTINE SUBROUTINE reshape_mm_small(tensor_in, ind1, ind2, tensor_out, trans, new, nodata, move_data, unit_nr) !! Prepare tensor for contraction: redistribute to a 2d format which can be contracted by !! matrix multiplication. This routine reshapes the smallest of the three tensors. TYPE(dbcsr_t_type), TARGET, INTENT(INOUT) :: tensor_in !! tensor in INTEGER, DIMENSION(:), INTENT(IN) :: ind1, ind2 !! index that should be mapped to first matrix dimension !! index that should be mapped to second matrix dimension TYPE(dbcsr_t_type), POINTER, INTENT(OUT) :: tensor_out !! tensor out CHARACTER(LEN=1), INTENT(OUT) :: trans !! transpose flag of matrix rep. LOGICAL, INTENT(OUT) :: new !! whether a new tensor was created for tensor_out LOGICAL, INTENT(IN), OPTIONAL :: nodata, move_data !! don't copy tensor data !! memory optimization: transfer data s.t. tensor_in may be empty on return INTEGER, INTENT(IN), OPTIONAL :: unit_nr !! output unit INTEGER :: compat1, compat2, compat1_old, compat2_old, unit_nr_prv LOGICAL :: nodata_prv NULLIFY (tensor_out) IF (PRESENT(nodata)) THEN nodata_prv = nodata ELSE nodata_prv = .FALSE. END IF unit_nr_prv = prep_output_unit(unit_nr) new = .FALSE. compat1 = compat_map(tensor_in%nd_index, ind1) compat2 = compat_map(tensor_in%nd_index, ind2) compat1_old = compat1; compat2_old = compat2 IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, '(T2,A,1X,A,A,1X)', advance='no') "compatibility of", TRIM(tensor_in%name), ":" IF (compat1 == 1 .AND. compat2 == 2) THEN WRITE (unit_nr_prv, '(A)') "Normal" ELSEIF (compat1 == 2 .AND. compat2 == 1) THEN WRITE (unit_nr_prv, '(A)') "Transposed" ELSE WRITE (unit_nr_prv, '(A)') "Not compatible" END IF END IF IF (compat1 == 0 .or. compat2 == 0) THEN ! index mapping not compatible with contract index IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') "Redistribution of", TRIM(tensor_in%name) ALLOCATE (tensor_out) CALL dbcsr_t_remap(tensor_in, ind1, ind2, tensor_out, nodata=nodata, move_data=move_data) CALL dbcsr_t_copy_contraction_storage(tensor_in, tensor_out) compat1 = 1 compat2 = 2 new = .TRUE. ELSE IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') "No redistribution of", TRIM(tensor_in%name) tensor_out => tensor_in END IF IF (compat1 == 1 .AND. compat2 == 2) THEN trans = dbcsr_no_transpose ELSEIF (compat1 == 2 .AND. compat2 == 1) THEN trans = dbcsr_transpose ELSE DBCSR_ABORT("this should not happen") END IF IF (unit_nr_prv > 0) THEN IF (compat1_old .NE. compat1 .OR. compat2_old .NE. compat2) THEN WRITE (unit_nr_prv, '(T2,A,1X,A,A,1X)', advance='no') "compatibility of", TRIM(tensor_out%name), ":" IF (compat1 == 1 .AND. compat2 == 2) THEN WRITE (unit_nr_prv, '(A)') "Normal" ELSEIF (compat1 == 2 .AND. compat2 == 1) THEN WRITE (unit_nr_prv, '(A)') "Transposed" ELSE WRITE (unit_nr_prv, '(A)') "Not compatible" END IF END IF END IF END SUBROUTINE FUNCTION update_contraction_storage(storage, split_opt, split) RESULT(do_change_pgrid) !! update contraction storage that keeps track of process grids during a batched contraction !! and decide if tensor process grid needs to be optimized TYPE(dbcsr_t_contraction_storage), INTENT(INOUT) :: storage TYPE(dbcsr_tas_split_info), INTENT(IN) :: split_opt !! optimized TAS process grid TYPE(dbcsr_tas_split_info), INTENT(IN) :: split !! current TAS process grid INTEGER, DIMENSION(2) :: pdims_opt, coor, pdims, pdims_sub LOGICAL, DIMENSION(2) :: periods LOGICAL, DIMENSION(2) :: do_change_pgrid REAL(kind=real_8) :: change_criterion, pdims_ratio INTEGER :: nsplit_opt, nsplit DBCSR_ASSERT(ALLOCATED(split_opt%ngroup_opt)) nsplit_opt = split_opt%ngroup_opt nsplit = split%ngroup CALL mp_environ(split_opt%mp_comm, 2, pdims_opt, coor, periods) CALL mp_environ(split%mp_comm, 2, pdims, coor, periods) storage%ibatch = storage%ibatch + 1 storage%nsplit_avg = (storage%nsplit_avg*REAL(storage%ibatch - 1, real_8) + REAL(nsplit_opt, real_8)) & /REAL(storage%ibatch, real_8) SELECT CASE (split_opt%split_rowcol) CASE (rowsplit) pdims_ratio = REAL(pdims(1), real_8)/pdims(2) CASE (colsplit) pdims_ratio = REAL(pdims(2), real_8)/pdims(1) END SELECT do_change_pgrid(:) = .FALSE. ! check for process grid dimensions CALL mp_environ(split%mp_comm_group, 2, pdims_sub, coor, periods) change_criterion = MAXVAL(REAL(pdims_sub, real_8))/MINVAL(pdims_sub) IF (change_criterion > default_pdims_accept_ratio**2) do_change_pgrid(1) = .TRUE. ! check for split factor change_criterion = MAX(REAL(nsplit, real_8)/storage%nsplit_avg, REAL(storage%nsplit_avg, real_8)/nsplit) IF (change_criterion > default_nsplit_accept_ratio) do_change_pgrid(2) = .TRUE. END FUNCTION FUNCTION compat_map(nd_index, compat_ind) !! Check if 2d index is compatible with tensor index TYPE(nd_to_2d_mapping), INTENT(IN) :: nd_index INTEGER, DIMENSION(:), INTENT(IN) :: compat_ind INTEGER, DIMENSION(ndims_mapping_row(nd_index)) :: map1 INTEGER, DIMENSION(ndims_mapping_column(nd_index)) :: map2 INTEGER :: compat_map CALL dbcsr_t_get_mapping_info(nd_index, map1_2d=map1, map2_2d=map2) compat_map = 0 IF (array_eq_i(map1, compat_ind)) THEN compat_map = 1 ELSEIF (array_eq_i(map2, compat_ind)) THEN compat_map = 2 END IF END FUNCTION SUBROUTINE invert_transpose_flag(trans_flag) CHARACTER(LEN=1), INTENT(INOUT) :: trans_flag IF (trans_flag == dbcsr_transpose) THEN trans_flag = dbcsr_no_transpose ELSEIF (trans_flag == dbcsr_no_transpose) THEN trans_flag = dbcsr_transpose END IF END SUBROUTINE SUBROUTINE index_linked_sort(ind_ref, ind_dep) INTEGER, DIMENSION(:), INTENT(INOUT) :: ind_ref, ind_dep INTEGER, DIMENSION(SIZE(ind_ref)) :: sort_indices CALL sort(ind_ref, SIZE(ind_ref), sort_indices) ind_dep(:) = ind_dep(sort_indices) END SUBROUTINE FUNCTION opt_pgrid(tensor, tas_split_info) TYPE(dbcsr_t_type), INTENT(IN) :: tensor TYPE(dbcsr_tas_split_info), INTENT(IN) :: tas_split_info INTEGER, DIMENSION(ndims_matrix_row(tensor)) :: map1 INTEGER, DIMENSION(ndims_matrix_column(tensor)) :: map2 TYPE(dbcsr_t_pgrid_type) :: opt_pgrid INTEGER, DIMENSION(ndims_tensor(tensor)) :: dims CALL dbcsr_t_get_mapping_info(tensor%pgrid%nd_index_grid, map1_2d=map1, map2_2d=map2) CALL blk_dims_tensor(tensor, dims) opt_pgrid = dbcsr_t_nd_mp_comm(tas_split_info%mp_comm, map1, map2, tdims=dims) ALLOCATE (opt_pgrid%tas_split_info, SOURCE=tas_split_info) CALL dbcsr_tas_info_hold(opt_pgrid%tas_split_info) END FUNCTION SUBROUTINE dbcsr_t_remap(tensor_in, map1_2d, map2_2d, tensor_out, comm_2d, dist1, dist2, & mp_dims_1, mp_dims_2, name, nodata, move_data) !! Copy tensor to tensor with modified index mapping TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_in INTEGER, DIMENSION(:), INTENT(IN) :: map1_2d, map2_2d !! new index mapping !! new index mapping TYPE(dbcsr_t_type), INTENT(OUT) :: tensor_out CHARACTER(len=*), INTENT(IN), OPTIONAL :: name LOGICAL, INTENT(IN), OPTIONAL :: nodata, move_data TYPE(mp_comm_type), INTENT(IN), OPTIONAL :: comm_2d TYPE(array_list), INTENT(IN), OPTIONAL :: dist1, dist2 INTEGER, DIMENSION(SIZE(map1_2d)), OPTIONAL :: mp_dims_1 INTEGER, DIMENSION(SIZE(map2_2d)), OPTIONAL :: mp_dims_2 CHARACTER(len=default_string_length) :: name_tmp INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("blk_sizes")}$, & ${varlist("nd_dist")}$ TYPE(dbcsr_t_distribution_type) :: dist INTEGER :: handle, i INTEGER, DIMENSION(ndims_tensor(tensor_in)) :: pdims, myploc CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_remap' LOGICAL :: nodata_prv TYPE(dbcsr_t_pgrid_type) :: comm_nd TYPE(mp_comm_type) :: comm_2d_prv CALL timeset(routineN, handle) IF (PRESENT(name)) THEN name_tmp = name ELSE name_tmp = tensor_in%name END IF IF (PRESENT(dist1)) THEN DBCSR_ASSERT(PRESENT(mp_dims_1)) END IF IF (PRESENT(dist2)) THEN DBCSR_ASSERT(PRESENT(mp_dims_2)) END IF IF (PRESENT(comm_2d)) THEN comm_2d_prv = comm_2d ELSE comm_2d_prv = tensor_in%pgrid%mp_comm_2d END IF comm_nd = dbcsr_t_nd_mp_comm(comm_2d_prv, map1_2d, map2_2d, dims1_nd=mp_dims_1, dims2_nd=mp_dims_2) CALL mp_environ_pgrid(comm_nd, pdims, myploc) #:for ndim in ndims IF (ndims_tensor(tensor_in) == ${ndim}$) THEN CALL get_arrays(tensor_in%blk_sizes, ${varlist("blk_sizes", nmax=ndim)}$) END IF #:endfor #:for ndim in ndims IF (ndims_tensor(tensor_in) == ${ndim}$) THEN #:for idim in range(1, ndim+1) IF (PRESENT(dist1)) THEN IF (ANY(map1_2d == ${idim}$)) THEN i = MINLOC(map1_2d, dim=1, mask=map1_2d == ${idim}$) ! i is location of idim in map1_2d CALL get_ith_array(dist1, i, nd_dist_${idim}$) END IF END IF IF (PRESENT(dist2)) THEN IF (ANY(map2_2d == ${idim}$)) THEN i = MINLOC(map2_2d, dim=1, mask=map2_2d == ${idim}$) ! i is location of idim in map2_2d CALL get_ith_array(dist2, i, nd_dist_${idim}$) END IF END IF IF (.NOT. ALLOCATED(nd_dist_${idim}$)) THEN ALLOCATE (nd_dist_${idim}$ (SIZE(blk_sizes_${idim}$))) CALL dbcsr_t_default_distvec(SIZE(blk_sizes_${idim}$), pdims(${idim}$), blk_sizes_${idim}$, nd_dist_${idim}$) END IF #:endfor CALL dbcsr_t_distribution_new_expert(dist, comm_nd, map1_2d, map2_2d, & ${varlist("nd_dist", nmax=ndim)}$, own_comm=.TRUE.) END IF #:endfor #:for ndim in ndims IF (ndims_tensor(tensor_in) == ${ndim}$) THEN CALL dbcsr_t_create(tensor_out, name_tmp, dist, & map1_2d, map2_2d, dbcsr_tas_get_data_type(tensor_in%matrix_rep), & ${varlist("blk_sizes", nmax=ndim)}$) END IF #:endfor IF (PRESENT(nodata)) THEN nodata_prv = nodata ELSE nodata_prv = .FALSE. END IF IF (.NOT. nodata_prv) CALL dbcsr_t_copy_expert(tensor_in, tensor_out, move_data=move_data) CALL dbcsr_t_distribution_destroy(dist) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_align_index(tensor_in, tensor_out, order) !! Align index with data TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_in TYPE(dbcsr_t_type), INTENT(OUT) :: tensor_out INTEGER, DIMENSION(ndims_matrix_row(tensor_in)) :: map1_2d INTEGER, DIMENSION(ndims_matrix_column(tensor_in)) :: map2_2d INTEGER, DIMENSION(ndims_tensor(tensor_in)), & INTENT(OUT), OPTIONAL :: order !! permutation resulting from alignment INTEGER, DIMENSION(ndims_tensor(tensor_in)) :: order_prv CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_align_index' INTEGER :: handle CALL timeset(routineN, handle) CALL dbcsr_t_get_mapping_info(tensor_in%nd_index_blk, map1_2d=map1_2d, map2_2d=map2_2d) order_prv = dbcsr_t_inverse_order([map1_2d, map2_2d]) CALL dbcsr_t_permute_index(tensor_in, tensor_out, order=order_prv) IF (PRESENT(order)) order = order_prv CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_permute_index(tensor_in, tensor_out, order) !! Create new tensor by reordering index, data is copied exactly (shallow copy) TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_in TYPE(dbcsr_t_type), INTENT(OUT) :: tensor_out INTEGER, DIMENSION(ndims_tensor(tensor_in)), & INTENT(IN) :: order TYPE(nd_to_2d_mapping) :: nd_index_blk_rs, nd_index_rs CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_permute_index' INTEGER :: handle INTEGER :: ndims CALL timeset(routineN, handle) ndims = ndims_tensor(tensor_in) CALL permute_index(tensor_in%nd_index, nd_index_rs, order) CALL permute_index(tensor_in%nd_index_blk, nd_index_blk_rs, order) CALL permute_index(tensor_in%pgrid%nd_index_grid, tensor_out%pgrid%nd_index_grid, order) tensor_out%matrix_rep => tensor_in%matrix_rep tensor_out%owns_matrix = .FALSE. tensor_out%nd_index = nd_index_rs tensor_out%nd_index_blk = nd_index_blk_rs tensor_out%pgrid%mp_comm_2d = tensor_in%pgrid%mp_comm_2d IF (ALLOCATED(tensor_in%pgrid%tas_split_info)) THEN ALLOCATE (tensor_out%pgrid%tas_split_info, SOURCE=tensor_in%pgrid%tas_split_info) END IF tensor_out%refcount => tensor_in%refcount CALL dbcsr_t_hold(tensor_out) CALL reorder_arrays(tensor_in%blk_sizes, tensor_out%blk_sizes, order) CALL reorder_arrays(tensor_in%blk_offsets, tensor_out%blk_offsets, order) CALL reorder_arrays(tensor_in%nd_dist, tensor_out%nd_dist, order) CALL reorder_arrays(tensor_in%blks_local, tensor_out%blks_local, order) ALLOCATE (tensor_out%nblks_local(ndims)) ALLOCATE (tensor_out%nfull_local(ndims)) tensor_out%nblks_local(order) = tensor_in%nblks_local(:) tensor_out%nfull_local(order) = tensor_in%nfull_local(:) tensor_out%name = tensor_in%name tensor_out%valid = .TRUE. IF (ALLOCATED(tensor_in%contraction_storage)) THEN ALLOCATE (tensor_out%contraction_storage, SOURCE=tensor_in%contraction_storage) CALL destroy_array_list(tensor_out%contraction_storage%batch_ranges) CALL reorder_arrays(tensor_in%contraction_storage%batch_ranges, tensor_out%contraction_storage%batch_ranges, order) END IF CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_contract_index(alpha, tensor_1, tensor_2, beta, tensor_3, & contract_1, notcontract_1, & contract_2, notcontract_2, & map_1, map_2, & bounds_1, bounds_2, bounds_3, & filter_eps, & nblks_local, result_index) !! get indices of non-zero tensor blocks for contraction result without actually !! performing contraction. !! this is an estimate based on block norm multiplication. !! See documentation of dbcsr_t_contract. TYPE(dbcsr_scalar_type), INTENT(IN) :: alpha TYPE(dbcsr_t_type), INTENT(INOUT), TARGET :: tensor_1 TYPE(dbcsr_t_type), INTENT(INOUT), TARGET :: tensor_2 TYPE(dbcsr_scalar_type), INTENT(IN) :: beta INTEGER, DIMENSION(:), INTENT(IN) :: contract_1 INTEGER, DIMENSION(:), INTENT(IN) :: contract_2 INTEGER, DIMENSION(:), INTENT(IN) :: map_1 INTEGER, DIMENSION(:), INTENT(IN) :: map_2 INTEGER, DIMENSION(:), INTENT(IN) :: notcontract_1 INTEGER, DIMENSION(:), INTENT(IN) :: notcontract_2 TYPE(dbcsr_t_type), INTENT(INOUT), TARGET :: tensor_3 INTEGER, DIMENSION(2, SIZE(contract_1)), & INTENT(IN), OPTIONAL :: bounds_1 INTEGER, DIMENSION(2, SIZE(notcontract_1)), & INTENT(IN), OPTIONAL :: bounds_2 INTEGER, DIMENSION(2, SIZE(notcontract_2)), & INTENT(IN), OPTIONAL :: bounds_3 REAL(KIND=real_8), INTENT(IN), OPTIONAL :: filter_eps INTEGER, INTENT(OUT) :: nblks_local !! number of local blocks on this MPI rank INTEGER, DIMENSION(dbcsr_t_max_nblks_local(tensor_3), ndims_tensor(tensor_3)), & INTENT(OUT) :: result_index !! indices of local non-zero tensor blocks for tensor_3 !! only the elements result_index(:nblks_local, :) are relevant (all others are set to 0) CALL dbcsr_t_contract_expert(alpha, tensor_1, tensor_2, beta, tensor_3, & contract_1, notcontract_1, & contract_2, notcontract_2, & map_1, map_2, & bounds_1=bounds_1, & bounds_2=bounds_2, & bounds_3=bounds_3, & filter_eps=filter_eps, & nblks_local=nblks_local, & result_index=result_index) END SUBROUTINE SUBROUTINE dbcsr_t_map_bounds_to_tensors(tensor_1, tensor_2, & contract_1, notcontract_1, & contract_2, notcontract_2, & bounds_t1, bounds_t2, & bounds_1, bounds_2, bounds_3, & do_crop_1, do_crop_2) !! Map contraction bounds to bounds referring to tensor indices !! see dbcsr_t_contract for docu of dummy arguments TYPE(dbcsr_t_type), INTENT(IN) :: tensor_1, tensor_2 INTEGER, DIMENSION(:), INTENT(IN) :: contract_1, contract_2, & notcontract_1, notcontract_2 INTEGER, DIMENSION(2, ndims_tensor(tensor_1)), & INTENT(OUT) :: bounds_t1 !! bounds mapped to tensor_1 INTEGER, DIMENSION(2, ndims_tensor(tensor_2)), & INTENT(OUT) :: bounds_t2 !! bounds mapped to tensor_2 INTEGER, DIMENSION(2, SIZE(contract_1)), & INTENT(IN), OPTIONAL :: bounds_1 INTEGER, DIMENSION(2, SIZE(notcontract_1)), & INTENT(IN), OPTIONAL :: bounds_2 INTEGER, DIMENSION(2, SIZE(notcontract_2)), & INTENT(IN), OPTIONAL :: bounds_3 LOGICAL, INTENT(OUT), OPTIONAL :: do_crop_1, do_crop_2 !! whether tensor 1 should be cropped !! whether tensor 2 should be cropped LOGICAL, DIMENSION(2) :: do_crop do_crop = .FALSE. bounds_t1(1, :) = 1 CALL dbcsr_t_get_info(tensor_1, nfull_total=bounds_t1(2, :)) bounds_t2(1, :) = 1 CALL dbcsr_t_get_info(tensor_2, nfull_total=bounds_t2(2, :)) IF (PRESENT(bounds_1)) THEN bounds_t1(:, contract_1) = bounds_1 do_crop(1) = .TRUE. bounds_t2(:, contract_2) = bounds_1 do_crop(2) = .TRUE. END IF IF (PRESENT(bounds_2)) THEN bounds_t1(:, notcontract_1) = bounds_2 do_crop(1) = .TRUE. END IF IF (PRESENT(bounds_3)) THEN bounds_t2(:, notcontract_2) = bounds_3 do_crop(2) = .TRUE. END IF IF (PRESENT(do_crop_1)) do_crop_1 = do_crop(1) IF (PRESENT(do_crop_2)) do_crop_2 = do_crop(2) END SUBROUTINE SUBROUTINE dbcsr_t_print_contraction_index(tensor_1, indchar1, tensor_2, indchar2, tensor_3, indchar3, unit_nr) !! print tensor contraction indices in a human readable way TYPE(dbcsr_t_type), INTENT(IN) :: tensor_1, tensor_2, tensor_3 CHARACTER(LEN=1), DIMENSION(ndims_tensor(tensor_1)), INTENT(IN) :: indchar1 !! characters printed for index of tensor 1 CHARACTER(LEN=1), DIMENSION(ndims_tensor(tensor_2)), INTENT(IN) :: indchar2 !! characters printed for index of tensor 2 CHARACTER(LEN=1), DIMENSION(ndims_tensor(tensor_3)), INTENT(IN) :: indchar3 !! characters printed for index of tensor 3 INTEGER, INTENT(IN) :: unit_nr !! output unit INTEGER, DIMENSION(ndims_matrix_row(tensor_1)) :: map11 INTEGER, DIMENSION(ndims_matrix_column(tensor_1)) :: map12 INTEGER, DIMENSION(ndims_matrix_row(tensor_2)) :: map21 INTEGER, DIMENSION(ndims_matrix_column(tensor_2)) :: map22 INTEGER, DIMENSION(ndims_matrix_row(tensor_3)) :: map31 INTEGER, DIMENSION(ndims_matrix_column(tensor_3)) :: map32 INTEGER :: ichar1, ichar2, ichar3, unit_nr_prv unit_nr_prv = prep_output_unit(unit_nr) IF (unit_nr_prv /= 0) THEN CALL dbcsr_t_get_mapping_info(tensor_1%nd_index_blk, map1_2d=map11, map2_2d=map12) CALL dbcsr_t_get_mapping_info(tensor_2%nd_index_blk, map1_2d=map21, map2_2d=map22) CALL dbcsr_t_get_mapping_info(tensor_3%nd_index_blk, map1_2d=map31, map2_2d=map32) END IF IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, '(T2,A)') "INDEX INFO" WRITE (unit_nr_prv, '(T15,A)', advance='no') "tensor index: (" DO ichar1 = 1, SIZE(indchar1) WRITE (unit_nr_prv, '(A1)', advance='no') indchar1(ichar1) END DO WRITE (unit_nr_prv, '(A)', advance='no') ") x (" DO ichar2 = 1, SIZE(indchar2) WRITE (unit_nr_prv, '(A1)', advance='no') indchar2(ichar2) END DO WRITE (unit_nr_prv, '(A)', advance='no') ") = (" DO ichar3 = 1, SIZE(indchar3) WRITE (unit_nr_prv, '(A1)', advance='no') indchar3(ichar3) END DO WRITE (unit_nr_prv, '(A)') ")" WRITE (unit_nr_prv, '(T15,A)', advance='no') "matrix index: (" DO ichar1 = 1, SIZE(map11) WRITE (unit_nr_prv, '(A1)', advance='no') indchar1(map11(ichar1)) END DO WRITE (unit_nr_prv, '(A1)', advance='no') "|" DO ichar1 = 1, SIZE(map12) WRITE (unit_nr_prv, '(A1)', advance='no') indchar1(map12(ichar1)) END DO WRITE (unit_nr_prv, '(A)', advance='no') ") x (" DO ichar2 = 1, SIZE(map21) WRITE (unit_nr_prv, '(A1)', advance='no') indchar2(map21(ichar2)) END DO WRITE (unit_nr_prv, '(A1)', advance='no') "|" DO ichar2 = 1, SIZE(map22) WRITE (unit_nr_prv, '(A1)', advance='no') indchar2(map22(ichar2)) END DO WRITE (unit_nr_prv, '(A)', advance='no') ") = (" DO ichar3 = 1, SIZE(map31) WRITE (unit_nr_prv, '(A1)', advance='no') indchar3(map31(ichar3)) END DO WRITE (unit_nr_prv, '(A1)', advance='no') "|" DO ichar3 = 1, SIZE(map32) WRITE (unit_nr_prv, '(A1)', advance='no') indchar3(map32(ichar3)) END DO WRITE (unit_nr_prv, '(A)') ")" END IF END SUBROUTINE SUBROUTINE dbcsr_t_batched_contract_init(tensor, ${varlist("batch_range")}$) !! Initialize batched contraction for this tensor. !! !! Explanation: A batched contraction is a contraction performed in several consecutive steps by !! specification of bounds in dbcsr_t_contract. This can be used to reduce memory by a large factor. !! The routines dbcsr_t_batched_contract_init and dbcsr_t_batched_contract_finalize should be !! called to define the scope of a batched contraction as this enables important optimizations !! (adapting communication scheme to batches and adapting process grid to multiplication algorithm). !! The routines dbcsr_t_batched_contract_init and dbcsr_t_batched_contract_finalize must be called !! before the first and after the last contraction step on all 3 tensors. !! !! Requirements: !! - the tensors are in a compatible matrix layout (see documentation of `dbcsr_t_contract`, note 2 & 3). !! If they are not, process grid optimizations are disabled and a warning is issued. !! - within the scope of a batched contraction, it is not allowed to access or change tensor data !! except by calling the routines dbcsr_t_contract & dbcsr_t_copy. !! - the bounds affecting indices of the smallest tensor must not change in the course of a batched !! contraction (todo: get rid of this requirement). !! !! Side effects: !! - the parallel layout (process grid and distribution) of all tensors may change. In order to !! disable the process grid optimization including this side effect, call this routine only on the !! smallest of the 3 tensors. !! !! @note !! Note 1: for an example of batched contraction see `examples/dbcsr_tensor_example.F`. !! (todo: the example is outdated and should be updated). !! !! Note 2: it is meaningful to use this feature if the contraction consists of one batch only !! but if multiple contractions involving the same 3 tensors are performed !! (batched_contract_init and batched_contract_finalize must then be called before/after each !! contraction call). The process grid is then optimized after the first contraction !! and future contraction may profit from this optimization. !! @endnote TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor INTEGER, DIMENSION(:), OPTIONAL, INTENT(IN) :: ${varlist("batch_range")}$ !! For internal load balancing optimizations, optionally specify the index ranges of !! batched contraction. !! batch_range_i refers to the ith tensor dimension and contains all block indices starting !! a new range. The size should be the number of ranges plus one, the last element being the !! block index plus one of the last block in the last range. INTEGER, DIMENSION(ndims_tensor(tensor)) :: tdims INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("batch_range_prv")}$ LOGICAL :: static_range CALL dbcsr_t_get_info(tensor, nblks_total=tdims) static_range = .TRUE. #:for idim in range(1, maxdim+1) IF (ndims_tensor(tensor) >= ${idim}$) THEN IF (PRESENT(batch_range_${idim}$)) THEN CALL allocate_any(batch_range_prv_${idim}$, source=batch_range_${idim}$) static_range = .FALSE. ELSE ALLOCATE (batch_range_prv_${idim}$ (2)) batch_range_prv_${idim}$ (1) = 1 batch_range_prv_${idim}$ (2) = tdims(${idim}$) + 1 END IF END IF #:endfor ALLOCATE (tensor%contraction_storage) tensor%contraction_storage%static = static_range IF (static_range) THEN CALL dbcsr_tas_batched_mm_init(tensor%matrix_rep) END IF tensor%contraction_storage%nsplit_avg = 0.0_real_8 tensor%contraction_storage%ibatch = 0 #:for ndim in range(1, maxdim+1) IF (ndims_tensor(tensor) == ${ndim}$) THEN CALL create_array_list(tensor%contraction_storage%batch_ranges, ${ndim}$, & ${varlist("batch_range_prv", nmax=ndim)}$) END IF #:endfor END SUBROUTINE SUBROUTINE dbcsr_t_batched_contract_finalize(tensor, unit_nr) !! finalize batched contraction. This performs all communication that has been postponed in the !! contraction calls. TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor INTEGER, INTENT(IN), OPTIONAL :: unit_nr LOGICAL :: do_write INTEGER :: unit_nr_prv, handle CALL mp_sync(tensor%pgrid%mp_comm_2d) CALL timeset("dbcsr_t_total", handle) unit_nr_prv = prep_output_unit(unit_nr) do_write = .FALSE. IF (tensor%contraction_storage%static) THEN IF (tensor%matrix_rep%do_batched > 0) THEN IF (tensor%matrix_rep%mm_storage%batched_out) do_write = .TRUE. END IF CALL dbcsr_tas_batched_mm_finalize(tensor%matrix_rep) END IF IF (do_write .AND. unit_nr_prv /= 0) THEN IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T2,A)") & "FINALIZING BATCHED PROCESSING OF MATMUL" END IF CALL dbcsr_t_write_tensor_info(tensor, unit_nr_prv) CALL dbcsr_t_write_tensor_dist(tensor, unit_nr_prv) END IF CALL destroy_array_list(tensor%contraction_storage%batch_ranges) DEALLOCATE (tensor%contraction_storage) CALL mp_sync(tensor%pgrid%mp_comm_2d) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_change_pgrid(tensor, pgrid, ${varlist("batch_range")}$, & nodata, pgrid_changed, unit_nr) !! change the process grid of a tensor TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor TYPE(dbcsr_t_pgrid_type), INTENT(IN) :: pgrid INTEGER, DIMENSION(:), OPTIONAL, INTENT(IN) :: ${varlist("batch_range")}$ !! For internal load balancing optimizations, optionally specify the index ranges of !! batched contraction. !! batch_range_i refers to the ith tensor dimension and contains all block indices starting !! a new range. The size should be the number of ranges plus one, the last element being the !! block index plus one of the last block in the last range. LOGICAL, INTENT(IN), OPTIONAL :: nodata !! optionally don't copy the tensor data (then tensor is empty on returned) LOGICAL, INTENT(OUT), OPTIONAL :: pgrid_changed INTEGER, INTENT(IN), OPTIONAL :: unit_nr CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_change_pgrid' CHARACTER(default_string_length) :: name INTEGER :: handle INTEGER, ALLOCATABLE, DIMENSION(:) :: ${varlist("bs")}$, & ${varlist("dist")}$ INTEGER, DIMENSION(ndims_tensor(tensor)) :: pcoord, pcoord_ref, pdims, pdims_ref, & tdims TYPE(dbcsr_t_type) :: t_tmp TYPE(dbcsr_t_distribution_type) :: dist INTEGER, DIMENSION(ndims_matrix_row(tensor)) :: map1 INTEGER, & DIMENSION(ndims_matrix_column(tensor)) :: map2 LOGICAL, DIMENSION(ndims_tensor(tensor)) :: mem_aware INTEGER, DIMENSION(ndims_tensor(tensor)) :: nbatch INTEGER :: ind1, ind2, batch_size, ibatch IF (PRESENT(pgrid_changed)) pgrid_changed = .FALSE. CALL mp_environ_pgrid(pgrid, pdims, pcoord) CALL mp_environ_pgrid(tensor%pgrid, pdims_ref, pcoord_ref) IF (ALL(pdims == pdims_ref)) THEN IF (ALLOCATED(pgrid%tas_split_info) .AND. ALLOCATED(tensor%pgrid%tas_split_info)) THEN IF (pgrid%tas_split_info%ngroup == tensor%pgrid%tas_split_info%ngroup) THEN RETURN END IF END IF END IF CALL timeset(routineN, handle) #:for idim in range(1, maxdim+1) IF (ndims_tensor(tensor) >= ${idim}$) THEN mem_aware(${idim}$) = PRESENT(batch_range_${idim}$) IF (mem_aware(${idim}$)) nbatch(${idim}$) = SIZE(batch_range_${idim}$) - 1 END IF #:endfor CALL dbcsr_t_get_info(tensor, nblks_total=tdims, name=name) #:for idim in range(1, maxdim+1) IF (ndims_tensor(tensor) >= ${idim}$) THEN ALLOCATE (bs_${idim}$ (dbcsr_t_nblks_total(tensor, ${idim}$))) CALL get_ith_array(tensor%blk_sizes, ${idim}$, bs_${idim}$) ALLOCATE (dist_${idim}$ (tdims(${idim}$))) dist_${idim}$ = 0 IF (mem_aware(${idim}$)) THEN DO ibatch = 1, nbatch(${idim}$) ind1 = batch_range_${idim}$ (ibatch) ind2 = batch_range_${idim}$ (ibatch + 1) - 1 batch_size = ind2 - ind1 + 1 CALL dbcsr_t_default_distvec(batch_size, pdims(${idim}$), & bs_${idim}$ (ind1:ind2), dist_${idim}$ (ind1:ind2)) END DO ELSE CALL dbcsr_t_default_distvec(tdims(${idim}$), pdims(${idim}$), bs_${idim}$, dist_${idim}$) END IF END IF #:endfor CALL dbcsr_t_get_mapping_info(tensor%nd_index_blk, map1_2d=map1, map2_2d=map2) #:for ndim in ndims IF (ndims_tensor(tensor) == ${ndim}$) THEN CALL dbcsr_t_distribution_new(dist, pgrid, ${varlist("dist", nmax=ndim)}$) CALL dbcsr_t_create(t_tmp, name, dist, map1, map2, dbcsr_type_real_8, ${varlist("bs", nmax=ndim)}$) END IF #:endfor CALL dbcsr_t_distribution_destroy(dist) IF (PRESENT(nodata)) THEN IF (.NOT. nodata) CALL dbcsr_t_copy_expert(tensor, t_tmp, move_data=.TRUE.) ELSE CALL dbcsr_t_copy_expert(tensor, t_tmp, move_data=.TRUE.) END IF CALL dbcsr_t_copy_contraction_storage(tensor, t_tmp) CALL dbcsr_t_destroy(tensor) tensor = t_tmp IF (PRESENT(unit_nr)) THEN IF (unit_nr > 0) THEN WRITE (unit_nr, "(T2,A,1X,A)") "OPTIMIZED PGRID INFO FOR", TRIM(tensor%name) WRITE (unit_nr, "(T4,A,1X,3I6)") "process grid dimensions:", pdims CALL dbcsr_t_write_split_info(pgrid, unit_nr) END IF END IF IF (PRESENT(pgrid_changed)) pgrid_changed = .TRUE. CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_change_pgrid_2d(tensor, mp_comm, pdims, nodata, nsplit, dimsplit, pgrid_changed, unit_nr) !! map tensor to a new 2d process grid for the matrix representation. TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor TYPE(mp_comm_type), INTENT(IN) :: mp_comm INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL :: pdims LOGICAL, INTENT(IN), OPTIONAL :: nodata INTEGER, INTENT(IN), OPTIONAL :: nsplit, dimsplit LOGICAL, INTENT(OUT), OPTIONAL :: pgrid_changed INTEGER, INTENT(IN), OPTIONAL :: unit_nr INTEGER, DIMENSION(ndims_matrix_row(tensor)) :: map1 INTEGER, DIMENSION(ndims_matrix_column(tensor)) :: map2 INTEGER, DIMENSION(ndims_tensor(tensor)) :: dims, nbatches TYPE(dbcsr_t_pgrid_type) :: pgrid INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("batch_range")}$ INTEGER, DIMENSION(:), ALLOCATABLE :: array INTEGER :: idim CALL dbcsr_t_get_mapping_info(tensor%pgrid%nd_index_grid, map1_2d=map1, map2_2d=map2) CALL blk_dims_tensor(tensor, dims) IF (ALLOCATED(tensor%contraction_storage)) THEN ASSOCIATE (batch_ranges => tensor%contraction_storage%batch_ranges) nbatches = sizes_of_arrays(tensor%contraction_storage%batch_ranges) - 1 ! for good load balancing the process grid dimensions should be chosen adapted to the ! tensor dimenions. For batched contraction the tensor dimensions should be divided by ! the number of batches (number of index ranges). DO idim = 1, ndims_tensor(tensor) CALL get_ith_array(tensor%contraction_storage%batch_ranges, idim, array) dims(idim) = array(nbatches(idim) + 1) - array(1) DEALLOCATE (array) dims(idim) = dims(idim)/nbatches(idim) IF (dims(idim) <= 0) dims(idim) = 1 END DO END ASSOCIATE END IF pgrid = dbcsr_t_nd_mp_comm(mp_comm, map1, map2, pdims_2d=pdims, tdims=dims, nsplit=nsplit, dimsplit=dimsplit) IF (ALLOCATED(tensor%contraction_storage)) THEN #:for ndim in range(1, maxdim+1) IF (ndims_tensor(tensor) == ${ndim}$) THEN CALL get_arrays(tensor%contraction_storage%batch_ranges, ${varlist("batch_range", nmax=ndim)}$) CALL dbcsr_t_change_pgrid(tensor, pgrid, ${varlist("batch_range", nmax=ndim)}$, & nodata=nodata, pgrid_changed=pgrid_changed, unit_nr=unit_nr) END IF #:endfor ELSE CALL dbcsr_t_change_pgrid(tensor, pgrid, nodata=nodata, pgrid_changed=pgrid_changed, unit_nr=unit_nr) END IF CALL dbcsr_t_pgrid_destroy(pgrid) END SUBROUTINE END MODULE ================================================ FILE: src/tensors/dbcsr_tensor.fypp ================================================ #!--------------------------------------------------------------------------------------------------! #! Copyright (C) by the DBCSR developers group - All rights reserved ! #! This file is part of the DBCSR library. ! #! ! #! For information on the license, see the LICENSE file. ! #! For further information please visit https://dbcsr.cp2k.org ! #! SPDX-License-Identifier: GPL-2.0+ ! #!--------------------------------------------------------------------------------------------------! #:mute #! maximum number of dimensions of fortran arrays #:set fortran_max_ndim = 7 #! maximum tensor rank #:set maxrank = 4 #! datatypes #:set dtype_float_prec = ['real_8', 'real_4', 'real_8', 'real_4'] #:set dtype_float_type = ['REAL(kind=real_8)', 'REAL(kind=real_4)', 'COMPLEX(kind=real_8)', 'COMPLEX(kind=real_4)'] #:set dtype_float_suffix = ['r_dp', 'r_sp', 'c_dp', 'c_sp'] #:set dtype_float_param = ['dbcsr_type_real_8', 'dbcsr_type_real_4', 'dbcsr_type_complex_8', 'dbcsr_type_complex_4'] #:set dtype_int4_type = ['INTEGER'] #:set dtype_int4_suffix = ['i'] #:set dtype_int4_param = ['dbcsr_type_int_4'] #:set dtype_int8_type = ['INTEGER(KIND=int_8)'] #:set dtype_int8_suffix = ['i8'] #:set dtype_int8_param = ['dbcsr_type_int_8'] #:set dtype_all_type = dtype_float_type + dtype_int4_type #:set dtype_all_suffix = dtype_float_suffix + dtype_int4_suffix #:set dtype_all_param = dtype_float_param + dtype_int4_param #:set dtype_int_type = dtype_int4_type + dtype_int8_type #:set dtype_int_suffix = dtype_int4_suffix + dtype_int8_suffix #:set dtype_int_param = dtype_int4_param + dtype_int8_param #:set dtype_float_list = list(zip(dtype_float_param, dtype_float_type, dtype_float_suffix)) #:set dtype_float_list_prec = list(zip(dtype_float_prec, dtype_float_param, dtype_float_type, dtype_float_suffix)) #:set dtype_int_list = list(zip(dtype_int_param, dtype_int_type, dtype_int_suffix)) #:set dtype_all_list = list(zip(dtype_all_param, dtype_all_type, dtype_all_suffix)) #:def arrlist(name, nmin=1, nmax=maxrank, ndim_pre=0, ndim_post=0) #! expand array into list of elements "name(1), name(2), ..., name(n) $: ", ".join([name + "(" + ":," * ndim_pre + str(i) + ",:"*ndim_post + ")" for i in range(nmin, nmax+1)]) #:enddef #:def varlist(name, nmin=1, nmax=maxrank, suffix="") #! create variable list "name_1, name_2, ..., name_n $: ", ".join([name + "_" + str(i) + suffix for i in range(nmin, nmax+1)]) #:enddef #:def shape_colon(n=maxrank) #! repeated colon ':' for e.g. assumed shape array notation $: ','.join([':']*n) #:enddef #:def shape_explicit(name, n=maxrank) #! explicit shape for pointer bounds remapping $: ", ".join(['LBOUND('+name+', '+ str(i) + '):UBOUND('+name+', '+str(i)+')' for i in range(1,n+1)]) #:enddef #:def uselist(list_in) #! comma-separated list of unique entries of list_in $: ", ".join(list(set(list_in))) #:enddef #! added #! c datatypes #: set base_dtype_float_type = ['REAL', 'REAL', 'COMPLEX', 'COMPLEX'] #: set cf_dtype_float_type = ['c_double', 'c_float', 'c_double_complex', 'c_float_complex'] #: set c_dtype_float_type = ['double', 'float', 'double _Complex', 'float _Complex'] #:set cf_dtype_float_list = list(zip(dtype_float_param, dtype_float_type, dtype_float_suffix, base_dtype_float_type, cf_dtype_float_type)) #:set cf_dtype_float_list_prec = list(zip(dtype_float_prec, dtype_float_param, dtype_float_type, dtype_float_suffix, base_dtype_float_type, cf_dtype_float_type)) #:set c_dtype_float_list = list(zip(dtype_float_suffix, c_dtype_float_type)) #:def varlist_equal(name, nmin=1, nmax=maxrank, suffix="", namesuffix="") #! create variable list "name_1=name_1, name_2=name_2, ..., name_n=name_n $: ", ".join([name + "_" + str(i) + suffix + " = " + namesuffix + name + "_" + str(i) + suffix for i in range(nmin, nmax+1)]) #:enddef #:def pointer_list(name, nmin=1, nmax=maxrank, suffix="") #! create pointer list "name_1(:), name_2(:), ..., name_n(:)" $: ", ".join([name + "_" + str(i) + suffix + "(" + ":" + ")" for i in range(nmin, nmax+1)]) #:enddef #:def c_varlist_and_size(name, nmin=1, nmax=maxrank, suffix="") #! create variable list "name_1, name_2, ..., name_n $: ", ".join([name + "_" + str(i) + ", " + name + "_" + str(i) + "_" + "size" + suffix for i in range(nmin, nmax+1)]) #:enddef #:def c_size(name, nmin=1, nmax=maxrank, suffix="") #! create variable list "name_1_size, name_2_size, ..., name_n_size $: ", ".join([name + "_" + str(i) + "_" + "size" + suffix for i in range(nmin, nmax+1)]) #:enddef #:def c_arrlist_and_size(name, nmin=1, nmax=maxrank) #! expand array into list of elements "name_1(name_1_size), name_2(name_2_size), ..., name_n(name_n_size) $: ", ".join([name + "_" + str(i) + "(" + name + "_" + str(i) + "_" + "size" + ")" for i in range(nmin, nmax+1)]) #:enddef #:def c_bind_pointer(name, nmin=1, nmax=maxrank, suffix="") #! bind c pointers: "name_1 => c_name_1 \n name_2 => c_name_2 ..." $: "\n ".join([name + "_" + str(i) + suffix + " => " + "c_" + name + "_" + str(i) + suffix for i in range(nmin, nmax+1)]) #:enddef #:def extern_varlist_and_size(name, type, nmin=1, nmax=maxrank, suffix="") #! create variable list "type* name_1, type name_1_size, type* name_2, type name_2_size ... $: ", ".join([type + "* " + name + "_" + str(i) + ", " + type + " " + name + "_" + str(i) + "_" + "size" + suffix for i in range(nmin, nmax+1)]) #:enddef #:def extern_alloc_varlist_and_size(name, nmin=1, nmax=maxrank, suffix="") #! create variable list "int* name_1, int name_1_size, int* name_2, int name_2_size ... $: ", ".join(["int** " + name + "_" + str(i) + ", " + "int* " + name + "_" + str(i) + "_" + "size" + suffix for i in range(nmin, nmax+1)]) #:enddef #! Handling optional arguments for non-interoperable types #:def add_num(num,numout) #! binary number counter e.g. [1,0,0,0] -> [0,1,0,0] #:set carry = 1 #:for i in range(0,len(num)) #:set outi = 0 #:if carry == 1 #:if num[i] == 0 #:set outi = 1 #:set carry = 0 #:else #:set outi = 0 #:set carry = 1 #:endif #:else #:set outi = num[i] #:endif #:mute $: numout.append(outi) #:endmute #:endfor #:enddef #:def init(list,n) #:mute #! fill a list with n zeros #:for i in range(n) $: list.append(0) #:endfor #:endmute #:enddef #:def gen_permlist(permlist,n) #:mute #! generates a list of permutations from n entries #! example n = 2 -> [[0,0],[0,1],[1,0],[1,1]] where 0/1 means present/not present #:set idx = [] #:set newidx = [] ${init(idx,n)}$ #:set imax = pow(2,n) #:for i in range(0,imax) $: permlist.append(idx) ${add_num(idx,newidx)}$ #:set idx = newidx #:set newidx = [] #:endfor #:endmute #:enddef #:def gen_vargroups(varlist,vargroups) #:mute #! generates permuted groups of variables from a variable list #! optional variables that appear together may be grouped #! example: varlist = [[var1], [var2,var3]] #! this gives: vargroups = [ [[var1],[var2,var3]], [[var1]], [[var2,var3]], []] #:set permlist = [] ${gen_permlist(permlist,len(varlist))}$ #:for p in permlist #:set group = [] #:for i in range(len(varlist)) #:if p[i] == 0 $: group.append(varlist[i]) #:endif #:endfor $: vargroups.append(group) #:endfor #:endmute #:enddef #:def flatten(group,flatgroup) #:mute #! flattens an array by one level: #! [[var1],[var2,var3]] -> [var1,var2,var3] #:for sub in group #:for x in sub $: flatgroup.append(x) #:endfor #:endfor #:endmute #:enddef #:def print_group(group, prefix=", ") #! for a group [[var1],[var2,var3]] #! prints "var1 = var1, var2 = var2, var3 = var3" #:set flatgroup = [item for sublist in group for item in sublist] $: prefix * (bool(len(group))) + ", ".join([str(i) + ' = ' + str(i) for i in flatgroup]) #:enddef #:def print_groupif(vargroups,varlist,i,check='PRESENT',prefix='') #! for a group [[var1]] and a varlist [[var1]],[var2,var3]] #! prints "(ELSE) IF (PRESENT(var1) .AND. .NOT. PRESENT(var2) .AND. .NOT. PRESENT(var3)) THEN" #! to be used in a loop #:set group = vargroups[i] #:set diff = [item for item in varlist if item not in group] #:set stat = "ELSE IF" #:if i == 0 #:set stat = "IF" #:elif i == len(vargroups) - 1 #:set stat = "ELSE" #:endif #:if stat != "ELSE" #:set flatgroup = [] #:set flatdiff = [] #:mute ${flatten(group,flatgroup)}$ ${flatten(diff,flatdiff)}$ #:endmute $: stat + "(" + " .AND. ".join([check + "(" + prefix + str(i) + ")" for i in flatgroup]) & + " .AND. " * (bool(len(diff)) * bool(len(diff) - len(varlist))) & + " .AND. ".join([".NOT. " + check + "(" + prefix + str(i) + ")" for i in flatdiff]) + ") THEN " #:else ELSE #:endif #:enddef #:endmute ================================================ FILE: src/tensors/dbcsr_tensor.h ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #ifndef DBCSR_TENSOR_H #define DBCSR_TENSOR_H #include #include /* we need bool from C99 */ #:include "dbcsr_tensor.fypp" #:set ndims = range(2, maxrank + 1) #:set ddims = range(1, maxrank + 1) typedef void* dbcsr_matrix; typedef void* dbcsr_t_tensor; typedef void* dbcsr_t_distribution; typedef void* dbcsr_t_pgrid; typedef void* dbcsr_t_iterator; #if defined(__cplusplus) extern "C" { #endif void c_dbcsr_t_finalize(const dbcsr_t_tensor tensor); void c_dbcsr_t_pgrid_create( const MPI_Fint* fcomm, int* c_dims, const int dims_size, dbcsr_t_pgrid* c_pgrid, const int* c_tensor_dims); void c_dbcsr_t_pgrid_create_expert(const MPI_Fint* fcomm, int* c_dims, const int dims_size, dbcsr_t_pgrid* c_pgrid, const int* c_map1_2d, const int map1_2d_size, const int* c_map2_2d, const int map2_2d_size, const int* c_tensor_dims, const int* nsplit, const int* dimsplit); void c_dbcsr_t_pgrid_destroy(dbcsr_t_pgrid* c_pgrid, const bool* c_keep_comm); void c_dbcsr_t_distribution_new( dbcsr_t_distribution* c_dist, const dbcsr_t_pgrid c_pgrid, ${extern_varlist_and_size("c_nd_dist", "const int")}$); void c_dbcsr_t_distribution_destroy(dbcsr_t_distribution* c_dist); void c_dbcsr_t_create_new(dbcsr_t_tensor* c_tensor, const char* c_name, const dbcsr_t_distribution c_dist, const int* c_map1_2d, const int c_map1_2d_size, const int* c_map2_2d, const int c_map2_2d_size, const int* data_type, ${extern_varlist_and_size("c_blk_size", "const int")}$); void c_dbcsr_t_create_template(const dbcsr_t_tensor c_tensor_in, dbcsr_t_tensor* c_tensor, const char* c_name, const void* c_dist, const int* c_map1_2d, const int map1_2d_size, const int* c_map2_2d, const int map2_2d_size, const int* data_type); void c_dbcsr_t_create_matrix(const dbcsr_matrix c_matrix_in, dbcsr_t_tensor* c_tensor, const int* c_order, const char* c_name); void c_dbcsr_t_destroy(dbcsr_t_tensor* c_tensor); #:for dsuffix, ctype in c_dtype_float_list #:for ndim in ndims void c_dbcsr_t_get_${ndim}$d_block_${dsuffix}$( const dbcsr_t_tensor c_tensor, const int tensor_dim, const int* c_ind, const int* c_sizes, ${ctype}$* c_block, bool* c_found); void c_dbcsr_t_put_${ndim}$d_block_${dsuffix}$(const dbcsr_t_tensor c_tensor, const int tensor_dim, const int* c_ind, const int* c_sizes, const ${ctype}$* c_block, const bool* c_summation, const ${ctype}$* c_scale); void c_dbcsr_t_get_${ndim}$d_block_p_${dsuffix}$( const dbcsr_t_tensor c_tensor, const int* c_ind, ${ctype}$** c_block, bool* c_found); #:endfor void c_dbcsr_t_get_data_${dsuffix}$(const dbcsr_t_tensor c_tensor, ${ctype}$** c_data, long long int* c_data_size, ${ctype}$ c_select_data_type, int* c_lb, int* c_ub); void c_dbcsr_t_contract_${dsuffix}$(const ${ctype}$ c_alpha, dbcsr_t_tensor c_tensor_1, dbcsr_t_tensor c_tensor_2, const ${ctype}$ c_beta, dbcsr_t_tensor c_tensor_3, const int* c_contract_1, const int c_contract_1_size, const int* c_notcontract_1, const int c_notcontract_1_size, const int* c_contract_2, const int c_contract_2_size, const int* c_notcontract_2, const int c_notcontract_2_size, const int* c_map_1, const int c_map_1_size, const int* c_map_2, const int c_map_2_size, const int* c_bounds_1, const int* c_bounds_2, const int* c_bounds_3, const bool* c_optimize_dist, dbcsr_t_pgrid* c_pgrid_opt_1, dbcsr_t_pgrid* c_pgrid_opt_2, dbcsr_t_pgrid* c_pgrid_opt_3, const double* filter_eps, long long int* flop, const bool* move_data, const bool* retain_sparsity, const int* unit_nr, const bool* log_verbose); void c_dbcsr_t_contract_index_${dsuffix}$(const ${ctype}$ c_alpha, dbcsr_t_tensor c_tensor_1, dbcsr_t_tensor c_tensor_2, const ${ctype}$ c_beta, dbcsr_t_tensor c_tensor_3, const int* c_contract_1, const int contract_1_size, const int* c_notcontract_1, const int notcontract_1_size, const int* c_contract_2, const int contract_2_size, const int* c_notcontract_2, const int notcontract_2_size, const int* c_map_1, const int map_1_size, const int* c_map_2, const int map_2_size, const int* c_bounds_1, const int* c_bounds_2, const int* c_bounds_3, const double* c_filter_eps, int* c_nblks_local, int* c_result_index, long long int result_index_size, int tensor3_dim); void c_dbcsr_t_filter_${dsuffix}$( const dbcsr_t_tensor c_tensor, const ${ctype}$ c_eps, const int* c_method, const bool* c_use_absolute); void c_dbcsr_t_set_${dsuffix}$(const dbcsr_t_tensor c_tensor, const ${ctype}$ c_alpha); void c_dbcsr_t_scale_${dsuffix}$(const dbcsr_t_tensor c_tensor, const ${ctype}$ c_alpha); #:endfor void c_dbcsr_t_get_stored_coordinates(const dbcsr_t_tensor c_tensor, const int tensor_dim, const int* c_ind_nd, int* c_processor); void c_dbcsr_t_reserve_blocks_index(const dbcsr_t_tensor c_tensor, const int nblocks, ${varlist("const int* c_blk_ind")}$); void c_dbcsr_t_reserve_blocks_template(const dbcsr_t_tensor c_tensor_in, const dbcsr_t_tensor tensor_out); int c_ndims_iterator(const dbcsr_t_iterator c_iterator); void c_dbcsr_t_iterator_start(dbcsr_t_iterator* c_iterator, const dbcsr_t_tensor c_tensor); void c_dbcsr_t_iterator_stop(dbcsr_t_iterator* c_iterator); void c_dbcsr_t_iterator_next_block(const dbcsr_t_iterator c_iterator, const int iterator_size, int* c_ind_nd, int* c_blk, int* c_blk_p, int* c_blk_size, int* c_blk_offset); bool c_dbcsr_t_iterator_blocks_left(const dbcsr_t_iterator c_iterator); void c_dbcsr_t_split_blocks(const dbcsr_t_tensor c_tensor_in, const int tensor_dim, dbcsr_t_tensor* c_tensor_out, const int* c_block_sizes, const bool* c_nodata); void c_dbcsr_t_copy_matrix_to_tensor(const dbcsr_matrix c_matrix_in, dbcsr_t_tensor c_tensor_out, const bool* c_summation); void c_dbcsr_t_copy_tensor_to_matrix(const dbcsr_t_tensor c_tensor_in, dbcsr_matrix c_matrix_out, const bool* c_summation); void c_dbcsr_t_copy(const dbcsr_t_tensor c_tensor_in, const int tensor_dim, dbcsr_t_tensor c_tensor_out, const int* c_order, const bool* c_summation, const int* c_bounds, const bool* c_move_data, const int* c_unit_nr); void c_dbcsr_t_clear(dbcsr_t_tensor c_tensor); void c_dbcsr_t_get_info(const dbcsr_t_tensor c_tensor, const int tensor_dim, int* c_nblks_total, int* c_nfull_total, int* c_nblks_local, int* c_nfull_local, int* c_pdims, int* my_ploc, ${varlist("int nblks_local")}$, ${varlist("int nblks_total")}$, ${varlist("int* c_blks_local")}$, ${varlist("int* c_proc_dist")}$, ${varlist("int* c_blk_size")}$, ${varlist("int* c_blk_offset")}$, dbcsr_t_distribution* c_distribution, char** name, int* data_type); void c_dbcsr_t_get_nd_index_blk(const dbcsr_t_tensor c_tensor, void** c_nd_index_blk); void c_dbcsr_t_get_nd_index(const dbcsr_t_tensor c_tensor, void** c_nd_index); void c_dbcsr_t_get_mapping_info(const dbcsr_t_tensor c_tensor, const int nd_size, const int nd_row_size, const int nd_col_size, int* ndim_nd, int* ndim1_2d, int* ndim2_2d, long long int* c_dims_2d_i8, int* c_dims_2d, int* c_dims_nd, int* c_dims1_2d, int* c_dims2_2d, int* c_map1_2d, int* c_map2_2d, int* c_map_nd, int* base, bool* c_col_major); int c_dbcsr_t_get_num_blocks(const dbcsr_t_tensor c_tensor); long long int c_dbcsr_t_get_num_blocks_total(const dbcsr_t_tensor c_tensor); void c_dbcsr_t_dims(const dbcsr_t_tensor c_tensor, const int tensor_dim, const int* c_dims); int c_dbcsr_t_ndims(const dbcsr_t_tensor c_tensor); int c_dbcsr_t_nblks_local(const dbcsr_t_tensor c_tensor, const int idim); int c_dbcsr_t_nblks_total(const dbcsr_t_tensor c_tensor, const int idim); int c_dbcsr_t_ndims_matrix_row(const dbcsr_t_tensor c_tensor); int c_dbcsr_t_ndims_matrix_column(const dbcsr_t_tensor c_tensor); int c_dbcsr_t_get_nze(const dbcsr_t_tensor c_tensor); long long int c_dbcsr_t_get_nze_total(const dbcsr_t_tensor c_tensor); int c_dbcsr_t_ndims_matrix_column(const dbcsr_t_tensor c_tensor); int c_dbcsr_t_get_nze(const dbcsr_t_tensor c_tensor); long long int c_dbcsr_t_get_nze_total(const dbcsr_t_tensor c_tensor); long long int c_dbcsr_t_max_nblks_local(const dbcsr_t_tensor c_tensor); void c_dbcsr_t_batched_contract_init(dbcsr_t_tensor c_tensor); void c_dbcsr_t_batched_contract_finalize(dbcsr_t_tensor c_tensor, int* c_unit_nr); #if defined(__cplusplus) } #endif #if defined(__cplusplus) // --------------------------------------------------- // // overloaded functions (cpp only) // // --------------------------------------------------- // #:for dsuffix, ctype in c_dtype_float_list inline void c_dbcsr_t_get_block( const dbcsr_t_tensor c_tensor, const int* c_ind, const int* c_sizes, ${ctype}$* c_block, bool* c_found) { int tensor_dim = c_dbcsr_t_ndims(c_tensor); switch (tensor_dim) { #:for ndim in ndims case ${ndim}$: c_dbcsr_t_get_${ndim}$d_block_${dsuffix}$(c_tensor, tensor_dim, c_ind, c_sizes, c_block, c_found); break; #:endfor } } inline void c_dbcsr_t_get_block_p(const dbcsr_t_tensor c_tensor, const int* c_ind, ${ctype}$** c_block, bool* c_found) { int tensor_dim = c_dbcsr_t_ndims(c_tensor); switch (tensor_dim) { #:for ndim in ndims case ${ndim}$: c_dbcsr_t_get_${ndim}$d_block_p_${dsuffix}$(c_tensor, c_ind, c_block, c_found); break; #:endfor } } #:endfor #:for dsuffix, ctype in c_dtype_float_list inline void c_dbcsr_t_put_block(const dbcsr_t_tensor c_tensor, const int* c_ind, const int* c_sizes, const ${ctype}$* c_block, const bool* c_summation, const ${ctype}$* c_scale) { int tensor_dim = c_dbcsr_t_ndims(c_tensor); switch (tensor_dim) { #:for ndim in ndims case ${ndim}$: c_dbcsr_t_put_${ndim}$d_block_${dsuffix}$(c_tensor, tensor_dim, c_ind, c_sizes, c_block, c_summation, c_scale); break; #:endfor } } #:endfor inline void c_dbcsr_t_get_stored_coordinates(const dbcsr_t_tensor c_tensor, const int* c_ind_nd, int* c_processor) { int tensor_dim = c_dbcsr_t_ndims(c_tensor); c_dbcsr_t_get_stored_coordinates(c_tensor, tensor_dim, c_ind_nd, c_processor); } inline void c_dbcsr_t_iterator_next_block( const dbcsr_t_iterator c_iterator, int* c_ind_nd, int* c_blk, int* c_blk_p, int* c_blk_size, int* c_blk_offset) { int iterator_size = c_ndims_iterator(c_iterator); c_dbcsr_t_iterator_next_block(c_iterator, iterator_size, c_ind_nd, c_blk, c_blk_p, c_blk_size, c_blk_offset); } #:for dsuffix, ctype in c_dtype_float_list inline void c_dbcsr_t_filter( const dbcsr_t_tensor c_tensor, const ${ctype}$ c_eps, const int* c_method, const bool* c_use_absolute) { c_dbcsr_t_filter_${dsuffix}$(c_tensor, c_eps, c_method, c_use_absolute); } inline void c_dbcsr_t_set(const dbcsr_t_tensor c_tensor, const ${ctype}$ c_alpha) { c_dbcsr_t_set_${dsuffix}$(c_tensor, c_alpha); } inline void c_dbcsr_t_scale(const dbcsr_t_tensor c_tensor, const ${ctype}$ c_alpha) { c_dbcsr_t_scale_${dsuffix}$(c_tensor, c_alpha); } inline void c_dbcsr_t_get_data_p(const dbcsr_t_tensor c_tensor, ${ctype}$** c_data, long long int* c_data_size, ${ctype}$ c_select_data_type, int* c_lb, int* c_ub) { c_dbcsr_t_get_data_${dsuffix}$(c_tensor, c_data, c_data_size, c_select_data_type, c_lb, c_ub); } #:endfor #endif #endif /*DBCSR_H*/ ================================================ FILE: src/tensors/dbcsr_tensor_api.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tensor_api !! This is the start of a dbcsr_tensor_api, all publically needed functions !! are exported here. The others remain private to the library. !! Currently, this is the CP2K used set. !! Ultimately, a reduced subset and well defined api will remain, !! possibly grouped in to standard and expert api. !! Currently, this is work in progress. USE dbcsr_tensor, ONLY: & dbcsr_t_contract, dbcsr_t_get_block, dbcsr_t_get_stored_coordinates, dbcsr_t_put_block, & dbcsr_t_reserve_blocks, dbcsr_t_copy_matrix_to_tensor, dbcsr_t_copy, & dbcsr_t_copy_tensor_to_matrix, dbcsr_t_batched_contract_init, & dbcsr_t_batched_contract_finalize, dbcsr_t_contract_index USE dbcsr_tensor_block, ONLY: & dbcsr_t_iterator_blocks_left, dbcsr_t_iterator_next_block, dbcsr_t_iterator_start, & dbcsr_t_iterator_stop, dbcsr_t_iterator_type, dbcsr_t_reserved_block_indices USE dbcsr_tensor_types, ONLY: & dbcsr_t_create, dbcsr_t_destroy, dbcsr_t_distribution_destroy, dbcsr_t_distribution_new, & dbcsr_t_distribution_type, dbcsr_t_nd_mp_comm_prv => dbcsr_t_nd_mp_comm, dbcsr_t_nd_mp_free, dbcsr_t_type, & dbcsr_t_pgrid_type, dbcsr_t_pgrid_create_prv => dbcsr_t_pgrid_create, & dbcsr_t_pgrid_create_expert_prv => dbcsr_t_pgrid_create_expert, dbcsr_t_pgrid_destroy, & dbcsr_t_set, dbcsr_t_filter, & dbcsr_t_mp_environ_pgrid => mp_environ_pgrid, dbcsr_t_blk_sizes, dbcsr_t_get_info, & dbcsr_t_finalize, dbcsr_t_scale, dbcsr_t_get_nze, dbcsr_t_get_nze_total, & dbcsr_t_get_num_blocks, dbcsr_t_get_num_blocks_total, dbcsr_t_clear, & dbcsr_t_mp_dims_create, dbcsr_t_pgrid_change_dims, dbcsr_t_ndims => ndims_tensor, & dbcsr_t_dims => dims_tensor, dbcsr_t_ndims_matrix_row => ndims_matrix_row, & dbcsr_t_ndims_matrix_column => ndims_matrix_column, dbcsr_t_blk_size, dbcsr_t_nblks_local, & dbcsr_t_nblks_total, dbcsr_t_max_nblks_local, dbcsr_t_default_distvec USE dbcsr_tensor_test, ONLY: & dbcsr_t_contract_test, dbcsr_t_checksum USE dbcsr_tensor_split, ONLY: & dbcsr_t_split_blocks USE dbcsr_tensor_index, ONLY: & dbcsr_t_get_mapping_info USE dbcsr_tensor_io, ONLY: & dbcsr_t_write_tensor_info, dbcsr_t_write_split_info, dbcsr_t_write_blocks, dbcsr_t_write_tensor_dist USE dbcsr_mpiwrap, ONLY: mp_comm_type IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_api' PUBLIC :: dbcsr_t_contract, dbcsr_t_contract_test PUBLIC :: dbcsr_t_get_block PUBLIC :: dbcsr_t_get_stored_coordinates PUBLIC :: dbcsr_t_put_block PUBLIC :: dbcsr_t_reserve_blocks PUBLIC :: dbcsr_t_create PUBLIC :: dbcsr_t_destroy PUBLIC :: dbcsr_t_distribution_destroy PUBLIC :: dbcsr_t_distribution_new PUBLIC :: dbcsr_t_distribution_type PUBLIC :: dbcsr_t_nd_mp_comm PUBLIC :: dbcsr_t_nd_mp_free PUBLIC :: dbcsr_t_type PUBLIC :: dbcsr_t_iterator_next_block PUBLIC :: dbcsr_t_iterator_blocks_left PUBLIC :: dbcsr_t_iterator_stop PUBLIC :: dbcsr_t_iterator_start PUBLIC :: dbcsr_t_iterator_type PUBLIC :: dbcsr_t_split_blocks PUBLIC :: dbcsr_t_pgrid_type PUBLIC :: dbcsr_t_pgrid_create PUBLIC :: dbcsr_t_pgrid_create_expert PUBLIC :: dbcsr_t_pgrid_destroy PUBLIC :: dbcsr_t_set PUBLIC :: dbcsr_t_filter PUBLIC :: dbcsr_t_mp_environ_pgrid PUBLIC :: dbcsr_t_copy_matrix_to_tensor PUBLIC :: dbcsr_t_blk_sizes PUBLIC :: dbcsr_t_copy PUBLIC :: dbcsr_t_copy_tensor_to_matrix PUBLIC :: dbcsr_t_get_info PUBLIC :: dbcsr_t_checksum PUBLIC :: dbcsr_t_finalize PUBLIC :: dbcsr_t_scale PUBLIC :: dbcsr_t_get_num_blocks, dbcsr_t_get_num_blocks_total PUBLIC :: dbcsr_t_get_nze, dbcsr_t_get_nze_total PUBLIC :: dbcsr_t_clear PUBLIC :: dbcsr_t_get_mapping_info PUBLIC :: dbcsr_t_write_split_info PUBLIC :: dbcsr_t_write_blocks PUBLIC :: dbcsr_t_write_tensor_dist PUBLIC :: dbcsr_t_write_tensor_info PUBLIC :: dbcsr_t_mp_dims_create PUBLIC :: dbcsr_t_batched_contract_init PUBLIC :: dbcsr_t_batched_contract_finalize PUBLIC :: dbcsr_t_ndims PUBLIC :: dbcsr_t_dims PUBLIC :: dbcsr_t_pgrid_change_dims PUBLIC :: dbcsr_t_reserved_block_indices PUBLIC :: dbcsr_t_contract_index PUBLIC :: dbcsr_t_ndims_matrix_row PUBLIC :: dbcsr_t_ndims_matrix_column PUBLIC :: dbcsr_t_nblks_local PUBLIC :: dbcsr_t_nblks_total PUBLIC :: dbcsr_t_blk_size PUBLIC :: dbcsr_t_max_nblks_local PUBLIC :: dbcsr_t_default_distvec CONTAINS FUNCTION dbcsr_t_nd_mp_comm(comm_2d, map1_2d, map2_2d, dims_nd, dims1_nd, dims2_nd, pdims_2d, tdims, & nsplit, dimsplit) INTEGER, INTENT(IN) :: comm_2d INTEGER, DIMENSION(:), INTENT(IN) :: map1_2d, map2_2d INTEGER, DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)), & INTENT(IN), OPTIONAL :: dims_nd INTEGER, DIMENSION(SIZE(map1_2d)), INTENT(IN), OPTIONAL :: dims1_nd INTEGER, DIMENSION(SIZE(map2_2d)), INTENT(IN), OPTIONAL :: dims2_nd INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL :: pdims_2d INTEGER, DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)), & INTENT(IN), OPTIONAL :: tdims INTEGER, INTENT(IN), OPTIONAL :: nsplit, dimsplit TYPE(dbcsr_t_pgrid_type) :: dbcsr_t_nd_mp_comm TYPE(mp_comm_type) :: my_comm_2d CALL my_comm_2d%set_handle(comm_2d) dbcsr_t_nd_mp_comm = dbcsr_t_nd_mp_comm_prv(my_comm_2d, map1_2d, map2_2d, & dims_nd, dims1_nd, dims2_nd, pdims_2d, tdims, & nsplit, dimsplit) END FUNCTION dbcsr_t_nd_mp_comm SUBROUTINE dbcsr_t_pgrid_create_expert(mp_comm, dims, pgrid, map1_2d, map2_2d, tensor_dims, nsplit, dimsplit) INTEGER, INTENT(IN) :: mp_comm INTEGER, DIMENSION(:), INTENT(INOUT) :: dims TYPE(dbcsr_t_pgrid_type), INTENT(OUT) :: pgrid INTEGER, DIMENSION(:), INTENT(IN) :: map1_2d, map2_2d INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: tensor_dims INTEGER, INTENT(IN), OPTIONAL :: nsplit, dimsplit TYPE(mp_comm_type) :: my_mp_comm CALL my_mp_comm%set_handle(mp_comm) CALL dbcsr_t_pgrid_create_expert_prv(my_mp_comm, dims, pgrid, map1_2d, map2_2d, tensor_dims, nsplit, dimsplit) END SUBROUTINE dbcsr_t_pgrid_create_expert SUBROUTINE dbcsr_t_pgrid_create(mp_comm, dims, pgrid, tensor_dims) INTEGER, INTENT(IN) :: mp_comm INTEGER, DIMENSION(:), INTENT(INOUT) :: dims TYPE(dbcsr_t_pgrid_type), INTENT(OUT) :: pgrid INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: tensor_dims TYPE(mp_comm_type) :: my_mp_comm CALL my_mp_comm%set_handle(mp_comm) CALL dbcsr_t_pgrid_create_prv(my_mp_comm, dims, pgrid, tensor_dims) END SUBROUTINE dbcsr_t_pgrid_create END MODULE dbcsr_tensor_api ================================================ FILE: src/tensors/dbcsr_tensor_api_c.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! #:include "dbcsr_tensor.fypp" #:set ndims = range(2,maxrank+1) #:set ddims = range(1,maxrank+1) MODULE dbcsr_tensor_api_c USE, INTRINSIC :: ISO_C_BINDING, ONLY: c_loc, c_ptr, c_double, c_sizeof, C_NULL_CHAR, & c_float, c_f_pointer, c_int, c_long_long, & c_char, c_null_ptr, c_bool, c_associated, & c_float_complex, c_double_complex USE dbcsr_api, ONLY: dbcsr_type, dbcsr_scale USE dbcsr_allocate_wrap, ONLY: allocate_any USE dbcsr_tensor_api USE dbcsr_kinds, ONLY: & ${uselist(dtype_float_prec)}$, default_string_length, int_8 USE dbcsr_data_types, ONLY: dbcsr_scalar_type USE dbcsr_data_methods, ONLY: dbcsr_scalar USE dbcsr_machine, ONLY: default_output_unit USE dbcsr_tensor_index, ONLY: & dbcsr_t_get_mapping_info, ndims_mapping, nd_to_2d_mapping USE dbcsr_tensor_types, ONLY: dbcsr_t_create, dbcsr_t_type USE dbcsr_tas_types, ONLY: dbcsr_tas_type USE dbcsr_tas_base, ONLY: dbcsr_tas_get_block_p USE dbcsr_tensor_index, ONLY: get_2d_indices_tensor USE dbcsr_data_methods, ONLY: dbcsr_get_data_p IMPLICIT NONE PRIVATE CONTAINS SUBROUTINE c_f_string(c_str, str) USE, INTRINSIC :: iso_c_binding, ONLY: c_ptr, c_f_pointer, c_char TYPE(c_ptr), INTENT(in) :: c_str CHARACTER(kind=c_char), POINTER :: arr(:) CHARACTER(:, kind=c_char), ALLOCATABLE, INTENT(out) :: str INTEGER(8) :: n, i INTERFACE ! steal std c library function rather than writing our own. FUNCTION strlen(s) bind(c, name='strlen') USE, INTRINSIC :: iso_c_binding, ONLY: c_ptr, c_size_t IMPLICIT NONE !---- TYPE(c_ptr), INTENT(in), value :: s INTEGER(c_size_t) :: strlen END FUNCTION strlen END INTERFACE n = strlen(c_str) !**** CALL c_f_pointer(c_str, arr, [n]) ALLOCATE (CHARACTER(len=n) :: str) DO i = 1, n str(i:i) = arr(i) END DO END SUBROUTINE c_f_string SUBROUTINE c_dbcsr_t_finalize(c_tensor) BIND(C, name="c_dbcsr_t_finalize") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor TYPE(dbcsr_t_type), POINTER :: tensor CALL c_f_pointer(c_tensor, tensor) CALL dbcsr_t_finalize(tensor) END SUBROUTINE SUBROUTINE c_dbcsr_t_pgrid_create_expert(fcomm, c_dims, dims_size, c_pgrid, & c_map1_2d, map1_2d_size, c_map2_2d, & map2_2d_size, c_tensor_dims, nsplit, dimsplit) & bind(C, name="c_dbcsr_t_pgrid_create_expert") INTEGER(kind=c_int), INTENT(in) :: fcomm INTEGER(kind=c_int), INTENT(in), value :: dims_size TYPE(c_ptr), INTENT(out) :: c_pgrid INTEGER(kind=c_int), INTENT(out) :: c_dims(dims_size) INTEGER(kind=c_int), INTENT(out), OPTIONAL, & DIMENSION(dims_size) :: c_tensor_dims INTEGER(kind=c_int), INTENT(in), VALUE :: map1_2d_size INTEGER(kind=c_int), INTENT(in) :: c_map1_2d(map1_2d_size) INTEGER(kind=c_int), INTENT(in), VALUE :: map2_2d_size INTEGER(kind=c_int), INTENT(in) :: c_map2_2d(map2_2d_size) INTEGER(kind=c_int), INTENT(in), OPTIONAL :: nsplit, dimsplit TYPE(dbcsr_t_pgrid_type), POINTER :: pgrid ALLOCATE (pgrid) CALL dbcsr_t_pgrid_create_expert(fcomm, c_dims, pgrid, c_map1_2d + 1, c_map2_2d + 1, c_tensor_dims, & nsplit, dimsplit) c_pgrid = c_loc(pgrid) END SUBROUTINE SUBROUTINE c_dbcsr_t_pgrid_create(fcomm, c_dims, dims_size, c_pgrid, c_tensor_dims) & bind(C, name="c_dbcsr_t_pgrid_create") INTEGER(kind=c_int), INTENT(in) :: fcomm INTEGER(kind=c_int), INTENT(in), value :: dims_size TYPE(c_ptr), INTENT(out) :: c_pgrid INTEGER(kind=c_int), INTENT(out) :: c_dims(dims_size) INTEGER(kind=c_int), INTENT(in), OPTIONAL :: c_tensor_dims(dims_size) TYPE(dbcsr_t_pgrid_type), POINTER :: pgrid ALLOCATE (pgrid) IF (PRESENT(c_tensor_dims)) THEN CALL dbcsr_t_pgrid_create(fcomm, c_dims, pgrid, c_tensor_dims) ELSE CALL dbcsr_t_pgrid_create(fcomm, c_dims, pgrid) END IF c_pgrid = c_loc(pgrid) END SUBROUTINE SUBROUTINE c_dbcsr_t_pgrid_destroy(c_pgrid, c_keep_comm) & BIND(C, name="c_dbcsr_t_pgrid_destroy") TYPE(c_ptr), INTENT(INOUT) :: c_pgrid LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_keep_comm TYPE(dbcsr_t_pgrid_type), POINTER :: pgrid LOGICAL :: keep_comm CALL c_f_pointer(c_pgrid, pgrid) IF (PRESENT(c_keep_comm)) THEN keep_comm = c_keep_comm CALL dbcsr_t_pgrid_destroy(pgrid, keep_comm) ELSE CALL dbcsr_t_pgrid_destroy(pgrid) END IF IF (ASSOCIATED(pgrid)) DEALLOCATE (pgrid) c_pgrid = c_null_ptr END SUBROUTINE SUBROUTINE c_dbcsr_t_distribution_new(c_dist, c_pgrid, ${c_varlist_and_size("c_nd_dist")}$) & bind(C, name="c_dbcsr_t_distribution_new") TYPE(c_ptr), INTENT(OUT) :: c_dist TYPE(c_ptr), INTENT(IN), value :: c_pgrid INTEGER(kind=c_int), INTENT(in), value :: ${varlist("c_nd_dist", suffix="_size")}$ INTEGER(kind=c_int), INTENT(IN), TARGET, OPTIONAL :: ${c_arrlist_and_size("c_nd_dist")}$ TYPE(dbcsr_t_pgrid_type), POINTER :: pgrid TYPE(dbcsr_t_distribution_type), POINTER :: dist INTEGER, DIMENSION(:), POINTER :: ${varlist("nd_dist")}$ ALLOCATE (dist) CALL c_f_pointer(c_pgrid, pgrid) #:for i in range(1, maxrank+1) NULLIFY (nd_dist_${i}$) IF (PRESENT(c_nd_dist_${i}$)) THEN nd_dist_${i}$ => c_nd_dist_${i}$ END IF #:endfor CALL dbcsr_t_distribution_new(dist, pgrid, ${varlist("nd_dist")}$) c_dist = c_loc(dist) END SUBROUTINE SUBROUTINE c_dbcsr_t_distribution_destroy(c_dist) BIND(C, name="c_dbcsr_t_distribution_destroy") TYPE(c_ptr), INTENT(INOUT) :: c_dist TYPE(dbcsr_t_distribution_type), POINTER :: dist CALL c_f_pointer(c_dist, dist) CALL dbcsr_t_distribution_destroy(dist) IF (ASSOCIATED(dist)) DEALLOCATE (dist) c_dist = c_null_ptr END SUBROUTINE SUBROUTINE c_dbcsr_t_create_new(c_tensor, c_name, c_dist, c_map1_2d, map1_2d_size, & c_map2_2d, map2_2d_size, c_data_type, ${c_varlist_and_size("c_blk_size")}$) & bind(C, name="c_dbcsr_t_create_new") TYPE(c_ptr), INTENT(OUT) :: c_tensor TYPE(c_ptr), INTENT(IN), value :: c_dist, c_name INTEGER(kind=c_int), INTENT(in), value :: map1_2d_size INTEGER(kind=c_int), INTENT(in), TARGET :: c_map1_2d(map1_2d_size) INTEGER(kind=c_int), INTENT(in), value :: map2_2d_size INTEGER(kind=c_int), INTENT(in), TARGET :: c_map2_2d(map2_2d_size) INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_data_type INTEGER(kind=c_int), INTENT(in), value :: ${varlist("c_blk_size", suffix="_size")}$ INTEGER(kind=c_int), INTENT(IN), TARGET, OPTIONAL :: ${c_arrlist_and_size("c_blk_size")}$ CHARACTER(:, kind=c_char), ALLOCATABLE :: fname TYPE(dbcsr_t_type), POINTER :: tensor TYPE(dbcsr_t_distribution_type), POINTER :: dist INTEGER, DIMENSION(:), POINTER :: ${varlist("blk_size")}$ ALLOCATE (tensor) CALL c_f_pointer(c_dist, dist) CALL c_f_string(c_name, fname) #:for i in range(1, maxrank+1) NULLIFY (blk_size_${i}$) IF (PRESENT(c_blk_size_${i}$)) THEN blk_size_${i}$ => c_blk_size_${i}$ END IF #:endfor CALL dbcsr_t_create(tensor, fname, dist, c_map1_2d + 1, c_map2_2d + 1, c_data_type, & ${varlist("blk_size")}$) c_tensor = c_loc(tensor) END SUBROUTINE SUBROUTINE c_dbcsr_t_create_template(c_tensor_in, c_tensor, c_name, c_dist, & c_map1_2d, map1_2d_size, c_map2_2d, map2_2d_size, data_type) & BIND(C, name="c_dbcsr_t_create_template") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor_in TYPE(c_ptr), INTENT(OUT) :: c_tensor TYPE(c_ptr), INTENT(IN), VALUE :: c_name TYPE(c_ptr), INTENT(IN), VALUE :: c_dist INTEGER(kind=c_int), INTENT(in), value :: map1_2d_size INTEGER(kind=c_int), INTENT(in), TARGET, OPTIONAL :: c_map1_2d(map1_2d_size) INTEGER(kind=c_int), INTENT(in), value :: map2_2d_size INTEGER(kind=c_int), INTENT(in), TARGET, OPTIONAL :: c_map2_2d(map2_2d_size) INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: data_type TYPE(dbcsr_t_type), POINTER :: tensor_in TYPE(dbcsr_t_type), POINTER :: tensor CHARACTER(:, kind=c_char), ALLOCATABLE :: fname TYPE(dbcsr_t_distribution_type), POINTER :: dist INTEGER, DIMENSION(:), POINTER :: map1_2d, map2_2d CALL c_f_pointer(c_tensor_in, tensor_in) IF (c_associated(c_name)) CALL c_f_string(c_name, fname) ALLOCATE (tensor) NULLIFY (dist) IF (C_ASSOCIATED(c_dist)) CALL c_f_pointer(c_dist, dist) NULLIFY (map1_2d, map2_2d) IF (PRESENT(c_map1_2d) .AND. PRESENT(c_map2_2d)) THEN ALLOCATE (map1_2d(SIZE(c_map1_2d))) ALLOCATE (map2_2d(SIZE(c_map2_2d))) map1_2d = c_map1_2d + 1 map2_2d = c_map2_2d + 1 END IF CALL dbcsr_t_create(tensor_in, tensor, fname, dist, & map1_2d, map2_2d, data_type) c_tensor = c_loc(tensor) IF (ASSOCIATED(map1_2d)) DEALLOCATE (map1_2d) IF (ASSOCIATED(map2_2d)) DEALLOCATE (map2_2d) END SUBROUTINE SUBROUTINE c_dbcsr_t_create_matrix(c_matrix_in, c_tensor, c_order, c_name) & BIND(C, name="c_dbcsr_t_create_matrix") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_in TYPE(c_ptr), INTENT(OUT) :: c_tensor INTEGER(kind=c_int), INTENT(IN), DIMENSION(2), & OPTIONAL :: c_order TYPE(c_ptr), INTENT(IN), OPTIONAL :: c_name TYPE(dbcsr_type), POINTER :: matrix_in TYPE(dbcsr_t_type), POINTER :: tensor INTEGER, DIMENSION(2) :: order CHARACTER(:, kind=c_char), ALLOCATABLE :: fname CALL c_f_pointer(c_matrix_in, matrix_in) IF (PRESENT(c_name)) CALL c_f_string(c_name, fname) IF (PRESENT(c_order)) THEN order = c_order + 1 ELSE order = [1, 2] END IF ALLOCATE (tensor) CALL dbcsr_t_create(matrix_in, tensor, order, fname) c_tensor = c_loc(tensor) END SUBROUTINE SUBROUTINE c_dbcsr_t_destroy(c_tensor) BIND(C, name="c_dbcsr_t_destroy") TYPE(c_ptr), INTENT(INOUT) :: c_tensor TYPE(dbcsr_t_type), POINTER :: tensor CALL c_f_pointer(c_tensor, tensor) CALL dbcsr_t_destroy(tensor) IF (ASSOCIATED(tensor)) DEALLOCATE (tensor) c_tensor = c_null_ptr END SUBROUTINE #:for dparam, dtype, dsuffix, dbase, dctype in cf_dtype_float_list SUBROUTINE c_dbcsr_t_contract_${dsuffix}$ (c_alpha, c_tensor_1, c_tensor_2, c_beta, c_tensor_3, & c_contract_1, contract_1_size, & c_notcontract_1, notcontract_1_size, & c_contract_2, contract_2_size, & c_notcontract_2, notcontract_2_size, & c_map_1, map_1_size, c_map_2, map_2_size, & c_bounds_1, c_bounds_2, c_bounds_3, & c_optimize_dist, c_pgrid_opt_1, c_pgrid_opt_2, c_pgrid_opt_3, & c_filter_eps, c_flop, c_move_data, c_retain_sparsity, & c_unit_nr, c_log_verbose) & BIND(C, name="c_dbcsr_t_contract_${dsuffix}$") ${dbase}$ (kind=${dctype}$), INTENT(IN), VALUE :: c_alpha TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor_1, c_tensor_2 ${dbase}$ (kind=${dctype}$), INTENT(IN), VALUE :: c_beta TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor_3 INTEGER(kind=c_int), INTENT(IN), VALUE :: contract_1_size, contract_2_size INTEGER(kind=c_int), INTENT(IN), VALUE :: notcontract_1_size, notcontract_2_size INTEGER(kind=c_int), INTENT(IN), VALUE :: map_1_size, map_2_size INTEGER(kind=c_int), INTENT(IN), TARGET :: c_contract_1(contract_1_size), c_contract_2(contract_2_size) INTEGER(kind=c_int), INTENT(IN), TARGET :: c_map_1(map_1_size), c_map_2(map_2_size) INTEGER(kind=c_int), INTENT(IN), TARGET :: c_notcontract_1(notcontract_1_size), c_notcontract_2(notcontract_2_size) INTEGER(kind=c_int), INTENT(IN), DIMENSION(2, contract_1_size), & OPTIONAL :: c_bounds_1 INTEGER(kind=c_int), INTENT(IN), DIMENSION(2, notcontract_1_size), & OPTIONAL :: c_bounds_2 INTEGER(kind=c_int), INTENT(IN), DIMENSION(2, notcontract_2_size), & OPTIONAL :: c_bounds_3 LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_optimize_dist TYPE(c_ptr), INTENT(OUT), OPTIONAL :: c_pgrid_opt_1, c_pgrid_opt_2, c_pgrid_opt_3 REAL(kind=c_double), INTENT(IN), OPTIONAL :: c_filter_eps INTEGER(kind=c_long_long), INTENT(INOUT), OPTIONAL :: c_flop LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_move_data LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_retain_sparsity INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_unit_nr LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_log_verbose TYPE(dbcsr_t_type), POINTER :: tensor_1 TYPE(dbcsr_t_type), POINTER :: tensor_2 TYPE(dbcsr_t_type), POINTER :: tensor_3 LOGICAL, POINTER :: optimize_dist TYPE(dbcsr_t_pgrid_type), POINTER :: pgrid_opt_1, pgrid_opt_2, pgrid_opt_3 INTEGER, DIMENSION(:, :), ALLOCATABLE :: bounds_1, bounds_2, bounds_3 LOGICAL, POINTER :: move_data LOGICAL, POINTER :: retain_sparsity LOGICAL, POINTER :: log_verbose CALL c_f_pointer(c_tensor_1, tensor_1) CALL c_f_pointer(c_tensor_2, tensor_2) CALL c_f_pointer(c_tensor_3, tensor_3) #:for dim in range(1,4) IF (PRESENT(c_bounds_${dim}$)) THEN ALLOCATE (bounds_${dim}$ (2, SIZE(c_bounds_${dim}$, 2))) bounds_${dim}$ (:, :) = c_bounds_${dim}$ (:, :) + 1 END IF #:endfor #:set list = ['optimize_dist', 'move_data', 'retain_sparsity', 'log_verbose'] #:for var in list NULLIFY (${var}$) IF (PRESENT(c_${var}$)) THEN ALLOCATE (${var}$) ${var}$ = c_${var}$ END IF #:endfor #:set optvars = [['pgrid_opt_1'],['pgrid_opt_2'],['pgrid_opt_3']] #:set optgroups = [] ${gen_vargroups(optvars,optgroups)}$ #:for var in optvars NULLIFY (${var[0]}$) #:endfor #:for i in range(len(optgroups)) ${print_groupif(optgroups,optvars,i,'PRESENT','c_')}$ CALL dbcsr_t_contract(alpha=dbcsr_scalar(c_alpha), tensor_1=tensor_1, & tensor_2=tensor_2, beta=dbcsr_scalar(c_beta), & tensor_3=tensor_3, contract_1=c_contract_1 + 1, & notcontract_1=c_notcontract_1 + 1, & contract_2=c_contract_2 + 1, notcontract_2=c_notcontract_2 + 1, & map_1=c_map_1 + 1, map_2=c_map_2 + 1, & bounds_1=bounds_1, bounds_2=bounds_2, bounds_3=bounds_3, & optimize_dist=optimize_dist & ${print_group(optgroups[i])}$, & filter_eps=c_filter_eps, flop=c_flop, move_data=move_data, & retain_sparsity=retain_sparsity, unit_nr=c_unit_nr, & log_verbose=log_verbose) #:endfor $:"ENDIF" #:for dim in range(1,4) IF (PRESENT(c_pgrid_opt_${dim}$)) c_pgrid_opt_${dim}$ = c_loc(pgrid_opt_${dim}$) #:endfor #:set list = ['optimize_dist', 'move_data', 'retain_sparsity', 'log_verbose'] #:for var in list IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$) #:endfor #:for dim in range(1,4) IF (ALLOCATED(bounds_${dim}$)) DEALLOCATE (bounds_${dim}$) #:endfor IF (PRESENT(c_unit_nr)) THEN IF (c_unit_nr .GE. 0) THEN flush (c_unit_nr) END IF END IF END SUBROUTINE SUBROUTINE c_dbcsr_t_contract_index_${dsuffix}$ (c_alpha, c_tensor_1, & c_tensor_2, c_beta, c_tensor_3, & c_contract_1, contract_1_size, & c_notcontract_1, notcontract_1_size, & c_contract_2, contract_2_size, & c_notcontract_2, notcontract_2_size, & c_map_1, map_1_size, c_map_2, map_2_size, & c_bounds_1, c_bounds_2, c_bounds_3, & c_filter_eps, c_nblks_local, c_result_index, & result_index_size, tensor3_dim) & BIND(C, name="c_dbcsr_t_contract_index_${dsuffix}$") ${dbase}$ (kind=${dctype}$), INTENT(IN), VALUE :: c_alpha TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor_1, c_tensor_2 ${dbase}$ (kind=${dctype}$), INTENT(IN), VALUE :: c_beta TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor_3 INTEGER(kind=c_int), INTENT(IN), VALUE :: contract_1_size, contract_2_size INTEGER(kind=c_int), INTENT(IN), VALUE :: notcontract_1_size, notcontract_2_size INTEGER(kind=c_int), INTENT(IN), VALUE :: map_1_size, map_2_size INTEGER(kind=c_int), INTENT(IN) :: c_contract_1(contract_1_size), c_contract_2(contract_2_size) INTEGER(kind=c_int), INTENT(IN) :: c_map_1(map_1_size), c_map_2(map_2_size) INTEGER(kind=c_int), INTENT(IN) :: c_notcontract_1(notcontract_1_size), c_notcontract_2(notcontract_2_size) INTEGER(kind=c_int), INTENT(IN), DIMENSION(2, contract_1_size), & OPTIONAL :: c_bounds_1 INTEGER(kind=c_int), INTENT(IN), DIMENSION(2, notcontract_1_size), & OPTIONAL :: c_bounds_2 INTEGER(kind=c_int), INTENT(IN), DIMENSION(2, notcontract_2_size), & OPTIONAL :: c_bounds_3 REAL(kind=c_double), INTENT(IN), OPTIONAL :: c_filter_eps INTEGER(kind=c_int), INTENT(OUT) :: c_nblks_local INTEGER(kind=c_long_long), INTENT(IN), VALUE :: result_index_size INTEGER(kind=c_int), INTENT(IN), VALUE :: tensor3_dim INTEGER(kind=c_int), DIMENSION(result_index_size, tensor3_dim), & INTENT(OUT) :: c_result_index TYPE(dbcsr_t_type), POINTER :: tensor_1 TYPE(dbcsr_t_type), POINTER :: tensor_2 TYPE(dbcsr_t_type), POINTER :: tensor_3 INTEGER, DIMENSION(:, :), POINTER :: bounds_1, bounds_2, bounds_3 INTEGER, DIMENSION(result_index_size, tensor3_dim) :: result_index CALL c_f_pointer(c_tensor_1, tensor_1) CALL c_f_pointer(c_tensor_2, tensor_2) CALL c_f_pointer(c_tensor_3, tensor_3) #:for dim in range(1,4) NULLIFY (bounds_${dim}$) IF (PRESENT(c_bounds_${dim}$)) THEN ALLOCATE (bounds_${dim}$ (2, SIZE(c_bounds_${dim}$, 2))) bounds_${dim}$ = c_bounds_${dim}$+1 END IF #:endfor CALL dbcsr_t_contract_index(dbcsr_scalar(c_alpha), tensor_1, & tensor_2, dbcsr_scalar(c_beta), tensor_3, & c_contract_1 + 1, c_notcontract_1 + 1, & c_contract_2 + 1, c_notcontract_2 + 1, & c_map_1 + 1, c_map_2 + 1, & bounds_1, bounds_2, bounds_3, & c_filter_eps, c_nblks_local, result_index) c_result_index = result_index - 1 #:for dim in range(1,4) IF (ASSOCIATED(bounds_${dim}$)) DEALLOCATE (bounds_${dim}$) #:endfor END SUBROUTINE #:endfor #:for dparam, dtype, dsuffix, basetype, cftype in cf_dtype_float_list #:for ndim in ndims SUBROUTINE c_dbcsr_t_get_${ndim}$d_block_${dsuffix}$ (c_tensor, tensor_dim, c_ind, c_sizes, c_block, c_found) & BIND(C, name="c_dbcsr_t_get_${ndim}$d_block_${dsuffix}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor INTEGER(kind=c_int), INTENT(IN), VALUE :: tensor_dim INTEGER(kind=c_int), DIMENSION(tensor_dim), & INTENT(IN) :: c_ind INTEGER(kind=c_int), DIMENSION(tensor_dim), & INTENT(IN) :: c_sizes ${basetype}$ (kind=${cftype}$), & DIMENSION(${arrlist("c_sizes", nmax=ndim)}$), & INTENT(OUT) :: c_block LOGICAL(kind=c_bool), INTENT(OUT) :: c_found TYPE(dbcsr_t_type), POINTER :: tensor LOGICAL :: found CALL c_f_pointer(c_tensor, tensor) CALL dbcsr_t_get_block(tensor, c_ind + 1, c_sizes, c_block, found) c_found = LOGICAL(found, kind=c_bool) END SUBROUTINE #:endfor #:endfor #:for dparam, dtype, dsuffix, basetype, cftype in cf_dtype_float_list #:for ndim in ndims SUBROUTINE c_dbcsr_t_put_${ndim}$d_block_${dsuffix}$ (c_tensor, tensor_dim, c_ind, c_sizes, & c_block, c_summation, c_scale) & BIND(C, name="c_dbcsr_t_put_${ndim}$d_block_${dsuffix}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor INTEGER(kind=c_int), INTENT(IN), VALUE :: tensor_dim INTEGER(kind=c_int), DIMENSION(tensor_dim), & INTENT(IN) :: c_ind INTEGER(kind=c_int), DIMENSION(tensor_dim), & INTENT(IN) :: c_sizes ${basetype}$ (kind=${cftype}$), INTENT(IN), & DIMENSION(${arrlist("c_sizes", nmax=ndim)}$) :: c_block LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_summation ${basetype}$ (kind=${cftype}$), INTENT(IN), & OPTIONAL :: c_scale TYPE(dbcsr_t_type), POINTER :: tensor LOGICAL :: summation CALL c_f_pointer(c_tensor, tensor) IF (PRESENT(c_summation)) THEN summation = c_summation CALL dbcsr_t_put_block(tensor, c_ind + 1, c_sizes, & c_block, summation, c_scale) ELSE CALL dbcsr_t_put_block(tensor, c_ind + 1, c_sizes, & c_block, scale=c_scale) END IF END SUBROUTINE #:endfor #:endfor #:for dparam, dtype, dsuffix, basetype, cftype in cf_dtype_float_list #:for ndim in ndims SUBROUTINE c_dbcsr_t_get_${ndim}$d_block_p_${dsuffix}$ (c_tensor, c_ind, c_block, c_found) & BIND(C, name="c_dbcsr_t_get_${ndim}$d_block_p_${dsuffix}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor INTEGER(kind=c_int), INTENT(IN) :: c_ind(${ndim}$) TYPE(c_ptr), INTENT(INOUT) :: c_block LOGICAL(kind=c_bool), INTENT(INOUT) :: c_found TYPE(dbcsr_t_type), POINTER :: tensor INTEGER, DIMENSION(${ndim}$) :: ind LOGICAL :: found, tr INTEGER(KIND=int_8), DIMENSION(2) :: ind_2d ${dtype}$, DIMENSION(:, :), POINTER, CONTIGUOUS :: block_2d_ptr CALL c_f_pointer(c_tensor, tensor) ind = c_ind + 1 NULLIFY (block_2d_ptr) ind_2d(:) = get_2d_indices_tensor(tensor%nd_index_blk, ind) CALL dbcsr_tas_get_block_p(tensor%matrix_rep, ind_2d(1), ind_2d(2), block_2d_ptr, tr, found) c_found = found c_block = c_loc(block_2d_ptr) END SUBROUTINE #:endfor #:endfor SUBROUTINE c_dbcsr_t_get_stored_coordinates(c_tensor, tensor_dim, c_ind_nd, c_processor) & BIND(C, name="c_dbcsr_t_get_stored_coordinates") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor INTEGER(kind=c_int), INTENT(IN), VALUE :: tensor_dim INTEGER(kind=c_int), DIMENSION(tensor_dim), & INTENT(IN) :: c_ind_nd INTEGER(kind=c_int), INTENT(OUT) :: c_processor TYPE(dbcsr_t_type), POINTER :: tensor CALL c_f_pointer(c_tensor, tensor) CALL dbcsr_t_get_stored_coordinates(tensor, c_ind_nd + 1, c_processor) END SUBROUTINE SUBROUTINE c_dbcsr_t_reserve_blocks_index(c_tensor, nblocks, ${varlist("c_blk_ind")}$) & BIND(C, name="c_dbcsr_t_reserve_blocks_index") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor INTEGER(kind=c_int), INTENT(in), value :: nblocks INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: ${varlist("c_blk_ind", suffix ="(nblocks)")}$ INTEGER, DIMENSION(:), POINTER :: ${varlist("blk_ind")}$ TYPE(dbcsr_t_type), POINTER :: tensor #:for ddim in ddims NULLIFY (blk_ind_${ddim}$) IF (PRESENT(c_blk_ind_${ddim}$)) THEN ALLOCATE (blk_ind_${ddim}$ (nblocks)) blk_ind_${ddim}$ = c_blk_ind_${ddim}$+1 END IF #:endfor CALL c_f_pointer(c_tensor, tensor) CALL dbcsr_t_reserve_blocks(tensor, ${varlist("blk_ind")}$) #:for ddim in ddims IF (ASSOCIATED(blk_ind_${ddim}$)) DEALLOCATE (blk_ind_${ddim}$) #:endfor END SUBROUTINE SUBROUTINE c_dbcsr_t_reserve_blocks_template(c_tensor_in, c_tensor_out) & BIND(C, name="c_dbcsr_t_reserve_blocks_template") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor_in TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor_out TYPE(dbcsr_t_type), POINTER :: tensor_in TYPE(dbcsr_t_type), POINTER :: tensor_out CALL c_f_pointer(c_tensor_in, tensor_in) CALL c_f_pointer(c_tensor_out, tensor_out) CALL dbcsr_t_reserve_blocks(tensor_in, tensor_out) END SUBROUTINE FUNCTION c_ndims_iterator(c_iterator) BIND(C, name="c_ndims_iterator") TYPE(c_ptr), INTENT(IN), VALUE :: c_iterator TYPE(dbcsr_t_iterator_type), POINTER :: iterator INTEGER(kind=c_int) :: c_ndims_iterator CALL c_f_pointer(c_iterator, iterator) c_ndims_iterator = iterator%nd_index%ndim_nd END FUNCTION SUBROUTINE c_dbcsr_t_iterator_start(c_iterator, c_tensor) BIND(C, name="c_dbcsr_t_iterator_start") TYPE(c_ptr), INTENT(OUT) :: c_iterator TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor TYPE(dbcsr_t_iterator_type), POINTER :: iterator TYPE(dbcsr_t_type), POINTER :: tensor ALLOCATE (iterator) CALL c_f_pointer(c_tensor, tensor) CALL dbcsr_t_iterator_start(iterator, tensor) c_iterator = c_loc(iterator) END SUBROUTINE SUBROUTINE c_dbcsr_t_iterator_stop(c_iterator) BIND(C, name="c_dbcsr_t_iterator_stop") TYPE(c_ptr), INTENT(INOUT) :: c_iterator TYPE(dbcsr_t_iterator_type), POINTER :: iterator CALL c_f_pointer(c_iterator, iterator) CALL dbcsr_t_iterator_stop(iterator) IF (ASSOCIATED(iterator)) DEALLOCATE (iterator) c_iterator = c_null_ptr END SUBROUTINE SUBROUTINE c_dbcsr_t_iterator_next_block(c_iterator, iterator_size, c_ind_nd, c_blk, c_blk_p, c_blk_size, c_blk_offset) & BIND(C, name="c_dbcsr_t_iterator_next_block") TYPE(c_ptr), INTENT(IN), VALUE :: c_iterator INTEGER(kind=c_int), INTENT(IN), VALUE :: iterator_size INTEGER(kind=c_int), DIMENSION(iterator_size), TARGET, & INTENT(OUT) :: c_ind_nd INTEGER(kind=c_int), INTENT(OUT) :: c_blk INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_blk_p INTEGER(kind=c_int), DIMENSION(iterator_size), INTENT(OUT), & OPTIONAL :: c_blk_size, c_blk_offset TYPE(dbcsr_t_iterator_type), POINTER :: iterator INTEGER, DIMENSION(iterator_size) :: ind_nd INTEGER, DIMENSION(:), POINTER :: blk_offset CALL c_f_pointer(c_iterator, iterator) NULLIFY (blk_offset) IF (PRESENT(c_blk_offset)) ALLOCATE (blk_offset(iterator_size)) CALL dbcsr_t_iterator_next_block(iterator, ind_nd, c_blk, c_blk_p, c_blk_size, blk_offset) c_ind_nd = ind_nd - 1 IF (PRESENT(c_blk_offset)) THEN c_blk_offset = blk_offset - 1 DEALLOCATE (blk_offset) END IF END SUBROUTINE FUNCTION c_dbcsr_t_iterator_blocks_left(c_iterator) & BIND(C, name="c_dbcsr_t_iterator_blocks_left") TYPE(c_ptr), INTENT(IN), VALUE :: c_iterator TYPE(dbcsr_t_iterator_type), POINTER :: iterator LOGICAL(kind=c_bool) :: c_dbcsr_t_iterator_blocks_left CALL c_f_pointer(c_iterator, iterator) c_dbcsr_t_iterator_blocks_left = LOGICAL(dbcsr_t_iterator_blocks_left(iterator), kind=c_bool) END FUNCTION SUBROUTINE c_dbcsr_t_split_blocks(c_tensor_in, tensor_dim, c_tensor_out, c_block_sizes, c_nodata) & BIND(C, name="c_dbcsr_t_split_blocks") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor_in TYPE(c_ptr), INTENT(OUT) :: c_tensor_out INTEGER(kind=c_int), INTENT(IN), VALUE :: tensor_dim INTEGER(kind=c_int), INTENT(IN), DIMENSION(tensor_dim) & :: c_block_sizes LOGICAL(kind=c_bool), OPTIONAL :: c_nodata TYPE(dbcsr_t_type), POINTER :: tensor_in TYPE(dbcsr_t_type), POINTER :: tensor_out LOGICAL :: nodata CALL c_f_pointer(c_tensor_in, tensor_in) ALLOCATE (tensor_out) IF (PRESENT(c_nodata)) THEN nodata = c_nodata CALL dbcsr_t_split_blocks(tensor_in, tensor_out, c_block_sizes, nodata) ELSE CALL dbcsr_t_split_blocks(tensor_in, tensor_out, c_block_sizes) END IF c_tensor_out = c_loc(tensor_out) END SUBROUTINE #:for dparam, dtype, dsuffix, dbase, dctype in cf_dtype_float_list SUBROUTINE c_dbcsr_t_filter_${dsuffix}$ (c_tensor, c_eps, c_method, c_use_absolute) & BIND(C, name="c_dbcsr_t_filter_${dsuffix}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor ${dbase}$ (kind=${dctype}$), INTENT(IN), VALUE :: c_eps INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_method LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_use_absolute TYPE(dbcsr_t_type), POINTER :: tensor LOGICAL :: use_absolute CALL c_f_pointer(c_tensor, tensor) IF (PRESENT(c_use_absolute)) THEN use_absolute = c_use_absolute CALL dbcsr_t_filter(tensor, c_eps, c_method, use_absolute) ELSE CALL dbcsr_t_filter(tensor, c_eps, c_method) END IF END SUBROUTINE #:endfor #:for dparam, dtype, dsuffix, dbase, dctype in cf_dtype_float_list SUBROUTINE c_dbcsr_t_set_${dsuffix}$ (c_tensor, c_alpha) & BIND(C, name="c_dbcsr_t_set_${dsuffix}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor ${dbase}$ (kind=${dctype}$), INTENT(IN), VALUE :: c_alpha TYPE(dbcsr_t_type), POINTER :: tensor CALL c_f_pointer(c_tensor, tensor) CALL dbcsr_t_set(tensor, c_alpha) END SUBROUTINE #:endfor SUBROUTINE c_dbcsr_t_copy_matrix_to_tensor(c_matrix_in, c_tensor_out, c_summation) & BIND(C, name="c_dbcsr_t_copy_matrix_to_tensor") TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_in TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor_out LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_summation TYPE(dbcsr_type), POINTER :: matrix_in TYPE(dbcsr_t_type), POINTER :: tensor_out LOGICAL :: summation CALL c_f_pointer(c_matrix_in, matrix_in) CALL c_f_pointer(c_tensor_out, tensor_out) IF (PRESENT(c_summation)) THEN summation = c_summation CALL dbcsr_t_copy_matrix_to_tensor(matrix_in, tensor_out, summation) ELSE CALL dbcsr_t_copy_matrix_to_tensor(matrix_in, tensor_out) END IF END SUBROUTINE SUBROUTINE c_dbcsr_t_copy_tensor_to_matrix(c_tensor_in, c_matrix_out, c_summation) & BIND(C, name="c_dbcsr_t_copy_tensor_to_matrix") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor_in TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_out LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_summation TYPE(dbcsr_t_type), POINTER :: tensor_in TYPE(dbcsr_type), POINTER :: matrix_out LOGICAL :: summation CALL c_f_pointer(c_tensor_in, tensor_in) CALL c_f_pointer(c_matrix_out, matrix_out) IF (PRESENT(c_summation)) THEN summation = c_summation CALL dbcsr_t_copy_tensor_to_matrix(tensor_in, matrix_out, summation) ELSE CALL dbcsr_t_copy_tensor_to_matrix(tensor_in, matrix_out) END IF END SUBROUTINE SUBROUTINE c_dbcsr_t_blk_sizes(c_tensor, tensor_dim, c_ind, c_blk_size) & BIND(C, name="c_dbcsr_t_blk_sizes") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor INTEGER(kind=c_int), INTENT(IN), VALUE :: tensor_dim INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(IN) :: c_ind INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(OUT) :: c_blk_size TYPE(dbcsr_t_type), POINTER :: tensor CALL c_f_pointer(c_tensor, tensor) CALL dbcsr_t_blk_sizes(tensor, c_ind + 1, c_blk_size) END SUBROUTINE SUBROUTINE c_dbcsr_t_copy(c_tensor_in, tensor_dim, c_tensor_out, c_order, c_summation, c_bounds, c_move_data, c_unit_nr) & BIND(C, name="c_dbcsr_t_copy") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor_in TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor_out INTEGER(kind=c_int), INTENT(IN), VALUE :: tensor_dim INTEGER(kind=c_int), INTENT(IN), DIMENSION(tensor_dim), & OPTIONAL :: c_order LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_summation INTEGER(kind=c_int), INTENT(IN), DIMENSION(2, tensor_dim), & OPTIONAL :: c_bounds LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL ::c_move_data INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_unit_nr TYPE(dbcsr_t_type), POINTER :: tensor_in, tensor_out INTEGER, DIMENSION(:), POINTER :: order INTEGER, DIMENSION(:, :), POINTER :: bounds LOGICAL, POINTER :: summation, move_data CALL c_f_pointer(c_tensor_in, tensor_in) CALL c_f_pointer(c_tensor_out, tensor_out) NULLIFY (order) IF (PRESENT(c_order)) THEN ALLOCATE (order(tensor_dim)) order = c_order + 1 END IF NULLIFY (bounds) IF (PRESENT(c_bounds)) THEN ALLOCATE (bounds(2, tensor_dim)) bounds = c_bounds + 1 END IF NULLIFY (summation) IF (PRESENT(c_summation)) THEN ALLOCATE (summation) summation = c_summation END IF NULLIFY (move_data) IF (PRESENT(c_move_data)) THEN ALLOCATE (move_data) move_data = c_move_data END IF CALL dbcsr_t_copy(tensor_in, tensor_out, order, summation, bounds, move_data, c_unit_nr) #:set list = ['order', 'bounds', 'summation', 'move_data'] #:for var in list IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$) #:endfor END SUBROUTINE #:for dparam, dtype, dsuffix, dbase, dctype in cf_dtype_float_list SUBROUTINE c_dbcsr_t_scale_${dsuffix}$ (c_tensor, c_alpha) & BIND(C, name="c_dbcsr_t_scale_${dsuffix}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor ${dbase}$ (kind=${dctype}$), INTENT(IN), VALUE :: c_alpha TYPE(dbcsr_t_type), POINTER :: tensor CALL c_f_pointer(c_tensor, tensor) CALL dbcsr_t_scale(tensor, dbcsr_scalar(c_alpha)) END SUBROUTINE #:endfor SUBROUTINE c_dbcsr_t_clear(c_tensor) BIND(C, name="c_dbcsr_t_clear") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor TYPE(dbcsr_t_type), POINTER :: tensor CALL c_f_pointer(c_tensor, tensor) CALL dbcsr_t_clear(tensor) END SUBROUTINE SUBROUTINE c_dbcsr_t_get_info(c_tensor, tensor_dim, c_nblks_total, & c_nfull_total, & c_nblks_local, & c_nfull_local, & c_pdims, & c_my_ploc, & ${varlist("nblks_local")}$, & ${varlist("nblks_total")}$, & ${varlist("c_blks_local")}$, & ${varlist("c_proc_dist")}$, & ${varlist("c_blk_size")}$, & ${varlist("c_blk_offset")}$, & c_distribution, & c_name, & c_data_type) & BIND(C, name="c_dbcsr_t_get_info") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor INTEGER(kind=c_int), INTENT(IN), VALUE :: tensor_dim INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(OUT), & OPTIONAL :: c_nblks_total INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(OUT), & OPTIONAL :: c_nfull_total INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(OUT), & OPTIONAL :: c_nblks_local INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(OUT), & OPTIONAL :: c_nfull_local INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(OUT), & OPTIONAL :: c_my_ploc INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(OUT), & OPTIONAL :: c_pdims #:for idim in range(1, maxrank+1) INTEGER(kind=c_int), INTENT(IN), VALUE :: nblks_local_${idim}$ INTEGER(kind=c_int), INTENT(IN), VALUE :: nblks_total_${idim}$ INTEGER(kind=c_int), INTENT(OUT), OPTIONAL, & DIMENSION(nblks_local_${idim}$) :: c_blks_local_${idim}$ INTEGER(kind=c_int), INTENT(OUT), OPTIONAL, & DIMENSION(nblks_total_${idim}$) :: c_proc_dist_${idim}$ INTEGER(kind=c_int), INTENT(OUT), OPTIONAL, & DIMENSION(nblks_total_${idim}$) :: c_blk_size_${idim}$ INTEGER(kind=c_int), INTENT(OUT), OPTIONAL, & DIMENSION(nblks_total_${idim}$) :: c_blk_offset_${idim}$ #:endfor TYPE(c_ptr), INTENT(OUT), OPTIONAL :: c_distribution TYPE(c_ptr), INTENT(OUT), OPTIONAL :: c_name INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_data_type TYPE(dbcsr_t_type), POINTER :: tensor TYPE(dbcsr_t_distribution_type), POINTER :: distribution CHARACTER(kind=c_char, len=:), POINTER :: name CALL c_f_pointer(c_tensor, tensor) NULLIFY (distribution) IF (PRESENT(c_distribution)) ALLOCATE (distribution) NULLIFY (name) IF (PRESENT(c_name)) ALLOCATE (CHARACTER(len=default_string_length) :: name) CALL dbcsr_t_get_info(tensor, c_nblks_total, c_nfull_total, c_nblks_local, & c_nfull_local, c_pdims, c_my_ploc, & ${varlist("c_blks_local")}$, & ${varlist("c_proc_dist")}$, & ${varlist("c_blk_size")}$, & ${varlist("c_blk_offset")}$, & distribution, name, & c_data_type) #:set list = ['blks_local', 'blk_offset'] #:for idim in range(1, maxrank+1) #:for var in list IF (PRESENT(c_${var}$_${idim}$)) c_${var}$_${idim}$ = c_${var}$_${idim}$-1 #:endfor #:endfor IF (PRESENT(c_name)) THEN name = TRIM(name)//char(0) c_name = c_loc(name) END IF IF (PRESENT(c_distribution)) c_distribution = c_loc(distribution) END SUBROUTINE SUBROUTINE c_dbcsr_t_get_mapping_info(c_tensor, nd_size, nd_row_size, & nd_col_size, ndim_nd, ndim1_2d, ndim2_2d, & c_dims_2d_i8, c_dims_2d, c_dims_nd, & c_dims1_2d, c_dims2_2d, & c_map1_2d, c_map2_2d, & c_map_nd, base, c_col_major) & BIND(C, name="c_dbcsr_t_get_mapping_info") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor !! nd_size = ndims_mapping(map), !! nd_row_size = ndims_mapping_row(map), !! nd_col_size = ndims_mapping_column(map) INTEGER(kind=c_int), INTENT(IN), VALUE :: nd_size, nd_row_size, nd_col_size INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: ndim_nd, ndim1_2d, ndim2_2d INTEGER(kind=c_long_long), INTENT(OUT), DIMENSION(2), & OPTIONAL :: c_dims_2d_i8 INTEGER(kind=c_int), INTENT(OUT), DIMENSION(2), & OPTIONAL :: c_dims_2d INTEGER(kind=c_int), INTENT(OUT), DIMENSION(nd_size), & OPTIONAL :: c_dims_nd INTEGER(kind=c_int), INTENT(OUT), DIMENSION(nd_row_size), & OPTIONAL :: c_dims1_2d, c_map1_2d INTEGER(kind=c_int), INTENT(OUT), DIMENSION(nd_col_size), & OPTIONAL :: c_dims2_2d, c_map2_2d INTEGER(kind=c_int), INTENT(OUT), DIMENSION(nd_size), & OPTIONAL :: c_map_nd INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: base LOGICAL(kind=c_bool), INTENT(OUT), OPTIONAL :: c_col_major TYPE(dbcsr_t_type), POINTER :: tensor LOGICAL :: col_major CALL c_f_pointer(c_tensor, tensor) IF (PRESENT(c_col_major)) THEN CALL dbcsr_t_get_mapping_info(tensor%nd_index_blk, ndim_nd, ndim1_2d, & ndim2_2d, c_dims_2d_i8, c_dims_2d, c_dims_nd, & c_dims1_2d, c_dims2_2d, & c_map1_2d, c_map2_2d, c_map_nd, & base, col_major) c_col_major = LOGICAL(col_major, kind=c_bool) ELSE CALL dbcsr_t_get_mapping_info(tensor%nd_index_blk, ndim_nd, ndim1_2d, & ndim2_2d, c_dims_2d_i8, c_dims_2d, c_dims_nd, & c_dims1_2d, c_dims2_2d, & c_map1_2d, c_map2_2d, c_map_nd, & base) END IF #:set list = ['dims_nd', 'dims1_2d', 'dims2_2d', 'map1_2d', 'map2_2d', 'map_nd'] #:for var in list IF (PRESENT(c_${var}$)) c_${var}$ = c_${var}$-1 #:endfor END SUBROUTINE FUNCTION c_dbcsr_t_get_num_blocks(c_tensor) RESULT(c_num_blocks) & BIND(C, name="c_dbcsr_t_get_num_blocks") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor TYPE(dbcsr_t_type), POINTER :: tensor INTEGER(kind=c_int) :: c_num_blocks CALL c_f_pointer(c_tensor, tensor) c_num_blocks = dbcsr_t_get_num_blocks(tensor) END FUNCTION FUNCTION c_dbcsr_t_get_num_blocks_total(c_tensor) RESULT(c_num_blocks_total) & BIND(C, name="c_dbcsr_t_get_num_blocks_total") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor TYPE(dbcsr_t_type), POINTER :: tensor INTEGER(kind=c_long_long) :: c_num_blocks_total CALL c_f_pointer(c_tensor, tensor) c_num_blocks_total = dbcsr_t_get_num_blocks_total(tensor) END FUNCTION FUNCTION c_dbcsr_t_nblks_local(c_tensor, idim) & BIND(C, name="c_dbcsr_t_nblks_local") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor INTEGER(kind=c_int), INTENT(IN), VALUE :: idim INTEGER(kind=c_int) :: c_dbcsr_t_nblks_local TYPE(dbcsr_t_type), POINTER :: tensor CALL c_f_pointer(c_tensor, tensor) c_dbcsr_t_nblks_local = dbcsr_t_nblks_local(tensor, idim + 1) END FUNCTION FUNCTION c_dbcsr_t_nblks_total(c_tensor, idim) & BIND(C, name="c_dbcsr_t_nblks_total") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor INTEGER(kind=c_int), INTENT(IN), VALUE :: idim INTEGER(kind=c_int) :: c_dbcsr_t_nblks_total TYPE(dbcsr_t_type), POINTER :: tensor CALL c_f_pointer(c_tensor, tensor) c_dbcsr_t_nblks_total = dbcsr_t_nblks_total(tensor, idim + 1) END FUNCTION SUBROUTINE c_dbcsr_t_dims(c_tensor, tensor_dim, c_dims) & BIND(C, name="c_dbcsr_t_dims") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor INTEGER(kind=c_int), INTENT(IN), VALUE :: tensor_dim INTEGER(kind=c_int), DIMENSION(tensor_dim), & INTENT(OUT) :: c_dims TYPE(dbcsr_t_type), POINTER :: tensor CALL c_f_pointer(c_tensor, tensor) CALL dbcsr_t_dims(tensor, c_dims) END SUBROUTINE FUNCTION c_dbcsr_t_ndims(c_tensor) BIND(C, name="c_dbcsr_t_ndims") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor TYPE(dbcsr_t_type), POINTER :: tensor INTEGER(kind=c_int) :: c_dbcsr_t_ndims CALL c_f_pointer(c_tensor, tensor) c_dbcsr_t_ndims = dbcsr_t_ndims(tensor) END FUNCTION FUNCTION c_dbcsr_t_ndims_matrix_row(c_tensor) & BIND(C, name="c_dbcsr_t_ndims_matrix_row") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor TYPE(dbcsr_t_type), POINTER :: tensor INTEGER(kind=c_long_long) :: c_dbcsr_t_ndims_matrix_row CALL c_f_pointer(c_tensor, tensor) c_dbcsr_t_ndims_matrix_row = & dbcsr_t_ndims_matrix_row(tensor) END FUNCTION FUNCTION c_dbcsr_t_ndims_matrix_column(c_tensor) & BIND(C, name="c_dbcsr_t_ndims_matrix_column") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor TYPE(dbcsr_t_type), POINTER :: tensor INTEGER(kind=c_long_long) :: c_dbcsr_t_ndims_matrix_column CALL c_f_pointer(c_tensor, tensor) c_dbcsr_t_ndims_matrix_column = & dbcsr_t_ndims_matrix_column(tensor) END FUNCTION FUNCTION c_dbcsr_t_get_nze(c_tensor) & BIND(C, name="c_dbcsr_t_get_nze") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor TYPE(dbcsr_t_type), POINTER :: tensor INTEGER(kind=c_int) :: c_dbcsr_t_get_nze CALL c_f_pointer(c_tensor, tensor) c_dbcsr_t_get_nze = dbcsr_t_get_nze(tensor) END FUNCTION FUNCTION c_dbcsr_t_get_nze_total(c_tensor) & BIND(C, name="c_dbcsr_t_get_nze_total") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor TYPE(dbcsr_t_type), POINTER :: tensor INTEGER(kind=c_long_long) :: c_dbcsr_t_get_nze_total CALL c_f_pointer(c_tensor, tensor) c_dbcsr_t_get_nze_total = dbcsr_t_get_nze_total(tensor) END FUNCTION FUNCTION c_dbcsr_t_max_nblks_local(c_tensor) RESULT(max_blks) & BIND(C, name="c_dbcsr_t_max_nblks_local") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor INTEGER(kind=c_long_long) :: max_blks TYPE(dbcsr_t_type), POINTER :: tensor CALL c_f_pointer(c_tensor, tensor) max_blks = dbcsr_t_max_nblks_local(tensor) END FUNCTION #:for dparam, dtype, dsuffix, basetype, cftype in cf_dtype_float_list SUBROUTINE c_dbcsr_t_get_data_${dsuffix}$ (c_tensor, c_data, c_data_size, & c_select_data_type, c_lb, c_ub) BIND(C, name="c_dbcsr_t_get_data_${dsuffix}$") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor TYPE(c_ptr), INTENT(INOUT) :: c_data INTEGER(kind=c_long_long), INTENT(INOUT) :: c_data_size ${basetype}$ (kind=${cftype}$), INTENT(IN), VALUE :: c_select_data_type INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_lb, c_ub TYPE(dbcsr_t_type), POINTER :: tensor ${basetype}$ (kind=${cftype}$), DIMENSION(:), POINTER :: DATA INTEGER, POINTER :: lb, ub CALL c_f_pointer(c_tensor, tensor) NULLIFY (lb) IF (PRESENT(c_lb)) THEN ALLOCATE (lb) lb = c_lb + 1 END IF NULLIFY (ub) IF (PRESENT(c_ub)) THEN ALLOCATE (ub) ub = ub + 1 END IF DATA => dbcsr_get_data_p(tensor%matrix_rep%matrix%data_area, & c_select_data_type, lb, ub) c_data = c_loc(DATA) c_data_size = SIZE(DATA) IF (ASSOCIATED(lb)) DEALLOCATE (lb) IF (ASSOCIATED(ub)) DEALLOCATE (ub) END SUBROUTINE #:endfor SUBROUTINE c_dbcsr_t_batched_contract_init(c_tensor) & BIND(C, name="c_dbcsr_t_batched_contract_init") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor TYPE(dbcsr_t_type), POINTER :: tensor CALL c_f_pointer(c_tensor, tensor) CALL dbcsr_t_batched_contract_init(tensor) END SUBROUTINE SUBROUTINE c_dbcsr_t_batched_contract_finalize(c_tensor, c_unit_nr) & BIND(C, name="c_dbcsr_t_batched_contract_finalize") TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor INTEGER(kind=c_int), OPTIONAL :: c_unit_nr TYPE(dbcsr_t_type), POINTER :: tensor CALL c_f_pointer(c_tensor, tensor) IF (PRESENT(c_unit_nr)) THEN CALL dbcsr_t_batched_contract_finalize(tensor, c_unit_nr) ELSE CALL dbcsr_t_batched_contract_finalize(tensor) END IF END SUBROUTINE END MODULE ================================================ FILE: src/tensors/dbcsr_tensor_block.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tensor_block !! Methods to operate on n-dimensional tensor blocks. #:include "dbcsr_tensor.fypp" #:set maxdim = maxrank #:set ndims = range(2,maxdim+1) USE dbcsr_allocate_wrap, ONLY: & allocate_any USE dbcsr_api, ONLY: & ${uselist(dtype_float_param)}$, dbcsr_iterator_type, & dbcsr_iterator_next_block, dbcsr_iterator_start, dbcsr_iterator_stop, dbcsr_type, & dbcsr_reserve_blocks, dbcsr_scalar_type, dbcsr_finalize, dbcsr_get_num_blocks, & dbcsr_type_no_symmetry, dbcsr_desymmetrize, dbcsr_release, dbcsr_has_symmetry USE dbcsr_tas_types, ONLY: & dbcsr_tas_iterator USE dbcsr_tas_base, ONLY: & dbcsr_tas_iterator_next_block, dbcsr_tas_iterator_blocks_left, dbcsr_tas_iterator_start, & dbcsr_tas_iterator_stop, dbcsr_tas_get_block_p, dbcsr_tas_put_block, dbcsr_tas_reserve_blocks USE dbcsr_kinds, ONLY: & ${uselist(dtype_float_prec)}$, int_8 USE dbcsr_tensor_index, ONLY: & nd_to_2d_mapping, ndims_mapping, get_nd_indices_tensor, destroy_nd_to_2d_mapping, get_2d_indices_tensor USE dbcsr_array_list_methods, ONLY: & array_list, get_array_elements, destroy_array_list, sizes_of_arrays, create_array_list, & get_arrays USE dbcsr_tensor_types, ONLY: & dbcsr_t_type, ndims_tensor, dbcsr_t_get_data_type, dbcsr_t_blk_sizes, dbcsr_t_get_num_blocks, & dbcsr_t_finalize, ndims_matrix_row, ndims_matrix_column USE dbcsr_dist_operations, ONLY: & checker_tr USE dbcsr_toollib, ONLY: & swap #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_block' PUBLIC :: & block_nd, & create_block, & dbcsr_t_get_block, & dbcsr_t_iterator_blocks_left, & dbcsr_t_iterator_next_block, & dbcsr_t_iterator_start, & dbcsr_t_iterator_stop, & dbcsr_t_iterator_type, & dbcsr_t_put_block, & dbcsr_t_reserve_blocks, & dbcsr_t_reserved_block_indices, & destroy_block, & ndims_iterator TYPE dbcsr_t_iterator_type #if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__)) TYPE(dbcsr_tas_iterator) :: iter TYPE(nd_to_2d_mapping) :: nd_index_blk TYPE(nd_to_2d_mapping) :: nd_index TYPE(array_list) :: blk_sizes, blk_offsets #else TYPE(dbcsr_tas_iterator) :: iter = dbcsr_tas_iterator() TYPE(nd_to_2d_mapping) :: nd_index_blk = nd_to_2d_mapping() TYPE(nd_to_2d_mapping) :: nd_index = nd_to_2d_mapping() TYPE(array_list) :: blk_sizes = array_list(), blk_offsets = array_list() #endif END TYPE dbcsr_t_iterator_type #:for dparam, dtype, dsuffix in dtype_float_list PUBLIC :: block_nd_${dsuffix}$ #:endfor #:for dparam, dtype, dsuffix in dtype_float_list TYPE block_nd_${dsuffix}$ INTEGER, DIMENSION(:), ALLOCATABLE :: sizes ${dtype}$, DIMENSION(:), ALLOCATABLE :: blk END TYPE #:endfor TYPE block_nd #:for dparam, dtype, dsuffix in dtype_float_list #if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__)) TYPE(block_nd_${dsuffix}$) :: ${dsuffix}$ #else TYPE(block_nd_${dsuffix}$) :: ${dsuffix}$ = block_nd_${dsuffix}$ () #endif #:endfor INTEGER :: data_type = -1 END TYPE INTERFACE create_block #:for dparam, dtype, dsuffix in dtype_float_list MODULE PROCEDURE create_block_data_${dsuffix}$ #:endfor MODULE PROCEDURE create_block_nodata END INTERFACE INTERFACE dbcsr_t_put_block #:for dparam, dtype, dsuffix in dtype_float_list #:for ndim in ndims MODULE PROCEDURE dbcsr_t_put_${ndim}$d_block_${dsuffix}$ #:endfor #:endfor MODULE PROCEDURE dbcsr_t_put_anyd_block END INTERFACE INTERFACE dbcsr_t_get_block #:for dparam, dtype, dsuffix in dtype_float_list #:for ndim in ndims MODULE PROCEDURE dbcsr_t_get_${ndim}$d_block_${dsuffix}$ MODULE PROCEDURE dbcsr_t_allocate_and_get_${ndim}$d_block_${dsuffix}$ #:endfor #:endfor MODULE PROCEDURE dbcsr_t_get_anyd_block END INTERFACE INTERFACE dbcsr_t_reserve_blocks MODULE PROCEDURE dbcsr_t_reserve_blocks_index MODULE PROCEDURE dbcsr_t_reserve_blocks_index_array MODULE PROCEDURE dbcsr_t_reserve_blocks_template MODULE PROCEDURE dbcsr_t_reserve_blocks_tensor_to_matrix MODULE PROCEDURE dbcsr_t_reserve_blocks_matrix_to_tensor END INTERFACE CONTAINS SUBROUTINE create_block_nodata(block, sizes, data_type) !! Create block without data TYPE(block_nd), INTENT(OUT) :: block INTEGER, DIMENSION(:), INTENT(IN) :: sizes INTEGER, INTENT(IN) :: data_type block%data_type = data_type SELECT CASE (data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) CALL create_block_nodata_${dsuffix}$ (block%${dsuffix}$, sizes) #:endfor END SELECT END SUBROUTINE SUBROUTINE destroy_block(block) !! Destroy block TYPE(block_nd), INTENT(INOUT) :: block SELECT CASE (block%data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) CALL destroy_block_${dsuffix}$ (block%${dsuffix}$) #:endfor END SELECT END SUBROUTINE FUNCTION block_size(block) !! block size TYPE(block_nd), INTENT(IN) :: block INTEGER, ALLOCATABLE, DIMENSION(:) :: block_size block_size = 0 ! invalid SELECT CASE (block%data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) CALL allocate_any(block_size, source=block%${dsuffix}$%sizes) #:endfor END SELECT END FUNCTION SUBROUTINE dbcsr_t_iterator_start(iterator, tensor) !! Generalization of dbcsr_iterator_start for tensors. TYPE(dbcsr_t_iterator_type), INTENT(OUT) :: iterator TYPE(dbcsr_t_type), INTENT(IN) :: tensor DBCSR_ASSERT(tensor%valid) CALL dbcsr_tas_iterator_start(iterator%iter, tensor%matrix_rep) iterator%nd_index_blk = tensor%nd_index_blk iterator%nd_index = tensor%nd_index iterator%blk_sizes = tensor%blk_sizes iterator%blk_offsets = tensor%blk_offsets END SUBROUTINE SUBROUTINE dbcsr_t_iterator_stop(iterator) !! Generalization of dbcsr_iterator_stop for tensors. TYPE(dbcsr_t_iterator_type), INTENT(INOUT) :: iterator CALL dbcsr_tas_iterator_stop(iterator%iter) CALL destroy_nd_to_2d_mapping(iterator%nd_index) CALL destroy_nd_to_2d_mapping(iterator%nd_index_blk) CALL destroy_array_list(iterator%blk_sizes) CALL destroy_array_list(iterator%blk_offsets) END SUBROUTINE PURE FUNCTION ndims_iterator(iterator) !! Number of dimensions. !! !! Note: specification function below must be defined before it is used in !! the source due to a bug in the IBM XL Fortran compiler (compilation fails) TYPE(dbcsr_t_iterator_type), INTENT(IN) :: iterator INTEGER :: ndims_iterator ndims_iterator = iterator%nd_index%ndim_nd END FUNCTION SUBROUTINE dbcsr_t_iterator_next_block(iterator, ind_nd, blk, blk_p, blk_size, blk_offset) !! iterate over nd blocks of an nd rank tensor, index only (blocks must be retrieved by calling !! dbcsr_t_get_block on tensor). TYPE(dbcsr_t_iterator_type), INTENT(INOUT) :: iterator INTEGER, DIMENSION(ndims_iterator(iterator)), & INTENT(OUT) :: ind_nd !! nd index of block INTEGER, INTENT(OUT) :: blk !! is this needed? INTEGER, INTENT(OUT), OPTIONAL :: blk_p !! is this needed? INTEGER, DIMENSION(ndims_iterator(iterator)), & INTENT(OUT), OPTIONAL :: blk_size, blk_offset !! blk size in each dimension !! blk offset in each dimension INTEGER(KIND=int_8), DIMENSION(2) :: ind_2d CALL dbcsr_tas_iterator_next_block(iterator%iter, ind_2d(1), ind_2d(2), blk, blk_p=blk_p) ind_nd(:) = get_nd_indices_tensor(iterator%nd_index_blk, ind_2d) IF (PRESENT(blk_size)) blk_size(:) = get_array_elements(iterator%blk_sizes, ind_nd) ! note: blk_offset needs to be determined by tensor metadata, can not be derived from 2d row/col ! offset since block index mapping is not consistent with element index mapping IF (PRESENT(blk_offset)) blk_offset(:) = get_array_elements(iterator%blk_offsets, ind_nd) END SUBROUTINE FUNCTION dbcsr_t_iterator_blocks_left(iterator) !! Generalization of dbcsr_iterator_blocks_left for tensors. TYPE(dbcsr_t_iterator_type), INTENT(IN) :: iterator LOGICAL :: dbcsr_t_iterator_blocks_left dbcsr_t_iterator_blocks_left = dbcsr_tas_iterator_blocks_left(iterator%iter) END FUNCTION SUBROUTINE dbcsr_t_reserve_blocks_index_array(tensor, blk_ind) !! reserve blocks from indices as array object TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor INTEGER, DIMENSION(:, :), INTENT(IN) :: blk_ind INTEGER :: handle CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_reserve_blocks_index_array' CALL timeset(routineN, handle) #:for ndim in ndims IF (ndims_tensor(tensor) == ${ndim}$) THEN CALL dbcsr_t_reserve_blocks(tensor, ${arrlist("blk_ind", nmax=ndim, ndim_pre=1)}$) END IF #:endfor CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_reserve_blocks_index(tensor, ${varlist("blk_ind")}$) !! reserve tensor blocks using block indices TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: ${varlist("blk_ind")}$ !! index of blocks to reserve in each dimension INTEGER :: iblk, nblk, handle INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:) :: cols, rows INTEGER(KIND=int_8), DIMENSION(2) :: ind_2d TYPE(array_list) :: blks INTEGER, DIMENSION(ndims_tensor(tensor)) :: iblk_nd, ind_nd, nblk_tmp CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_reserve_blocks_index' CALL timeset(routineN, handle) DBCSR_ASSERT(tensor%valid) CALL create_array_list(blks, ndims_tensor(tensor), & ${varlist("blk_ind")}$) nblk_tmp(:) = sizes_of_arrays(blks) nblk = nblk_tmp(1) ALLOCATE (cols(nblk), rows(nblk)) DO iblk = 1, nblk iblk_nd(:) = iblk ind_nd(:) = get_array_elements(blks, iblk_nd) ind_2d(:) = get_2d_indices_tensor(tensor%nd_index_blk, ind_nd) rows(iblk) = ind_2d(1); cols(iblk) = ind_2d(2) END DO CALL dbcsr_tas_reserve_blocks(tensor%matrix_rep, rows=rows, columns=cols) CALL dbcsr_t_finalize(tensor) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_reserve_blocks_template(tensor_in, tensor_out) !! reserve tensor blocks using template TYPE(dbcsr_t_type), INTENT(IN) :: tensor_in !! template tensor TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_out INTEGER :: handle INTEGER, DIMENSION(dbcsr_t_get_num_blocks(tensor_in), ndims_tensor(tensor_in)) :: blk_ind CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_reserve_blocks_template' CALL timeset(routineN, handle) CALL dbcsr_t_reserved_block_indices(tensor_in, blk_ind) CALL dbcsr_t_reserve_blocks(tensor_out, blk_ind) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_reserve_blocks_matrix_to_tensor(matrix_in, tensor_out) !! reserve tensor blocks using matrix template TYPE(dbcsr_type), TARGET, INTENT(IN) :: matrix_in TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_out TYPE(dbcsr_type), POINTER :: matrix_in_desym INTEGER :: blk, iblk, nblk INTEGER, ALLOCATABLE, DIMENSION(:) :: blk_ind_1, blk_ind_2 INTEGER, DIMENSION(2) :: ind_2d TYPE(dbcsr_iterator_type) :: iter INTEGER :: handle CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_reserve_blocks_matrix_to_tensor' CALL timeset(routineN, handle) IF (dbcsr_has_symmetry(matrix_in)) THEN ALLOCATE (matrix_in_desym) CALL dbcsr_desymmetrize(matrix_in, matrix_in_desym) ELSE matrix_in_desym => matrix_in END IF nblk = dbcsr_get_num_blocks(matrix_in_desym) ALLOCATE (blk_ind_1(nblk), blk_ind_2(nblk)) CALL dbcsr_iterator_start(iter, matrix_in_desym) DO iblk = 1, nblk CALL dbcsr_iterator_next_block(iter, ind_2d(1), ind_2d(2), blk) blk_ind_1(iblk) = ind_2d(1); blk_ind_2(iblk) = ind_2d(2) END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_t_reserve_blocks(tensor_out, blk_ind_1, blk_ind_2) IF (dbcsr_has_symmetry(matrix_in)) THEN CALL dbcsr_release(matrix_in_desym) DEALLOCATE (matrix_in_desym) END IF CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_reserve_blocks_tensor_to_matrix(tensor_in, matrix_out) !! reserve matrix blocks using tensor template TYPE(dbcsr_t_type), INTENT(IN) :: tensor_in TYPE(dbcsr_type), INTENT(INOUT) :: matrix_out TYPE(dbcsr_t_iterator_type) :: iter INTEGER, ALLOCATABLE, DIMENSION(:) :: blk_ind_1, blk_ind_2 CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_reserve_blocks_tensor_to_matrix' INTEGER :: handle, blk, iblk, nblk INTEGER, DIMENSION(2) :: ind_2d CALL timeset(routineN, handle) nblk = dbcsr_t_get_num_blocks(tensor_in) ALLOCATE (blk_ind_1(nblk), blk_ind_2(nblk)) CALL dbcsr_t_iterator_start(iter, tensor_in) iblk = 0 DO WHILE (dbcsr_t_iterator_blocks_left(iter)) CALL dbcsr_t_iterator_next_block(iter, ind_2d, blk) IF (dbcsr_has_symmetry(matrix_out)) THEN IF (checker_tr(ind_2d(1), ind_2d(2))) CYCLE IF (ind_2d(1) > ind_2d(2)) CALL swap(ind_2d(1), ind_2d(2)) END IF iblk = iblk + 1 blk_ind_1(iblk) = ind_2d(1); blk_ind_2(iblk) = ind_2d(2) END DO CALL dbcsr_t_iterator_stop(iter) CALL dbcsr_reserve_blocks(matrix_out, blk_ind_1(:iblk), blk_ind_2(:iblk)) CALL dbcsr_finalize(matrix_out) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_reserved_block_indices(tensor, blk_ind) !! indices of non-zero blocks TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER :: blk, iblk, nblk TYPE(dbcsr_t_iterator_type) :: iterator INTEGER, DIMENSION(ndims_tensor(tensor)) :: ind_nd INTEGER, DIMENSION(dbcsr_t_get_num_blocks(tensor), ndims_tensor(tensor)), INTENT(OUT) :: blk_ind DBCSR_ASSERT(tensor%valid) nblk = dbcsr_t_get_num_blocks(tensor) CALL dbcsr_t_iterator_start(iterator, tensor) DO iblk = 1, nblk CALL dbcsr_t_iterator_next_block(iterator, ind_nd, blk) blk_ind(iblk, :) = ind_nd(:) END DO CALL dbcsr_t_iterator_stop(iterator) END SUBROUTINE #:for dparam, dtype, dsuffix in dtype_float_list SUBROUTINE create_block_data_${dsuffix}$ (block, sizes, array) !! Create block from array, array can be n-dimensional. TYPE(block_nd), INTENT(OUT) :: block INTEGER, DIMENSION(:), INTENT(IN) :: sizes ${dtype}$, DIMENSION(PRODUCT(sizes)), INTENT(IN) :: array ASSOCIATE (blk => block%${dsuffix}$) block%data_type = ${dparam}$ CALL allocate_any(blk%sizes, source=sizes) CALL allocate_any(blk%blk, source=array) END ASSOCIATE END SUBROUTINE #:endfor #:for dparam, dtype, dsuffix in dtype_float_list SUBROUTINE create_block_nodata_${dsuffix}$ (block, sizes) !! Create and allocate block, but no data. INTEGER, INTENT(IN), DIMENSION(:) :: sizes TYPE(block_nd_${dsuffix}$), INTENT(OUT) :: block CALL allocate_any(block%sizes, source=sizes) ALLOCATE (block%blk(PRODUCT(sizes))) END SUBROUTINE #:endfor #:for dparam, dtype, dsuffix in dtype_float_list SUBROUTINE destroy_block_${dsuffix}$ (block) TYPE(block_nd_${dsuffix}$), INTENT(INOUT) :: block DEALLOCATE (block%blk) DEALLOCATE (block%sizes) END SUBROUTINE #:endfor SUBROUTINE dbcsr_t_get_anyd_block(tensor, ind, block, found) !! Generic implementation of dbcsr_t_get_block (arbitrary tensor rank and arbitrary datatype) TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor INTEGER, DIMENSION(ndims_tensor(tensor)), & INTENT(IN) :: ind !! block index TYPE(block_nd), INTENT(OUT) :: block !! block to get LOGICAL, INTENT(OUT) :: found !! whether block was found SELECT CASE (dbcsr_t_get_data_type(tensor)) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) CALL dbcsr_t_get_anyd_block_${dsuffix}$ (tensor, ind, block, found) #:endfor END SELECT END SUBROUTINE SUBROUTINE dbcsr_t_put_anyd_block(tensor, ind, block, summation, scale) !! Generic implementation of dbcsr_t_put_block (arbitrary tensor rank and arbitrary datatype) TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor INTEGER, DIMENSION(ndims_tensor(tensor)), & INTENT(IN) :: ind !! block index TYPE(block_nd), INTENT(IN) :: block !! block to put LOGICAL, INTENT(IN), OPTIONAL :: summation !! whether block should be summed to existing block TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: scale !! scaling factor SELECT CASE (block%data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) IF (.NOT. PRESENT(scale)) THEN CALL dbcsr_t_put_anyd_block_${dsuffix}$ (tensor, ind, block%${dsuffix}$, summation) ELSE CALL dbcsr_t_put_anyd_block_${dsuffix}$ (tensor, ind, block%${dsuffix}$, summation, scale=scale%${dsuffix}$) END IF #:endfor END SELECT END SUBROUTINE #:for dparam, dtype, dsuffix in dtype_float_list SUBROUTINE dbcsr_t_put_anyd_block_${dsuffix}$ (tensor, ind, block, summation, scale) !! Generic implementation of dbcsr_t_put_block, template for datatype TYPE(block_nd_${dsuffix}$), INTENT(IN) :: block !! block to put TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor LOGICAL, INTENT(IN), OPTIONAL :: summation !! whether block should be summed to existing block ${dtype}$, INTENT(IN), OPTIONAL :: scale !! scaling factor INTEGER, DIMENSION(ndims_tensor(tensor)), & INTENT(IN) :: ind !! block index SELECT CASE (ndims_tensor(tensor)) #:for ndim in ndims CASE (${ndim}$) CALL dbcsr_t_put_${ndim}$d_block_${dsuffix}$ (tensor, ind, block%sizes, block%blk, summation=summation, scale=scale) #:endfor END SELECT END SUBROUTINE #:endfor #:for dparam, dtype, dsuffix in dtype_float_list SUBROUTINE dbcsr_t_get_anyd_block_${dsuffix}$ (tensor, ind, block, found) !! Generic implementation of dbcsr_t_get_block (arbitrary tensor rank) TYPE(block_nd), INTENT(OUT) :: block !! block to get LOGICAL, INTENT(OUT) :: found !! whether block was found TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor INTEGER, DIMENSION(ndims_tensor(tensor)), & INTENT(IN) :: ind !! block index INTEGER, DIMENSION(ndims_tensor(tensor)) :: blk_size ${dtype}$, DIMENSION(:), ALLOCATABLE :: block_arr CALL dbcsr_t_blk_sizes(tensor, ind, blk_size) ALLOCATE (block_arr(PRODUCT(blk_size))) SELECT CASE (ndims_tensor(tensor)) #:for ndim in ndims CASE (${ndim}$) CALL dbcsr_t_get_${ndim}$d_block_${dsuffix}$ (tensor, ind, blk_size, block_arr, found) #:endfor END SELECT CALL create_block(block, blk_size, block_arr) END SUBROUTINE #:endfor #:for dparam, dtype, dsuffix in dtype_float_list #:for ndim in ndims SUBROUTINE dbcsr_t_put_${ndim}$d_block_${dsuffix}$ (tensor, ind, sizes, block, summation, scale) !! Template for dbcsr_t_put_block. TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor INTEGER, DIMENSION(${ndim}$), INTENT(IN) :: ind !! block index INTEGER, DIMENSION(${ndim}$), INTENT(IN) :: sizes !! block size ${dtype}$, DIMENSION(${arrlist("sizes", nmax=ndim)}$), & INTENT(IN), TARGET :: block !! block to put LOGICAL, INTENT(IN), OPTIONAL :: summation !! whether block should be summed to existing block ${dtype}$, INTENT(IN), OPTIONAL :: scale !! scaling factor INTEGER(KIND=int_8), DIMENSION(2) :: ind_2d INTEGER, DIMENSION(2) :: shape_2d ${dtype}$, POINTER, DIMENSION(:, :) :: block_2d INTEGER, DIMENSION(${ndim}$) :: shape_nd LOGICAL :: found, new_block ${dtype}$, DIMENSION(${arrlist("sizes", nmax=ndim)}$) :: block_check LOGICAL, PARAMETER :: debug = .FALSE. INTEGER :: i new_block = .FALSE. IF (debug) THEN CALL dbcsr_t_get_block(tensor, ind, sizes, block_check, found=found) DBCSR_ASSERT(found) END IF ASSOCIATE (map_nd => tensor%nd_index_blk%map_nd, & map1_2d => tensor%nd_index_blk%map1_2d, & map2_2d => tensor%nd_index_blk%map2_2d) shape_2d = [PRODUCT(sizes(map1_2d)), PRODUCT(sizes(map2_2d))] IF (ALL([map1_2d, map2_2d] == (/(i, i=1, ${ndim}$)/))) THEN ! to avoid costly reshape can do pointer bounds remapping as long as arrays are equivalent in memory block_2d(1:shape_2d(1), 1:shape_2d(2)) => block(${shape_colon(ndim)}$) ELSE ! need reshape due to rank reordering ALLOCATE (block_2d(shape_2d(1), shape_2d(2))) new_block = .TRUE. shape_nd(map_nd) = sizes block_2d(:, :) = RESHAPE(RESHAPE(block, SHAPE=shape_nd, order=map_nd), SHAPE=shape_2d) END IF ind_2d(:) = get_2d_indices_tensor(tensor%nd_index_blk, ind) END ASSOCIATE CALL dbcsr_tas_put_block(tensor%matrix_rep, ind_2d(1), ind_2d(2), block_2d, summation=summation, & scale=scale) IF (new_block) DEALLOCATE (block_2d) END SUBROUTINE #:endfor #:endfor #:for dparam, dtype, dsuffix in dtype_float_list #:for ndim in ndims SUBROUTINE dbcsr_t_allocate_and_get_${ndim}$d_block_${dsuffix}$ (tensor, ind, block, found) !! allocate and get block TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor INTEGER, DIMENSION(${ndim}$), INTENT(IN) :: ind !! block index ${dtype}$, DIMENSION(${shape_colon(ndim)}$), & ALLOCATABLE, INTENT(OUT) :: block !! block to get LOGICAL, INTENT(OUT) :: found !! whether block was found INTEGER, DIMENSION(${ndim}$) :: blk_size CALL dbcsr_t_blk_sizes(tensor, ind, blk_size) CALL allocate_any(block, shape_spec=blk_size) CALL dbcsr_t_get_${ndim}$d_block_${dsuffix}$ (tensor, ind, blk_size, block, found) END SUBROUTINE #:endfor #:endfor #:for dparam, dtype, dsuffix in dtype_float_list #:for ndim in ndims SUBROUTINE dbcsr_t_get_${ndim}$d_block_${dsuffix}$ (tensor, ind, sizes, block, found) !! Template for dbcsr_t_get_block. TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor INTEGER, DIMENSION(${ndim}$), INTENT(IN) :: ind !! block index INTEGER, DIMENSION(${ndim}$), INTENT(IN) :: sizes !! block size ${dtype}$, DIMENSION(${arrlist("sizes", nmax=ndim)}$), & INTENT(OUT) :: block !! block to get LOGICAL, INTENT(OUT) :: found !! whether block was found INTEGER(KIND=int_8), DIMENSION(2) :: ind_2d ${dtype}$, DIMENSION(:, :), POINTER, CONTIGUOUS :: block_2d_ptr LOGICAL :: tr INTEGER :: i ${dtype}$, DIMENSION(${shape_colon(ndim)}$), POINTER :: block_ptr NULLIFY (block_2d_ptr) ind_2d(:) = get_2d_indices_tensor(tensor%nd_index_blk, ind) ASSOCIATE (map1_2d => tensor%nd_index_blk%map1_2d, & map2_2d => tensor%nd_index_blk%map2_2d) CALL dbcsr_tas_get_block_p(tensor%matrix_rep, ind_2d(1), ind_2d(2), block_2d_ptr, tr, found) DBCSR_ASSERT(.NOT. tr) IF (found) THEN IF (ALL([map1_2d, map2_2d] == (/(i, i=1, ${ndim}$)/))) THEN ! to avoid costly reshape can do pointer bounds remapping as long as arrays are equivalent in memory block_ptr(${shape_explicit('block', ndim)}$) => block_2d_ptr(:, :) block(${shape_colon(ndim)}$) = block_ptr(${shape_colon(ndim)}$) ELSE ! need reshape due to rank reordering block(${shape_colon(ndim)}$) = RESHAPE(block_2d_ptr, SHAPE=SHAPE(block), ORDER=[map1_2d, map2_2d]) END IF END IF END ASSOCIATE END SUBROUTINE #:endfor #:endfor END MODULE ================================================ FILE: src/tensors/dbcsr_tensor_index.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tensor_index !! tensor index and mapping to DBCSR index USE dbcsr_allocate_wrap, ONLY: allocate_any USE dbcsr_kinds, ONLY: int_8 #include "base/dbcsr_base_uses.f90" #:include "dbcsr_tensor.fypp" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_index' PUBLIC :: & combine_tensor_index, & combine_pgrid_index, & create_nd_to_2d_mapping, & destroy_nd_to_2d_mapping, & get_2d_indices_tensor, & get_2d_indices_pgrid, & dbcsr_t_get_mapping_info, & get_nd_indices_tensor, & get_nd_indices_pgrid, & nd_to_2d_mapping, & ndims_mapping, & split_tensor_index, & split_pgrid_index, & ndims_mapping_row, & ndims_mapping_column, & dbcsr_t_inverse_order, & permute_index TYPE nd_to_2d_mapping INTEGER :: ndim_nd = -1 INTEGER :: ndim1_2d = -1 INTEGER :: ndim2_2d = -1 INTEGER, DIMENSION(:), ALLOCATABLE :: dims_nd INTEGER(KIND=int_8), DIMENSION(2) :: dims_2d = -1_int_8 INTEGER, DIMENSION(:), ALLOCATABLE :: dims1_2d INTEGER, DIMENSION(:), ALLOCATABLE :: dims2_2d INTEGER, DIMENSION(:), ALLOCATABLE :: map1_2d INTEGER, DIMENSION(:), ALLOCATABLE :: map2_2d INTEGER, DIMENSION(:), ALLOCATABLE :: map_nd INTEGER :: base = -1 LOGICAL :: col_major = .FALSE. END TYPE nd_to_2d_mapping CONTAINS SUBROUTINE create_nd_to_2d_mapping(map, dims, map1_2d, map2_2d, base, col_major) !! Create all data needed to quickly map between nd index and 2d index. TYPE(nd_to_2d_mapping), INTENT(OUT) :: map !! index mapping data INTEGER, DIMENSION(:), INTENT(IN) :: dims, map1_2d, map2_2d !! nd sizes !! which nd-indices map to first matrix index and in which order !! which nd-indices map to second matrix index and in which order INTEGER, INTENT(IN), OPTIONAL :: base !! base index (1 for Fortran-style, 0 for C-style, default is 1) LOGICAL, INTENT(IN), OPTIONAL :: col_major !! whether index should be column major order (.TRUE. for Fortran-style, .FALSE. for C-style, default is .TRUE.). INTEGER :: i IF (PRESENT(col_major)) THEN map%col_major = col_major ELSE map%col_major = .TRUE. END IF IF (PRESENT(base)) THEN map%base = base ELSE map%base = 1 END IF map%ndim1_2d = SIZE(map1_2d) map%ndim2_2d = SIZE(map2_2d) map%ndim_nd = SIZE(dims) CALL allocate_any(map%map1_2d, source=map1_2d) CALL allocate_any(map%map2_2d, source=map2_2d) CALL allocate_any(map%dims_nd, source=dims) CALL allocate_any(map%dims1_2d, source=dims(map1_2d)) CALL allocate_any(map%dims2_2d, source=dims(map2_2d)) ALLOCATE (map%map_nd(map%ndim_nd)) map%map_nd(map1_2d) = (/(i, i=1, SIZE(map1_2d))/) map%map_nd(map2_2d) = (/(i + SIZE(map1_2d), i=1, SIZE(map2_2d))/) map%dims_2d = [PRODUCT(INT(map%dims1_2d, KIND=int_8)), PRODUCT(INT(map%dims2_2d, KIND=int_8))] END SUBROUTINE create_nd_to_2d_mapping SUBROUTINE destroy_nd_to_2d_mapping(map) TYPE(nd_to_2d_mapping), INTENT(INOUT) :: map DEALLOCATE (map%dims1_2d) DEALLOCATE (map%dims2_2d) DEALLOCATE (map%map1_2d) DEALLOCATE (map%map2_2d) DEALLOCATE (map%map_nd) DEALLOCATE (map%dims_nd) END SUBROUTINE destroy_nd_to_2d_mapping PURE FUNCTION ndims_mapping(map) TYPE(nd_to_2d_mapping), INTENT(IN) :: map INTEGER :: ndims_mapping ndims_mapping = map%ndim_nd END FUNCTION PURE FUNCTION ndims_mapping_row(map) !! how many tensor dimensions are mapped to matrix row TYPE(nd_to_2d_mapping), INTENT(IN) :: map INTEGER :: ndims_mapping_row ndims_mapping_row = map%ndim1_2d END FUNCTION PURE FUNCTION ndims_mapping_column(map) !! how many tensor dimensions are mapped to matrix column TYPE(nd_to_2d_mapping), INTENT(IN) :: map INTEGER :: ndims_mapping_column ndims_mapping_column = map%ndim2_2d END FUNCTION PURE SUBROUTINE dbcsr_t_get_mapping_info(map, ndim_nd, ndim1_2d, ndim2_2d, dims_2d_i8, dims_2d, dims_nd, dims1_2d, dims2_2d, & map1_2d, map2_2d, map_nd, base, col_major) !! get mapping info TYPE(nd_to_2d_mapping), INTENT(IN) :: map !! index mapping data. INTEGER, INTENT(OUT), OPTIONAL :: ndim_nd, ndim1_2d, ndim2_2d !! number of dimensions !! number of dimensions that map to first 2d index !! number of dimensions that map to first 2d index INTEGER(KIND=int_8), DIMENSION(2), INTENT(OUT), OPTIONAL :: dims_2d_i8 INTEGER, DIMENSION(2), INTENT(OUT), OPTIONAL :: dims_2d !! 2d dimensions INTEGER, DIMENSION(ndims_mapping(map)), & INTENT(OUT), OPTIONAL :: dims_nd !! nd dimensions INTEGER, DIMENSION(ndims_mapping_row(map)), INTENT(OUT), & OPTIONAL :: dims1_2d !! dimensions that map to first 2d index INTEGER, DIMENSION(ndims_mapping_column(map)), INTENT(OUT), & OPTIONAL :: dims2_2d !! dimensions that map to second 2d index INTEGER, DIMENSION(ndims_mapping_row(map)), INTENT(OUT), & OPTIONAL :: map1_2d !! indices that map to first 2d index INTEGER, DIMENSION(ndims_mapping_column(map)), INTENT(OUT), & OPTIONAL :: map2_2d !! indices that map to second 2d index INTEGER, DIMENSION(ndims_mapping(map)), & INTENT(OUT), OPTIONAL :: map_nd !! inverse of [map1_2d, map2_2d] INTEGER, INTENT(OUT), OPTIONAL :: base !! base index LOGICAL, INTENT(OUT), OPTIONAL :: col_major !! is index in column major order IF (PRESENT(ndim_nd)) ndim_nd = map%ndim_nd IF (PRESENT(ndim1_2d)) ndim1_2d = map%ndim1_2d IF (PRESENT(ndim2_2d)) ndim2_2d = map%ndim2_2d IF (PRESENT(dims_2d_i8)) dims_2d_i8(:) = map%dims_2d(:) IF (PRESENT(dims_2d)) dims_2d(:) = INT(map%dims_2d(:)) IF (PRESENT(dims_nd)) THEN dims_nd(:) = map%dims_nd(:) END IF IF (PRESENT(dims1_2d)) THEN dims1_2d(:) = map%dims1_2d END IF IF (PRESENT(dims2_2d)) THEN dims2_2d(:) = map%dims2_2d END IF IF (PRESENT(map1_2d)) THEN map1_2d(:) = map%map1_2d END IF IF (PRESENT(map2_2d)) THEN map2_2d(:) = map%map2_2d END IF IF (PRESENT(map_nd)) THEN map_nd(:) = map%map_nd(:) END IF IF (PRESENT(base)) THEN base = map%base END IF IF (PRESENT(col_major)) THEN col_major = map%col_major END IF END SUBROUTINE dbcsr_t_get_mapping_info PURE FUNCTION combine_tensor_index(ind_in, dims) RESULT(ind_out) !! transform nd index to flat index INTEGER, DIMENSION(:), INTENT(IN) :: ind_in, dims !! nd index !! nd dimensions INTEGER(KIND=int_8) :: ind_out !! flat index INTEGER :: i_dim ind_out = ind_in(SIZE(dims)) DO i_dim = SIZE(dims) - 1, 1, -1 ind_out = (ind_out - 1)*dims(i_dim) + ind_in(i_dim) END DO END FUNCTION PURE FUNCTION combine_pgrid_index(ind_in, dims) RESULT(ind_out) !! transform nd index to flat index INTEGER, DIMENSION(:), INTENT(IN) :: ind_in, dims !! nd index !! nd dimensions INTEGER :: ind_out !! flat index INTEGER :: i_dim ind_out = ind_in(1) DO i_dim = 2, SIZE(dims) ind_out = ind_out*dims(i_dim) + ind_in(i_dim) END DO END FUNCTION PURE FUNCTION split_tensor_index(ind_in, dims) RESULT(ind_out) !! transform flat index to nd index INTEGER(KIND=int_8), INTENT(IN) :: ind_in !! flat index INTEGER, DIMENSION(:), INTENT(IN) :: dims !! nd dimensions INTEGER, DIMENSION(SIZE(dims)) :: ind_out !! nd index INTEGER(KIND=int_8) :: tmp INTEGER :: i_dim tmp = ind_in DO i_dim = 1, SIZE(dims) ind_out(i_dim) = INT(MOD(tmp - 1, INT(dims(i_dim), int_8)) + 1) tmp = (tmp - 1)/dims(i_dim) + 1 END DO END FUNCTION PURE FUNCTION split_pgrid_index(ind_in, dims) RESULT(ind_out) !! transform flat index to nd index INTEGER, INTENT(IN) :: ind_in !! flat index INTEGER, DIMENSION(:), INTENT(IN) :: dims !! nd dimensions INTEGER, DIMENSION(SIZE(dims)) :: ind_out !! nd index INTEGER :: tmp INTEGER :: i_dim tmp = ind_in DO i_dim = SIZE(dims), 1, -1 ind_out(i_dim) = MOD(tmp, dims(i_dim)) tmp = tmp/dims(i_dim) END DO END FUNCTION PURE FUNCTION get_2d_indices_tensor(map, ind_in) RESULT(ind_out) !! transform nd index to 2d index, using info from index mapping. TYPE(nd_to_2d_mapping), INTENT(IN) :: map !! index mapping INTEGER, DIMENSION(map%ndim_nd), INTENT(IN) :: ind_in !! nd index INTEGER(KIND=int_8), DIMENSION(2) :: ind_out !! 2d index INTEGER :: i INTEGER, DIMENSION(${maxrank}$) :: ind_tmp DO i = 1, map%ndim1_2d ind_tmp(i) = ind_in(map%map1_2d(i)) END DO ind_out(1) = combine_tensor_index(ind_tmp(:map%ndim1_2d), map%dims1_2d) DO i = 1, map%ndim2_2d ind_tmp(i) = ind_in(map%map2_2d(i)) END DO ind_out(2) = combine_tensor_index(ind_tmp(:map%ndim2_2d), map%dims2_2d) END FUNCTION PURE FUNCTION get_2d_indices_pgrid(map, ind_in) RESULT(ind_out) !! transform nd index to 2d index, using info from index mapping. TYPE(nd_to_2d_mapping), INTENT(IN) :: map !! index mapping INTEGER, DIMENSION(map%ndim_nd), INTENT(IN) :: ind_in !! nd index INTEGER, DIMENSION(2) :: ind_out !! 2d index INTEGER :: i INTEGER, DIMENSION(${maxrank}$) :: ind_tmp DO i = 1, map%ndim1_2d ind_tmp(i) = ind_in(map%map1_2d(i)) END DO ind_out(1) = combine_pgrid_index(ind_tmp(:map%ndim1_2d), map%dims1_2d) DO i = 1, map%ndim2_2d ind_tmp(i) = ind_in(map%map2_2d(i)) END DO ind_out(2) = combine_pgrid_index(ind_tmp(:map%ndim2_2d), map%dims2_2d) END FUNCTION PURE FUNCTION get_nd_indices_tensor(map, ind_in) RESULT(ind_out) !! transform 2d index to nd index, using info from index mapping. TYPE(nd_to_2d_mapping), INTENT(IN) :: map !! index mapping INTEGER(KIND=int_8), DIMENSION(2), INTENT(IN) :: ind_in !! 2d index INTEGER, DIMENSION(map%ndim_nd) :: ind_out !! nd index INTEGER, DIMENSION(${maxrank}$) :: ind_tmp INTEGER :: i ind_tmp(:map%ndim1_2d) = split_tensor_index(ind_in(1), map%dims1_2d) DO i = 1, map%ndim1_2d ind_out(map%map1_2d(i)) = ind_tmp(i) END DO ind_tmp(:map%ndim2_2d) = split_tensor_index(ind_in(2), map%dims2_2d) DO i = 1, map%ndim2_2d ind_out(map%map2_2d(i)) = ind_tmp(i) END DO END FUNCTION PURE FUNCTION get_nd_indices_pgrid(map, ind_in) RESULT(ind_out) !! transform 2d index to nd index, using info from index mapping. TYPE(nd_to_2d_mapping), INTENT(IN) :: map !! index mapping INTEGER, DIMENSION(2), INTENT(IN) :: ind_in !! 2d index INTEGER, DIMENSION(map%ndim_nd) :: ind_out !! nd index ind_out(map%map1_2d) = split_pgrid_index(ind_in(1), map%dims1_2d) ind_out(map%map2_2d) = split_pgrid_index(ind_in(2), map%dims2_2d) END FUNCTION PURE FUNCTION dbcsr_t_inverse_order(order) !! Invert order INTEGER, DIMENSION(:), INTENT(IN) :: order INTEGER, DIMENSION(SIZE(order)) :: dbcsr_t_inverse_order INTEGER :: i dbcsr_t_inverse_order(order) = (/(i, i=1, SIZE(order))/) END FUNCTION SUBROUTINE permute_index(map_in, map_out, order) !! reorder tensor index (no data) TYPE(nd_to_2d_mapping), INTENT(IN) :: map_in TYPE(nd_to_2d_mapping), INTENT(OUT) :: map_out INTEGER, DIMENSION(ndims_mapping(map_in)), & INTENT(IN) :: order INTEGER :: ndim_nd INTEGER, DIMENSION(ndims_mapping_row(map_in)) :: map1_2d, map1_2d_reorder INTEGER, DIMENSION(ndims_mapping_column(map_in)) :: map2_2d, map2_2d_reorder INTEGER, DIMENSION(ndims_mapping(map_in)) :: dims_nd, dims_reorder CALL dbcsr_t_get_mapping_info(map_in, ndim_nd, dims_nd=dims_nd, map1_2d=map1_2d, map2_2d=map2_2d) dims_reorder(order) = dims_nd map1_2d_reorder(:) = order(map1_2d) map2_2d_reorder(:) = order(map2_2d) CALL create_nd_to_2d_mapping(map_out, dims_reorder, map1_2d_reorder, map2_2d_reorder) END SUBROUTINE END MODULE dbcsr_tensor_index ================================================ FILE: src/tensors/dbcsr_tensor_io.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tensor_io !! DBCSR tensor Input / Output #:include "dbcsr_tensor.fypp" #:set maxdim = maxrank #:set ndims = range(2,maxdim+1) USE dbcsr_tensor_types, ONLY: & dbcsr_t_get_info, dbcsr_t_type, ndims_tensor, dbcsr_t_get_num_blocks, dbcsr_t_get_num_blocks_total, & blk_dims_tensor, dbcsr_t_get_stored_coordinates, dbcsr_t_get_nze, dbcsr_t_get_nze_total, & dbcsr_t_pgrid_type, dbcsr_t_nblks_total USE dbcsr_kinds, ONLY: default_string_length, int_8, real_8 USE dbcsr_mpiwrap, ONLY: mp_environ, mp_max, mp_comm_type USE dbcsr_tensor_block, ONLY: & dbcsr_t_iterator_type, dbcsr_t_iterator_next_block, dbcsr_t_iterator_start, & dbcsr_t_iterator_blocks_left, dbcsr_t_iterator_stop, dbcsr_t_get_block USE dbcsr_tas_io, ONLY: dbcsr_tas_write_split_info #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_types' PUBLIC :: & dbcsr_t_write_tensor_info, & dbcsr_t_write_tensor_dist, & dbcsr_t_write_blocks, & dbcsr_t_write_block, & dbcsr_t_write_block_indices, & dbcsr_t_write_split_info, & prep_output_unit CONTAINS SUBROUTINE dbcsr_t_write_tensor_info(tensor, unit_nr, full_info) !! Write tensor global info: block dimensions, full dimensions and process grid dimensions TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER, INTENT(IN) :: unit_nr LOGICAL, OPTIONAL, INTENT(IN) :: full_info !! Whether to print distribution and block size vectors INTEGER, DIMENSION(ndims_tensor(tensor)) :: nblks_total, nfull_total, pdims, my_ploc, nblks_local, nfull_local #:for idim in range(1, maxdim+1) INTEGER, DIMENSION(dbcsr_t_nblks_total(tensor, ${idim}$)) :: proc_dist_${idim}$ INTEGER, DIMENSION(dbcsr_t_nblks_total(tensor, ${idim}$)) :: blk_size_${idim}$ INTEGER, DIMENSION(dbcsr_t_nblks_total(tensor, ${idim}$)) :: blks_local_${idim}$ #:endfor CHARACTER(len=default_string_length) :: name INTEGER :: idim INTEGER :: iblk INTEGER :: unit_nr_prv unit_nr_prv = prep_output_unit(unit_nr) IF (unit_nr_prv == 0) RETURN CALL dbcsr_t_get_info(tensor, nblks_total, nfull_total, nblks_local, nfull_local, pdims, my_ploc, & ${varlist("blks_local")}$, ${varlist("proc_dist")}$, ${varlist("blk_size")}$, & name=name) IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T2,A)") & "GLOBAL INFO OF "//TRIM(name) WRITE (unit_nr_prv, "(T4,A,1X)", advance="no") "block dimensions:" DO idim = 1, ndims_tensor(tensor) WRITE (unit_nr_prv, "(I6)", advance="no") nblks_total(idim) END DO WRITE (unit_nr_prv, "(/T4,A,1X)", advance="no") "full dimensions:" DO idim = 1, ndims_tensor(tensor) WRITE (unit_nr_prv, "(I8)", advance="no") nfull_total(idim) END DO WRITE (unit_nr_prv, "(/T4,A,1X)", advance="no") "process grid dimensions:" DO idim = 1, ndims_tensor(tensor) WRITE (unit_nr_prv, "(I6)", advance="no") pdims(idim) END DO WRITE (unit_nr_prv, *) IF (PRESENT(full_info)) THEN IF (full_info) THEN WRITE (unit_nr_prv, '(T4,A)', advance='no') "Block sizes:" #:for dim in range(1, maxdim+1) IF (ndims_tensor(tensor) >= ${dim}$) THEN WRITE (unit_nr_prv, '(/T8,A,1X,I1,A,1X)', advance='no') 'Dim', ${dim}$, ':' DO iblk = 1, SIZE(blk_size_${dim}$) WRITE (unit_nr_prv, '(I2,1X)', advance='no') blk_size_${dim}$ (iblk) END DO END IF #:endfor WRITE (unit_nr_prv, '(/T4,A)', advance='no') "Block distribution:" #:for dim in range(1, maxdim+1) IF (ndims_tensor(tensor) >= ${dim}$) THEN WRITE (unit_nr_prv, '(/T8,A,1X,I1,A,1X)', advance='no') 'Dim', ${dim}$, ':' DO iblk = 1, SIZE(proc_dist_${dim}$) WRITE (unit_nr_prv, '(I3,1X)', advance='no') proc_dist_${dim}$ (iblk) END DO END IF #:endfor END IF WRITE (unit_nr_prv, *) END IF END IF END SUBROUTINE SUBROUTINE dbcsr_t_write_tensor_dist(tensor, unit_nr) !! Write info on tensor distribution & load balance TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER, INTENT(IN) :: unit_nr INTEGER :: nproc, myproc, nblock_max, nelement_max INTEGER(KIND=int_8) :: nblock_sum, nelement_sum, nblock_tot INTEGER :: nblock, nelement, unit_nr_prv TYPE(mp_comm_type) :: mp_comm INTEGER, DIMENSION(2) :: tmp INTEGER, DIMENSION(ndims_tensor(tensor)) :: bdims REAL(KIND=real_8) :: occupation mp_comm = tensor%pgrid%mp_comm_2d unit_nr_prv = prep_output_unit(unit_nr) IF (unit_nr_prv == 0) RETURN CALL mp_environ(nproc, myproc, mp_comm) nblock = dbcsr_t_get_num_blocks(tensor) nelement = dbcsr_t_get_nze(tensor) nblock_sum = dbcsr_t_get_num_blocks_total(tensor) nelement_sum = dbcsr_t_get_nze_total(tensor) tmp = (/nblock, nelement/) CALL mp_max(tmp, mp_comm) nblock_max = tmp(1); nelement_max = tmp(2) CALL blk_dims_tensor(tensor, bdims) nblock_tot = PRODUCT(INT(bdims, KIND=int_8)) occupation = -1.0_real_8 IF (nblock_tot .NE. 0) occupation = 100.0_real_8*REAL(nblock_sum, real_8)/REAL(nblock_tot, real_8) IF (unit_nr_prv > 0) THEN WRITE (unit_nr_prv, "(T2,A)") & "DISTRIBUTION OF "//TRIM(tensor%name) WRITE (unit_nr_prv, "(T15,A,T68,I13)") "Number of non-zero blocks:", nblock_sum WRITE (unit_nr_prv, "(T15,A,T75,F6.2)") "Percentage of non-zero blocks:", occupation WRITE (unit_nr_prv, "(T15,A,T68,I13)") "Average number of blocks per CPU:", (nblock_sum + nproc - 1)/nproc WRITE (unit_nr_prv, "(T15,A,T68,I13)") "Maximum number of blocks per CPU:", nblock_max WRITE (unit_nr_prv, "(T15,A,T68,I13)") "Average number of matrix elements per CPU:", (nelement_sum + nproc - 1)/nproc WRITE (unit_nr_prv, "(T15,A,T68,I13)") "Maximum number of matrix elements per CPU:", nelement_max END IF END SUBROUTINE SUBROUTINE dbcsr_t_write_blocks(tensor, io_unit_master, io_unit_all, write_int) !! Write all tensor blocks TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor INTEGER, INTENT(IN) :: io_unit_master, io_unit_all !! for global output !! for local output LOGICAL, INTENT(IN), OPTIONAL :: write_int !! convert to integers (useful for testing with integer tensors) INTEGER :: blk INTEGER, DIMENSION(ndims_tensor(tensor)) :: blk_index, blk_size #:for ndim in ndims REAL(KIND=real_8), ALLOCATABLE, & DIMENSION(${shape_colon(ndim)}$) :: blk_values_${ndim}$ #:endfor TYPE(dbcsr_t_iterator_type) :: iterator INTEGER :: proc, mynode, numnodes LOGICAL :: found IF (io_unit_master > 0) THEN WRITE (io_unit_master, '(T7,A)') "(block index) @ process: (array index) value" END IF CALL dbcsr_t_iterator_start(iterator, tensor) DO WHILE (dbcsr_t_iterator_blocks_left(iterator)) CALL dbcsr_t_iterator_next_block(iterator, blk_index, blk, blk_size=blk_size) CALL dbcsr_t_get_stored_coordinates(tensor, blk_index, proc) CALL mp_environ(numnodes, mynode, tensor%pgrid%mp_comm_2d) DBCSR_ASSERT(proc .EQ. mynode) #:for ndim in ndims IF (ndims_tensor(tensor) == ${ndim}$) THEN CALL dbcsr_t_get_block(tensor, blk_index, blk_values_${ndim}$, found) DBCSR_ASSERT(found) CALL dbcsr_t_write_block(tensor%name, blk_size, blk_index, proc, io_unit_all, & blk_values_${ndim}$=blk_values_${ndim}$, write_int=write_int) DEALLOCATE (blk_values_${ndim}$) END IF #:endfor END DO CALL dbcsr_t_iterator_stop(iterator) END SUBROUTINE SUBROUTINE dbcsr_t_write_block(name, blk_size, blk_index, proc, unit_nr, & ${varlist("blk_values",nmin=2)}$, write_int) !! Write a tensor block CHARACTER(LEN=*), INTENT(IN) :: name !! tensor name INTEGER, DIMENSION(:), INTENT(IN) :: blk_size !! block size INTEGER, DIMENSION(:), INTENT(IN) :: blk_index !! block index #:for ndim in ndims REAL(KIND=real_8), & DIMENSION(${arrlist("blk_size", nmax=ndim)}$), & INTENT(IN), OPTIONAL :: blk_values_${ndim}$ !! block values for 2 dimensions #:endfor LOGICAL, INTENT(IN), OPTIONAL :: write_int !! write_int convert values to integers LOGICAL :: write_int_prv INTEGER, INTENT(IN) :: unit_nr !! unit number INTEGER, INTENT(IN) :: proc !! which process am I INTEGER :: ${varlist("i")}$ INTEGER :: ndim IF (PRESENT(write_int)) THEN write_int_prv = write_int ELSE write_int_prv = .FALSE. END IF ndim = SIZE(blk_size) IF (unit_nr > 0) THEN #:for ndim in ndims IF (ndim == ${ndim}$) THEN #:for idim in range(ndim,0,-1) DO i_${idim}$ = 1, blk_size(${idim}$) #:endfor IF (write_int_prv) THEN WRITE (unit_nr, '(T7,A,T16,A,${ndim}$I3,1X,A,1X,I3,A,1X,A,${ndim}$I3,1X,A,1X,I20)') & TRIM(name), "(", blk_index, ") @", proc, ':', & "(", ${varlist("i", nmax=ndim)}$, ")", & INT(blk_values_${ndim}$ (${varlist("i", nmax=ndim)}$), KIND=int_8) ELSE WRITE (unit_nr, '(T7,A,T16,A,${ndim}$I3,1X,A,1X,I3,A,1X,A,${ndim}$I3,1X,A,1X,F10.5)') & TRIM(name), "(", blk_index, ") @", proc, ':', & "(", ${varlist("i", nmax=ndim)}$, ")", & blk_values_${ndim}$ (${varlist("i", nmax=ndim)}$) END IF #:for idim in range(ndim,0,-1) END DO #:endfor END IF #:endfor END IF END SUBROUTINE SUBROUTINE dbcsr_t_write_block_indices(tensor, io_unit_master, io_unit_all) TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor INTEGER, INTENT(IN) :: io_unit_master, io_unit_all TYPE(dbcsr_t_iterator_type) :: iterator INTEGER, DIMENSION(ndims_tensor(tensor)) :: blk_index, blk_size INTEGER :: blk, mynode, numnodes, proc IF (io_unit_master > 0) THEN WRITE (io_unit_master, '(T7,A)') "(block index) @ process: size" END IF CALL dbcsr_t_iterator_start(iterator, tensor) DO WHILE (dbcsr_t_iterator_blocks_left(iterator)) CALL dbcsr_t_iterator_next_block(iterator, blk_index, blk, blk_size=blk_size) CALL dbcsr_t_get_stored_coordinates(tensor, blk_index, proc) CALL mp_environ(numnodes, mynode, tensor%pgrid%mp_comm_2d) DBCSR_ASSERT(proc .EQ. mynode) #:for ndim in ndims IF (ndims_tensor(tensor) == ${ndim}$) THEN WRITE (io_unit_all, '(T7,A,T16,A,${ndim}$I3,1X,A,1X,I3,A2,${ndim}$I3)') & TRIM(tensor%name), "blk index (", blk_index, ") @", proc, ":", blk_size END IF #:endfor END DO CALL dbcsr_t_iterator_stop(iterator) END SUBROUTINE SUBROUTINE dbcsr_t_write_split_info(pgrid, unit_nr) TYPE(dbcsr_t_pgrid_type), INTENT(IN) :: pgrid INTEGER, INTENT(IN) :: unit_nr IF (ALLOCATED(pgrid%tas_split_info)) THEN CALL dbcsr_tas_write_split_info(pgrid%tas_split_info, unit_nr) END IF END SUBROUTINE FUNCTION prep_output_unit(unit_nr) RESULT(unit_nr_out) INTEGER, INTENT(IN), OPTIONAL :: unit_nr INTEGER :: unit_nr_out IF (PRESENT(unit_nr)) THEN unit_nr_out = unit_nr ELSE unit_nr_out = 0 END IF END FUNCTION END MODULE ================================================ FILE: src/tensors/dbcsr_tensor_reshape.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tensor_reshape !! Routines to reshape / redistribute tensors #:include "dbcsr_tensor.fypp" #:set maxdim = maxrank #:set ndims = range(2,maxdim+1) USE dbcsr_allocate_wrap, ONLY: allocate_any USE dbcsr_tas_base, ONLY: dbcsr_tas_copy, dbcsr_tas_get_info, dbcsr_tas_info USE dbcsr_tensor_block, ONLY: & block_nd, create_block, destroy_block, dbcsr_t_iterator_type, dbcsr_t_iterator_next_block, & dbcsr_t_iterator_blocks_left, dbcsr_t_iterator_start, dbcsr_t_iterator_stop, dbcsr_t_get_block, & dbcsr_t_reserve_blocks, dbcsr_t_put_block USE dbcsr_tensor_types, ONLY: dbcsr_t_blk_sizes, & dbcsr_t_create, & dbcsr_t_get_data_type, & dbcsr_t_type, & ndims_tensor, & dbcsr_t_get_stored_coordinates, & dbcsr_t_clear USE dbcsr_kinds, ONLY: default_string_length USE dbcsr_kinds, ONLY: ${uselist(dtype_float_prec)}$ USE dbcsr_api, ONLY: ${uselist(dtype_float_param)}$ USE dbcsr_mpiwrap, ONLY: mp_alltoall, & mp_environ, & mp_irecv, & mp_isend, & mp_waitall, mp_comm_type, mp_request_type #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_reshape' PUBLIC :: & dbcsr_t_reshape TYPE block_buffer_type INTEGER :: ndim = -1 INTEGER :: nblock = -1 INTEGER, DIMENSION(:, :), ALLOCATABLE :: indx #:for dparam, dtype, dsuffix in dtype_float_list ${dtype}$, DIMENSION(:), ALLOCATABLE :: msg_${dsuffix}$ #:endfor INTEGER :: data_type = -1 INTEGER :: endpos = -1 END TYPE INTERFACE block_buffer_add_block #:for dparam, dtype, dsuffix in dtype_float_list MODULE PROCEDURE block_buffer_add_block_${dsuffix}$ #:endfor END INTERFACE CONTAINS SUBROUTINE dbcsr_t_reshape(tensor_in, tensor_out, summation, move_data) !! copy data (involves reshape) TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_in, tensor_out LOGICAL, INTENT(IN), OPTIONAL :: summation !! tensor_out = tensor_out + tensor_in move_data memory optimization: transfer data from tensor_in to tensor_out s.t. !! tensor_in is empty on return LOGICAL, INTENT(IN), OPTIONAL :: move_data INTEGER :: blk, iproc, mynode, ndata, & numnodes, bcount, nblk INTEGER, ALLOCATABLE, DIMENSION(:) :: num_blocks_recv, num_blocks_send, & num_entries_recv, num_entries_send, & num_rec, num_send INTEGER, ALLOCATABLE, DIMENSION(:, :) :: index_recv, blks_to_allocate TYPE(dbcsr_t_iterator_type) :: iter TYPE(block_nd) :: blk_data TYPE(block_buffer_type), ALLOCATABLE, DIMENSION(:) :: buffer_recv, buffer_send INTEGER, DIMENSION(ndims_tensor(tensor_in)) :: blk_size, ind_nd, index LOGICAL :: found, summation_prv, move_prv TYPE(mp_comm_type) :: mp_comm TYPE(mp_request_type), ALLOCATABLE, DIMENSION(:, :) :: req_array IF (PRESENT(summation)) THEN summation_prv = summation ELSE summation_prv = .FALSE. END IF IF (PRESENT(move_data)) THEN move_prv = move_data ELSE move_prv = .FALSE. END IF DBCSR_ASSERT(tensor_out%valid) IF (.NOT. summation_prv) CALL dbcsr_t_clear(tensor_out) mp_comm = tensor_in%pgrid%mp_comm_2d CALL mp_environ(numnodes, mynode, mp_comm) ALLOCATE (buffer_send(0:numnodes - 1)) ALLOCATE (buffer_recv(0:numnodes - 1)) ALLOCATE (num_blocks_recv(0:numnodes - 1)) ALLOCATE (num_blocks_send(0:numnodes - 1)) ALLOCATE (num_entries_recv(0:numnodes - 1)) ALLOCATE (num_entries_send(0:numnodes - 1)) ALLOCATE (num_rec(0:2*numnodes - 1)) ALLOCATE (num_send(0:2*numnodes - 1)) num_send(:) = 0 ALLOCATE (req_array(1:numnodes, 4)) CALL dbcsr_t_iterator_start(iter, tensor_in) DO WHILE (dbcsr_t_iterator_blocks_left(iter)) CALL dbcsr_t_iterator_next_block(iter, ind_nd, blk, blk_size=blk_size) CALL dbcsr_t_get_stored_coordinates(tensor_out, ind_nd, iproc) num_send(2*iproc) = num_send(2*iproc) + PRODUCT(blk_size) num_send(2*iproc + 1) = num_send(2*iproc + 1) + 1 END DO CALL dbcsr_t_iterator_stop(iter) CALL mp_alltoall(num_send, num_rec, 2, mp_comm) DO iproc = 0, numnodes - 1 num_entries_recv(iproc) = num_rec(2*iproc) num_blocks_recv(iproc) = num_rec(2*iproc + 1) num_entries_send(iproc) = num_send(2*iproc) num_blocks_send(iproc) = num_send(2*iproc + 1) CALL block_buffer_create(buffer_send(iproc), num_blocks_send(iproc), num_entries_send(iproc), & dbcsr_t_get_data_type(tensor_in), ndims_tensor(tensor_in)) CALL block_buffer_create(buffer_recv(iproc), num_blocks_recv(iproc), num_entries_recv(iproc), & dbcsr_t_get_data_type(tensor_in), ndims_tensor(tensor_in)) END DO CALL dbcsr_t_iterator_start(iter, tensor_in) DO WHILE (dbcsr_t_iterator_blocks_left(iter)) CALL dbcsr_t_iterator_next_block(iter, ind_nd, blk, blk_size=blk_size) CALL dbcsr_t_get_block(tensor_in, ind_nd, blk_data, found) DBCSR_ASSERT(found) CALL dbcsr_t_get_stored_coordinates(tensor_out, ind_nd, iproc) CALL block_buffer_add_anyd_block(buffer_send(iproc), ind_nd, blk_data) CALL destroy_block(blk_data) END DO CALL dbcsr_t_iterator_stop(iter) IF (move_prv) CALL dbcsr_t_clear(tensor_in) CALL dbcsr_t_communicate_buffer(mp_comm, buffer_recv, buffer_send, req_array) DO iproc = 0, numnodes - 1 CALL block_buffer_destroy(buffer_send(iproc)) END DO nblk = SUM(num_blocks_recv) ALLOCATE (blks_to_allocate(nblk, ndims_tensor(tensor_in))) bcount = 0 DO iproc = 0, numnodes - 1 CALL block_buffer_get_index(buffer_recv(iproc), index_recv) blks_to_allocate(bcount + 1:bcount + SIZE(index_recv, 1), :) = index_recv(:, :) bcount = bcount + SIZE(index_recv, 1) DEALLOCATE (index_recv) END DO CALL dbcsr_t_reserve_blocks(tensor_out, blks_to_allocate) DEALLOCATE (blks_to_allocate) DO iproc = 0, numnodes - 1 DO WHILE (block_buffer_blocks_left(buffer_recv(iproc))) CALL block_buffer_get_next_anyd_block(buffer_recv(iproc), ndata, index) CALL dbcsr_t_blk_sizes(tensor_in, index, blk_size) ! create block CALL create_block(blk_data, blk_size, dbcsr_t_get_data_type(tensor_in)) ! get actual block data CALL block_buffer_get_next_anyd_block(buffer_recv(iproc), ndata, index, blk_data) CALL dbcsr_t_put_block(tensor_out, index, blk_data, summation=summation) CALL destroy_block(blk_data) END DO CALL block_buffer_destroy(buffer_recv(iproc)) END DO END SUBROUTINE SUBROUTINE block_buffer_create(buffer, nblock, ndata, data_type, ndim) !! Create block buffer for MPI communication. TYPE(block_buffer_type), INTENT(OUT) :: buffer !! block buffer INTEGER, INTENT(IN) :: nblock, ndata, data_type, ndim !! number of blocks !! total number of block entries !! number of dimensions buffer%nblock = nblock buffer%data_type = data_type buffer%endpos = 0 buffer%ndim = ndim SELECT CASE (data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) ALLOCATE (buffer%msg_${dsuffix}$ (ndata)) #:endfor END SELECT ALLOCATE (buffer%indx(nblock, ndim + 1)) END SUBROUTINE block_buffer_create SUBROUTINE block_buffer_destroy(buffer) TYPE(block_buffer_type), INTENT(INOUT) :: buffer SELECT CASE (buffer%data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) DEALLOCATE (buffer%msg_${dsuffix}$) #:endfor END SELECT DEALLOCATE (buffer%indx) buffer%nblock = -1 buffer%data_type = -1 buffer%ndim = -1 buffer%endpos = -1 END SUBROUTINE block_buffer_destroy PURE FUNCTION ndims_buffer(buffer) TYPE(block_buffer_type), INTENT(IN) :: buffer INTEGER :: ndims_buffer ndims_buffer = buffer%ndim END FUNCTION SUBROUTINE block_buffer_add_anyd_block(buffer, index, block) !! insert a block into block buffer (at current iterator position) TYPE(block_buffer_type), INTENT(INOUT) :: buffer INTEGER, DIMENSION(ndims_buffer(buffer)), & INTENT(IN) :: index !! index of block TYPE(block_nd), INTENT(IN) :: block !! block SELECT CASE (block%data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) CALL block_buffer_add_block_${dsuffix}$ (buffer, SIZE(block%${dsuffix}$%blk), index, block%${dsuffix}$%blk) #:endfor END SELECT END SUBROUTINE SUBROUTINE block_buffer_get_next_anyd_block(buffer, ndata, index, block, advance_iter) !! get next block from buffer. Iterator is advanced only if block is retrieved or advance_iter. TYPE(block_buffer_type), INTENT(INOUT) :: buffer INTEGER, INTENT(OUT) :: ndata INTEGER, DIMENSION(ndims_buffer(buffer)), & INTENT(OUT) :: index TYPE(block_nd), INTENT(INOUT), OPTIONAL :: block LOGICAL, INTENT(IN), OPTIONAL :: advance_iter SELECT CASE (buffer%data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) IF (PRESENT(block)) THEN CALL block_buffer_get_next_block_${dsuffix}$ (buffer, ndata, index, block%${dsuffix}$%blk, advance_iter=advance_iter) ELSE CALL block_buffer_get_next_block_${dsuffix}$ (buffer, ndata, index, advance_iter=advance_iter) END IF #:endfor END SELECT END SUBROUTINE SUBROUTINE block_buffer_get_index(buffer, index) !! Get all indices from buffer TYPE(block_buffer_type), INTENT(IN) :: buffer INTEGER, INTENT(OUT), DIMENSION(:, :), ALLOCATABLE :: index INTEGER, DIMENSION(2) :: indx_shape indx_shape = SHAPE(buffer%indx) - [0, 1] CALL allocate_any(index, source=buffer%indx(1:indx_shape(1), 1:indx_shape(2))) END SUBROUTINE PURE FUNCTION block_buffer_blocks_left(buffer) !! how many blocks left in iterator TYPE(block_buffer_type), INTENT(IN) :: buffer LOGICAL :: block_buffer_blocks_left block_buffer_blocks_left = buffer%endpos .LT. buffer%nblock END FUNCTION SUBROUTINE dbcsr_t_communicate_buffer(mp_comm, buffer_recv, buffer_send, req_array) !! communicate buffer TYPE(mp_comm_type), INTENT(IN) :: mp_comm TYPE(block_buffer_type), DIMENSION(0:), INTENT(INOUT) :: buffer_recv, buffer_send TYPE(mp_request_type), DIMENSION(:, :), INTENT(OUT) :: req_array INTEGER :: iproc, mynode, numnodes, rec_counter, & send_counter INTEGER :: handle CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_communicate_buffer' CALL timeset(routineN, handle) CALL mp_environ(numnodes, mynode, mp_comm) IF (numnodes > 1) THEN send_counter = 0 rec_counter = 0 DO iproc = 0, numnodes - 1 IF (buffer_recv(iproc)%nblock > 0) THEN rec_counter = rec_counter + 1 CALL mp_irecv(buffer_recv(iproc)%indx, iproc, mp_comm, req_array(rec_counter, 3), tag=4) SELECT CASE (buffer_recv(iproc)%data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) CALL mp_irecv(buffer_recv(iproc)%msg_${dsuffix}$, iproc, mp_comm, req_array(rec_counter, 4), tag=7) #:endfor END SELECT END IF END DO DO iproc = 0, numnodes - 1 IF (buffer_send(iproc)%nblock > 0) THEN send_counter = send_counter + 1 CALL mp_isend(buffer_send(iproc)%indx, iproc, mp_comm, req_array(send_counter, 1), tag=4) SELECT CASE (buffer_recv(iproc)%data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) CALL mp_isend(buffer_send(iproc)%msg_${dsuffix}$, iproc, mp_comm, req_array(send_counter, 2), tag=7) #:endfor END SELECT END IF END DO IF (send_counter > 0) THEN CALL mp_waitall(req_array(1:send_counter, 1:2)) END IF IF (rec_counter > 0) THEN CALL mp_waitall(req_array(1:rec_counter, 3:4)) END IF ELSE IF (buffer_recv(0)%nblock > 0) THEN buffer_recv(0)%indx(:, :) = buffer_send(0)%indx(:, :) SELECT CASE (buffer_recv(0)%data_type) #:for dparam, dtype, dsuffix in dtype_float_list CASE (${dparam}$) buffer_recv(0)%msg_${dsuffix}$ (:) = buffer_send(0)%msg_${dsuffix}$ (:) #:endfor END SELECT END IF END IF CALL timestop(handle) END SUBROUTINE #:for dparam, dtype, dsuffix in dtype_float_list SUBROUTINE block_buffer_add_block_${dsuffix}$ (buffer, ndata, index, block) !! add block to buffer. TYPE(block_buffer_type), INTENT(INOUT) :: buffer INTEGER, INTENT(IN) :: ndata ${dtype}$, DIMENSION(ndata), INTENT(IN) :: block INTEGER, DIMENSION(ndims_buffer(buffer)), INTENT(IN) :: index INTEGER :: p, ndims, p_data DBCSR_ASSERT(buffer%data_type .EQ. ${dparam}$) ndims = ndims_buffer(buffer) p = buffer%endpos IF (p .EQ. 0) THEN p_data = 0 ELSE p_data = buffer%indx(p, ndims + 1) END IF buffer%msg_${dsuffix}$ (p_data + 1:p_data + ndata) = block(:) buffer%indx(p + 1, 1:ndims) = index(:) IF (p > 0) THEN buffer%indx(p + 1, ndims + 1) = buffer%indx(p, ndims + 1) + ndata ELSE buffer%indx(p + 1, ndims + 1) = ndata END IF buffer%endpos = buffer%endpos + 1 END SUBROUTINE #:endfor #:for dparam, dtype, dsuffix in dtype_float_list SUBROUTINE block_buffer_get_next_block_${dsuffix}$ (buffer, ndata, index, block, advance_iter) !! get next block from buffer. Iterator is advanced only if block is retrieved or advance_iter. TYPE(block_buffer_type), INTENT(INOUT) :: buffer INTEGER, INTENT(OUT) :: ndata ${dtype}$, DIMENSION(:), ALLOCATABLE, OPTIONAL, INTENT(OUT) :: block INTEGER, DIMENSION(ndims_buffer(buffer)), INTENT(OUT) :: index INTEGER :: p, ndims, p_data LOGICAL, INTENT(IN), OPTIONAL :: advance_iter LOGICAL :: do_advance do_advance = .FALSE. IF (PRESENT(advance_iter)) THEN do_advance = advance_iter ELSE IF (PRESENT(block)) THEN do_advance = .TRUE. END IF DBCSR_ASSERT(buffer%data_type .EQ. ${dparam}$) ndims = ndims_buffer(buffer) p = buffer%endpos IF (p .EQ. 0) THEN p_data = 0 ELSE p_data = buffer%indx(p, ndims + 1) END IF IF (p > 0) THEN ndata = buffer%indx(p + 1, ndims + 1) - buffer%indx(p, ndims + 1) ELSE ndata = buffer%indx(p + 1, ndims + 1) END IF index(:) = buffer%indx(p + 1, 1:ndims) IF (PRESENT(block)) THEN CALL allocate_any(block, source=buffer%msg_${dsuffix}$ (p_data + 1:p_data + ndata)) END IF IF (do_advance) buffer%endpos = buffer%endpos + 1 END SUBROUTINE #:endfor END MODULE dbcsr_tensor_reshape ================================================ FILE: src/tensors/dbcsr_tensor_split.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tensor_split !! Routines to split blocks and to convert between tensors with different block sizes. #:include "dbcsr_tensor.fypp" #:set maxdim = maxrank #:set ndims = range(2,maxdim+1) USE dbcsr_allocate_wrap, ONLY: allocate_any USE dbcsr_array_list_methods, ONLY: get_ith_array USE dbcsr_tensor_block, ONLY: dbcsr_t_iterator_type, & dbcsr_t_get_block, & dbcsr_t_put_block, & dbcsr_t_iterator_start, & dbcsr_t_iterator_blocks_left, & dbcsr_t_iterator_stop, & dbcsr_t_iterator_next_block, & dbcsr_t_reserve_blocks, & dbcsr_t_reserved_block_indices USE dbcsr_tensor_index, ONLY: dbcsr_t_get_mapping_info, & dbcsr_t_inverse_order USE dbcsr_tensor_types, ONLY: dbcsr_t_create, & dbcsr_t_get_data_type, & dbcsr_t_type, & ndims_tensor, & dbcsr_t_distribution_type, & dbcsr_t_distribution, & dbcsr_t_distribution_destroy, & dbcsr_t_distribution_new_expert, & dbcsr_t_clear, & dbcsr_t_finalize, & dbcsr_t_get_num_blocks, & dbcsr_t_blk_offsets, & dbcsr_t_blk_sizes, & ndims_matrix_row, & ndims_matrix_column, & dbcsr_t_filter, & dbcsr_t_copy_contraction_storage USE dbcsr_api, ONLY: ${uselist(dtype_float_param)}$ USE dbcsr_kinds, ONLY: ${uselist(dtype_float_prec)}$, dp #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_split' PUBLIC :: & dbcsr_t_make_compatible_blocks, & dbcsr_t_split_blocks, & dbcsr_t_split_blocks_generic, & dbcsr_t_split_copyback, & dbcsr_t_crop CONTAINS SUBROUTINE dbcsr_t_split_blocks_generic(tensor_in, tensor_out, ${varlist("blk_size")}$, nodata) !! Split tensor blocks into smaller blocks TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_in !! Input tensor TYPE(dbcsr_t_type), INTENT(OUT) :: tensor_out !! Output tensor (splitted blocks) INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: ${varlist("blk_size")}$ !! block sizes for each of the tensor dimensions LOGICAL, INTENT(IN), OPTIONAL :: nodata !! don't copy data from tensor_in to tensor_out TYPE(dbcsr_t_distribution_type) :: dist_old, dist_split TYPE(dbcsr_t_iterator_type) :: iter INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("nd_dist_split")}$ INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("nd_blk_size_split")}$ INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("index_split_offset")}$ INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("inblock_offset")}$ INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("blk_nsplit")}$ INTEGER :: ${varlist("split_blk")}$ INTEGER :: idim, i, isplit_sum, blk, nsplit, handle, splitsum, bcount INTEGER, DIMENSION(:, :), ALLOCATABLE :: blks_to_allocate INTEGER, DIMENSION(:), ALLOCATABLE :: dist_d, blk_size_d, blk_size_split_d, dist_split_d INTEGER, DIMENSION(ndims_matrix_row(tensor_in)) :: map1_2d INTEGER, DIMENSION(ndims_matrix_column(tensor_in)) :: map2_2d INTEGER, DIMENSION(ndims_tensor(tensor_in)) :: blk_index, blk_size, blk_offset, & blk_shape INTEGER, DIMENSION(${maxdim}$) :: bi_split, inblock_offset LOGICAL :: found #:for dparam, dtype, dsuffix in dtype_float_list #:for ndim in ndims ${dtype}$, DIMENSION(${shape_colon(n=ndim)}$), ALLOCATABLE :: block_${dsuffix}$_${ndim}$d #:endfor #:endfor CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_split_blocks_generic' CALL timeset(routineN, handle) dist_old = dbcsr_t_distribution(tensor_in) DO idim = 1, ndims_tensor(tensor_in) CALL get_ith_array(dist_old%nd_dist, idim, dist_d) CALL get_ith_array(tensor_in%blk_sizes, idim, blk_size_d) #:for idim in range(1, maxdim+1) IF (idim == ${idim}$) THEN ! split block index offset for each normal block index ALLOCATE (index_split_offset_${idim}$ (SIZE(dist_d))) ! how many split blocks for each normal block index ALLOCATE (blk_nsplit_${idim}$ (SIZE(dist_d))) ! data offset of split blocks w.r.t. corresponding normal block ALLOCATE (inblock_offset_${idim}$ (SIZE(blk_size_${idim}$))) CALL allocate_any(blk_size_split_d, source=blk_size_${idim}$) END IF #:endfor ! distribution vector for split blocks ALLOCATE (dist_split_d(SIZE(blk_size_split_d))) isplit_sum = 0 ! counting splits DO i = 1, SIZE(blk_size_d) nsplit = 0 ! number of splits for current normal block splitsum = 0 ! summing split block sizes for current normal block DO WHILE (splitsum < blk_size_d(i)) nsplit = nsplit + 1 isplit_sum = isplit_sum + 1 #:for idim in range(1, maxdim+1) IF (idim == ${idim}$) inblock_offset_${idim}$ (isplit_sum) = splitsum #:endfor dist_split_d(isplit_sum) = dist_d(i) splitsum = splitsum + blk_size_split_d(isplit_sum) END DO DBCSR_ASSERT(splitsum == blk_size_d(i)) #:for idim in range(1, maxdim+1) IF (idim == ${idim}$) THEN blk_nsplit_${idim}$ (i) = nsplit index_split_offset_${idim}$ (i) = isplit_sum - nsplit END IF #:endfor END DO #:for idim in range(1, maxdim+1) IF (idim == ${idim}$) THEN CALL allocate_any(nd_dist_split_${idim}$, source=dist_split_d) CALL allocate_any(nd_blk_size_split_${idim}$, source=blk_size_split_d) END IF #:endfor DEALLOCATE (dist_split_d) DEALLOCATE (blk_size_split_d) END DO CALL dbcsr_t_get_mapping_info(tensor_in%nd_index_blk, map1_2d=map1_2d, map2_2d=map2_2d) #:for ndim in ndims IF (ndims_tensor(tensor_in) == ${ndim}$) THEN CALL dbcsr_t_distribution_new_expert(dist_split, tensor_in%pgrid, map1_2d, map2_2d, & ${varlist("nd_dist_split", nmax=ndim)}$) CALL dbcsr_t_create(tensor_out, tensor_in%name, dist_split, map1_2d, map2_2d, & dbcsr_t_get_data_type(tensor_in), ${varlist("nd_blk_size_split", nmax=ndim)}$) END IF #:endfor CALL dbcsr_t_distribution_destroy(dist_split) IF (PRESENT(nodata)) THEN IF (nodata) THEN CALL timestop(handle) RETURN END IF END IF CALL dbcsr_t_iterator_start(iter, tensor_in) bcount = 0 DO WHILE (dbcsr_t_iterator_blocks_left(iter)) CALL dbcsr_t_iterator_next_block(iter, blk_index, blk, blk_size=blk_size) #:for ndim in ndims IF (ndims_tensor(tensor_in) == ${ndim}$) THEN #:for idim in range(1,ndim+1) DO split_blk_${idim}$ = 1, blk_nsplit_${idim}$ (blk_index(${idim}$)) #:endfor bcount = bcount + 1 #:for idim in range(1,ndim+1) END DO #:endfor END IF #:endfor END DO CALL dbcsr_t_iterator_stop(iter) ALLOCATE (blks_to_allocate(bcount, ndims_tensor(tensor_in))) CALL dbcsr_t_iterator_start(iter, tensor_in) bcount = 0 DO WHILE (dbcsr_t_iterator_blocks_left(iter)) CALL dbcsr_t_iterator_next_block(iter, blk_index, blk, blk_size=blk_size, blk_offset=blk_offset) #:for ndim in ndims IF (ndims_tensor(tensor_in) == ${ndim}$) THEN #:for idim in range(1,ndim+1) DO split_blk_${idim}$ = 1, blk_nsplit_${idim}$ (blk_index(${idim}$)) bi_split(${idim}$) = index_split_offset_${idim}$ (blk_index(${idim}$)) + split_blk_${idim}$ #:endfor bcount = bcount + 1 blks_to_allocate(bcount, :) = bi_split(1:ndims_tensor(tensor_in)) #:for idim in range(1,ndim+1) END DO #:endfor END IF #:endfor END DO CALL dbcsr_t_iterator_stop(iter) CALL dbcsr_t_reserve_blocks(tensor_out, blks_to_allocate) CALL dbcsr_t_iterator_start(iter, tensor_in) DO WHILE (dbcsr_t_iterator_blocks_left(iter)) CALL dbcsr_t_iterator_next_block(iter, blk_index, blk, blk_size=blk_size, blk_offset=blk_offset) #:for dparam, dtype, dsuffix in dtype_float_list IF (dbcsr_t_get_data_type(tensor_in) == ${dparam}$) THEN #:for ndim in ndims IF (ndims_tensor(tensor_in) == ${ndim}$) THEN CALL dbcsr_t_get_block(tensor_in, blk_index, block_${dsuffix}$_${ndim}$d, found) DBCSR_ASSERT(found) END IF #:endfor END IF #:endfor #:for ndim in ndims IF (ndims_tensor(tensor_in) == ${ndim}$) THEN #:for idim in range(1,ndim+1) DO split_blk_${idim}$ = 1, blk_nsplit_${idim}$ (blk_index(${idim}$)) ! split block index bi_split(${idim}$) = index_split_offset_${idim}$ (blk_index(${idim}$)) + split_blk_${idim}$ blk_shape(${idim}$) = blk_size_${idim}$ (bi_split(${idim}$)) #:endfor #:for dparam, dtype, dsuffix in dtype_float_list IF (dbcsr_t_get_data_type(tensor_in) == ${dparam}$) THEN #:for idim in range(1,ndim+1) inblock_offset(${idim}$) = inblock_offset_${idim}$ (bi_split(${idim}$)) #:endfor CALL dbcsr_t_put_block(tensor_out, bi_split(1:${ndim}$), & blk_shape, & block_${dsuffix}$_${ndim}$d( & ${", ".join(["inblock_offset("+str(idim)+") + 1:inblock_offset("+str(idim)+") + blk_shape("+str(idim)+")" for idim in range(1, ndim+1)])}$)) END IF #:endfor #:for idim in range(1,ndim+1) END DO #:endfor #:for dparam, dtype, dsuffix in dtype_float_list IF (dbcsr_t_get_data_type(tensor_in) == ${dparam}$) THEN DEALLOCATE (block_${dsuffix}$_${ndim}$d) END IF #:endfor END IF #:endfor END DO CALL dbcsr_t_iterator_stop(iter) CALL dbcsr_t_finalize(tensor_out) ! remove blocks that are exactly 0, these can occur if a cropping operation was performed before splitting CALL dbcsr_t_filter(tensor_out, TINY(0.0_dp)) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_split_blocks(tensor_in, tensor_out, block_sizes, nodata) !! Split tensor blocks into smaller blocks of maximum size PRODUCT(block_sizes). TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_in !! Input tensor TYPE(dbcsr_t_type), INTENT(OUT) :: tensor_out !! Output tensor (split blocks) INTEGER, DIMENSION(ndims_tensor(tensor_in)), & INTENT(IN) :: block_sizes !! block sizes for each of the tensor dimensions LOGICAL, INTENT(IN), OPTIONAL :: nodata !! don't copy data from tensor_in to tensor_out INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("nd_blk_size_split")}$ INTEGER :: idim, i, isplit_sum, blk_remainder, nsplit, isplit INTEGER, DIMENSION(:), ALLOCATABLE :: blk_size_d, blk_size_split_d DO idim = 1, ndims_tensor(tensor_in) CALL get_ith_array(tensor_in%blk_sizes, idim, blk_size_d) isplit_sum = 0 DO i = 1, SIZE(blk_size_d) nsplit = (blk_size_d(i) + block_sizes(idim) - 1)/block_sizes(idim) isplit_sum = isplit_sum + nsplit END DO ALLOCATE (blk_size_split_d(isplit_sum)) isplit_sum = 0 DO i = 1, SIZE(blk_size_d) nsplit = (blk_size_d(i) + block_sizes(idim) - 1)/block_sizes(idim) blk_remainder = blk_size_d(i) DO isplit = 1, nsplit isplit_sum = isplit_sum + 1 blk_size_split_d(isplit_sum) = MIN(block_sizes(idim), blk_remainder) blk_remainder = blk_remainder - block_sizes(idim) END DO END DO #:for idim in range(1, maxdim+1) IF (idim == ${idim}$) THEN CALL allocate_any(nd_blk_size_split_${idim}$, source=blk_size_split_d) END IF #:endfor DEALLOCATE (blk_size_split_d) END DO #:for ndim in ndims IF (ndims_tensor(tensor_in) == ${ndim}$) CALL dbcsr_t_split_blocks_generic(tensor_in, tensor_out, & ${varlist("nd_blk_size_split", nmax=ndim)}$, & nodata=nodata) #:endfor END SUBROUTINE SUBROUTINE dbcsr_t_split_copyback(tensor_split_in, tensor_out, summation) !! Copy tensor with split blocks to tensor with original block sizes. TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_split_in !! tensor with smaller blocks TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_out !! original tensor LOGICAL, INTENT(IN), OPTIONAL :: summation INTEGER, DIMENSION(:), ALLOCATABLE :: first_split_d, last_split_d INTEGER, DIMENSION(:), ALLOCATABLE :: blk_size_split_d, blk_size_d INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("last_split")}$, & ${varlist("first_split")}$, & ${varlist("split")}$ INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("inblock_offset")}$, ${varlist("blk_size_split")}$ INTEGER, DIMENSION(:, :), ALLOCATABLE :: blks_to_allocate INTEGER :: idim, iblk, blk, bcount INTEGER :: ${varlist("iblk")}$, isplit_sum, splitsum, nblk TYPE(dbcsr_t_iterator_type) :: iter INTEGER, DIMENSION(ndims_tensor(tensor_out)) :: blk_index, blk_size, blk_offset, blk_shape, blk_index_n LOGICAL :: found INTEGER, DIMENSION(${maxdim}$) :: inblock_offset INTEGER :: handle CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_split_copyback' #:for dparam, dtype, dsuffix in dtype_float_list #:for ndim in ndims ${dtype}$, DIMENSION(${shape_colon(n=ndim)}$), ALLOCATABLE :: block_${dsuffix}$_${ndim}$d ${dtype}$, DIMENSION(${shape_colon(n=ndim)}$), ALLOCATABLE :: block_split_${dsuffix}$_${ndim}$d #:endfor #:endfor CALL timeset(routineN, handle) DBCSR_ASSERT(tensor_out%valid) IF (PRESENT(summation)) THEN IF (.NOT. summation) CALL dbcsr_t_clear(tensor_out) ELSE CALL dbcsr_t_clear(tensor_out) END IF DO idim = 1, ndims_tensor(tensor_split_in) CALL get_ith_array(tensor_split_in%blk_sizes, idim, blk_size_split_d) CALL get_ith_array(tensor_out%blk_sizes, idim, blk_size_d) #:for idim in range(1, maxdim+1) IF (idim == ${idim}$) THEN ! data offset of split blocks w.r.t. corresponding normal block ALLOCATE (inblock_offset_${idim}$ (SIZE(blk_size_split_d))) ! normal block index for each split block ALLOCATE (split_${idim}$ (SIZE(blk_size_split_d))) END IF #:endfor ALLOCATE (last_split_d(SIZE(blk_size_d))) ALLOCATE (first_split_d(SIZE(blk_size_d))) first_split_d(1) = 1 isplit_sum = 0 DO iblk = 1, SIZE(blk_size_d) splitsum = 0 IF (iblk .GT. 1) first_split_d(iblk) = last_split_d(iblk - 1) + 1 DO WHILE (splitsum < blk_size_d(iblk)) isplit_sum = isplit_sum + 1 #:for idim in range(1, maxdim+1) IF (idim == ${idim}$) THEN inblock_offset_${idim}$ (isplit_sum) = splitsum split_${idim}$ (isplit_sum) = iblk END IF #:endfor splitsum = splitsum + blk_size_split_d(isplit_sum) END DO DBCSR_ASSERT(splitsum == blk_size_d(iblk)) last_split_d(iblk) = isplit_sum END DO #:for idim in range(1, maxdim+1) IF (idim == ${idim}$) THEN CALL allocate_any(first_split_${idim}$, source=first_split_d) CALL allocate_any(last_split_${idim}$, source=last_split_d) CALL allocate_any(blk_size_split_${idim}$, source=blk_size_split_d) END IF #:endfor DEALLOCATE (first_split_d, last_split_d) DEALLOCATE (blk_size_split_d, blk_size_d) END DO nblk = dbcsr_t_get_num_blocks(tensor_split_in) ALLOCATE (blks_to_allocate(nblk, ndims_tensor(tensor_split_in))) CALL dbcsr_t_iterator_start(iter, tensor_split_in) bcount = 0 DO WHILE (dbcsr_t_iterator_blocks_left(iter)) CALL dbcsr_t_iterator_next_block(iter, blk_index, blk, blk_size=blk_size) #:for ndim in ndims IF (ndims_tensor(tensor_out) == ${ndim}$) THEN #:for idim in range(1,ndim+1) blk_index_n(${idim}$) = split_${idim}$ (blk_index(${idim}$)) #:endfor END IF #:endfor blks_to_allocate(bcount + 1, :) = blk_index_n bcount = bcount + 1 END DO CALL dbcsr_t_iterator_stop(iter) CALL dbcsr_t_reserve_blocks(tensor_out, blks_to_allocate) CALL dbcsr_t_iterator_start(iter, tensor_out) DO WHILE (dbcsr_t_iterator_blocks_left(iter)) CALL dbcsr_t_iterator_next_block(iter, blk_index, blk, blk_size=blk_size, blk_offset=blk_offset) #:for dprec, dparam, dtype, dsuffix in dtype_float_list_prec IF (dbcsr_t_get_data_type(tensor_out) == ${dparam}$) THEN #:for ndim in ndims IF (ndims_tensor(tensor_out) == ${ndim}$) THEN CALL allocate_any(block_${dsuffix}$_${ndim}$d, blk_size) block_${dsuffix}$_${ndim}$d = 0.0_${dprec}$ #:for idim in range(1,ndim+1) DO iblk_${idim}$ = first_split_${idim}$ (blk_index(${idim}$)), last_split_${idim}$ (blk_index(${idim}$)) #:endfor #:for idim in range(1,ndim+1) inblock_offset(${idim}$) = inblock_offset_${idim}$ (iblk_${idim}$) #:endfor CALL dbcsr_t_get_block(tensor_split_in, [${", ".join(["iblk_"+str(idim) for idim in range(1, ndim+1)])}$], & block_split_${dsuffix}$_${ndim}$d, found) IF (found) THEN blk_shape(1:${ndim}$) = SHAPE(block_split_${dsuffix}$_${ndim}$d) block_${dsuffix}$_${ndim}$d( & ${", ".join(["inblock_offset("+str(idim)+") + 1:inblock_offset("+str(idim)+") + blk_shape("+str(idim)+")" for idim in range(1, ndim+1)])}$) = & block_split_${dsuffix}$_${ndim}$d END IF #:for idim in range(1,ndim+1) END DO #:endfor CALL dbcsr_t_put_block(tensor_out, blk_index, blk_size, block_${dsuffix}$_${ndim}$d, summation=summation) DEALLOCATE (block_${dsuffix}$_${ndim}$d) END IF #:endfor END IF #:endfor END DO CALL dbcsr_t_iterator_stop(iter) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_make_compatible_blocks(tensor1, tensor2, tensor1_split, tensor2_split, order, nodata1, nodata2, move_data) !! split two tensors with same total sizes but different block sizes such that they have equal !! block sizes !! \move_data memory optimization: transfer data s.t. tensor1 and tensor2 may be empty on return TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor1, tensor2 !! tensor 1 in !! tensor 2 in TYPE(dbcsr_t_type), INTENT(OUT) :: tensor1_split, tensor2_split !! tensor 1 with split blocks !! tensor 2 with split blocks INTEGER, DIMENSION(ndims_tensor(tensor1)), & INTENT(IN), OPTIONAL :: order LOGICAL, INTENT(IN), OPTIONAL :: nodata1, nodata2, move_data !! don't copy data of tensor 1 !! don't copy data of tensor 2 INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("blk_size_split_1")}$, ${varlist("blk_size_split_2")}$, & blk_size_d_1, blk_size_d_2, blk_size_d_split INTEGER :: size_sum_1, size_sum_2, size_sum, bind_1, bind_2, isplit, bs, idim, i LOGICAL :: move_prv, nodata1_prv, nodata2_prv INTEGER, DIMENSION(ndims_tensor(tensor1)) :: order_prv IF (PRESENT(move_data)) THEN move_prv = move_data ELSE move_prv = .FALSE. END IF IF (PRESENT(nodata1)) THEN nodata1_prv = nodata1 ELSE nodata1_prv = .FALSE. END IF IF (PRESENT(nodata2)) THEN nodata2_prv = nodata2 ELSE nodata2_prv = .FALSE. END IF IF (PRESENT(order)) THEN order_prv(:) = dbcsr_t_inverse_order(order) ELSE order_prv(:) = (/(i, i=1, ndims_tensor(tensor1))/) END IF DO idim = 1, ndims_tensor(tensor2) CALL get_ith_array(tensor1%blk_sizes, order_prv(idim), blk_size_d_1) CALL get_ith_array(tensor2%blk_sizes, idim, blk_size_d_2) ALLOCATE (blk_size_d_split(SIZE(blk_size_d_1) + SIZE(blk_size_d_2))) size_sum_1 = 0 size_sum_2 = 0 size_sum = 0 bind_1 = 0 bind_2 = 0 isplit = 0 DO WHILE (bind_1 < SIZE(blk_size_d_1) .AND. bind_2 < SIZE(blk_size_d_2)) IF (blk_size_d_1(bind_1 + 1) < blk_size_d_2(bind_2 + 1)) THEN bind_1 = bind_1 + 1 bs = blk_size_d_1(bind_1) blk_size_d_2(bind_2 + 1) = blk_size_d_2(bind_2 + 1) - bs size_sum = size_sum + bs isplit = isplit + 1 blk_size_d_split(isplit) = bs ELSEIF (blk_size_d_1(bind_1 + 1) > blk_size_d_2(bind_2 + 1)) THEN bind_2 = bind_2 + 1 bs = blk_size_d_2(bind_2) blk_size_d_1(bind_1 + 1) = blk_size_d_1(bind_1 + 1) - bs size_sum = size_sum + bs isplit = isplit + 1 blk_size_d_split(isplit) = bs ELSE bind_1 = bind_1 + 1 bind_2 = bind_2 + 1 bs = blk_size_d_1(bind_1) size_sum = size_sum + bs isplit = isplit + 1 blk_size_d_split(isplit) = bs END IF END DO IF (bind_1 < SIZE(blk_size_d_1)) THEN bind_1 = bind_1 + 1 bs = blk_size_d_1(bind_1) size_sum = size_sum + bs isplit = isplit + 1 blk_size_d_split(isplit) = bs END IF IF (bind_2 < SIZE(blk_size_d_2)) THEN bind_2 = bind_2 + 1 bs = blk_size_d_2(bind_2) size_sum = size_sum + bs isplit = isplit + 1 blk_size_d_split(isplit) = bs END IF #:for idim in range(1, maxdim+1) IF (order_prv(idim) == ${idim}$) THEN CALL allocate_any(blk_size_split_1_${idim}$, source=blk_size_d_split(:isplit)) END IF #:endfor #:for idim in range(1, maxdim+1) IF (idim == ${idim}$) THEN CALL allocate_any(blk_size_split_2_${idim}$, source=blk_size_d_split(:isplit)) END IF #:endfor DEALLOCATE (blk_size_d_split, blk_size_d_1, blk_size_d_2) END DO #:for ndim in ndims IF (ndims_tensor(tensor1) == ${ndim}$) THEN CALL dbcsr_t_split_blocks_generic(tensor1, tensor1_split, ${varlist("blk_size_split_1", nmax=ndim)}$, nodata=nodata1) IF (move_prv .AND. .NOT. nodata1_prv) CALL dbcsr_t_clear(tensor1) CALL dbcsr_t_split_blocks_generic(tensor2, tensor2_split, ${varlist("blk_size_split_2", nmax=ndim)}$, nodata=nodata2) IF (move_prv .AND. .NOT. nodata2_prv) CALL dbcsr_t_clear(tensor2) END IF #:endfor END SUBROUTINE SUBROUTINE dbcsr_t_crop(tensor_in, tensor_out, bounds, move_data) TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_in TYPE(dbcsr_t_type), INTENT(OUT) :: tensor_out INTEGER, DIMENSION(2, ndims_tensor(tensor_in)), INTENT(IN) :: bounds LOGICAL, INTENT(IN), OPTIONAL :: move_data INTEGER, DIMENSION(2, ndims_tensor(tensor_in)) :: blk_bounds TYPE(dbcsr_t_iterator_type) :: iter INTEGER, DIMENSION(ndims_tensor(tensor_in)) :: blk_index, blk_size, blk_offset LOGICAL :: found, move_data_prv INTEGER :: idim, blk, iblk, iblk_all, nblk INTEGER, DIMENSION(:, :), ALLOCATABLE :: blk_ind, blk_ind_tmp #:for dparam, dtype, dsuffix in dtype_float_list #:for ndim in ndims ${dtype}$, DIMENSION(${shape_colon(n=ndim)}$), ALLOCATABLE :: block_${dsuffix}$_${ndim}$d, block_put_${dsuffix}$_${ndim}$d #:endfor #:endfor IF (PRESENT(move_data)) THEN move_data_prv = move_data ELSE move_data_prv = .FALSE. END IF CALL dbcsr_t_create(tensor_in, tensor_out) ! reserve blocks inside bounds ALLOCATE (blk_ind(dbcsr_t_get_num_blocks(tensor_in), ndims_tensor(tensor_in))) CALL dbcsr_t_reserved_block_indices(tensor_in, blk_ind) nblk = dbcsr_t_get_num_blocks(tensor_in) ALLOCATE (blk_ind_tmp(dbcsr_t_get_num_blocks(tensor_in), ndims_tensor(tensor_in))) blk_ind_tmp(:, :) = 0 iblk = 0 blk_loop: DO iblk_all = 1, nblk CALL dbcsr_t_blk_offsets(tensor_in, blk_ind(iblk_all, :), blk_offset) CALL dbcsr_t_blk_sizes(tensor_in, blk_ind(iblk_all, :), blk_size) DO idim = 1, ndims_tensor(tensor_in) IF (bounds(1, idim) > blk_offset(idim) - 1 + blk_size(idim)) CYCLE blk_loop IF (bounds(2, idim) < blk_offset(idim)) CYCLE blk_loop END DO iblk = iblk + 1 blk_ind_tmp(iblk, :) = blk_ind(iblk_all, :) END DO blk_loop DEALLOCATE (blk_ind) ALLOCATE (blk_ind(iblk, ndims_tensor(tensor_in))) blk_ind(:, :) = blk_ind_tmp(:iblk, :) CALL dbcsr_t_reserve_blocks(tensor_out, blk_ind) ! copy blocks CALL dbcsr_t_iterator_start(iter, tensor_out) iter_loop: DO WHILE (dbcsr_t_iterator_blocks_left(iter)) CALL dbcsr_t_iterator_next_block(iter, blk_index, blk, blk_size=blk_size, blk_offset=blk_offset) DO idim = 1, ndims_tensor(tensor_in) blk_bounds(1, idim) = MAX(bounds(1, idim) - blk_offset(idim) + 1, 1) blk_bounds(2, idim) = MIN(bounds(2, idim) - blk_offset(idim) + 1, blk_size(idim)) END DO #:for dprec, dparam, dtype, dsuffix in dtype_float_list_prec IF (dbcsr_t_get_data_type(tensor_in) == ${dparam}$) THEN #:for ndim in ndims IF (ndims_tensor(tensor_in) == ${ndim}$) THEN CALL dbcsr_t_get_block(tensor_in, blk_index, block_${dsuffix}$_${ndim}$d, found) CALL allocate_any(block_put_${dsuffix}$_${ndim}$d, blk_size) block_put_${dsuffix}$_${ndim}$d = 0.0_${dprec}$ block_put_${dsuffix}$_${ndim}$d(${", ".join(["blk_bounds(1, "+str(idim)+"):blk_bounds(2,"+str(idim)+")" for idim in range(1, ndim+1)])}$) = & block_${dsuffix}$_${ndim}$d(${", ".join(["blk_bounds(1, "+str(idim)+"):blk_bounds(2,"+str(idim)+")" for idim in range(1, ndim+1)])}$) CALL dbcsr_t_put_block(tensor_out, blk_index, blk_size, block_put_${dsuffix}$_${ndim}$d) DEALLOCATE (block_${dsuffix}$_${ndim}$d) DEALLOCATE (block_put_${dsuffix}$_${ndim}$d) END IF #:endfor END IF #:endfor END DO iter_loop CALL dbcsr_t_iterator_stop(iter) CALL dbcsr_t_finalize(tensor_out) IF (move_data_prv) CALL dbcsr_t_clear(tensor_in) ! transfer data for batched contraction CALL dbcsr_t_copy_contraction_storage(tensor_in, tensor_out) END SUBROUTINE END MODULE ================================================ FILE: src/tensors/dbcsr_tensor_test.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tensor_test !! General methods for testing DBCSR tensors. #:include "dbcsr_tensor.fypp" #:set maxdim = maxrank #:set ndims = range(2,maxdim+1) USE dbcsr_api, ONLY: ${uselist(dtype_float_param)}$ USE dbcsr_tensor, ONLY: & dbcsr_t_copy, dbcsr_t_get_block, dbcsr_t_iterator_type, dbcsr_t_iterator_blocks_left, & dbcsr_t_iterator_next_block, dbcsr_t_iterator_start, dbcsr_t_iterator_stop, & dbcsr_t_reserve_blocks, dbcsr_t_get_stored_coordinates, dbcsr_t_put_block, & dbcsr_t_contract, dbcsr_t_inverse_order USE dbcsr_tensor_block, ONLY: block_nd USE dbcsr_tensor_types, ONLY: & dbcsr_t_create, dbcsr_t_destroy, dbcsr_t_type, dbcsr_t_distribution_type, dbcsr_t_distribution_destroy, & dims_tensor, ndims_tensor, dbcsr_t_distribution_new, dbcsr_t_get_data_type, & mp_environ_pgrid, dbcsr_t_pgrid_type, dbcsr_t_pgrid_create, dbcsr_t_pgrid_destroy, dbcsr_t_get_info, & dbcsr_t_default_distvec USE dbcsr_tensor_io, ONLY: & dbcsr_t_write_blocks, dbcsr_t_write_block_indices USE dbcsr_kinds, ONLY: ${uselist(dtype_float_prec)}$, & default_string_length, & int_8 USE dbcsr_mpiwrap, ONLY: mp_environ, & mp_comm_free, & mp_sum, & mp_comm_type USE dbcsr_allocate_wrap, ONLY: allocate_any USE dbcsr_tensor_index, ONLY: & combine_tensor_index, get_2d_indices_tensor, dbcsr_t_get_mapping_info USE dbcsr_tas_test, ONLY: dbcsr_tas_checksum USE dbcsr_data_types, ONLY: dbcsr_scalar_type USE dbcsr_blas_operations, ONLY: & set_larnv_seed #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_test' PUBLIC :: & dbcsr_t_setup_test_tensor, & dbcsr_t_contract_test, & dbcsr_t_test_formats, & dbcsr_t_checksum, & dbcsr_t_reset_randmat_seed INTERFACE dist_sparse_tensor_to_repl_dense_array #:for dparam, dtype, dsuffix in [dtype_float_list[0]] #:for ndim in ndims MODULE PROCEDURE dist_sparse_tensor_to_repl_dense_${ndim}$d_array_${dsuffix}$ #:endfor #:endfor END INTERFACE INTEGER, SAVE :: randmat_counter = 0 INTEGER, PARAMETER, PRIVATE :: rand_seed_init = 12341313 CONTAINS FUNCTION dbcsr_t_equal(tensor1, tensor2) !! check if two (arbitrarily mapped and distributed) tensors are equal. TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor1, tensor2 LOGICAL :: dbcsr_t_equal INTEGER :: blk TYPE(dbcsr_t_type) :: tensor2_tmp TYPE(dbcsr_t_iterator_type) :: iter TYPE(block_nd) :: blk_data1, blk_data2 INTEGER, DIMENSION(ndims_tensor(tensor1)) :: blk_size, ind_nd LOGICAL :: found ! create a copy of tensor2 that has exact same data format as tensor1 CALL dbcsr_t_create(tensor1, tensor2_tmp) CALL dbcsr_t_reserve_blocks(tensor1, tensor2_tmp) CALL dbcsr_t_copy(tensor2, tensor2_tmp) dbcsr_t_equal = .TRUE. CALL dbcsr_t_iterator_start(iter, tensor1) DO WHILE (dbcsr_t_iterator_blocks_left(iter)) CALL dbcsr_t_iterator_next_block(iter, ind_nd, blk, blk_size=blk_size) CALL dbcsr_t_get_block(tensor1, ind_nd, blk_data1, found) DBCSR_ASSERT(found) CALL dbcsr_t_get_block(tensor2_tmp, ind_nd, blk_data2, found) DBCSR_ASSERT(found) IF (.NOT. blocks_equal(blk_data1, blk_data2)) THEN dbcsr_t_equal = .FALSE. END IF END DO CALL dbcsr_t_iterator_stop(iter) CALL dbcsr_t_destroy(tensor2_tmp) END FUNCTION PURE FUNCTION blocks_equal(block1, block2) !! check if two blocks are equal TYPE(block_nd), INTENT(IN) :: block1, block2 LOGICAL :: blocks_equal SELECT CASE (block1%data_type) #:for dprec, dparam, dtype, dsuffix in dtype_float_list_prec CASE (${dparam}$) blocks_equal = MAXVAL(ABS(block1%${dsuffix}$%blk - block2%${dsuffix}$%blk)) .LT. 1.0E-12_${dprec}$ #:endfor END SELECT END FUNCTION PURE FUNCTION factorial(n) !! Compute factorial INTEGER, INTENT(IN) :: n INTEGER :: k INTEGER :: factorial factorial = PRODUCT((/(k, k=1, n)/)) END FUNCTION SUBROUTINE permute(n, p) !! Compute all permutations p of (1, 2, ..., n) INTEGER, INTENT(IN) :: n INTEGER :: i, c INTEGER, DIMENSION(n) :: pp INTEGER, DIMENSION(n, factorial(n)), INTENT(OUT) :: p pp = [(i, i=1, n)] c = 1 CALL perm(1) CONTAINS RECURSIVE SUBROUTINE perm(i) INTEGER, INTENT(IN) :: i INTEGER :: j, t IF (i == n) THEN p(:, c) = pp(:) c = c + 1 ELSE DO j = i, n t = pp(i) pp(i) = pp(j) pp(j) = t call perm(i + 1) t = pp(i) pp(i) = pp(j) pp(j) = t END DO END IF END SUBROUTINE END SUBROUTINE SUBROUTINE dbcsr_t_test_formats(ndims, mp_comm, unit_nr, verbose, & ${varlist("blk_size")}$, & ${varlist("blk_ind")}$) !! Test equivalence of all tensor formats, using a random distribution. INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: ${varlist("blk_size")}$ !! block sizes along respective dimension INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: ${varlist("blk_ind")}$ !! index along respective dimension of non-zero blocks INTEGER, INTENT(IN) :: ndims !! tensor rank INTEGER, INTENT(IN) :: unit_nr !! output unit, needs to be a valid unit number on all mpi ranks LOGICAL, INTENT(IN) :: verbose !! if .TRUE., print all tensor blocks TYPE(mp_comm_type), INTENT(IN) :: mp_comm TYPE(dbcsr_t_distribution_type) :: dist1, dist2 TYPE(dbcsr_t_type) :: tensor1, tensor2 INTEGER :: isep, iblk INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("dist1")}$, & ${varlist("dist2")}$ INTEGER :: nblks, imap INTEGER, DIMENSION(ndims) :: pdims, myploc LOGICAL :: eql INTEGER :: iperm, idist, icount INTEGER, DIMENSION(:), ALLOCATABLE :: map1, map2, map1_ref, map2_ref INTEGER, DIMENSION(ndims, factorial(ndims)) :: perm INTEGER :: io_unit INTEGER :: mynode, numnodes TYPE(dbcsr_t_pgrid_type) :: comm_nd CHARACTER(LEN=default_string_length) :: tensor_name ! Process grid pdims(:) = 0 CALL dbcsr_t_pgrid_create(mp_comm, pdims, comm_nd) CALL mp_environ(numnodes, mynode, mp_comm) io_unit = 0 IF (mynode .EQ. 0) io_unit = unit_nr CALL permute(ndims, perm) CALL allocate_any(map1_ref, source=perm(1:ndims/2, 1)) CALL allocate_any(map2_ref, source=perm(ndims/2 + 1:ndims, 1)) IF (io_unit > 0) THEN WRITE (io_unit, *) WRITE (io_unit, '(A)') repeat("-", 80) WRITE (io_unit, '(A,1X,I1)') "Testing matrix representations of tensor rank", ndims WRITE (io_unit, '(A)') repeat("-", 80) WRITE (io_unit, '(A)') "Block sizes:" #:for dim in range(1, maxdim+1) IF (ndims >= ${dim}$) THEN WRITE (io_unit, '(T4,A,1X,I1,A,1X)', advance='no') 'Dim', ${dim}$, ':' DO iblk = 1, SIZE(blk_size_${dim}$) WRITE (io_unit, '(I2,1X)', advance='no') blk_size_${dim}$ (iblk) END DO WRITE (io_unit, *) END IF #:endfor WRITE (io_unit, '(A)') "Non-zero blocks:" DO iblk = 1, SIZE(blk_ind_1) #:for ndim in ndims IF (ndims == ${ndim}$) THEN WRITE (io_unit, '(T4,A, I3, A, ${ndim}$I3, 1X, A)') & 'Block', iblk, ': (', ${varlist("blk_ind", nmax=ndim, suffix='(iblk)')}$, ')' END IF #:endfor END DO WRITE (io_unit, *) WRITE (io_unit, '(A,1X)', advance='no') "Reference map:" WRITE (io_unit, '(A1,1X)', advance='no') "(" DO imap = 1, SIZE(map1_ref) WRITE (io_unit, '(I1,1X)', advance='no') map1_ref(imap) END DO WRITE (io_unit, '(A1,1X)', advance='no') "|" DO imap = 1, SIZE(map2_ref) WRITE (io_unit, '(I1,1X)', advance='no') map2_ref(imap) END DO WRITE (io_unit, '(A1)') ")" END IF icount = 0 DO iperm = 1, factorial(ndims) DO isep = 1, ndims - 1 icount = icount + 1 CALL allocate_any(map1, source=perm(1:isep, iperm)) CALL allocate_any(map2, source=perm(isep + 1:ndims, iperm)) CALL mp_environ(numnodes, mynode, mp_comm) CALL mp_environ_pgrid(comm_nd, pdims, myploc) #:for dim in range(1, maxdim+1) IF (${dim}$ <= ndims) THEN nblks = SIZE(blk_size_${dim}$) ALLOCATE (dist1_${dim}$ (nblks)) ALLOCATE (dist2_${dim}$ (nblks)) CALL dbcsr_t_default_distvec(nblks, pdims(${dim}$), blk_size_${dim}$, dist1_${dim}$) CALL dbcsr_t_default_distvec(nblks, pdims(${dim}$), blk_size_${dim}$, dist2_${dim}$) END IF #:endfor WRITE (tensor_name, '(A,1X,I3,1X)') "Test", icount IF (io_unit > 0) THEN WRITE (io_unit, *) WRITE (io_unit, '(A,A,1X)', advance='no') TRIM(tensor_name), ':' WRITE (io_unit, '(A1,1X)', advance='no') "(" DO imap = 1, SIZE(map1) WRITE (io_unit, '(I1,1X)', advance='no') map1(imap) END DO WRITE (io_unit, '(A1,1X)', advance='no') "|" DO imap = 1, SIZE(map2) WRITE (io_unit, '(I1,1X)', advance='no') map2(imap) END DO WRITE (io_unit, '(A1)') ")" WRITE (io_unit, '(T4,A)') "Reference distribution:" #:for dim in range(1, maxdim+1) IF (${dim}$ <= ndims) THEN WRITE (io_unit, '(T7,A,1X)', advance='no') "Dist vec ${dim}$:" DO idist = 1, SIZE(dist2_${dim}$) WRITE (io_unit, '(I2,1X)', advance='no') dist2_${dim}$ (idist) END DO WRITE (io_unit, *) END IF #:endfor WRITE (io_unit, '(T4,A)') "Test distribution:" #:for dim in range(1, maxdim+1) IF (${dim}$ <= ndims) THEN WRITE (io_unit, '(T7,A,1X)', advance='no') "Dist vec ${dim}$:" DO idist = 1, SIZE(dist2_${dim}$) WRITE (io_unit, '(I2,1X)', advance='no') dist1_${dim}$ (idist) END DO WRITE (io_unit, *) END IF #:endfor END IF #:for ndim in ndims IF (ndims == ${ndim}$) THEN CALL dbcsr_t_distribution_new(dist2, comm_nd, ${varlist("dist2", nmax=ndim)}$) CALL dbcsr_t_create(tensor2, "Ref", dist2, map1_ref, map2_ref, & dbcsr_type_real_8, ${varlist("blk_size", nmax=ndim)}$) CALL dbcsr_t_setup_test_tensor(tensor2, comm_nd%mp_comm_2d, .TRUE., ${varlist("blk_ind", nmax=ndim)}$) END IF #:endfor IF (verbose) CALL dbcsr_t_write_blocks(tensor2, io_unit, unit_nr) #:for ndim in ndims IF (ndims == ${ndim}$) THEN CALL dbcsr_t_distribution_new(dist1, comm_nd, ${varlist("dist1", nmax=ndim)}$) CALL dbcsr_t_create(tensor1, tensor_name, dist1, map1, map2, & dbcsr_type_real_8, ${varlist("blk_size", nmax=ndim)}$) CALL dbcsr_t_setup_test_tensor(tensor1, comm_nd%mp_comm_2d, .TRUE., ${varlist("blk_ind", nmax=ndim)}$) END IF #:endfor IF (verbose) CALL dbcsr_t_write_blocks(tensor1, io_unit, unit_nr) eql = dbcsr_t_equal(tensor1, tensor2) IF (.NOT. eql) THEN IF (io_unit > 0) WRITE (io_unit, '(A,1X,A)') TRIM(tensor_name), 'Test failed!' DBCSR_ABORT('') ELSE IF (io_unit > 0) WRITE (io_unit, '(A,1X,A)') TRIM(tensor_name), 'Test passed!' END IF DEALLOCATE (map1, map2) CALL dbcsr_t_destroy(tensor1) CALL dbcsr_t_distribution_destroy(dist1) CALL dbcsr_t_destroy(tensor2) CALL dbcsr_t_distribution_destroy(dist2) #:for dim in range(1, maxdim+1) IF (${dim}$ <= ndims) THEN DEALLOCATE (dist1_${dim}$, dist2_${dim}$) END IF #:endfor END DO END DO CALL dbcsr_t_pgrid_destroy(comm_nd) END SUBROUTINE SUBROUTINE dbcsr_t_setup_test_tensor(tensor, mp_comm, enumerate, ${varlist("blk_ind")}$) !! Allocate and fill test tensor - entries are enumerated by their index s.t. they only depend !! on global properties of the tensor but not on distribution, matrix representation, etc. TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor TYPE(mp_comm_type), INTENT(IN) :: mp_comm !! communicator LOGICAL, INTENT(IN) :: enumerate INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: ${varlist("blk_ind")}$ !! index along respective dimension of non-zero blocks INTEGER :: blk, numnodes, mynode INTEGER :: i, ib, my_nblks_alloc, nblks_alloc, proc, nze INTEGER, ALLOCATABLE, DIMENSION(:) :: ${varlist("my_blk_ind")}$ INTEGER, DIMENSION(ndims_tensor(tensor)) :: blk_index, blk_offset, blk_size, & tensor_dims INTEGER, DIMENSION(:, :), ALLOCATABLE :: ind_nd #:for ndim in ndims REAL(KIND=real_8), ALLOCATABLE, & DIMENSION(${shape_colon(ndim)}$) :: blk_values_${ndim}$ #:endfor TYPE(dbcsr_t_iterator_type) :: iterator INTEGER, DIMENSION(4) :: iseed INTEGER, DIMENSION(2) :: blk_index_2d, nblks_2d nblks_alloc = SIZE(blk_ind_1) CALL mp_environ(numnodes, mynode, mp_comm) IF (.NOT. enumerate) THEN DBCSR_ASSERT(randmat_counter .NE. 0) randmat_counter = randmat_counter + 1 END IF ALLOCATE (ind_nd(nblks_alloc, ndims_tensor(tensor))) my_nblks_alloc = 0 DO ib = 1, nblks_alloc #:for ndim in ndims IF (ndims_tensor(tensor) == ${ndim}$) THEN ind_nd(ib, :) = [${varlist("blk_ind", nmax=ndim, suffix="(ib)")}$] END IF #:endfor CALL dbcsr_t_get_stored_coordinates(tensor, ind_nd(ib, :), proc) IF (proc == mynode) THEN my_nblks_alloc = my_nblks_alloc + 1 END IF END DO #:for dim in range(1, maxdim+1) IF (ndims_tensor(tensor) >= ${dim}$) THEN ALLOCATE (my_blk_ind_${dim}$ (my_nblks_alloc)) END IF #:endfor i = 0 DO ib = 1, nblks_alloc CALL dbcsr_t_get_stored_coordinates(tensor, ind_nd(ib, :), proc) IF (proc == mynode) THEN i = i + 1 #:for dim in range(1, maxdim+1) IF (ndims_tensor(tensor) >= ${dim}$) THEN my_blk_ind_${dim}$ (i) = blk_ind_${dim}$ (ib) END IF #:endfor END IF END DO #:for ndim in ndims IF (ndims_tensor(tensor) == ${ndim}$) THEN CALL dbcsr_t_reserve_blocks(tensor, ${varlist("my_blk_ind", nmax=ndim)}$) END IF #:endfor CALL dbcsr_t_iterator_start(iterator, tensor) DO WHILE (dbcsr_t_iterator_blocks_left(iterator)) CALL dbcsr_t_iterator_next_block(iterator, blk_index, blk, blk_size=blk_size, blk_offset=blk_offset) IF (.NOT. enumerate) THEN blk_index_2d = INT(get_2d_indices_tensor(tensor%nd_index_blk, blk_index)) CALL dbcsr_t_get_mapping_info(tensor%nd_index_blk, dims_2d=nblks_2d) CALL set_larnv_seed(blk_index_2d(1), nblks_2d(1), blk_index_2d(2), nblks_2d(2), randmat_counter, iseed) nze = PRODUCT(blk_size) END IF #:for ndim in ndims IF (ndims_tensor(tensor) == ${ndim}$) THEN CALL allocate_any(blk_values_${ndim}$, shape_spec=blk_size) CALL dims_tensor(tensor, tensor_dims) IF (enumerate) THEN CALL enumerate_block_elements(blk_size, blk_offset, tensor_dims, blk_${ndim}$=blk_values_${ndim}$) ELSE CALL dlarnv(1, iseed, nze, blk_values_${ndim}$) END IF CALL dbcsr_t_put_block(tensor, blk_index, blk_size, blk_values_${ndim}$) DEALLOCATE (blk_values_${ndim}$) END IF #:endfor END DO CALL dbcsr_t_iterator_stop(iterator) END SUBROUTINE SUBROUTINE enumerate_block_elements(blk_size, blk_offset, tensor_size, ${varlist("blk", nmin=2)}$) !! Enumerate tensor entries in block !! \blk_2 block values for 2 dimensions !! \blk_3 block values for 3 dimensions INTEGER, DIMENSION(:), INTENT(IN) :: blk_size, blk_offset, tensor_size !! size of block !! block offset (indices of first element) !! global tensor sizes #:for ndim in ndims REAL(KIND=real_8), DIMENSION(${shape_colon(ndim)}$), & OPTIONAL, INTENT(OUT) :: blk_${ndim}$ #:endfor INTEGER :: ndim INTEGER, DIMENSION(SIZE(blk_size)) :: arr_ind, tens_ind INTEGER :: ${varlist("i")}$ ndim = SIZE(tensor_size) #:for ndim in ndims IF (ndim == ${ndim}$) THEN #:for idim in range(ndim,0,-1) DO i_${idim}$ = 1, blk_size(${idim}$) #:endfor arr_ind(:) = [${varlist("i", nmax=ndim)}$] tens_ind(:) = arr_ind(:) + blk_offset(:) - 1 blk_${ndim}$ (${arrlist("arr_ind", nmax=ndim)}$) = combine_tensor_index(tens_ind, tensor_size) #:for idim in range(ndim,0,-1) END DO #:endfor END IF #:endfor END SUBROUTINE #:for dprec, dparam, dtype, dsuffix in [dtype_float_list_prec[0]] #:for ndim in ndims SUBROUTINE dist_sparse_tensor_to_repl_dense_${ndim}$d_array_${dsuffix}$ (tensor, array) !! Transform a distributed sparse tensor to a replicated dense array. This is only useful for !! testing tensor contraction by matrix multiplication of dense arrays. TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor ${dtype}$, ALLOCATABLE, DIMENSION(${shape_colon(ndim)}$), & INTENT(OUT) :: array ${dtype}$, ALLOCATABLE, DIMENSION(${shape_colon(ndim)}$) :: block INTEGER, DIMENSION(ndims_tensor(tensor)) :: dims_nd, ind_nd, blk_size, blk_offset TYPE(dbcsr_t_iterator_type) :: iterator INTEGER :: blk, idim INTEGER, DIMENSION(ndims_tensor(tensor)) :: blk_start, blk_end LOGICAL :: found DBCSR_ASSERT(ndims_tensor(tensor) .EQ. ${ndim}$) CALL dbcsr_t_get_info(tensor, nfull_total=dims_nd) CALL allocate_any(array, shape_spec=dims_nd) array(${shape_colon(ndim)}$) = 0.0_${dprec}$ CALL dbcsr_t_iterator_start(iterator, tensor) DO WHILE (dbcsr_t_iterator_blocks_left(iterator)) CALL dbcsr_t_iterator_next_block(iterator, ind_nd, blk, blk_size=blk_size, blk_offset=blk_offset) CALL dbcsr_t_get_block(tensor, ind_nd, block, found) DBCSR_ASSERT(found) DO idim = 1, ndims_tensor(tensor) blk_start(idim) = blk_offset(idim) blk_end(idim) = blk_offset(idim) + blk_size(idim) - 1 END DO array(${", ".join(["blk_start("+str(idim)+"):blk_end("+str(idim)+")" for idim in range(1, ndim + 1)])}$) = & block(${shape_colon(ndim)}$) DEALLOCATE (block) END DO CALL dbcsr_t_iterator_stop(iterator) CALL mp_sum(array, tensor%pgrid%mp_comm_2d) END SUBROUTINE #:endfor #:endfor SUBROUTINE dbcsr_t_contract_test(alpha, tensor_1, tensor_2, beta, tensor_3, & contract_1, notcontract_1, & contract_2, notcontract_2, & map_1, map_2, & unit_nr, & bounds_1, bounds_2, bounds_3, & log_verbose, write_int) !! test tensor contraction !! @note !! for testing/debugging, simply replace a call to dbcsr_t_contract with a call to this routine !! @endnote TYPE(dbcsr_scalar_type), INTENT(IN) :: alpha TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_1, tensor_2, tensor_3 TYPE(dbcsr_scalar_type), INTENT(IN) :: beta INTEGER, DIMENSION(:), INTENT(IN) :: contract_1, contract_2, & notcontract_1, notcontract_2, & map_1, map_2 INTEGER, INTENT(IN) :: unit_nr INTEGER, DIMENSION(2, SIZE(contract_1)), & OPTIONAL :: bounds_1 INTEGER, DIMENSION(2, SIZE(notcontract_1)), & OPTIONAL :: bounds_2 INTEGER, DIMENSION(2, SIZE(notcontract_2)), & OPTIONAL :: bounds_3 LOGICAL, INTENT(IN), OPTIONAL :: log_verbose LOGICAL, INTENT(IN), OPTIONAL :: write_int INTEGER :: io_unit, mynode, numnodes INTEGER, DIMENSION(:), ALLOCATABLE :: size_1, size_2, size_3, & order_t1, order_t2, order_t3 INTEGER, DIMENSION(2, ndims_tensor(tensor_1)) :: bounds_t1 INTEGER, DIMENSION(2, ndims_tensor(tensor_2)) :: bounds_t2 TYPE(mp_comm_type) :: mp_comm #:for ndim in ndims REAL(KIND=real_8), ALLOCATABLE, & DIMENSION(${shape_colon(ndim)}$) :: array_1_${ndim}$d, & array_2_${ndim}$d, & array_3_${ndim}$d, & array_1_${ndim}$d_full, & array_2_${ndim}$d_full, & array_3_0_${ndim}$d, & array_1_rs${ndim}$d, & array_2_rs${ndim}$d, & array_3_rs${ndim}$d, & array_3_0_rs${ndim}$d #:endfor REAL(KIND=real_8), ALLOCATABLE, & DIMENSION(:, :) :: array_1_mm, & array_2_mm, & array_3_mm, & array_3_test_mm LOGICAL :: eql, notzero LOGICAL, PARAMETER :: debug = .FALSE. REAL(KIND=real_8) :: cs_1, cs_2, cs_3, eql_diff LOGICAL :: do_crop_1, do_crop_2 mp_comm = tensor_1%pgrid%mp_comm_2d CALL mp_environ(numnodes, mynode, mp_comm) io_unit = -1 IF (mynode .EQ. 0) io_unit = unit_nr cs_1 = dbcsr_t_checksum(tensor_1) cs_2 = dbcsr_t_checksum(tensor_2) cs_3 = dbcsr_t_checksum(tensor_3) IF (io_unit > 0) THEN WRITE (io_unit, *) WRITE (io_unit, '(A)') repeat("-", 80) WRITE (io_unit, '(A,1X,A,1X,A,1X,A,1X,A,1X,A)') "Testing tensor contraction", & TRIM(tensor_1%name), "x", TRIM(tensor_2%name), "=", TRIM(tensor_3%name) WRITE (io_unit, '(A)') repeat("-", 80) END IF IF (debug) THEN IF (io_unit > 0) THEN WRITE (io_unit, "(A, E9.2)") "checksum ", TRIM(tensor_1%name), cs_1 WRITE (io_unit, "(A, E9.2)") "checksum ", TRIM(tensor_2%name), cs_2 WRITE (io_unit, "(A, E9.2)") "checksum ", TRIM(tensor_3%name), cs_3 END IF END IF IF (debug) THEN CALL dbcsr_t_write_block_indices(tensor_1, io_unit, unit_nr) CALL dbcsr_t_write_blocks(tensor_1, io_unit, unit_nr, write_int) END IF SELECT CASE (ndims_tensor(tensor_3)) #:for ndim in ndims CASE (${ndim}$) CALL dist_sparse_tensor_to_repl_dense_array(tensor_3, array_3_0_${ndim}$d) #:endfor END SELECT CALL dbcsr_t_contract(alpha, tensor_1, tensor_2, beta, tensor_3, & contract_1, notcontract_1, & contract_2, notcontract_2, & map_1, map_2, & bounds_1=bounds_1, bounds_2=bounds_2, bounds_3=bounds_3, & filter_eps=1.0E-12_real_8, & unit_nr=io_unit, log_verbose=log_verbose) cs_3 = dbcsr_t_checksum(tensor_3) IF (debug) THEN IF (io_unit > 0) THEN WRITE (io_unit, "(A, E9.2)") "checksum ", TRIM(tensor_3%name), cs_3 END IF END IF do_crop_1 = .FALSE.; do_crop_2 = .FALSE.!; do_crop_3 = .FALSE. ! crop tensor as first step bounds_t1(1, :) = 1 CALL dbcsr_t_get_info(tensor_1, nfull_total=bounds_t1(2, :)) bounds_t2(1, :) = 1 CALL dbcsr_t_get_info(tensor_2, nfull_total=bounds_t2(2, :)) IF (PRESENT(bounds_1)) THEN bounds_t1(:, contract_1) = bounds_1 do_crop_1 = .TRUE. bounds_t2(:, contract_2) = bounds_1 do_crop_2 = .TRUE. END IF IF (PRESENT(bounds_2)) THEN bounds_t1(:, notcontract_1) = bounds_2 do_crop_1 = .TRUE. END IF IF (PRESENT(bounds_3)) THEN bounds_t2(:, notcontract_2) = bounds_3 do_crop_2 = .TRUE. END IF ! Convert tensors to simple multidimensional arrays #:for i in range(1,4) SELECT CASE (ndims_tensor(tensor_${i}$)) #:for ndim in ndims CASE (${ndim}$) #:if i < 3 CALL dist_sparse_tensor_to_repl_dense_array(tensor_${i}$, array_${i}$_${ndim}$d_full) CALL allocate_any(array_${i}$_${ndim}$d, shape_spec=SHAPE(array_${i}$_${ndim}$d_full)) array_${i}$_${ndim}$d = 0.0_real_8 array_${i}$_${ndim}$d(${", ".join(["bounds_t" + str(i) + "(1, " + str(idim) + "):bounds_t" + str(i) + "(2, " + str(idim) + ")" for idim in range(1, ndim+1)])}$) = & array_${i}$_${ndim}$d_full(${", ".join(["bounds_t" + str(i) + "(1, " + str(idim) + "):bounds_t" + str(i) + "(2, " + str(idim) + ")" for idim in range(1, ndim+1)])}$) #:else CALL dist_sparse_tensor_to_repl_dense_array(tensor_${i}$, array_${i}$_${ndim}$d) #:endif #:endfor END SELECT #:endfor ! Get array sizes #:for i in range(1,4) SELECT CASE (ndims_tensor(tensor_${i}$)) #:for ndim in ndims CASE (${ndim}$) CALL allocate_any(size_${i}$, source=SHAPE(array_${i}$_${ndim}$d)) #:endfor END SELECT #:endfor #:for i in range(1,4) ALLOCATE (order_t${i}$ (ndims_tensor(tensor_${i}$))) #:endfor ASSOCIATE (map_t1_1 => notcontract_1, map_t1_2 => contract_1, & map_t2_1 => notcontract_2, map_t2_2 => contract_2, & map_t3_1 => map_1, map_t3_2 => map_2) #:for i in range(1,4) order_t${i}$ (:) = dbcsr_t_inverse_order([map_t${i}$_1, map_t${i}$_2]) SELECT CASE (ndims_tensor(tensor_${i}$)) #:for ndim in ndims CASE (${ndim}$) CALL allocate_any(array_${i}$_rs${ndim}$d, source=array_${i}$_${ndim}$d, order=order_t${i}$) CALL allocate_any(array_${i}$_mm, sizes_2d(size_${i}$, map_t${i}$_1, map_t${i}$_2)) array_${i}$_mm(:, :) = RESHAPE(array_${i}$_rs${ndim}$d, SHAPE(array_${i}$_mm)) #:endfor END SELECT #:endfor SELECT CASE (ndims_tensor(tensor_3)) #:for ndim in ndims CASE (${ndim}$) CALL allocate_any(array_3_0_rs${ndim}$d, source=array_3_0_${ndim}$d, order=order_t3) CALL allocate_any(array_3_test_mm, sizes_2d(size_3, map_t3_1, map_t3_2)) array_3_test_mm(:, :) = RESHAPE(array_3_0_rs${ndim}$d, SHAPE(array_3_mm)) #:endfor END SELECT array_3_test_mm(:, :) = beta%r_dp*array_3_test_mm(:, :) + alpha%r_dp*MATMUL(array_1_mm, transpose(array_2_mm)) END ASSOCIATE eql_diff = MAXVAL(ABS(array_3_test_mm(:, :) - array_3_mm(:, :))) notzero = MAXVAL(ABS(array_3_test_mm(:, :))) .GT. 1.0E-12_${dprec}$ eql = eql_diff .LT. 1.0E-11_${dprec}$ IF (.NOT. eql .OR. .NOT. notzero) THEN IF (io_unit > 0) WRITE (io_unit, *) 'Test failed!', eql_diff DBCSR_ABORT('') ELSE IF (io_unit > 0) WRITE (io_unit, *) 'Test passed!', eql_diff END IF END SUBROUTINE FUNCTION sizes_2d(nd_sizes, map1, map2) !! mapped sizes in 2d INTEGER, DIMENSION(:), INTENT(IN) :: nd_sizes, map1, map2 INTEGER, DIMENSION(2) :: sizes_2d sizes_2d(1) = PRODUCT(nd_sizes(map1)) sizes_2d(2) = PRODUCT(nd_sizes(map2)) END FUNCTION FUNCTION dbcsr_t_checksum(tensor, local, pos) !! checksum of a tensor consistent with dbcsr_checksum TYPE(dbcsr_t_type), INTENT(IN) :: tensor REAL(KIND=real_8) :: dbcsr_t_checksum LOGICAL, INTENT(IN), OPTIONAL :: local, pos dbcsr_t_checksum = dbcsr_tas_checksum(tensor%matrix_rep, local, pos) END FUNCTION SUBROUTINE dbcsr_t_reset_randmat_seed() !! Reset the seed used for generating random matrices to default value randmat_counter = rand_seed_init END SUBROUTINE END MODULE ================================================ FILE: src/tensors/dbcsr_tensor_types.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_tensor_types !! DBCSR tensor framework for block-sparse tensor contraction: Types and create/destroy !! routines. #:include "dbcsr_tensor.fypp" #:set maxdim = maxrank #:set ndims = range(2,maxdim+1) USE dbcsr_array_list_methods, ONLY: & array_list, array_offsets, create_array_list, destroy_array_list, get_array_elements, & sizes_of_arrays, sum_of_arrays, array_sublist, get_arrays, get_ith_array, array_eq_i USE dbcsr_api, ONLY: & dbcsr_distribution_get, dbcsr_distribution_type, dbcsr_get_info, dbcsr_type, & ${uselist(dtype_float_param)}$ USE dbcsr_kinds, ONLY: & ${uselist(dtype_float_prec)}$, & default_string_length USE dbcsr_tas_base, ONLY: & dbcsr_tas_create, dbcsr_tas_distribution_new, & dbcsr_tas_distribution_destroy, dbcsr_tas_finalize, dbcsr_tas_get_info, & dbcsr_tas_destroy, dbcsr_tas_get_stored_coordinates, dbcsr_tas_set, dbcsr_tas_filter, & dbcsr_tas_get_num_blocks, dbcsr_tas_get_num_blocks_total, dbcsr_tas_get_data_size, dbcsr_tas_get_nze, & dbcsr_tas_get_nze_total, dbcsr_tas_clear, dbcsr_tas_get_data_type USE dbcsr_tas_types, ONLY: & dbcsr_tas_type, dbcsr_tas_distribution_type, dbcsr_tas_split_info, dbcsr_tas_mm_storage USE dbcsr_tas_mm, ONLY: dbcsr_tas_set_batched_state USE dbcsr_tensor_index, ONLY: & get_2d_indices_tensor, get_nd_indices_pgrid, create_nd_to_2d_mapping, destroy_nd_to_2d_mapping, & dbcsr_t_get_mapping_info, nd_to_2d_mapping, split_tensor_index, combine_tensor_index, combine_pgrid_index, & split_pgrid_index, ndims_mapping, ndims_mapping_row, ndims_mapping_column USE dbcsr_tas_split, ONLY: & dbcsr_tas_release_info, dbcsr_tas_info_hold, & dbcsr_tas_create_split, dbcsr_tas_get_split_info, dbcsr_tas_set_strict_split USE dbcsr_kinds, ONLY: default_string_length, int_8, dp USE dbcsr_mpiwrap, ONLY: & mp_cart_create, mp_environ, mp_dims_create, mp_comm_free, mp_comm_type USE dbcsr_tas_global, ONLY: dbcsr_tas_distribution, dbcsr_tas_rowcol_data, dbcsr_tas_default_distvec USE dbcsr_allocate_wrap, ONLY: allocate_any USE dbcsr_data_types, ONLY: dbcsr_scalar_type USE dbcsr_operations, ONLY: dbcsr_scale USE dbcsr_toollib, ONLY: sort #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_types' PUBLIC :: & blk_dims_tensor, & dbcsr_t_blk_offsets, & dbcsr_t_blk_sizes, & dbcsr_t_clear, & dbcsr_t_create, & dbcsr_t_destroy, & dbcsr_t_distribution, & dbcsr_t_distribution_destroy, & dbcsr_t_distribution_new, & dbcsr_t_distribution_new_expert, & dbcsr_t_distribution_type, & dbcsr_t_filter, & dbcsr_t_finalize, & dbcsr_t_get_data_size, & dbcsr_t_get_data_type, & dbcsr_t_get_info, & dbcsr_t_get_num_blocks, & dbcsr_t_get_num_blocks_total, & dbcsr_t_get_nze, & dbcsr_t_get_nze_total, & dbcsr_t_get_stored_coordinates, & dbcsr_t_hold, & dbcsr_t_mp_dims_create, & dbcsr_t_nd_mp_comm, & dbcsr_t_nd_mp_free, & dbcsr_t_pgrid_change_dims, & dbcsr_t_pgrid_create, & dbcsr_t_pgrid_create_expert, & dbcsr_t_pgrid_destroy, & dbcsr_t_pgrid_type, & dbcsr_t_pgrid_set_strict_split, & dbcsr_t_scale, & dbcsr_t_set, & dbcsr_t_type, & dims_tensor, & mp_environ_pgrid, & ndims_tensor, & ndims_matrix_row, & ndims_matrix_column, & dbcsr_t_nblks_local, & dbcsr_t_nblks_total, & dbcsr_t_blk_size, & dbcsr_t_max_nblks_local, & dbcsr_t_default_distvec, & dbcsr_t_contraction_storage, & dbcsr_t_copy_contraction_storage TYPE dbcsr_t_pgrid_type #if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__)) TYPE(nd_to_2d_mapping) :: nd_index_grid #else TYPE(nd_to_2d_mapping) :: nd_index_grid = nd_to_2d_mapping() #endif TYPE(mp_comm_type) :: mp_comm_2d = mp_comm_type() TYPE(dbcsr_tas_split_info), ALLOCATABLE :: tas_split_info INTEGER :: nproc = -1 END TYPE TYPE dbcsr_t_contraction_storage REAL(real_8) :: nsplit_avg = -1.0_real_8 INTEGER :: ibatch = -1 #if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__)) TYPE(array_list) :: batch_ranges #else TYPE(array_list) :: batch_ranges = array_list() #endif LOGICAL :: static = .FALSE. END TYPE TYPE dbcsr_t_type TYPE(dbcsr_tas_type), POINTER :: matrix_rep => NULL() #if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__)) TYPE(nd_to_2d_mapping) :: nd_index_blk TYPE(nd_to_2d_mapping) :: nd_index TYPE(array_list) :: blk_sizes TYPE(array_list) :: blk_offsets TYPE(array_list) :: nd_dist TYPE(dbcsr_t_pgrid_type) :: pgrid TYPE(array_list) :: blks_local #else TYPE(nd_to_2d_mapping) :: nd_index_blk = nd_to_2d_mapping() TYPE(nd_to_2d_mapping) :: nd_index = nd_to_2d_mapping() TYPE(array_list) :: blk_sizes = array_list() TYPE(array_list) :: blk_offsets = array_list() TYPE(array_list) :: nd_dist = array_list() TYPE(dbcsr_t_pgrid_type) :: pgrid = dbcsr_t_pgrid_type() TYPE(array_list) :: blks_local = array_list() #endif INTEGER, DIMENSION(:), ALLOCATABLE :: nblks_local INTEGER, DIMENSION(:), ALLOCATABLE :: nfull_local LOGICAL :: valid = .FALSE. LOGICAL :: owns_matrix = .FALSE. CHARACTER(LEN=default_string_length) :: name = "" ! lightweight reference counting for communicators: INTEGER, POINTER :: refcount => NULL() TYPE(dbcsr_t_contraction_storage), ALLOCATABLE :: contraction_storage END TYPE dbcsr_t_type TYPE dbcsr_t_distribution_type #if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__)) TYPE(dbcsr_tas_distribution_type) :: dist TYPE(dbcsr_t_pgrid_type) :: pgrid TYPE(array_list) :: nd_dist #else TYPE(dbcsr_tas_distribution_type) :: dist = dbcsr_tas_distribution_type() TYPE(dbcsr_t_pgrid_type) :: pgrid = dbcsr_t_pgrid_type() TYPE(array_list) :: nd_dist = array_list() #endif ! lightweight reference counting for communicators: INTEGER, POINTER :: refcount => NULL() END TYPE ! tas matrix distribution function object for one matrix index TYPE, EXTENDS(dbcsr_tas_distribution) :: dbcsr_tas_dist_t ! tensor dimensions only for this matrix dimension: INTEGER, DIMENSION(:), ALLOCATABLE :: dims ! grid dimensions only for this matrix dimension: INTEGER, DIMENSION(:), ALLOCATABLE :: dims_grid ! dist only for tensor dimensions belonging to this matrix dimension: #if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__)) TYPE(array_list) :: nd_dist #else TYPE(array_list) :: nd_dist = array_list() #endif CONTAINS ! map matrix index to process grid: PROCEDURE :: dist => tas_dist_t ! map process grid to matrix index: PROCEDURE :: rowcols => tas_rowcols_t END TYPE ! block size object for one matrix index TYPE, EXTENDS(dbcsr_tas_rowcol_data) :: dbcsr_tas_blk_size_t ! tensor dimensions only for this matrix dimension: INTEGER, DIMENSION(:), ALLOCATABLE :: dims ! block size only for this matrix dimension: #if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__)) TYPE(array_list) :: blk_size #else TYPE(array_list) :: blk_size = array_list() #endif CONTAINS PROCEDURE :: data => tas_blk_size_t END TYPE INTERFACE dbcsr_t_create MODULE PROCEDURE dbcsr_t_create_new MODULE PROCEDURE dbcsr_t_create_template MODULE PROCEDURE dbcsr_t_create_matrix END INTERFACE INTERFACE dbcsr_tas_dist_t MODULE PROCEDURE new_dbcsr_tas_dist_t END INTERFACE INTERFACE dbcsr_tas_blk_size_t MODULE PROCEDURE new_dbcsr_tas_blk_size_t END INTERFACE INTERFACE dbcsr_t_set #:for dparam, dtype, dsuffix in dtype_float_list MODULE PROCEDURE dbcsr_t_set_${dsuffix}$ #:endfor END INTERFACE INTERFACE dbcsr_t_filter #:for dparam, dtype, dsuffix in dtype_float_list MODULE PROCEDURE dbcsr_t_filter_${dsuffix}$ #:endfor END INTERFACE CONTAINS FUNCTION new_dbcsr_tas_dist_t(nd_dist, map_blks, map_grid, which_dim) !! Create distribution object for one matrix dimension !! \return distribution object TYPE(array_list), INTENT(IN) :: nd_dist !! arrays for distribution vectors along all dimensions TYPE(nd_to_2d_mapping), INTENT(IN) :: map_blks, map_grid !! tensor to matrix mapping object for blocks !! tensor to matrix mapping object for process grid INTEGER, INTENT(IN) :: which_dim !! for which dimension (1 or 2) distribution should be created TYPE(dbcsr_tas_dist_t) :: new_dbcsr_tas_dist_t INTEGER, DIMENSION(2) :: grid_dims INTEGER(KIND=int_8), DIMENSION(2) :: matrix_dims INTEGER, DIMENSION(:), ALLOCATABLE :: index_map IF (which_dim == 1) THEN ALLOCATE (new_dbcsr_tas_dist_t%dims(ndims_mapping_row(map_blks))) ALLOCATE (index_map(ndims_mapping_row(map_blks))) CALL dbcsr_t_get_mapping_info(map_blks, & dims_2d_i8=matrix_dims, & map1_2d=index_map, & dims1_2d=new_dbcsr_tas_dist_t%dims) ALLOCATE (new_dbcsr_tas_dist_t%dims_grid(ndims_mapping_row(map_grid))) CALL dbcsr_t_get_mapping_info(map_grid, & dims_2d=grid_dims, & dims1_2d=new_dbcsr_tas_dist_t%dims_grid) ELSEIF (which_dim == 2) THEN ALLOCATE (new_dbcsr_tas_dist_t%dims(ndims_mapping_column(map_blks))) ALLOCATE (index_map(ndims_mapping_column(map_blks))) CALL dbcsr_t_get_mapping_info(map_blks, & dims_2d_i8=matrix_dims, & map2_2d=index_map, & dims2_2d=new_dbcsr_tas_dist_t%dims) ALLOCATE (new_dbcsr_tas_dist_t%dims_grid(ndims_mapping_column(map_grid))) CALL dbcsr_t_get_mapping_info(map_grid, & dims_2d=grid_dims, & dims2_2d=new_dbcsr_tas_dist_t%dims_grid) ELSE DBCSR_ABORT("Unknown value for which_dim") END IF new_dbcsr_tas_dist_t%nd_dist = array_sublist(nd_dist, index_map) new_dbcsr_tas_dist_t%nprowcol = grid_dims(which_dim) new_dbcsr_tas_dist_t%nmrowcol = matrix_dims(which_dim) END FUNCTION FUNCTION tas_dist_t(t, rowcol) CLASS(dbcsr_tas_dist_t), INTENT(IN) :: t INTEGER(KIND=int_8), INTENT(IN) :: rowcol INTEGER, DIMENSION(${maxrank}$) :: ind_blk INTEGER, DIMENSION(${maxrank}$) :: dist_blk INTEGER :: tas_dist_t ind_blk(:SIZE(t%dims)) = split_tensor_index(rowcol, t%dims) dist_blk(:SIZE(t%dims)) = get_array_elements(t%nd_dist, ind_blk(:SIZE(t%dims))) tas_dist_t = combine_pgrid_index(dist_blk(:SIZE(t%dims)), t%dims_grid) END FUNCTION FUNCTION tas_rowcols_t(t, dist) CLASS(dbcsr_tas_dist_t), INTENT(IN) :: t INTEGER, INTENT(IN) :: dist INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE :: tas_rowcols_t INTEGER, DIMENSION(${maxrank}$) :: dist_blk INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("dist")}$, ${varlist("blks")}$, blks_tmp, nd_ind INTEGER :: ${varlist("i")}$, i, iblk, iblk_count, nblks INTEGER(KIND=int_8) :: nrowcols TYPE(array_list) :: blks dist_blk(:SIZE(t%dims)) = split_pgrid_index(dist, t%dims_grid) #:for ndim in range(1, maxdim+1) IF (SIZE(t%dims) == ${ndim}$) THEN CALL get_arrays(t%nd_dist, ${varlist("dist", nmax=ndim)}$) END IF #:endfor #:for idim in range(1, maxdim+1) IF (SIZE(t%dims) .GE. ${idim}$) THEN nblks = SIZE(dist_${idim}$) ALLOCATE (blks_tmp(nblks)) iblk_count = 0 DO iblk = 1, nblks IF (dist_${idim}$ (iblk) == dist_blk(${idim}$)) THEN iblk_count = iblk_count + 1 blks_tmp(iblk_count) = iblk END IF END DO ALLOCATE (blks_${idim}$ (iblk_count)) blks_${idim}$ (:) = blks_tmp(:iblk_count) DEALLOCATE (blks_tmp) END IF #:endfor #:for ndim in range(1, maxdim+1) IF (SIZE(t%dims) == ${ndim}$) THEN CALL create_array_list(blks, ${ndim}$, ${varlist("blks", nmax=ndim)}$) END IF #:endfor nrowcols = PRODUCT(INT(sizes_of_arrays(blks), int_8)) ALLOCATE (tas_rowcols_t(nrowcols)) #:for ndim in range(1, maxdim+1) IF (SIZE(t%dims) == ${ndim}$) THEN ALLOCATE (nd_ind(${ndim}$)) i = 0 #:for idim in range(1,ndim+1) DO i_${idim}$ = 1, SIZE(blks_${idim}$) #:endfor i = i + 1 nd_ind(:) = get_array_elements(blks, [${varlist("i", nmax=ndim)}$]) tas_rowcols_t(i) = combine_tensor_index(nd_ind, t%dims) #:for idim in range(1,ndim+1) END DO #:endfor END IF #:endfor END FUNCTION FUNCTION new_dbcsr_tas_blk_size_t(blk_size, map_blks, which_dim) !! Create block size object for one matrix dimension !! \return block size object TYPE(array_list), INTENT(IN) :: blk_size !! arrays for block sizes along all dimensions TYPE(nd_to_2d_mapping), INTENT(IN) :: map_blks !! tensor to matrix mapping object for blocks INTEGER, INTENT(IN) :: which_dim !! for which dimension (1 or 2) distribution should be created INTEGER(KIND=int_8), DIMENSION(2) :: matrix_dims INTEGER, DIMENSION(:), ALLOCATABLE :: index_map TYPE(dbcsr_tas_blk_size_t) :: new_dbcsr_tas_blk_size_t IF (which_dim == 1) THEN ALLOCATE (index_map(ndims_mapping_row(map_blks))) ALLOCATE (new_dbcsr_tas_blk_size_t%dims(ndims_mapping_row(map_blks))) CALL dbcsr_t_get_mapping_info(map_blks, & dims_2d_i8=matrix_dims, & map1_2d=index_map, & dims1_2d=new_dbcsr_tas_blk_size_t%dims) ELSEIF (which_dim == 2) THEN ALLOCATE (index_map(ndims_mapping_column(map_blks))) ALLOCATE (new_dbcsr_tas_blk_size_t%dims(ndims_mapping_column(map_blks))) CALL dbcsr_t_get_mapping_info(map_blks, & dims_2d_i8=matrix_dims, & map2_2d=index_map, & dims2_2d=new_dbcsr_tas_blk_size_t%dims) ELSE DBCSR_ABORT("Unknown value for which_dim") END IF new_dbcsr_tas_blk_size_t%blk_size = array_sublist(blk_size, index_map) new_dbcsr_tas_blk_size_t%nmrowcol = matrix_dims(which_dim) new_dbcsr_tas_blk_size_t%nfullrowcol = PRODUCT(INT(sum_of_arrays(new_dbcsr_tas_blk_size_t%blk_size), & KIND=int_8)) END FUNCTION FUNCTION tas_blk_size_t(t, rowcol) CLASS(dbcsr_tas_blk_size_t), INTENT(IN) :: t INTEGER(KIND=int_8), INTENT(IN) :: rowcol INTEGER :: tas_blk_size_t INTEGER, DIMENSION(SIZE(t%dims)) :: ind_blk INTEGER, DIMENSION(SIZE(t%dims)) :: blk_size ind_blk(:) = split_tensor_index(rowcol, t%dims) blk_size(:) = get_array_elements(t%blk_size, ind_blk) tas_blk_size_t = PRODUCT(blk_size) END FUNCTION FUNCTION dbcsr_t_nd_mp_comm(comm_2d, map1_2d, map2_2d, dims_nd, dims1_nd, dims2_nd, pdims_2d, tdims, & nsplit, dimsplit) !! Create a default nd process topology that is consistent with a given 2d topology. !! Purpose: a nd tensor defined on the returned process grid can be represented as a DBCSR !! matrix with the given 2d topology. !! This is needed to enable contraction of 2 tensors (must have the same 2d process grid). !! \return with nd cartesian grid TYPE(mp_comm_type), INTENT(IN) :: comm_2d !! communicator with 2-dimensional topology INTEGER, DIMENSION(:), INTENT(IN) :: map1_2d, map2_2d !! which nd-indices map to first matrix index and in which order !! which nd-indices map to second matrix index and in which order INTEGER, DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)), & INTENT(IN), OPTIONAL :: dims_nd !! nd dimensions INTEGER, DIMENSION(SIZE(map1_2d)), INTENT(IN), OPTIONAL :: dims1_nd INTEGER, DIMENSION(SIZE(map2_2d)), INTENT(IN), OPTIONAL :: dims2_nd INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL :: pdims_2d !! if comm_2d does not have a cartesian topology associated, can input dimensions with pdims_2d INTEGER, DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)), & INTENT(IN), OPTIONAL :: tdims !! tensor block dimensions. If present, process grid dimensions are created such that good !! load balancing is ensured even if some of the tensor dimensions are small (i.e. on the same order !! or smaller than nproc**(1/ndim) where ndim is the tensor rank) INTEGER, INTENT(IN), OPTIONAL :: nsplit, dimsplit INTEGER :: ndim1, ndim2 INTEGER :: numtask INTEGER, DIMENSION(2) :: dims_2d, task_coor INTEGER, DIMENSION(SIZE(map1_2d)) :: dims1_nd_prv INTEGER, DIMENSION(SIZE(map2_2d)) :: dims2_nd_prv INTEGER, DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)) :: dims_nd_prv INTEGER :: handle CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_nd_mp_comm' TYPE(dbcsr_t_pgrid_type) :: dbcsr_t_nd_mp_comm CALL timeset(routineN, handle) ndim1 = SIZE(map1_2d); ndim2 = SIZE(map2_2d) IF (PRESENT(pdims_2d)) THEN dims_2d(:) = pdims_2d ELSE CALL mp_environ(numtask, dims_2d, task_coor, comm_2d) END IF IF (.NOT. PRESENT(dims_nd)) THEN dims1_nd_prv = 0; dims2_nd_prv = 0 IF (PRESENT(dims1_nd)) THEN dims1_nd_prv(:) = dims1_nd ELSE IF (PRESENT(tdims)) THEN CALL dbcsr_t_mp_dims_create(dims_2d(1), dims1_nd_prv, tdims(map1_2d)) ELSE CALL mp_dims_create(dims_2d(1), dims1_nd_prv) END IF END IF IF (PRESENT(dims2_nd)) THEN dims2_nd_prv(:) = dims2_nd ELSE IF (PRESENT(tdims)) THEN CALL dbcsr_t_mp_dims_create(dims_2d(2), dims2_nd_prv, tdims(map2_2d)) ELSE CALL mp_dims_create(dims_2d(2), dims2_nd_prv) END IF END IF dims_nd_prv(map1_2d) = dims1_nd_prv dims_nd_prv(map2_2d) = dims2_nd_prv ELSE DBCSR_ASSERT(PRODUCT(dims_nd(map1_2d)) == dims_2d(1)) DBCSR_ASSERT(PRODUCT(dims_nd(map2_2d)) == dims_2d(2)) dims_nd_prv = dims_nd END IF CALL dbcsr_t_pgrid_create_expert(comm_2d, dims_nd_prv, dbcsr_t_nd_mp_comm, & tensor_dims=tdims, map1_2d=map1_2d, map2_2d=map2_2d, nsplit=nsplit, dimsplit=dimsplit) CALL timestop(handle) END FUNCTION RECURSIVE SUBROUTINE dbcsr_t_mp_dims_create(nodes, dims, tensor_dims, lb_ratio) !! Create process grid dimensions corresponding to one dimension of the matrix representation !! of a tensor, imposing that no process grid dimension is greater than the corresponding !! tensor dimension. INTEGER, INTENT(IN) :: nodes !! Total number of nodes available for this matrix dimension INTEGER, DIMENSION(:), INTENT(INOUT) :: dims !! process grid dimension corresponding to tensor_dims INTEGER, DIMENSION(:), INTENT(IN) :: tensor_dims !! tensor dimensions REAL(real_8), INTENT(IN), OPTIONAL :: lb_ratio !! load imbalance acceptance factor INTEGER, DIMENSION(:), ALLOCATABLE :: tensor_dims_sorted, sort_indices, dims_store REAL(real_8), DIMENSION(:), ALLOCATABLE :: sort_key INTEGER :: pdims_rem, idim, pdim REAL(real_8) :: lb_ratio_prv IF (PRESENT(lb_ratio)) THEN lb_ratio_prv = lb_ratio ELSE lb_ratio_prv = 0.1_real_8 END IF CALL allocate_any(dims_store, source=dims) ! get default process grid dimensions IF (any(dims == 0)) THEN CALL mp_dims_create(nodes, dims) END IF ! sort dimensions such that problematic grid dimensions (those who should be corrected) come first ALLOCATE (sort_key(SIZE(tensor_dims))) sort_key(:) = REAL(tensor_dims, real_8)/dims CALL allocate_any(tensor_dims_sorted, source=tensor_dims) ALLOCATE (sort_indices(SIZE(sort_key))) CALL sort(sort_key, SIZE(sort_key), sort_indices) tensor_dims_sorted(:) = tensor_dims_sorted(sort_indices) dims(:) = dims(sort_indices) ! remaining number of nodes pdims_rem = nodes DO idim = 1, SIZE(tensor_dims_sorted) IF (.NOT. accept_pdims_loadbalancing(pdims_rem, dims(idim), tensor_dims_sorted(idim), lb_ratio_prv)) THEN pdim = tensor_dims_sorted(idim) DO WHILE (.NOT. accept_pdims_loadbalancing(pdims_rem, pdim, tensor_dims_sorted(idim), lb_ratio_prv)) pdim = pdim - 1 END DO dims(idim) = pdim pdims_rem = pdims_rem/dims(idim) IF (idim .NE. SIZE(tensor_dims_sorted)) THEN dims(idim + 1:) = 0 CALL mp_dims_create(pdims_rem, dims(idim + 1:)) ELSEIF (lb_ratio_prv < 0.5_real_8) THEN ! resort to a less strict load imbalance factor dims(:) = dims_store CALL dbcsr_t_mp_dims_create(nodes, dims, tensor_dims, 0.5_real_8) RETURN ELSE ! resort to default process grid dimensions dims(:) = dims_store CALL mp_dims_create(nodes, dims) RETURN END IF ELSE pdims_rem = pdims_rem/dims(idim) END IF END DO dims(sort_indices) = dims END SUBROUTINE PURE FUNCTION accept_pdims_loadbalancing(pdims_avail, pdim, tdim, lb_ratio) !! load balancing criterion whether to accept process grid dimension based on total number of !! cores and tensor dimension INTEGER, INTENT(IN) :: pdims_avail !! available process grid dimensions (total number of cores) INTEGER, INTENT(IN) :: pdim !! process grid dimension to test INTEGER, INTENT(IN) :: tdim !! tensor dimension corresponding to pdim REAL(real_8), INTENT(IN) :: lb_ratio !! load imbalance acceptance factor LOGICAL :: accept_pdims_loadbalancing accept_pdims_loadbalancing = .FALSE. IF (MOD(pdims_avail, pdim) == 0) THEN IF (REAL(tdim, real_8)*lb_ratio < REAL(pdim, real_8)) THEN IF (MOD(tdim, pdim) == 0) accept_pdims_loadbalancing = .TRUE. ELSE accept_pdims_loadbalancing = .TRUE. END IF END IF END FUNCTION SUBROUTINE dbcsr_t_nd_mp_free(mp_comm) !! Release the MPI communicator. TYPE(mp_comm_type), INTENT(INOUT) :: mp_comm CALL mp_comm_free(mp_comm) END SUBROUTINE dbcsr_t_nd_mp_free SUBROUTINE dbcsr_t_distribution_new(dist, pgrid, ${varlist("nd_dist")}$) !! Create a tensor distribution. TYPE(dbcsr_t_distribution_type), INTENT(OUT) :: dist TYPE(dbcsr_t_pgrid_type), INTENT(IN) :: pgrid !! process grid INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: ${varlist("nd_dist")}$ !! distribution vectors for all tensor dimensions INTEGER, DIMENSION(ndims_mapping_row(pgrid%nd_index_grid)) :: map1_2d INTEGER, DIMENSION(ndims_mapping_column(pgrid%nd_index_grid)) :: map2_2d INTEGER :: ndims CALL dbcsr_t_get_mapping_info(pgrid%nd_index_grid, map1_2d=map1_2d, map2_2d=map2_2d, ndim_nd=ndims) CALL dbcsr_t_distribution_new_expert(dist, pgrid, map1_2d, map2_2d, ${varlist("nd_dist")}$) END SUBROUTINE SUBROUTINE dbcsr_t_distribution_new_expert(dist, pgrid, map1_2d, map2_2d, ${varlist("nd_dist")}$, own_comm) !! Create a tensor distribution. TYPE(dbcsr_t_distribution_type), INTENT(OUT) :: dist TYPE(dbcsr_t_pgrid_type), INTENT(IN) :: pgrid !! process grid INTEGER, DIMENSION(:), INTENT(IN) :: map1_2d !! which nd-indices map to first matrix index and in which order INTEGER, DIMENSION(:), INTENT(IN) :: map2_2d !! which nd-indices map to second matrix index and in which order INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: ${varlist("nd_dist")}$ LOGICAL, INTENT(IN), OPTIONAL :: own_comm !! whether distribution should own communicator INTEGER :: ndims TYPE(mp_comm_type) :: comm_2d INTEGER, DIMENSION(2) :: pdims_2d_check, & pdims_2d, task_coor_2d INTEGER, DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)) :: dims, nblks_nd, task_coor LOGICAL, DIMENSION(2) :: periods_2d TYPE(array_list) :: nd_dist TYPE(nd_to_2d_mapping) :: map_blks, map_grid INTEGER :: handle TYPE(dbcsr_tas_dist_t) :: row_dist_obj, col_dist_obj TYPE(dbcsr_t_pgrid_type) :: pgrid_prv LOGICAL :: need_pgrid_remap INTEGER, DIMENSION(ndims_mapping_row(pgrid%nd_index_grid)) :: map1_2d_check INTEGER, DIMENSION(ndims_mapping_column(pgrid%nd_index_grid)) :: map2_2d_check CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_distribution_new' CALL timeset(routineN, handle) ndims = SIZE(map1_2d) + SIZE(map2_2d) DBCSR_ASSERT(ndims .GE. 2 .AND. ndims .LE. ${maxdim}$) CALL create_array_list(nd_dist, ndims, ${varlist("nd_dist")}$) nblks_nd(:) = sizes_of_arrays(nd_dist) need_pgrid_remap = .TRUE. IF (PRESENT(own_comm)) THEN CALL dbcsr_t_get_mapping_info(pgrid%nd_index_grid, map1_2d=map1_2d_check, map2_2d=map2_2d_check) IF (own_comm) THEN IF (.NOT. array_eq_i(map1_2d_check, map1_2d) .OR. .NOT. array_eq_i(map2_2d_check, map2_2d)) THEN DBCSR_ABORT("map1_2d / map2_2d are not consistent with pgrid") END IF pgrid_prv = pgrid need_pgrid_remap = .FALSE. END IF END IF IF (need_pgrid_remap) CALL dbcsr_t_pgrid_remap(pgrid, map1_2d, map2_2d, pgrid_prv) ! check that 2d process topology is consistent with nd topology. CALL mp_environ_pgrid(pgrid_prv, dims, task_coor) ! process grid index mapping CALL create_nd_to_2d_mapping(map_grid, dims, map1_2d, map2_2d, base=0, col_major=.FALSE.) ! blk index mapping CALL create_nd_to_2d_mapping(map_blks, nblks_nd, map1_2d, map2_2d) row_dist_obj = dbcsr_tas_dist_t(nd_dist, map_blks, map_grid, 1) col_dist_obj = dbcsr_tas_dist_t(nd_dist, map_blks, map_grid, 2) CALL dbcsr_t_get_mapping_info(map_grid, dims_2d=pdims_2d) comm_2d = pgrid_prv%mp_comm_2d CALL mp_environ(comm_2d, 2, pdims_2d_check, task_coor_2d, periods_2d) IF (ANY(pdims_2d_check .NE. pdims_2d)) THEN DBCSR_ABORT("inconsistent process grid dimensions") END IF IF (ALLOCATED(pgrid_prv%tas_split_info)) THEN CALL dbcsr_tas_distribution_new(dist%dist, comm_2d, row_dist_obj, col_dist_obj, split_info=pgrid_prv%tas_split_info) ELSE CALL dbcsr_tas_distribution_new(dist%dist, comm_2d, row_dist_obj, col_dist_obj) ALLOCATE (pgrid_prv%tas_split_info, SOURCE=dist%dist%info) CALL dbcsr_tas_info_hold(pgrid_prv%tas_split_info) END IF dist%nd_dist = nd_dist dist%pgrid = pgrid_prv ALLOCATE (dist%refcount) dist%refcount = 1 CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_distribution_destroy(dist) !! Destroy tensor distribution TYPE(dbcsr_t_distribution_type), INTENT(INOUT) :: dist INTEGER :: handle CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_distribution_destroy' LOGICAL :: abort CALL timeset(routineN, handle) CALL dbcsr_tas_distribution_destroy(dist%dist) CALL destroy_array_list(dist%nd_dist) abort = .FALSE. IF (.NOT. ASSOCIATED(dist%refcount)) THEN abort = .TRUE. ELSEIF (dist%refcount < 1) THEN abort = .TRUE. END IF IF (abort) THEN DBCSR_ABORT("can not destroy non-existing tensor distribution") END IF dist%refcount = dist%refcount - 1 IF (dist%refcount == 0) THEN CALL dbcsr_t_pgrid_destroy(dist%pgrid) DEALLOCATE (dist%refcount) ELSE CALL dbcsr_t_pgrid_destroy(dist%pgrid, keep_comm=.TRUE.) END IF CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_distribution_hold(dist) !! reference counting for distribution (only needed for communicator handle that must be freed !! when no longer needed) TYPE(dbcsr_t_distribution_type), INTENT(IN) :: dist INTEGER, POINTER :: ref IF (dist%refcount < 1) THEN DBCSR_ABORT("can not hold non-existing tensor distribution") END IF ref => dist%refcount ref = ref + 1 END SUBROUTINE FUNCTION dbcsr_t_distribution(tensor) !! get distribution from tensor !! \return distribution TYPE(dbcsr_t_type), INTENT(IN) :: tensor TYPE(dbcsr_t_distribution_type) :: dbcsr_t_distribution CALL dbcsr_tas_get_info(tensor%matrix_rep, distribution=dbcsr_t_distribution%dist) dbcsr_t_distribution%pgrid = tensor%pgrid dbcsr_t_distribution%nd_dist = tensor%nd_dist dbcsr_t_distribution%refcount => dbcsr_t_distribution%refcount END FUNCTION SUBROUTINE dbcsr_t_create_new(tensor, name, dist, map1_2d, map2_2d, data_type, & ${varlist("blk_size")}$) !! create a tensor. !! For performance, the arguments map1_2d and map2_2d (controlling matrix representation of tensor) should be !! consistent with the the contraction to be performed (see documentation of dbcsr_t_contract). TYPE(dbcsr_t_type), INTENT(OUT) :: tensor CHARACTER(len=*), INTENT(IN) :: name TYPE(dbcsr_t_distribution_type), INTENT(INOUT) :: dist INTEGER, DIMENSION(:), INTENT(IN) :: map1_2d !! which nd-indices to map to first 2d index and in which order INTEGER, DIMENSION(:), INTENT(IN) :: map2_2d !! which nd-indices to map to first 2d index and in which order INTEGER, INTENT(IN), OPTIONAL :: data_type INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: ${varlist("blk_size")}$ !! blk sizes in each dimension INTEGER :: ndims INTEGER(KIND=int_8), DIMENSION(2) :: dims_2d INTEGER, DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)) :: dims, pdims, task_coor TYPE(dbcsr_tas_blk_size_t) :: col_blk_size_obj, row_blk_size_obj TYPE(dbcsr_t_distribution_type) :: dist_new TYPE(array_list) :: blk_size, blks_local TYPE(nd_to_2d_mapping) :: map INTEGER :: handle CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_create_new' INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("blks_local")}$ INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("dist")}$ INTEGER :: iblk_count, iblk INTEGER, DIMENSION(:), ALLOCATABLE :: nblks_local, nfull_local CALL timeset(routineN, handle) ndims = SIZE(map1_2d) + SIZE(map2_2d) CALL create_array_list(blk_size, ndims, ${varlist("blk_size")}$) dims = sizes_of_arrays(blk_size) CALL create_nd_to_2d_mapping(map, dims, map1_2d, map2_2d) CALL dbcsr_t_get_mapping_info(map, dims_2d_i8=dims_2d) row_blk_size_obj = dbcsr_tas_blk_size_t(blk_size, map, 1) col_blk_size_obj = dbcsr_tas_blk_size_t(blk_size, map, 2) CALL dbcsr_t_distribution_remap(dist, map1_2d, map2_2d, dist_new) ALLOCATE (tensor%matrix_rep) CALL dbcsr_tas_create(matrix=tensor%matrix_rep, & name=TRIM(name)//" matrix", & dist=dist_new%dist, & row_blk_size=row_blk_size_obj, & col_blk_size=col_blk_size_obj, & data_type=data_type) tensor%owns_matrix = .TRUE. tensor%nd_index_blk = map tensor%name = name CALL dbcsr_tas_finalize(tensor%matrix_rep) CALL destroy_nd_to_2d_mapping(map) ! map element-wise tensor index CALL create_nd_to_2d_mapping(map, sum_of_arrays(blk_size), map1_2d, map2_2d) tensor%nd_index = map tensor%blk_sizes = blk_size CALL mp_environ_pgrid(dist_new%pgrid, pdims, task_coor) #:for ndim in range(1, maxdim+1) IF (ndims == ${ndim}$) THEN CALL get_arrays(dist_new%nd_dist, ${varlist("dist", nmax=ndim)}$) END IF #:endfor ALLOCATE (nblks_local(ndims)) ALLOCATE (nfull_local(ndims)) nfull_local(:) = 0 #:for idim in range(1, maxdim+1) IF (ndims .GE. ${idim}$) THEN nblks_local(${idim}$) = COUNT(dist_${idim}$ == task_coor(${idim}$)) ALLOCATE (blks_local_${idim}$ (nblks_local(${idim}$))) iblk_count = 0 DO iblk = 1, SIZE(dist_${idim}$) IF (dist_${idim}$ (iblk) == task_coor(${idim}$)) THEN iblk_count = iblk_count + 1 blks_local_${idim}$ (iblk_count) = iblk nfull_local(${idim}$) = nfull_local(${idim}$) + blk_size_${idim}$ (iblk) END IF END DO END IF #:endfor #:for ndim in range(1, maxdim+1) IF (ndims == ${ndim}$) THEN CALL create_array_list(blks_local, ${ndim}$, ${varlist("blks_local", nmax=ndim)}$) END IF #:endfor ALLOCATE (tensor%nblks_local(ndims)) ALLOCATE (tensor%nfull_local(ndims)) tensor%nblks_local(:) = nblks_local tensor%nfull_local(:) = nfull_local tensor%blks_local = blks_local tensor%nd_dist = dist_new%nd_dist tensor%pgrid = dist_new%pgrid CALL dbcsr_t_distribution_hold(dist_new) tensor%refcount => dist_new%refcount CALL dbcsr_t_distribution_destroy(dist_new) CALL array_offsets(tensor%blk_sizes, tensor%blk_offsets) tensor%valid = .TRUE. CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_hold(tensor) !! reference counting for tensors (only needed for communicator handle that must be freed !! when no longer needed) TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER, POINTER :: ref IF (tensor%refcount < 1) THEN DBCSR_ABORT("can not hold non-existing tensor") END IF ref => tensor%refcount ref = ref + 1 END SUBROUTINE SUBROUTINE dbcsr_t_create_template(tensor_in, tensor, name, dist, map1_2d, map2_2d, data_type) !! create a tensor from template TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_in TYPE(dbcsr_t_type), INTENT(OUT) :: tensor CHARACTER(len=*), INTENT(IN), OPTIONAL :: name TYPE(dbcsr_t_distribution_type), & INTENT(INOUT), OPTIONAL :: dist INTEGER, DIMENSION(:), INTENT(IN), & OPTIONAL :: map1_2d, map2_2d INTEGER, INTENT(IN), OPTIONAL :: data_type INTEGER :: handle CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_create_template' INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("bsize")}$ INTEGER, DIMENSION(:), ALLOCATABLE :: map1_2d_prv, map2_2d_prv CHARACTER(len=default_string_length) :: name_prv TYPE(dbcsr_t_distribution_type) :: dist_prv INTEGER :: data_type_prv CALL timeset(routineN, handle) IF (PRESENT(dist) .OR. PRESENT(map1_2d) .OR. PRESENT(map2_2d)) THEN ! need to create matrix representation from scratch IF (PRESENT(dist)) THEN dist_prv = dist ELSE dist_prv = dbcsr_t_distribution(tensor_in) END IF IF (PRESENT(map1_2d) .AND. PRESENT(map2_2d)) THEN CALL allocate_any(map1_2d_prv, source=map1_2d) CALL allocate_any(map2_2d_prv, source=map2_2d) ELSE ALLOCATE (map1_2d_prv(ndims_matrix_row(tensor_in))) ALLOCATE (map2_2d_prv(ndims_matrix_column(tensor_in))) CALL dbcsr_t_get_mapping_info(tensor_in%nd_index_blk, map1_2d=map1_2d_prv, map2_2d=map2_2d_prv) END IF IF (PRESENT(name)) THEN name_prv = name ELSE name_prv = tensor_in%name END IF IF (PRESENT(data_type)) THEN data_type_prv = data_type ELSE data_type_prv = dbcsr_t_get_data_type(tensor_in) END IF #:for ndim in range(1, maxdim+1) IF (ndims_tensor(tensor_in) == ${ndim}$) THEN CALL get_arrays(tensor_in%blk_sizes, ${varlist("bsize", nmax=ndim)}$) CALL dbcsr_t_create(tensor, name_prv, dist_prv, map1_2d_prv, map2_2d_prv, & data_type_prv, ${varlist("bsize", nmax=ndim)}$) END IF #:endfor ELSE ! create matrix representation from template ALLOCATE (tensor%matrix_rep) IF (.NOT. PRESENT(name)) THEN CALL dbcsr_tas_create(tensor_in%matrix_rep, tensor%matrix_rep, & name=TRIM(tensor_in%name)//" matrix", data_type=data_type) ELSE CALL dbcsr_tas_create(tensor_in%matrix_rep, tensor%matrix_rep, name=TRIM(name)//" matrix", data_type=data_type) END IF tensor%owns_matrix = .TRUE. CALL dbcsr_tas_finalize(tensor%matrix_rep) tensor%nd_index_blk = tensor_in%nd_index_blk tensor%nd_index = tensor_in%nd_index tensor%blk_sizes = tensor_in%blk_sizes tensor%blk_offsets = tensor_in%blk_offsets tensor%nd_dist = tensor_in%nd_dist tensor%blks_local = tensor_in%blks_local ALLOCATE (tensor%nblks_local(ndims_tensor(tensor_in))) tensor%nblks_local(:) = tensor_in%nblks_local ALLOCATE (tensor%nfull_local(ndims_tensor(tensor_in))) tensor%nfull_local(:) = tensor_in%nfull_local tensor%pgrid = tensor_in%pgrid tensor%refcount => tensor_in%refcount CALL dbcsr_t_hold(tensor) tensor%valid = .TRUE. IF (PRESENT(name)) THEN tensor%name = name ELSE tensor%name = tensor_in%name END IF END IF CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_create_matrix(matrix_in, tensor, order, name) !! Create 2-rank tensor from matrix. TYPE(dbcsr_type), INTENT(IN) :: matrix_in TYPE(dbcsr_t_type), INTENT(OUT) :: tensor INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL :: order CHARACTER(len=*), INTENT(IN), OPTIONAL :: name CHARACTER(len=default_string_length) :: name_in INTEGER, DIMENSION(2) :: order_in INTEGER :: comm_2d_handle, data_type TYPE(dbcsr_distribution_type) :: matrix_dist TYPE(dbcsr_t_distribution_type) :: dist INTEGER, DIMENSION(:), POINTER :: row_blk_size, col_blk_size INTEGER, DIMENSION(:), POINTER :: col_dist, row_dist INTEGER :: handle CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_create_matrix' TYPE(dbcsr_t_pgrid_type) :: comm_nd INTEGER, DIMENSION(2) :: pdims_2d TYPE(mp_comm_type) :: comm_2d CALL timeset(routineN, handle) NULLIFY (row_blk_size, col_blk_size, col_dist, row_dist) IF (PRESENT(name)) THEN name_in = name ELSE CALL dbcsr_get_info(matrix_in, name=name_in) END IF IF (PRESENT(order)) THEN order_in = order ELSE order_in = [1, 2] END IF CALL dbcsr_get_info(matrix_in, distribution=matrix_dist) CALL dbcsr_distribution_get(matrix_dist, group=comm_2d_handle, row_dist=row_dist, col_dist=col_dist, & nprows=pdims_2d(1), npcols=pdims_2d(2)) CALL comm_2d%set_handle(comm_2d_handle) comm_nd = dbcsr_t_nd_mp_comm(comm_2d, [order_in(1)], [order_in(2)], pdims_2d=pdims_2d) CALL dbcsr_t_distribution_new_expert( & dist, & comm_nd, & [order_in(1)], [order_in(2)], & row_dist, col_dist, own_comm=.TRUE.) CALL dbcsr_get_info(matrix_in, & data_type=data_type, & row_blk_size=row_blk_size, & col_blk_size=col_blk_size) CALL dbcsr_t_create_new(tensor, name_in, dist, & [order_in(1)], [order_in(2)], & data_type, & row_blk_size, & col_blk_size) CALL dbcsr_t_distribution_destroy(dist) CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_destroy(tensor) !! Destroy a tensor TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor INTEGER :: handle CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_destroy' LOGICAL :: abort CALL timeset(routineN, handle) IF (tensor%owns_matrix) THEN CALL dbcsr_tas_destroy(tensor%matrix_rep) DEALLOCATE (tensor%matrix_rep) ELSE NULLIFY (tensor%matrix_rep) END IF tensor%owns_matrix = .FALSE. CALL destroy_nd_to_2d_mapping(tensor%nd_index_blk) CALL destroy_nd_to_2d_mapping(tensor%nd_index) !CALL destroy_nd_to_2d_mapping(tensor%nd_index_grid) CALL destroy_array_list(tensor%blk_sizes) CALL destroy_array_list(tensor%blk_offsets) CALL destroy_array_list(tensor%nd_dist) CALL destroy_array_list(tensor%blks_local) DEALLOCATE (tensor%nblks_local, tensor%nfull_local) abort = .FALSE. IF (.NOT. ASSOCIATED(tensor%refcount)) THEN abort = .TRUE. ELSEIF (tensor%refcount < 1) THEN abort = .TRUE. END IF IF (abort) THEN DBCSR_ABORT("can not destroy non-existing tensor") END IF tensor%refcount = tensor%refcount - 1 IF (tensor%refcount == 0) THEN CALL dbcsr_t_pgrid_destroy(tensor%pgrid) !CALL mp_comm_free(tensor%comm_2d) !CALL mp_comm_free(tensor%comm_nd) DEALLOCATE (tensor%refcount) ELSE CALL dbcsr_t_pgrid_destroy(tensor%pgrid, keep_comm=.TRUE.) END IF tensor%valid = .FALSE. tensor%name = "" CALL timestop(handle) END SUBROUTINE PURE FUNCTION dbcsr_t_nblks_total(tensor, idim) !! total numbers of blocks along dimension idim TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER, INTENT(IN) :: idim INTEGER :: dbcsr_t_nblks_total IF (idim > ndims_tensor(tensor)) THEN dbcsr_t_nblks_total = 0 ELSE dbcsr_t_nblks_total = tensor%nd_index_blk%dims_nd(idim) END IF END FUNCTION PURE FUNCTION dbcsr_t_nblks_local(tensor, idim) !! local number of blocks along dimension idim TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER, INTENT(IN) :: idim INTEGER :: dbcsr_t_nblks_local IF (idim > ndims_tensor(tensor)) THEN dbcsr_t_nblks_local = 0 ELSE dbcsr_t_nblks_local = tensor%nblks_local(idim) END IF END FUNCTION PURE FUNCTION ndims_tensor(tensor) !! tensor rank TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER :: ndims_tensor ndims_tensor = tensor%nd_index%ndim_nd END FUNCTION SUBROUTINE dims_tensor(tensor, dims) !! tensor dimensions TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER, DIMENSION(ndims_tensor(tensor)), & INTENT(OUT) :: dims DBCSR_ASSERT(tensor%valid) dims = tensor%nd_index%dims_nd END SUBROUTINE SUBROUTINE blk_dims_tensor(tensor, dims) !! tensor block dimensions TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER, DIMENSION(ndims_tensor(tensor)), & INTENT(OUT) :: dims DBCSR_ASSERT(tensor%valid) dims = tensor%nd_index_blk%dims_nd END SUBROUTINE FUNCTION dbcsr_t_get_data_type(tensor) RESULT(data_type) !! tensor data type TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER :: data_type data_type = dbcsr_tas_get_data_type(tensor%matrix_rep) END FUNCTION SUBROUTINE dbcsr_t_blk_sizes(tensor, ind, blk_size) !! Size of tensor block TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER, DIMENSION(ndims_tensor(tensor)), & INTENT(IN) :: ind INTEGER, DIMENSION(ndims_tensor(tensor)), & INTENT(OUT) :: blk_size blk_size(:) = get_array_elements(tensor%blk_sizes, ind) END SUBROUTINE SUBROUTINE dbcsr_t_blk_offsets(tensor, ind, blk_offset) !! offset of tensor block TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER, DIMENSION(ndims_tensor(tensor)), & INTENT(IN) :: ind !! block index INTEGER, DIMENSION(ndims_tensor(tensor)), & INTENT(OUT) :: blk_offset !! block offset DBCSR_ASSERT(tensor%valid) blk_offset(:) = get_array_elements(tensor%blk_offsets, ind) END SUBROUTINE SUBROUTINE dbcsr_t_get_stored_coordinates(tensor, ind_nd, processor) !! Generalization of dbcsr_get_stored_coordinates for tensors. TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER, DIMENSION(ndims_tensor(tensor)), & INTENT(IN) :: ind_nd INTEGER, INTENT(OUT) :: processor INTEGER(KIND=int_8), DIMENSION(2) :: ind_2d ind_2d(:) = get_2d_indices_tensor(tensor%nd_index_blk, ind_nd) CALL dbcsr_tas_get_stored_coordinates(tensor%matrix_rep, ind_2d(1), ind_2d(2), processor) END SUBROUTINE SUBROUTINE dbcsr_t_pgrid_create(mp_comm, dims, pgrid, tensor_dims) TYPE(mp_comm_type), INTENT(IN) :: mp_comm INTEGER, DIMENSION(:), INTENT(INOUT) :: dims TYPE(dbcsr_t_pgrid_type), INTENT(OUT) :: pgrid INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: tensor_dims INTEGER, DIMENSION(:), ALLOCATABLE :: map1_2d, map2_2d INTEGER :: i, ndims ndims = SIZE(dims) ALLOCATE (map1_2d(ndims/2)) ALLOCATE (map2_2d(ndims - ndims/2)) map1_2d(:) = (/(i, i=1, SIZE(map1_2d))/) map2_2d(:) = (/(i, i=SIZE(map1_2d) + 1, SIZE(map1_2d) + SIZE(map2_2d))/) CALL dbcsr_t_pgrid_create_expert(mp_comm, dims, pgrid, map1_2d, map2_2d, tensor_dims) END SUBROUTINE SUBROUTINE dbcsr_t_pgrid_create_expert(mp_comm, dims, pgrid, map1_2d, map2_2d, tensor_dims, nsplit, dimsplit) !! Create an n-dimensional process grid. !! We can not use a n-dimensional MPI cartesian grid for tensors since the mapping between !! n-dim. and 2-dim. index allows for an arbitrary reordering of tensor index. Therefore we can not !! use n-dim. MPI Cartesian grid because it may not be consistent with the respective 2d grid. !! The 2d Cartesian MPI grid is the reference grid (since tensor data is stored as DBCSR matrix) !! and this routine creates an object that is a n-dim. interface to this grid. !! map1_2d and map2_2d don't need to be specified (correctly), grid may be redefined in dbcsr_t_distribution_new !! Note that pgrid is equivalent to a MPI cartesian grid only if map1_2d and map2_2d don't reorder indices !! (which is the case if [map1_2d, map2_2d] == [1, 2, ..., ndims]). Otherwise the mapping of grid !! coordinates to processes depends on the ordering of the indices and is not equivalent to a MPI !! cartesian grid. TYPE(mp_comm_type), INTENT(IN) :: mp_comm !! simple MPI Communicator INTEGER, DIMENSION(:), INTENT(INOUT) :: dims !! grid dimensions - if entries are 0, dimensions are chosen automatically. TYPE(dbcsr_t_pgrid_type), INTENT(OUT) :: pgrid !! n-dimensional grid object INTEGER, DIMENSION(:), INTENT(IN) :: map1_2d, map2_2d !! which nd-indices map to first matrix index and in which order !! which nd-indices map to first matrix index and in which order INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: tensor_dims !! tensor block dimensions. If present, process grid dimensions are created such that good !! load balancing is ensured even if some of the tensor dimensions are small (i.e. on the same order !! or smaller than nproc**(1/ndim) where ndim is the tensor rank) INTEGER, INTENT(IN), OPTIONAL :: nsplit, dimsplit !! impose a constant split factor !! which matrix dimension to split INTEGER :: nproc, iproc, ndims, handle INTEGER, DIMENSION(2) :: pdims_2d, pos TYPE(dbcsr_tas_split_info) :: info CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_pgrid_create' CALL timeset(routineN, handle) ndims = SIZE(dims) CALL mp_environ(nproc, iproc, mp_comm) IF (ANY(dims == 0)) THEN IF (.NOT. PRESENT(tensor_dims)) THEN CALL mp_dims_create(nproc, dims) ELSE CALL dbcsr_t_mp_dims_create(nproc, dims, tensor_dims) END IF END IF CALL create_nd_to_2d_mapping(pgrid%nd_index_grid, dims, map1_2d, map2_2d, base=0, col_major=.FALSE.) CALL dbcsr_t_get_mapping_info(pgrid%nd_index_grid, dims_2d=pdims_2d) CALL mp_cart_create(mp_comm, 2, pdims_2d, pos, pgrid%mp_comm_2d) IF (PRESENT(nsplit)) THEN DBCSR_ASSERT(PRESENT(dimsplit)) CALL dbcsr_tas_create_split(info, pgrid%mp_comm_2d, dimsplit, nsplit, opt_nsplit=.FALSE.) ALLOCATE (pgrid%tas_split_info, SOURCE=info) END IF ! store number of MPI ranks because we need it for PURE function dbcsr_t_max_nblks_local pgrid%nproc = nproc CALL timestop(handle) END SUBROUTINE SUBROUTINE dbcsr_t_pgrid_destroy(pgrid, keep_comm) !! destroy process grid TYPE(dbcsr_t_pgrid_type), INTENT(INOUT) :: pgrid LOGICAL, INTENT(IN), OPTIONAL :: keep_comm !! if .TRUE. communicator is not freed LOGICAL :: keep_comm_prv IF (PRESENT(keep_comm)) THEN keep_comm_prv = keep_comm ELSE keep_comm_prv = .FALSE. END IF IF (.NOT. keep_comm_prv) CALL mp_comm_free(pgrid%mp_comm_2d) CALL destroy_nd_to_2d_mapping(pgrid%nd_index_grid) IF (ALLOCATED(pgrid%tas_split_info) .AND. .NOT. keep_comm_prv) THEN CALL dbcsr_tas_release_info(pgrid%tas_split_info) DEALLOCATE (pgrid%tas_split_info) END IF END SUBROUTINE SUBROUTINE dbcsr_t_pgrid_set_strict_split(pgrid) !! freeze current split factor such that it is never changed during contraction TYPE(dbcsr_t_pgrid_type), INTENT(INOUT) :: pgrid IF (ALLOCATED(pgrid%tas_split_info)) CALL dbcsr_tas_set_strict_split(pgrid%tas_split_info) END SUBROUTINE SUBROUTINE dbcsr_t_pgrid_remap(pgrid_in, map1_2d, map2_2d, pgrid_out) !! remap a process grid (needed when mapping between tensor and matrix index is changed) TYPE(dbcsr_t_pgrid_type), INTENT(IN) :: pgrid_in INTEGER, DIMENSION(:), INTENT(IN) :: map1_2d, map2_2d !! new mapping !! new mapping TYPE(dbcsr_t_pgrid_type), INTENT(OUT) :: pgrid_out INTEGER, DIMENSION(:), ALLOCATABLE :: dims INTEGER, DIMENSION(ndims_mapping_row(pgrid_in%nd_index_grid)) :: map1_2d_old INTEGER, DIMENSION(ndims_mapping_column(pgrid_in%nd_index_grid)) :: map2_2d_old ALLOCATE (dims(SIZE(map1_2d) + SIZE(map2_2d))) CALL dbcsr_t_get_mapping_info(pgrid_in%nd_index_grid, dims_nd=dims, map1_2d=map1_2d_old, map2_2d=map2_2d_old) CALL dbcsr_t_pgrid_create_expert(pgrid_in%mp_comm_2d, dims, pgrid_out, map1_2d=map1_2d, map2_2d=map2_2d) IF (array_eq_i(map1_2d_old, map1_2d) .AND. array_eq_i(map2_2d_old, map2_2d)) THEN IF (ALLOCATED(pgrid_in%tas_split_info)) THEN ALLOCATE (pgrid_out%tas_split_info, SOURCE=pgrid_in%tas_split_info) CALL dbcsr_tas_info_hold(pgrid_out%tas_split_info) END IF END IF END SUBROUTINE SUBROUTINE dbcsr_t_pgrid_change_dims(pgrid, pdims) !! change dimensions of an existing process grid. TYPE(dbcsr_t_pgrid_type), INTENT(INOUT) :: pgrid !! process grid to be changed INTEGER, DIMENSION(:), INTENT(INOUT) :: pdims !! new process grid dimensions, should all be set > 0 TYPE(dbcsr_t_pgrid_type) :: pgrid_tmp INTEGER :: nsplit, dimsplit INTEGER, DIMENSION(ndims_mapping_row(pgrid%nd_index_grid)) :: map1_2d INTEGER, DIMENSION(ndims_mapping_column(pgrid%nd_index_grid)) :: map2_2d TYPe(nd_to_2d_mapping) :: nd_index_grid INTEGER, DIMENSION(2) :: pdims_2d DBCSR_ASSERT(ALL(pdims > 0)) CALL dbcsr_tas_get_split_info(pgrid%tas_split_info, nsplit=nsplit, split_rowcol=dimsplit) CALL dbcsr_t_get_mapping_info(pgrid%nd_index_grid, map1_2d=map1_2d, map2_2d=map2_2d) CALL create_nd_to_2d_mapping(nd_index_grid, pdims, map1_2d, map2_2d, base=0, col_major=.FALSE.) CALL dbcsr_t_get_mapping_info(nd_index_grid, dims_2d=pdims_2d) IF (MOD(pdims_2d(dimsplit), nsplit) == 0) THEN CALL dbcsr_t_pgrid_create_expert(pgrid%mp_comm_2d, pdims, pgrid_tmp, map1_2d=map1_2d, map2_2d=map2_2d, & nsplit=nsplit, dimsplit=dimsplit) ELSE CALL dbcsr_t_pgrid_create_expert(pgrid%mp_comm_2d, pdims, pgrid_tmp, map1_2d=map1_2d, map2_2d=map2_2d) END IF CALL dbcsr_t_pgrid_destroy(pgrid) pgrid = pgrid_tmp END SUBROUTINE SUBROUTINE dbcsr_t_distribution_remap(dist_in, map1_2d, map2_2d, dist_out) TYPE(dbcsr_t_distribution_type), INTENT(IN) :: dist_in INTEGER, DIMENSION(:), INTENT(IN) :: map1_2d, map2_2d TYPE(dbcsr_t_distribution_type), INTENT(OUT) :: dist_out INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist("dist")}$ INTEGER :: ndims ndims = SIZE(map1_2d) + SIZE(map2_2d) #:for ndim in range(1, maxdim+1) IF (ndims == ${ndim}$) THEN CALL get_arrays(dist_in%nd_dist, ${varlist("dist", nmax=ndim)}$) CALL dbcsr_t_distribution_new_expert(dist_out, dist_in%pgrid, map1_2d, map2_2d, ${varlist("dist", nmax=ndim)}$) END IF #:endfor END SUBROUTINE SUBROUTINE mp_environ_pgrid(pgrid, dims, task_coor) !! as mp_environ but for special pgrid type TYPE(dbcsr_t_pgrid_type), INTENT(IN) :: pgrid INTEGER, DIMENSION(ndims_mapping(pgrid%nd_index_grid)), INTENT(OUT) :: dims INTEGER, DIMENSION(ndims_mapping(pgrid%nd_index_grid)), INTENT(OUT) :: task_coor INTEGER, DIMENSION(2) :: dims_2d, task_coor_2d INTEGER :: nproc CALL mp_environ(nproc, dims_2d, task_coor_2d, pgrid%mp_comm_2d) CALL mp_environ(nproc, dims_2d, task_coor_2d, pgrid%mp_comm_2d) CALL dbcsr_t_get_mapping_info(pgrid%nd_index_grid, dims_nd=dims) task_coor = get_nd_indices_pgrid(pgrid%nd_index_grid, task_coor_2d) END SUBROUTINE #:for dparam, dtype, dsuffix in dtype_float_list SUBROUTINE dbcsr_t_set_${dsuffix}$ (tensor, alpha) !! As dbcsr_set TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor ${dtype}$, INTENT(IN) :: alpha CALL dbcsr_tas_set(tensor%matrix_rep, alpha) END SUBROUTINE #:endfor #:for dparam, dtype, dsuffix in dtype_float_list SUBROUTINE dbcsr_t_filter_${dsuffix}$ (tensor, eps, method, use_absolute) !! As dbcsr_filter TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor ${dtype}$, INTENT(IN) :: eps INTEGER, INTENT(IN), OPTIONAL :: method LOGICAL, INTENT(IN), OPTIONAL :: use_absolute CALL dbcsr_tas_filter(tensor%matrix_rep, eps, method, use_absolute) END SUBROUTINE #:endfor SUBROUTINE dbcsr_t_get_info(tensor, nblks_total, & nfull_total, & nblks_local, & nfull_local, & pdims, & my_ploc, & ${varlist("blks_local")}$, & ${varlist("proc_dist")}$, & ${varlist("blk_size")}$, & ${varlist("blk_offset")}$, & distribution, & name, & data_type) !! As dbcsr_get_info but for tensors TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER, INTENT(OUT), OPTIONAL, DIMENSION(ndims_tensor(tensor)) :: nblks_total !! number of blocks along each dimension INTEGER, INTENT(OUT), OPTIONAL, DIMENSION(ndims_tensor(tensor)) :: nfull_total !! number of elements along each dimension INTEGER, INTENT(OUT), OPTIONAL, DIMENSION(ndims_tensor(tensor)) :: nblks_local !! local number of blocks along each dimension INTEGER, INTENT(OUT), OPTIONAL, DIMENSION(ndims_tensor(tensor)) :: nfull_local !! local number of elements along each dimension INTEGER, INTENT(OUT), OPTIONAL, DIMENSION(ndims_tensor(tensor)) :: my_ploc !! process coordinates in process grid INTEGER, INTENT(OUT), OPTIONAL, DIMENSION(ndims_tensor(tensor)) :: pdims !! process grid dimensions #:for idim in range(1, maxdim+1) INTEGER, DIMENSION(dbcsr_t_nblks_local(tensor, ${idim}$)), INTENT(OUT), OPTIONAL :: blks_local_${idim}$ !! local blocks along dimension ${idim}$ INTEGER, DIMENSION(dbcsr_t_nblks_total(tensor, ${idim}$)), INTENT(OUT), OPTIONAL :: proc_dist_${idim}$ !! distribution along dimension ${idim}$ INTEGER, DIMENSION(dbcsr_t_nblks_total(tensor, ${idim}$)), INTENT(OUT), OPTIONAL :: blk_size_${idim}$ !! block sizes along dimension ${idim}$ INTEGER, DIMENSION(dbcsr_t_nblks_total(tensor, ${idim}$)), INTENT(OUT), OPTIONAL :: blk_offset_${idim}$ !! block offsets along dimension ${idim}$ #:endfor TYPE(dbcsr_t_distribution_type), INTENT(OUT), OPTIONAL :: distribution !! distribution object CHARACTER(len=*), INTENT(OUT), OPTIONAL :: name !! name of tensor INTEGER, INTENT(OUT), OPTIONAL :: data_type !! data type of tensor INTEGER, DIMENSION(ndims_tensor(tensor)) :: pdims_tmp, my_ploc_tmp IF (PRESENT(nblks_total)) CALL dbcsr_t_get_mapping_info(tensor%nd_index_blk, dims_nd=nblks_total) IF (PRESENT(nfull_total)) CALL dbcsr_t_get_mapping_info(tensor%nd_index, dims_nd=nfull_total) IF (PRESENT(nblks_local)) nblks_local(:) = tensor%nblks_local IF (PRESENT(nfull_local)) nfull_local(:) = tensor%nfull_local IF (PRESENT(my_ploc) .OR. PRESENT(pdims)) CALL mp_environ_pgrid(tensor%pgrid, pdims_tmp, my_ploc_tmp) IF (PRESENT(my_ploc)) my_ploc = my_ploc_tmp IF (PRESENT(pdims)) pdims = pdims_tmp #:for idim in range(1, maxdim+1) IF (${idim}$ <= ndims_tensor(tensor)) THEN IF (PRESENT(blks_local_${idim}$)) CALL get_ith_array(tensor%blks_local, ${idim}$, & dbcsr_t_nblks_local(tensor, ${idim}$), & blks_local_${idim}$) IF (PRESENT(proc_dist_${idim}$)) CALL get_ith_array(tensor%nd_dist, ${idim}$, & dbcsr_t_nblks_total(tensor, ${idim}$), & proc_dist_${idim}$) IF (PRESENT(blk_size_${idim}$)) CALL get_ith_array(tensor%blk_sizes, ${idim}$, & dbcsr_t_nblks_total(tensor, ${idim}$), & blk_size_${idim}$) IF (PRESENT(blk_offset_${idim}$)) CALL get_ith_array(tensor%blk_offsets, ${idim}$, & dbcsr_t_nblks_total(tensor, ${idim}$), & blk_offset_${idim}$) END IF #:endfor IF (PRESENT(distribution)) distribution = dbcsr_t_distribution(tensor) IF (PRESENT(name)) name = tensor%name IF (PRESENT(data_type)) data_type = dbcsr_t_get_data_type(tensor) END SUBROUTINE PURE FUNCTION dbcsr_t_get_num_blocks(tensor) RESULT(num_blocks) !! As dbcsr_get_num_blocks: get number of local blocks TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER :: num_blocks num_blocks = dbcsr_tas_get_num_blocks(tensor%matrix_rep) END FUNCTION FUNCTION dbcsr_t_get_num_blocks_total(tensor) RESULT(num_blocks) !! Get total number of blocks TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER(KIND=int_8) :: num_blocks num_blocks = dbcsr_tas_get_num_blocks_total(tensor%matrix_rep) END FUNCTION FUNCTION dbcsr_t_get_data_size(tensor) RESULT(data_size) !! As dbcsr_get_data_size TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER :: data_size data_size = dbcsr_tas_get_data_size(tensor%matrix_rep) END FUNCTION SUBROUTINE dbcsr_t_clear(tensor) !! Clear tensor (s.t. it does not contain any blocks) TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor CALL dbcsr_tas_clear(tensor%matrix_rep) END SUBROUTINE SUBROUTINE dbcsr_t_finalize(tensor) !! Finalize tensor, as dbcsr_finalize. This should be taken care of internally in dbcsr tensors, !! there should not be any need to call this routine outside of dbcsr tensors. TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor CALL dbcsr_tas_finalize(tensor%matrix_rep) END SUBROUTINE SUBROUTINE dbcsr_t_scale(tensor, alpha) !! as dbcsr_scale TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor TYPE(dbcsr_scalar_type), INTENT(IN) :: alpha CALL dbcsr_scale(tensor%matrix_rep%matrix, alpha) END SUBROUTINE PURE FUNCTION dbcsr_t_get_nze(tensor) TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER :: dbcsr_t_get_nze dbcsr_t_get_nze = dbcsr_tas_get_nze(tensor%matrix_rep) END FUNCTION FUNCTION dbcsr_t_get_nze_total(tensor) TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER(KIND=int_8) :: dbcsr_t_get_nze_total dbcsr_t_get_nze_total = dbcsr_tas_get_nze_total(tensor%matrix_rep) END FUNCTION PURE FUNCTION dbcsr_t_blk_size(tensor, ind, idim) !! block size of block with index ind along dimension idim TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER, DIMENSION(ndims_tensor(tensor)), & INTENT(IN) :: ind INTEGER, INTENT(IN) :: idim INTEGER, DIMENSION(ndims_tensor(tensor)) :: blk_size INTEGER :: dbcsr_t_blk_size IF (idim > ndims_tensor(tensor)) THEN dbcsr_t_blk_size = 0 ELSE blk_size(:) = get_array_elements(tensor%blk_sizes, ind) dbcsr_t_blk_size = blk_size(idim) END IF END FUNCTION PURE FUNCTION ndims_matrix_row(tensor) !! how many tensor dimensions are mapped to matrix row TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER(int_8) :: ndims_matrix_row ndims_matrix_row = ndims_mapping_row(tensor%nd_index_blk) END FUNCTION PURE FUNCTION ndims_matrix_column(tensor) !! how many tensor dimensions are mapped to matrix column TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER(int_8) :: ndims_matrix_column ndims_matrix_column = ndims_mapping_column(tensor%nd_index_blk) END FUNCTION PURE FUNCTION dbcsr_t_max_nblks_local(tensor) RESULT(blk_count) !! returns an estimate of maximum number of local blocks in tensor !! (irrespective of the actual number of currently present blocks) !! this estimate is based on the following assumption: tensor data is dense and !! load balancing is within a factor of 2 TYPE(dbcsr_t_type), INTENT(IN) :: tensor INTEGER :: blk_count, nproc INTEGER, DIMENSION(ndims_tensor(tensor)) :: bdims INTEGER(int_8) :: blk_count_total INTEGER, PARAMETER :: max_load_imbalance = 2 CALL dbcsr_t_get_mapping_info(tensor%nd_index_blk, dims_nd=bdims) blk_count_total = PRODUCT(INT(bdims, int_8)) ! can not call an MPI routine due to PURE !CALL mp_environ(nproc, myproc, tensor%pgrid%mp_comm_2d) nproc = tensor%pgrid%nproc blk_count = INT(blk_count_total/nproc*max_load_imbalance) END FUNCTION SUBROUTINE dbcsr_t_default_distvec(nblk, nproc, blk_size, dist) !! get a load-balanced and randomized distribution along one tensor dimension INTEGER, INTENT(IN) :: nblk !! number of blocks (along one tensor dimension) INTEGER, INTENT(IN) :: nproc !! number of processes (along one process grid dimension) INTEGER, DIMENSION(nblk), INTENT(IN) :: blk_size !! block sizes INTEGER, DIMENSION(nblk), INTENT(OUT) :: dist !! distribution CALL dbcsr_tas_default_distvec(nblk, nproc, blk_size, dist) END SUBROUTINE SUBROUTINE dbcsr_t_copy_contraction_storage(tensor_in, tensor_out) TYPE(dbcsr_t_type), INTENT(IN) :: tensor_in TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_out TYPE(dbcsr_t_contraction_storage), ALLOCATABLE :: tensor_storage_tmp TYPE(dbcsr_tas_mm_storage), ALLOCATABLE :: tas_storage_tmp IF (tensor_in%matrix_rep%do_batched > 0) THEN ALLOCATE (tas_storage_tmp, SOURCE=tensor_in%matrix_rep%mm_storage) ! transfer data for batched contraction IF (ALLOCATED(tensor_out%matrix_rep%mm_storage)) DEALLOCATE (tensor_out%matrix_rep%mm_storage) CALL move_alloc(tas_storage_tmp, tensor_out%matrix_rep%mm_storage) END IF CALL dbcsr_tas_set_batched_state(tensor_out%matrix_rep, state=tensor_in%matrix_rep%do_batched, & opt_grid=tensor_in%matrix_rep%has_opt_pgrid) IF (ALLOCATED(tensor_in%contraction_storage)) THEN ALLOCATE (tensor_storage_tmp, SOURCE=tensor_in%contraction_storage) END IF IF (ALLOCATED(tensor_out%contraction_storage)) DEALLOCATE (tensor_out%contraction_storage) IF (ALLOCATED(tensor_storage_tmp)) CALL move_alloc(tensor_storage_tmp, tensor_out%contraction_storage) END SUBROUTINE END MODULE ================================================ FILE: src/utils/PACKAGE ================================================ { "description": "Utilities for DBCSR", "archive": "libdbcsr", "requires": ["../base", "../core"], } ================================================ FILE: src/utils/dbcsr_array_sort.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! #:include 'dbcsr_array_sort.fypp' MODULE dbcsr_array_sort !! Routine for sorting an array !! @note !! CP2K: !! Please use the interface defined in util.F for calling sort(). !! DBCSR: !! Please use the interface defined in dbcsr_toollib.F for calling sort(). USE dbcsr_kinds, ONLY: ${uselist(usekinds)}$ IMPLICIT NONE PRIVATE LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .FALSE. CHARACTER(len=*), PRIVATE, PARAMETER :: moduleN = 'dbcsr_array_sort' #:for nametype in nametype1 PUBLIC :: dbcsr_1d_${nametype}$_sort #:endfor CONTAINS #:for nametype1, type1, lessQ in inst_params subroutine dbcsr_1d_${nametype1}$_sort(arr, n, indices) !! Sorts an array inplace using a combination of merge- and bubble-sort. !! It also returns the indices, which the elements had before the sort. integer, intent(in) :: n !! length of array ${type1}$, dimension(1:n), intent(inout) :: arr !! the array to sort integer, dimension(1:n), intent(out) :: indices !! returns elements-indices before the sort integer :: i ${type1}$, pointer, CONTIGUOUS :: tmp_arr(:) integer, pointer, CONTIGUOUS :: tmp_idx(:) if (n == 0) return ! for some reason this is a frequent case in cp2k ! scratch space used during the merge step allocate (tmp_arr((size(arr) + 1)/2), tmp_idx((size(arr) + 1)/2)) indices = (/(i, i=1, size(arr))/) call dbcsr_1d_${nametype1}$_sort_low(arr(1:n), indices, tmp_arr, tmp_idx) deallocate (tmp_arr, tmp_idx) end subroutine dbcsr_1d_${nametype1}$_sort recursive subroutine dbcsr_1d_${nametype1}$_sort_low(arr, indices, tmp_arr, tmp_idx) !! The actual sort routine. !! Only dbcsr_1d_${nametype1}$_sort and itself should call this. ${type1}$, dimension(:), intent(inout) :: arr !! the array to sort integer, dimension(size(arr)), intent(inout) :: indices !! elements-indices before the sort ${type1}$, dimension((size(arr) + 1)/2), intent(inout) :: tmp_arr !! scratch space integer, dimension((size(arr) + 1)/2), intent(inout) :: tmp_idx !! scratch space ${type1}$ :: a integer :: t, m, i, j, k LOGICAL :: swapped ! a,t: used during swapping of elements in arr and indices swapped = .TRUE. ! If only a few elements are left we switch to bubble-sort for efficiency. if (size(arr) <= 7) then ! 7 seems to be a good choice for the moment DO j = size(arr) - 1, 1, -1 swapped = .FALSE. DO i = 1, j IF (@{lessQ(arr(i+1), arr(i))}@) THEN ! swap arr(i) with arr(i+1) a = arr(i) arr(i) = arr(i + 1) arr(i + 1) = a ! swap indices(i) with indices(i+1) t = indices(i) indices(i) = indices(i + 1) indices(i + 1) = t swapped = .true. END IF END DO IF (.NOT. swapped) EXIT END DO return end if ! split list in half and recursively sort both sublists m = (size(arr) + 1)/2 ! index where we going to divide the list in two call dbcsr_1d_${nametype1}$_sort_low(arr(1:m), indices(1:m), tmp_arr, tmp_idx) call dbcsr_1d_${nametype1}$_sort_low(arr(m + 1:), indices(m + 1:), tmp_arr, tmp_idx) ! Check for a special case: Can we just concatenate the two sorted sublists? ! This leads to O(n) scaling if the input is already sorted. if (@{lessQ(arr(m+1), arr(m))}@) then ! ...no - let's merge the two sorted sublists arr(:m) and arr(m+1:) ! Merge will be performed directly in arr. Need backup of first sublist. tmp_arr(1:m) = arr(1:m) tmp_idx(1:m) = indices(1:m) i = 1; ! number of elements consumed from 1st sublist j = 1; ! number of elements consumed from 2nd sublist k = 1; ! number of elements already merged do while (i <= m .and. j <= size(arr) - m) if (@{lessQ(arr(m+j), tmp_arr(i))}@) then arr(k) = arr(m + j) indices(k) = indices(m + j) j = j + 1 else arr(k) = tmp_arr(i) indices(k) = tmp_idx(i) i = i + 1 end if k = k + 1 end do ! One of the two sublist is now empty. ! Copy possibly remaining tail of 1st sublist do while (i <= m) arr(k) = tmp_arr(i) indices(k) = tmp_idx(i) i = i + 1 k = k + 1 end do ! The possibly remaining tail of 2nd sublist is already at the right spot. end if end subroutine dbcsr_1d_${nametype1}$_sort_low #:endfor END MODULE dbcsr_array_sort ================================================ FILE: src/utils/dbcsr_array_sort.fypp ================================================ #!--------------------------------------------------------------------------------------------------! #! Copyright (C) by the DBCSR developers group - All rights reserved ! #! This file is part of the DBCSR library. ! #! ! #! For information on the license, see the LICENSE file. ! #! For further information please visit https://dbcsr.cp2k.org ! #! SPDX-License-Identifier: GPL-2.0+ ! #!--------------------------------------------------------------------------------------------------! #:mute #:set nametype1 =['d', 's', 'i4', 'i8'] #:set type1 = ['REAL(kind=real_8)','REAL(kind=real_4)','INTEGER(kind=int_4)','INTEGER(kind=int_8)'] #:set usekinds = ['real_8', 'real_4', 'int_4', 'int_8'] #:def lessQnum(el1, el2) ${el1}$ < ${el2}$ #:enddef #:set lessQ = [lessQnum, lessQnum, lessQnum, lessQnum] #:set inst_params = list(zip(nametype1, type1, lessQ)) #:def uselist(list_in) #! comma-separated list of unique entries of list_in $: ", ".join(list(set(list_in))) #:enddef #:endmute ================================================ FILE: src/utils/dbcsr_blas_operations.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_blas_operations !! Wrappers to BLAS calls. USE dbcsr_kinds, ONLY: int_8 USE dbcsr_types, ONLY: dbcsr_data_obj, & dbcsr_type_complex_4, & dbcsr_type_complex_8, & dbcsr_type_real_4, & dbcsr_type_real_8 #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_blas_operations' PUBLIC :: dbcsr_lapack_larnv, set_larnv_seed CONTAINS SUBROUTINE set_larnv_seed(irow, nrow, icol, ncol, ival, iseed) !! generate a seed respecting the lapack constraints, !! - values between 0..4095 (2**12-1) !! - iseed(4) odd !! also try to avoid iseed that are zero. !! Have but with a unique 2D mapping (irow,icol), and a 'mini-seed' ival INTEGER, INTENT(IN) :: irow, nrow, icol, ncol, ival !! 1..nrow !! nrow !! 1..ncol !! ncol !! mini-seed INTEGER, INTENT(OUT) :: iseed(4) !! a lapack compatible seed INTEGER(KIND=int_8) :: map map = ((irow - 1 + icol*INT(nrow, int_8))*(1 + MODULO(ival, 2**16)))*2 + 1 + 0*ncol ! ncol used iseed(4) = INT(MODULO(map, 2_int_8**12)); map = map/2_int_8**12; ! keep odd iseed(3) = INT(MODULO(IEOR(map, 3541_int_8), 2_int_8**12)); map = map/2_int_8**12 iseed(2) = INT(MODULO(IEOR(map, 1153_int_8), 2_int_8**12)); map = map/2_int_8**12 iseed(1) = INT(MODULO(IEOR(map, 2029_int_8), 2_int_8**12)); map = map/2_int_8**12 END SUBROUTINE set_larnv_seed SUBROUTINE dbcsr_lapack_larnv(idist, iseed, n, x) !! fills an array with random numbers INTEGER, INTENT(IN) :: idist !! type of distribution (1..3, see lapack docs) INTEGER, DIMENSION(:), INTENT(INOUT) :: iseed !! requires each int to be in the range 0..2**12, and the iseed(4) odd INTEGER, INTENT(IN) :: n TYPE(dbcsr_data_obj), INTENT(INOUT) :: x SELECT CASE (x%d%data_type) CASE (dbcsr_type_real_4) CALL slarnv(idist, iseed, n, x%d%r_sp) CASE (dbcsr_type_real_8) CALL dlarnv(idist, iseed, n, x%d%r_dp) CASE (dbcsr_type_complex_4) CALL clarnv(idist, iseed, n, x%d%c_sp) CASE (dbcsr_type_complex_8) CALL zlarnv(idist, iseed, n, x%d%c_dp) CASE default DBCSR_ABORT("Invalid data type") END SELECT END SUBROUTINE dbcsr_lapack_larnv END MODULE dbcsr_blas_operations ================================================ FILE: src/utils/dbcsr_btree.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! #:include 'dbcsr_btree.fypp' MODULE dbcsr_btree !! B-tree IMPLICIT NONE PRIVATE !API PUBLIC :: btree_new, btree_add, btree_find, & btree_delete, btree_get_entries #:for nt in nametype PUBLIC :: btree_${nt}$ #:endfor INTEGER, PARAMETER :: keyt = SELECTED_INT_KIND(10) INTEGER, PARAMETER :: valt = SELECTED_INT_KIND(5) INTEGER, PARAMETER :: sp = KIND(0.0) INTEGER, PARAMETER :: dp = KIND(0.0d0) #:for ts in type2setup $:ts #:endfor INTERFACE btree_new #:for nt in nametype MODULE PROCEDURE btree_new_${nt}$ #:endfor END INTERFACE INTERFACE btree_add #:for nt in nametype MODULE PROCEDURE btree_add_${nt}$ #:endfor END INTERFACE INTERFACE btree_find #:for nt in nametype MODULE PROCEDURE btree_find_${nt}$ #:endfor END INTERFACE INTERFACE btree_delete #:for nt in nametype MODULE PROCEDURE btree_delete_${nt}$ #:endfor END INTERFACE INTERFACE btree_get_entries #:for nt in nametype MODULE PROCEDURE btree_get_entries_${nt}$ #:endfor END INTERFACE #:for nametype, nametype1, nametype2, type1, type2, defaultFormatType1, defaultFormatType2, accessorType2 in inst_params TYPE btree_node_${nametype}$ INTEGER :: id = -1 INTEGER :: filled = -1 ${type1}$, DIMENSION(:), POINTER :: keys => NULL() ${type2}$, DIMENSION(:), POINTER :: values => NULL() TYPE(btree_node_p_${nametype}$), DIMENSION(:), POINTER :: subtrees => NULL() TYPE(btree_node_${nametype}$), POINTER :: parent => NULL() END TYPE btree_node_${nametype}$ TYPE btree_node_p_${nametype}$ TYPE(btree_node_${nametype}$), POINTER :: node => NULL() END TYPE btree_node_p_${nametype}$ TYPE btree_node_structure_${nametype}$ INTEGER :: min_fill = -1, max_fill = -1 INTEGER :: n = -1 INTEGER :: lastid = -1 INTEGER :: refcount = -1 TYPE(btree_node_${nametype}$), POINTER :: root => NULL() END TYPE btree_node_structure_${nametype}$ TYPE btree_${nametype}$ TYPE(btree_node_structure_${nametype}$) :: b = btree_node_structure_${nametype}$ () END TYPE btree_${nametype}$ #:endfor CONTAINS #:for nametype, nametype1, nametype2, type1, type2, defaultFormatType1, defaultFormatType2, accessorType2 in inst_params SUBROUTINE btree_new_${nametype}$ (tree, order) TYPE(btree_${nametype}$), INTENT(OUT) :: tree INTEGER, INTENT(IN), OPTIONAL :: order INTEGER :: maxs, mins ! IF (PRESENT(order)) THEN maxs = order - 1 ELSE maxs = 15 END IF mins = ISHFT(maxs, -1) IF (mins*2 .GT. maxs) maxs = 2*maxs IF (mins .LT. 1) mins = 1 IF (maxs .LT. 3) maxs = 3 tree%b%min_fill = mins tree%b%max_fill = maxs tree%b%refcount = 1 tree%b%n = 0 NULLIFY (tree%b%root) tree%b%lastid = 0 END SUBROUTINE btree_new_${nametype}$ FUNCTION btree_get_entries_${nametype}$ (tree) RESULT(num_entries) TYPE(btree_${nametype}$), INTENT(INOUT) :: tree INTEGER :: num_entries num_entries = tree%b%n END FUNCTION btree_get_entries_${nametype}$ ! node is a non-leaf node SUBROUTINE btree_adopt_subtrees_${nametype}$ (node) TYPE(btree_node_${nametype}$), POINTER :: node INTEGER :: i ! ! Assume that node is not a leaf! DO i = 1, node%filled + 1 !IF (ASSOCIATED (node%subtrees(i)%node)) THEN !IF (.NOT. ASSOCIATED (node%subtrees(i)%node%parent,& ! node)) THEN node%subtrees(i)%node%parent => node !ENDIF !ENDIF END DO END SUBROUTINE btree_adopt_subtrees_${nametype}$ SUBROUTINE btree_delete_${nametype}$ (tree, keys, values) TYPE(btree_${nametype}$), INTENT(INOUT) :: tree ${type1}$, DIMENSION(:), INTENT(OUT), OPTIONAL :: keys ${type2}$, DIMENSION(:), INTENT(OUT), OPTIONAL :: values INTEGER :: pos ! IF (ASSOCIATED(tree%b%root)) THEN pos = 0 IF (PRESENT(keys) .AND. PRESENT(values)) THEN pos = 1 CALL btree_delete_node_${nametype}$ (tree%b%root, pos, keys, values) ELSE CALL btree_delete_node_${nametype}$ (tree%b%root) END IF END IF NULLIFY (tree%b%root) END SUBROUTINE btree_delete_${nametype}$ RECURSIVE SUBROUTINE btree_delete_node_${nametype}$ (node, pos, keys, values) TYPE(btree_node_${nametype}$), POINTER :: node INTEGER, INTENT(INOUT), OPTIONAL :: pos ${type1}$, DIMENSION(:), INTENT(INOUT), OPTIONAL :: keys ${type2}$, DIMENSION(:), INTENT(INOUT), OPTIONAL :: values ! INTEGER :: i ! IF (node%filled .GT. 0 .AND. ASSOCIATED(node%subtrees(1)%node)) THEN DO i = 1, node%filled + 1 IF (PRESENT(pos)) THEN CALL btree_delete_node_${nametype}$ (node%subtrees(i)%node, pos, keys, values) ELSE CALL btree_delete_node_${nametype}$ (node%subtrees(i)%node) END IF IF (PRESENT(pos) .AND. i .LE. node%filled) THEN keys(pos) = node%keys(i) values(pos) = node%values(i) pos = pos + 1 END IF END DO ELSEIF (PRESENT(pos) .AND. node%filled .GT. 0) THEN keys(pos:pos + node%filled - 1) = node%keys(1:node%filled) values(pos:pos + node%filled - 1) = node%values(1:node%filled) pos = pos + node%filled END IF CALL btree_free_node_${nametype}$ (node) END SUBROUTINE btree_delete_node_${nametype}$ ! Find the key ! IF node still has space, insert & update the node ! else ! 1. select median ! 2. split keys into two nodes (one is new) ! 3. insert separation key put into parent, and repeat upwards SUBROUTINE btree_add_${nametype}$ (tree, key, value, exists, existing_value, replace) TYPE(btree_${nametype}$), INTENT(INOUT) :: tree ${type1}$, INTENT(IN) :: key ${type2}$, INTENT(IN) :: value LOGICAL, INTENT(OUT), OPTIONAL :: exists ${type2}$, INTENT(OUT), OPTIONAL :: existing_value LOGICAL, INTENT(IN), OPTIONAL :: replace ! TYPE(btree_node_${nametype}$), POINTER :: node INTEGER :: ge_pos, position ! IF (PRESENT(exists)) THEN CALL btree_find_full_${nametype}$ (tree, key, node, position, ge_pos, short=.TRUE.) IF (position .GT. 0) THEN exists = .TRUE. existing_value = node%values(position) IF (PRESENT(replace)) THEN IF (replace) THEN node%values(position) = value END IF END IF RETURN ELSE exists = .FALSE. END IF ELSE CALL btree_find_leaf_${nametype}$ (tree, key, node, ge_pos) END IF CALL btree_add_into_${nametype}$ (tree, node, key, value, before=ge_pos) IF (PRESENT(exists)) existing_value = value tree%b%n = tree%b%n + 1 END SUBROUTINE btree_add_${nametype}$ RECURSIVE SUBROUTINE btree_add_into_${nametype}$ (tree, node, key, value, before, subtree) TYPE(btree_${nametype}$), INTENT(INOUT) :: tree TYPE(btree_node_${nametype}$), POINTER :: node ${type1}$, INTENT(IN) :: key ${type2}$, INTENT(IN) :: value INTEGER, INTENT(IN), OPTIONAL :: before TYPE(btree_node_${nametype}$), POINTER, OPTIONAL :: subtree ! TYPE(btree_node_${nametype}$), POINTER :: new_node ${type1}$ :: upgrade_key INTEGER :: ge_pos, split_pos ${type2}$ :: upgrade_value LOGICAL :: leaf ! ! Root is special IF (.NOT. ASSOCIATED(node)) THEN CALL btree_new_root_${nametype}$ (tree, key, value) IF (PRESENT(subtree)) THEN tree%b%root%subtrees(2)%node => subtree subtree%parent => tree%b%root END IF RETURN END IF ! Where the insertion takes place. IF (PRESENT(before)) THEN ge_pos = before ELSE CALL btree_node_find_gt_pos_${nametype}$ (node%keys, key, ge_pos, node%filled) END IF ! Addition is easy if the node has enough space. leaf = .NOT. ASSOCIATED(node%subtrees(1)%node) IF (node%filled .LT. tree%b%max_fill) THEN IF (PRESENT(subtree)) THEN CALL btree_simple_insertion_${nametype}$ (node, key, value, ge_pos, subtree) ELSE CALL btree_simple_insertion_${nametype}$ (node, key, value, ge_pos) END IF RETURN ELSE split_pos = ISHFT(tree%b%max_fill + 1, -1) ! I assert that split_pos <= SIZE(node%keys) CALL btree_new_node_${nametype}$ (tree, new_node) ! The key to be added falls in the left node node%filled = split_pos - 1 IF (ge_pos .LE. split_pos) THEN IF (ge_pos .EQ. split_pos) THEN upgrade_key = key upgrade_value = value ELSE upgrade_key = node%keys(split_pos - 1) upgrade_value = node%values(split_pos - 1) END IF IF (PRESENT(subtree)) THEN CALL btree_left_insertion_${nametype}$ (tree, node, new_node, key, value, & ge_pos, split_pos, subtree) !CALL btree_adopt_subtrees_${nametype}$ (new_node) ELSE CALL btree_left_insertion_${nametype}$ (tree, node, new_node, key, value, & ge_pos, split_pos) END IF ! ELSE upgrade_key = node%keys(split_pos) upgrade_value = node%values(split_pos) IF (PRESENT(subtree)) THEN CALL btree_right_insertion_${nametype}$ (tree, node, new_node, key, value, & ge_pos, split_pos, subtree) !CALL btree_adopt_subtrees_${nametype}$ (new_node) ELSE CALL btree_right_insertion_${nametype}$ (tree, node, new_node, key, value, & ge_pos, split_pos) END IF ! END IF ! new_node%parent => node%parent ! IF (.NOT. leaf) THEN CALL btree_adopt_subtrees_${nametype}$ (new_node) END IF ! CALL btree_add_into_${nametype}$ (tree, node%parent, upgrade_key, upgrade_value, & subtree=new_node) ! END IF END SUBROUTINE btree_add_into_${nametype}$ SUBROUTINE btree_simple_insertion_${nametype}$ (node, key, value, before, subtree) TYPE(btree_node_${nametype}$), INTENT(INOUT) :: node ${type1}$, INTENT(IN) :: key ${type2}$, INTENT(IN) :: value INTEGER, INTENT(IN) :: before TYPE(btree_node_${nametype}$), POINTER, OPTIONAL :: subtree ! ! Shift keys node%keys(before + 1:node%filled + 1) = node%keys(before:node%filled) node%keys(before) = key ! Shift values node%values(before + 1:node%filled + 1) = node%values(before:node%filled) node%values(before) = value ! Shift subtree pointers, but only if node is not a leaf ; assume ! leaf <=> present(subtree) IF (PRESENT(subtree)) THEN node%subtrees(before + 2:node%filled + 2) = & node%subtrees(before + 1:node%filled + 1) node%subtrees(before + 1)%node => subtree END IF node%filled = node%filled + 1 END SUBROUTINE btree_simple_insertion_${nametype}$ SUBROUTINE btree_left_insertion_${nametype}$ (tree, node, new_node, key, value, before, split_pos, subtree) TYPE(btree_${nametype}$), INTENT(IN) :: tree TYPE(btree_node_${nametype}$), INTENT(INOUT) :: node, new_node ${type1}$, INTENT(IN) :: key ${type2}$, INTENT(IN) :: value INTEGER, INTENT(IN) :: before, split_pos TYPE(btree_node_${nametype}$), POINTER, OPTIONAL :: subtree ! new_node%filled = (tree%b%max_fill) - (split_pos - 1) new_node%keys(1:new_node%filled) = & node%keys(split_pos:tree%b%max_fill) new_node%values(1:new_node%filled) = & node%values(split_pos:tree%b%max_fill) !IF (ASSOCIATED (node%subtrees(1)%node)) THEN IF (PRESENT(subtree)) THEN IF (before .EQ. split_pos) THEN new_node%subtrees(2:new_node%filled + 1) = & node%subtrees(split_pos + 1:tree%b%max_fill + 1) new_node%subtrees(1)%node => subtree ELSE new_node%subtrees(1:new_node%filled + 1) = & node%subtrees(split_pos:tree%b%max_fill + 1) END IF END IF ! Fill node%{keys,values}(1:node%filled), where node%filled ! is split_pos-1, but do insert the new value at ge_pos. The ! key/value at split_pos is to be inserted into the ! parent. ! The new tree is added to the right of the new insertion. node%keys(before + 1:node%filled) = node%keys(before:node%filled - 1) node%keys(before) = key node%values(before + 1:node%filled) = node%values(before:node%filled - 1) node%values(before) = value IF (PRESENT(subtree)) THEN node%subtrees(before + 2:node%filled + 1) = & node%subtrees(before + 1:node%filled) node%subtrees(before + 1)%node => subtree ELSE NULLIFY (node%subtrees(before + 1)%node) END IF END SUBROUTINE btree_left_insertion_${nametype}$ SUBROUTINE btree_right_insertion_${nametype}$ (tree, node, new_node, key, value, before, split_pos, subtree) TYPE(btree_${nametype}$), INTENT(IN) :: tree TYPE(btree_node_${nametype}$), INTENT(INOUT) :: node, new_node ${type1}$, INTENT(IN) :: key ${type2}$, INTENT(IN) :: value INTEGER, INTENT(IN) :: before, split_pos TYPE(btree_node_${nametype}$), POINTER, OPTIONAL :: subtree ! new_node%filled = (tree%b%max_fill + 1) - split_pos new_node%keys(1:before - split_pos - 1) = & node%keys(split_pos + 1:before - 1) new_node%keys(before - split_pos) = key new_node%keys(before - split_pos + 1:new_node%filled) = & node%keys(before:tree%b%max_fill) new_node%values(1:before - split_pos - 1) = & node%values(split_pos + 1:before - 1) new_node%values(before - split_pos) = value new_node%values(before - split_pos + 1:new_node%filled) = & node%values(before:tree%b%max_fill) IF (PRESENT(subtree)) THEN new_node%subtrees(1:before - split_pos) = & node%subtrees(split_pos + 1:before) new_node%subtrees(before - split_pos + 1)%node => subtree new_node%subtrees(before - split_pos + 2:new_node%filled + 1) = & node%subtrees(before + 1:tree%b%max_fill + 1) END IF END SUBROUTINE btree_right_insertion_${nametype}$ SUBROUTINE btree_new_root_${nametype}$ (tree, key, value) TYPE(btree_${nametype}$), INTENT(INOUT) :: tree ${type1}$, INTENT(IN) :: key ${type2}$, INTENT(IN) :: value TYPE(btree_node_${nametype}$), POINTER :: old_root, new_root ! CALL btree_new_node_${nametype}$ (tree, new_root) new_root%filled = 1 new_root%keys(1) = key new_root%values(1) = value IF (ASSOCIATED(tree%b%root)) THEN old_root => tree%b%root old_root%parent => new_root new_root%subtrees(1)%node => old_root old_root%parent => new_root END IF tree%b%root => new_root END SUBROUTINE btree_new_root_${nametype}$ SUBROUTINE btree_new_node_${nametype}$ (tree, node) TYPE(btree_${nametype}$), INTENT(INOUT) :: tree TYPE(btree_node_${nametype}$), POINTER :: node INTEGER :: i ! ALLOCATE (node) ALLOCATE (node%keys(tree%b%max_fill)) ALLOCATE (node%values(tree%b%max_fill)) ALLOCATE (node%subtrees(tree%b%max_fill + 1)) DO i = 1, tree%b%max_fill + 1 NULLIFY (node%subtrees(i)%node) END DO node%filled = 0 NULLIFY (node%parent) tree%b%lastid = tree%b%lastid + 1 node%id = tree%b%lastid END SUBROUTINE btree_new_node_${nametype}$ SUBROUTINE btree_free_node_${nametype}$ (node) TYPE(btree_node_${nametype}$), POINTER :: node ! DEALLOCATE (node%keys) DEALLOCATE (node%values) DEALLOCATE (node%subtrees) DEALLOCATE (node) END SUBROUTINE btree_free_node_${nametype}$ SUBROUTINE btree_find_${nametype}$ (tree, key, value, exists) TYPE(btree_${nametype}$), INTENT(IN) :: tree ${type1}$, INTENT(IN) :: key ${type2}$, INTENT(OUT) :: value LOGICAL, INTENT(OUT), OPTIONAL :: exists ! TYPE(btree_node_${nametype}$), POINTER :: node INTEGER :: position ! CALL btree_find_full_${nametype}$ (tree, key, node, position, short=.TRUE.) IF (PRESENT(exists)) THEN exists = position .GT. 0 END IF IF (position .GT. 0) THEN value = node%values(position) END IF END SUBROUTINE btree_find_${nametype}$ SUBROUTINE btree_node_find_ge_pos_${nametype}$ (keys, key, position, filled) ${type1}$, DIMENSION(:) :: keys ${type1}$, INTENT(IN) :: key INTEGER, INTENT(OUT) :: position INTEGER, INTENT(IN) :: filled INTEGER :: left, right ! IF (keys(1) .GE. key) THEN position = 1 RETURN END IF IF (keys(filled) .LT. key) THEN position = filled + 1 RETURN END IF left = 2 right = filled position = MAX(ISHFT(left + right, -1), left) DO WHILE (left .LE. right) IF (keys(position) .GE. key .AND. keys(position - 1) .LT. key) THEN RETURN END IF IF (keys(position) .GE. key) right = MIN(position, right - 1) IF (keys(position) .LT. key) left = MAX(position, left + 1) position = MAX(ISHFT(left + right, -1), left) END DO END SUBROUTINE btree_node_find_ge_pos_${nametype}$ SUBROUTINE btree_node_find_gt_pos_${nametype}$ (keys, key, position, filled) ${type1}$, DIMENSION(:) :: keys ${type1}$, INTENT(IN) :: key INTEGER, INTENT(OUT) :: position INTEGER, INTENT(IN) :: filled INTEGER :: left, right ! IF (keys(1) .GT. key) THEN position = 1 RETURN END IF IF (keys(filled) .LE. key) THEN position = filled + 1 RETURN END IF left = 2 right = filled position = MAX(ISHFT(left + right, -1), left) DO WHILE (left .LE. right) IF (keys(position) .GT. key .AND. keys(position - 1) .LE. key) THEN RETURN END IF IF (keys(position) .GT. key) right = MIN(position, right - 1) IF (keys(position) .LE. key) left = MAX(position, left + 1) position = MAX(ISHFT(left + right, -1), left) END DO END SUBROUTINE btree_node_find_gt_pos_${nametype}$ SUBROUTINE btree_node_find_gte_pos_${nametype}$ (keys, key, position, filled, first) ${type1}$, DIMENSION(:) :: keys ${type1}$, INTENT(IN) :: key INTEGER, INTENT(OUT) :: position INTEGER, INTENT(IN) :: filled INTEGER, INTENT(IN), OPTIONAL :: first INTEGER :: left, right, one ! one = 1 IF (PRESENT(FIRST)) one = first IF (one .LE. filled) THEN IF (keys(one) .GT. key) THEN position = one RETURN END IF END IF IF (keys(filled) .LE. key) THEN position = filled + 1 RETURN END IF left = one + 1 right = filled position = MAX(ISHFT(left + right, -1), left) DO WHILE (left .LE. right) IF (keys(position) .GT. key .AND. keys(position - 1) .LE. key) THEN RETURN END IF IF (keys(position) .GT. key) right = MIN(position, right - 1) IF (keys(position) .LE. key) left = MAX(position, left + 1) position = MAX(ISHFT(left + right, -1), left) END DO END SUBROUTINE btree_node_find_gte_pos_${nametype}$ ! node is unassociated and position=0 if not found ! Precondition: The key is tree or its subtree. SUBROUTINE btree_find_full_${nametype}$ (tree, key, node, position, ge_position, short) TYPE(btree_${nametype}$), INTENT(IN) :: tree ${type1}$, INTENT(IN) :: key TYPE(btree_node_${nametype}$), POINTER :: node INTEGER, INTENT(OUT) :: position INTEGER, INTENT(OUT), OPTIONAL :: ge_position LOGICAL, INTENT(IN), OPTIONAL :: short INTEGER :: gti ! Used mark searches LOGICAL :: stop_short ! stop_short = .FALSE. IF (PRESENT(short)) stop_short = short NULLIFY (node) position = 0 IF (PRESENT(ge_position)) ge_position = 0 !IF (tree%b%n .EQ. 0) RETURN IF (.NOT. ASSOCIATED(tree%b%root)) RETURN gti = 1 ! Try to find the key in the given node. If it's found, then ! return the node. node => tree%b%root descent: DO WHILE (.TRUE.) ! Try to find the first element equal to or greater than the ! one we're searching for. CALL btree_node_find_ge_pos_${nametype}$ (node%keys, key, position, node%filled) ! One of three things is now true about position: it's now ! greater than the number of keys (if all keys are smaller), or ! it points to the key that is equal to or greater than the one ! we are searching for. If it is found and we are just ! searching for one equal element (i.e., user search), we can ! return. IF (stop_short .AND. position .LE. node%filled) THEN IF (node%keys(position) .EQ. key) THEN IF (PRESENT(ge_position)) ge_position = position RETURN END IF END IF ! If the key is not found, then either return the GE position ! if we're in a leaf (case 2 here), otherwise descend into the ! subtrees. !CALL btree_node_find_gt_pos_${nametype}$ (node%keys, key, gti, node%filled, position) CALL btree_node_find_gte_pos_${nametype}$ (node%keys, key, gti, node%filled, position) IF (ASSOCIATED(node%subtrees(1)%node)) THEN node => node%subtrees(gti)%node ELSE IF (PRESENT(ge_position)) ge_position = gti position = 0 RETURN END IF END DO descent END SUBROUTINE btree_find_full_${nametype}$ ! node is unassociated and position=0 if not found ! Precondition: The key is tree or its subtree. SUBROUTINE btree_find_leaf_${nametype}$ (tree, key, node, gti) TYPE(btree_${nametype}$), INTENT(IN) :: tree ${type1}$, INTENT(IN) :: key TYPE(btree_node_${nametype}$), POINTER :: node INTEGER, INTENT(OUT) :: gti ! NULLIFY (node) !IF (tree%b%n .EQ. 0) RETURN IF (.NOT. ASSOCIATED(tree%b%root)) RETURN gti = 1 ! Try to find the key in the given node. If it's found, then ! return the node. node => tree%b%root descent: DO WHILE (.TRUE.) ! Try to find the first element equal to or greater than the ! one we're searching for. !CALL btree_node_find_ge_pos_${nametype}$ (node%keys, key, position, node%filled) ! One of three things is now true about position: it's now ! greater than the number of keys (if all keys are smaller), or ! it points to the key that is equal to or greater than the one ! we are searching for. If it is found and we are just ! searching for one equal element (i.e., user search), we can ! return. ! ! If the key is not found, then either return the GE position ! if we're in a leaf (case 2 here), otherwise descend into the ! subtrees. CALL btree_node_find_gt_pos_${nametype}$ (node%keys, key, gti, node%filled) !CALL btree_node_find_gt2_pos_${nametype}$ (node%keys, key, i, node%filled) !IF (i .NE. gti) WRITE(*,*)'XXXX difference',i,gti IF (ASSOCIATED(node%subtrees(1)%node)) THEN node => node%subtrees(gti)%node ELSE RETURN END IF END DO descent END SUBROUTINE btree_find_leaf_${nametype}$ #:endfor END MODULE dbcsr_btree ================================================ FILE: src/utils/dbcsr_btree.fypp ================================================ #!--------------------------------------------------------------------------------------------------! #! Copyright (C) by the DBCSR developers group - All rights reserved ! #! This file is part of the DBCSR library. ! #! ! #! For information on the license, see the LICENSE file. ! #! For further information please visit https://dbcsr.cp2k.org ! #! SPDX-License-Identifier: GPL-2.0+ ! #!--------------------------------------------------------------------------------------------------! #:mute #:def type2setup_1_get() TYPE btree_data_sp2d REAL(KIND=sp), DIMENSION(:,:), POINTER :: p => NULL() LOGICAL :: tr = .FALSE. END TYPE btree_data_sp2d PUBLIC :: btree_data_sp2d #:enddef #:def type2setup_2_get() TYPE btree_data_dp2d REAL(KIND=dp), DIMENSION(:,:), POINTER :: p => NULL() LOGICAL :: tr = .FALSE. END TYPE btree_data_dp2d PUBLIC :: btree_data_dp2d #:enddef #:def type2setup_3_get() TYPE btree_data_cp2d COMPLEX(KIND=sp), DIMENSION(:,:), POINTER :: p => NULL() LOGICAL :: tr = .FALSE. END TYPE btree_data_cp2d PUBLIC :: btree_data_cp2d #:enddef #:def type2setup_4_get() TYPE btree_data_zp2d COMPLEX(KIND=dp), DIMENSION(:,:), POINTER :: p => NULL() LOGICAL :: tr = .FALSE. END TYPE btree_data_zp2d PUBLIC :: btree_data_zp2d #:enddef #:set nametype1 = ['i8','i8','i8','i8'] #:set type1 = ['INTEGER(KIND=keyt)','INTEGER(KIND=keyt)','INTEGER(KIND=keyt)','INTEGER(KIND=keyt)'] #:set nametype2 = ['sp2d', 'dp2d', 'cp2d', 'zp2d'] #:set type2 = ['TYPE(btree_data_sp2d)', 'TYPE(btree_data_dp2d)', 'TYPE(btree_data_cp2d)', 'TYPE(btree_data_zp2d)'] #:set type2setup = [type2setup_1_get(),type2setup_2_get(),type2setup_3_get(),type2setup_4_get()] #:set defaultFormatType1 = ['I12', 'I12', 'I12', 'I12'] #:set defaultFormatType2 = ['F12.3', 'F12.3', 'F12.3', 'F12.3'] #:set accessorType2 = ['%p','%p','%p','%p'] #:set nametype = [_ + '_' + __ for _, __ in zip(nametype1, nametype2)] #:set inst_params = list(zip(nametype, nametype1, nametype2, type1, type2, defaultFormatType1, defaultFormatType2, accessorType2)) #:endmute ================================================ FILE: src/utils/dbcsr_files.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_files !! Utility routines to open and close files. USE dbcsr_kinds, ONLY: default_path_length USE dbcsr_machine, ONLY: default_input_unit, & default_output_unit, & m_getcwd #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE PUBLIC :: close_file, & open_file, & get_unit_number, & file_exists CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_files' INTEGER, PARAMETER :: max_preconnections = 10, & max_unit_number = 999 TYPE preconnection_type PRIVATE CHARACTER(LEN=default_path_length) :: file_name = "" INTEGER :: unit_number = -1 END TYPE preconnection_type TYPE(preconnection_type), DIMENSION(max_preconnections) :: preconnected CONTAINS SUBROUTINE assign_preconnection(file_name, unit_number) !! Add an entry to the list of preconnected units CHARACTER(LEN=*), INTENT(IN) :: file_name INTEGER, INTENT(IN) :: unit_number INTEGER :: ic, islot, nc IF ((unit_number < 1) .OR. (unit_number > max_unit_number)) THEN DBCSR_ABORT("An invalid logical unit number was specified.") END IF IF (LEN_TRIM(file_name) == 0) THEN DBCSR_ABORT("No valid file name was specified") END IF nc = SIZE(preconnected) ! Check if a preconnection already exists DO ic = 1, nc IF (TRIM(preconnected(ic)%file_name) == TRIM(file_name)) THEN ! Return if the entry already exists IF (preconnected(ic)%unit_number == unit_number) THEN RETURN ELSE CALL print_preconnection_list() CALL dbcsr_abort(__LOCATION__, & "Attempt to connect the already connected file <"// & TRIM(ADJUSTL(file_name))//"> to another unit") END IF END IF END DO ! Search for an unused entry islot = -1 DO ic = 1, nc IF (preconnected(ic)%unit_number == -1) THEN islot = ic EXIT END IF END DO IF (islot == -1) THEN CALL print_preconnection_list() DBCSR_ABORT("No free slot found in the list of preconnected units") END IF preconnected(islot)%file_name = TRIM(ADJUSTL(file_name)) preconnected(islot)%unit_number = unit_number END SUBROUTINE assign_preconnection SUBROUTINE close_file(unit_number, file_status, keep_preconnection) !! Close an open file given by its logical unit number. !! Optionally, keep the file and unit preconnected. INTEGER, INTENT(IN) :: unit_number CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: file_status LOGICAL, INTENT(IN), OPTIONAL :: keep_preconnection CHARACTER(LEN=2*default_path_length) :: message CHARACTER(LEN=6) :: status_string CHARACTER(LEN=default_path_length) :: file_name INTEGER :: istat LOGICAL :: exists, is_open, keep_file_connection keep_file_connection = .FALSE. IF (PRESENT(keep_preconnection)) keep_file_connection = keep_preconnection INQUIRE (UNIT=unit_number, EXIST=exists, OPENED=is_open, IOSTAT=istat) IF (istat /= 0) THEN WRITE (UNIT=message, FMT="(A,I0,A,I0,A)") & "An error occurred inquiring the unit with the number ", unit_number, & " (IOSTAT = ", istat, ")" DBCSR_ABORT(TRIM(message)) ELSE IF (.NOT. exists) THEN WRITE (UNIT=message, FMT="(A,I0,A)") & "The specified unit number ", unit_number, & " cannot be closed, because it does not exist." DBCSR_ABORT(TRIM(message)) END IF ! Close the specified file IF (is_open) THEN ! Refuse to close any preconnected system unit IF (unit_number == default_input_unit) THEN WRITE (UNIT=message, FMT="(A,I0)") & "Attempt to close the default input unit number ", unit_number DBCSR_ABORT(TRIM(message)) END IF IF (unit_number == default_output_unit) THEN WRITE (UNIT=message, FMT="(A,I0)") & "Attempt to close the default output unit number ", unit_number DBCSR_ABORT(TRIM(message)) END IF ! Define status after closing the file IF (PRESENT(file_status)) THEN status_string = TRIM(ADJUSTL(file_status)) ELSE status_string = "KEEP" END IF ! Optionally, keep this unit preconnected INQUIRE (UNIT=unit_number, NAME=file_name, IOSTAT=istat) IF (istat /= 0) THEN WRITE (UNIT=message, FMT="(A,I0,A,I0,A)") & "An error occurred inquiring the unit with the number ", unit_number, & " (IOSTAT = ", istat, ")" DBCSR_ABORT(TRIM(message)) END IF ! Manage preconnections IF (keep_file_connection) THEN CALL assign_preconnection(file_name, unit_number) ELSE CALL delete_preconnection(file_name, unit_number) CLOSE (UNIT=unit_number, IOSTAT=istat, STATUS=TRIM(status_string)) IF (istat /= 0) THEN WRITE (UNIT=message, FMT="(A,I0,A,I0,A)") & "An error occurred closing the file with the logical unit number ", & unit_number, " (IOSTAT = ", istat, ")" DBCSR_ABORT(TRIM(message)) END IF END IF END IF END SUBROUTINE close_file SUBROUTINE delete_preconnection(file_name, unit_number) !! Remove an entry from the list of preconnected units CHARACTER(LEN=*), INTENT(IN) :: file_name INTEGER :: unit_number INTEGER :: ic, nc nc = SIZE(preconnected) ! Search for preconnection entry and delete it when found DO ic = 1, nc IF (TRIM(preconnected(ic)%file_name) == TRIM(file_name)) THEN IF (preconnected(ic)%unit_number == unit_number) THEN preconnected(ic)%file_name = "" preconnected(ic)%unit_number = -1 EXIT ELSE CALL print_preconnection_list() CALL dbcsr_abort(__LOCATION__, & "Attempt to disconnect the file <"// & TRIM(ADJUSTL(file_name))// & "> from an unlisted unit") END IF END IF END DO END SUBROUTINE delete_preconnection FUNCTION get_unit_number(file_name) RESULT(unit_number) !! Returns the first logical unit that is not preconnected !! @note !! -1 if no free unit exists CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: file_name INTEGER :: unit_number INTEGER :: ic, istat, nc LOGICAL :: exists, is_open IF (PRESENT(file_name)) THEN nc = SIZE(preconnected) ! Check for preconnected units DO ic = 3, nc ! Exclude the preconnected system units (< 3) IF (TRIM(preconnected(ic)%file_name) == TRIM(file_name)) THEN unit_number = preconnected(ic)%unit_number RETURN END IF END DO END IF ! Get a new unit number DO unit_number = 1, max_unit_number IF (ANY(unit_number == preconnected(:)%unit_number)) CYCLE INQUIRE (UNIT=unit_number, EXIST=exists, OPENED=is_open, IOSTAT=istat) IF (exists .AND. (.NOT. is_open) .AND. (istat == 0)) RETURN END DO unit_number = -1 END FUNCTION get_unit_number SUBROUTINE open_file(file_name, file_status, file_form, file_action, & file_position, file_pad, unit_number, debug, & skip_get_unit_number, file_access) !! Opens the requested file using a free unit number CHARACTER(LEN=*), INTENT(IN) :: file_name CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: file_status, file_form, file_action, & file_position, file_pad INTEGER, INTENT(INOUT) :: unit_number INTEGER, INTENT(IN), OPTIONAL :: debug LOGICAL, INTENT(IN), OPTIONAL :: skip_get_unit_number CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: file_access !! file access mode CHARACTER(LEN=*), PARAMETER :: routineN = 'open_file' CHARACTER(LEN=11) :: access_string, action_string, current_action, current_form, & form_string, pad_string, position_string, status_string CHARACTER(LEN=2*default_path_length) :: message CHARACTER(LEN=default_path_length) :: cwd, iomsgstr INTEGER :: debug_unit, istat LOGICAL :: exists, get_a_new_unit, is_open IF (PRESENT(file_access)) THEN access_string = TRIM(file_access) ELSE access_string = "SEQUENTIAL" END IF IF (PRESENT(file_status)) THEN status_string = TRIM(file_status) ELSE status_string = "OLD" END IF IF (PRESENT(file_form)) THEN form_string = TRIM(file_form) ELSE form_string = "FORMATTED" END IF IF (PRESENT(file_pad)) THEN pad_string = file_pad IF (form_string == "UNFORMATTED") THEN WRITE (UNIT=message, FMT="(A)") & "The PAD specifier is not allowed for an UNFORMATTED file" DBCSR_ABORT(TRIM(message)) END IF ELSE pad_string = "YES" END IF IF (PRESENT(file_action)) THEN action_string = TRIM(file_action) ELSE action_string = "READ" END IF IF (PRESENT(file_position)) THEN position_string = TRIM(file_position) ELSE position_string = "REWIND" END IF IF (PRESENT(debug)) THEN debug_unit = debug ELSE debug_unit = 0 ! use default_output_unit for debugging END IF ! Check the specified input file name INQUIRE (FILE=TRIM(file_name), EXIST=exists, OPENED=is_open, IOSTAT=istat) IF (istat /= 0) THEN WRITE (UNIT=message, FMT="(A,I0,A)") & "An error occurred inquiring the file <"//TRIM(file_name)// & "> (IOSTAT = ", istat, ")" DBCSR_ABORT(TRIM(message)) ELSE IF (status_string == "OLD") THEN IF (.NOT. exists) THEN WRITE (UNIT=message, FMT="(A)") & "The specified file <"//TRIM(ADJUSTL(file_name))// & "> cannot be opened. It does not exist. " DBCSR_ABORT(TRIM(message)) END IF END IF ! Open the specified input file IF (is_open) THEN INQUIRE (FILE=TRIM(file_name), NUMBER=unit_number, & ACTION=current_action, FORM=current_form) IF (TRIM(position_string) == "REWIND") REWIND (UNIT=unit_number) IF (TRIM(status_string) == "NEW") THEN CALL dbcsr_abort(__LOCATION__, & "Attempt to re-open the existing OLD file <"// & TRIM(file_name)//"> with status attribute NEW.") END IF IF (TRIM(current_form) /= TRIM(form_string)) THEN CALL dbcsr_abort(__LOCATION__, & "Attempt to re-open the existing "// & TRIM(current_form)//" file <"//TRIM(file_name)// & "> as "//TRIM(form_string)//" file.") END IF IF (TRIM(current_action) /= TRIM(action_string)) THEN CALL dbcsr_abort(__LOCATION__, & "Attempt to re-open the existing file <"// & TRIM(file_name)//"> with the modified ACTION attribute "// & TRIM(action_string)//". The current ACTION attribute is "// & TRIM(current_action)//".") END IF ELSE ! Find an unused unit number get_a_new_unit = .TRUE. IF (PRESENT(skip_get_unit_number)) THEN IF (skip_get_unit_number) get_a_new_unit = .FALSE. END IF IF (get_a_new_unit) unit_number = get_unit_number(TRIM(file_name)) IF (unit_number < 1) THEN WRITE (UNIT=message, FMT="(A)") & "Cannot open the file <"//TRIM(ADJUSTL(file_name))// & ">, because no unused logical unit number could be obtained." DBCSR_ABORT(TRIM(message)) END IF IF (TRIM(form_string) == "FORMATTED") THEN OPEN (UNIT=unit_number, & FILE=TRIM(file_name), & STATUS=TRIM(status_string), & ACCESS=TRIM(access_string), & FORM=TRIM(form_string), & POSITION=TRIM(position_string), & ACTION=TRIM(action_string), & PAD=TRIM(pad_string), & IOMSG=iomsgstr, & IOSTAT=istat) ELSE OPEN (UNIT=unit_number, & FILE=TRIM(file_name), & STATUS=TRIM(status_string), & ACCESS=TRIM(access_string), & FORM=TRIM(form_string), & POSITION=TRIM(position_string), & ACTION=TRIM(action_string), & IOMSG=iomsgstr, & IOSTAT=istat) END IF IF (istat /= 0) THEN CALL m_getcwd(cwd) WRITE (UNIT=message, FMT="(A,I0,A,I0,A)") & "An error occurred opening the file '"//TRIM(ADJUSTL(file_name))// & "' (UNIT = ", unit_number, ", IOSTAT = ", istat, "). "//TRIM(iomsgstr)//". "// & "Current working directory: "//TRIM(cwd) DBCSR_ABORT(TRIM(message)) END IF END IF IF (debug_unit > 0) THEN INQUIRE (FILE=TRIM(file_name), OPENED=is_open, NUMBER=unit_number, & POSITION=position_string, NAME=message, ACCESS=access_string, & FORM=form_string, ACTION=action_string) WRITE (UNIT=debug_unit, FMT="(T2,A)") "BEGIN DEBUG "//TRIM(ADJUSTL(routineN)) WRITE (UNIT=debug_unit, FMT="(T3,A,I0)") "NUMBER : ", unit_number WRITE (UNIT=debug_unit, FMT="(T3,A,L1)") "OPENED : ", is_open WRITE (UNIT=debug_unit, FMT="(T3,A)") "NAME : "//TRIM(ADJUSTL(message)) WRITE (UNIT=debug_unit, FMT="(T3,A)") "POSITION: "//TRIM(ADJUSTL(position_string)) WRITE (UNIT=debug_unit, FMT="(T3,A)") "ACCESS : "//TRIM(ADJUSTL(access_string)) WRITE (UNIT=debug_unit, FMT="(T3,A)") "FORM : "//TRIM(ADJUSTL(form_string)) WRITE (UNIT=debug_unit, FMT="(T3,A)") "ACTION : "//TRIM(ADJUSTL(action_string)) WRITE (UNIT=debug_unit, FMT="(T2,A)") "END DEBUG "//TRIM(ADJUSTL(routineN)) CALL print_preconnection_list(debug_unit) END IF END SUBROUTINE open_file FUNCTION file_exists(file_name) RESULT(exist) !! Checks if file exists, considering also the file discovery mechanism. CHARACTER(LEN=*), INTENT(IN) :: file_name LOGICAL :: exist INQUIRE (FILE=TRIM(file_name), exist=exist) END FUNCTION file_exists SUBROUTINE print_preconnection_list(output_unit) !! Print the list of preconnected units INTEGER, INTENT(IN), OPTIONAL :: output_unit !! which unit to print to (optional) INTEGER :: ic, nc, unit IF (PRESENT(output_unit)) THEN unit = output_unit ELSE unit = default_output_unit END IF nc = SIZE(preconnected) IF (output_unit > 0) THEN WRITE (UNIT=output_unit, FMT="(A,/,A)") & " LIST OF PRECONNECTED LOGICAL UNITS", & " Slot Unit number File name" DO ic = 1, nc IF (preconnected(ic)%unit_number > 0) THEN WRITE (UNIT=output_unit, FMT="(I6,3X,I6,8X,A)") & ic, preconnected(ic)%unit_number, & TRIM(ADJUSTL(preconnected(ic)%file_name)) ELSE WRITE (UNIT=output_unit, FMT="(I6,17X,A)") & ic, "UNUSED" END IF END DO END IF END SUBROUTINE print_preconnection_list END MODULE dbcsr_files ================================================ FILE: src/utils/dbcsr_hash_table.f90 ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! ! ----------------------------------------------------------------------------- ! Beginning of hashtable. ! this file can be 'INCLUDE'ed verbatim in various place, where it needs to be ! part of the module to guarantee inlining ! hashes (c,p) pairs, where p is assumed to be >0 ! on return (0 is used as a flag for not present) ! ! FUNCTION matching_prime(i) RESULT(res) !! finds a prime equal or larger than i, needed at creation INTEGER, INTENT(IN) :: i INTEGER :: res INTEGER :: j res = i j = 0 DO WHILE (j < res) DO j = 2, res - 1 IF (MOD(res, j) == 0) THEN res = res + 1 EXIT END IF END DO END DO END FUNCTION SUBROUTINE hash_table_create(hash_table, table_size) !! create a hash_table of given initial size. !! the hash table will expand as needed (but this requires rehashing) TYPE(hash_table_type) :: hash_table INTEGER, INTENT(IN) :: table_size INTEGER :: j ! guarantee a minimal hash table size (8), so that expansion works j = 3 DO WHILE (2**j - 1 < table_size) j = j + 1 END DO hash_table%nmax = 2**j - 1 hash_table%prime = matching_prime(hash_table%nmax) hash_table%nele = 0 ALLOCATE (hash_table%table(0:hash_table%nmax)) END SUBROUTINE hash_table_create ! ***************************************************************************** ! ************************************************************************************************** SUBROUTINE hash_table_release(hash_table) TYPE(hash_table_type) :: hash_table hash_table%nmax = 0 hash_table%nele = 0 DEALLOCATE (hash_table%table) END SUBROUTINE hash_table_release RECURSIVE SUBROUTINE hash_table_add(hash_table, c, p) !! add a pair (c,p) to the hash table TYPE(hash_table_type), INTENT(INOUT) :: hash_table INTEGER, INTENT(IN) :: c, p !! this value is being hashed !! this is being stored REAL(KIND=sp), PARAMETER :: hash_table_expand = 1.5_sp, & inv_hash_table_fill = 2.5_sp INTEGER :: i, j TYPE(ele_type), ALLOCATABLE, & DIMENSION(:) :: tmp_hash ! if too small, make a copy and rehash in a larger table IF (hash_table%nele*inv_hash_table_fill > hash_table%nmax) THEN ALLOCATE (tmp_hash(LBOUND(hash_table%table, 1):UBOUND(hash_table%table, 1))) tmp_hash(:) = hash_table%table CALL hash_table_release(hash_table) CALL hash_table_create(hash_table, INT((UBOUND(tmp_hash, 1) + 8)*hash_table_expand)) DO i = LBOUND(tmp_hash, 1), UBOUND(tmp_hash, 1) IF (tmp_hash(i)%c .NE. 0) THEN CALL hash_table_add(hash_table, tmp_hash(i)%c, tmp_hash(i)%p) END IF END DO DEALLOCATE (tmp_hash) END IF hash_table%nele = hash_table%nele + 1 i = IAND(c*hash_table%prime, hash_table%nmax) DO j = i, hash_table%nmax IF (hash_table%table(j)%c == 0 .OR. hash_table%table(j)%c == c) THEN hash_table%table(j)%c = c hash_table%table(j)%p = p RETURN END IF END DO DO j = 0, i - 1 IF (hash_table%table(j)%c == 0 .OR. hash_table%table(j)%c == c) THEN hash_table%table(j)%c = c hash_table%table(j)%p = p RETURN END IF END DO END SUBROUTINE hash_table_add ! ***************************************************************************** ! ************************************************************************************************** PURE FUNCTION hash_table_get(hash_table, c) RESULT(p) TYPE(hash_table_type), INTENT(IN) :: hash_table INTEGER, INTENT(IN) :: c INTEGER :: p INTEGER :: i, j i = IAND(c*hash_table%prime, hash_table%nmax) ! catch the likely case first IF (hash_table%table(i)%c == c) THEN p = hash_table%table(i)%p RETURN END IF DO j = i, hash_table%nmax IF (hash_table%table(j)%c == 0 .OR. hash_table%table(j)%c == c) THEN p = hash_table%table(j)%p RETURN END IF END DO DO j = 0, i - 1 IF (hash_table%table(j)%c == 0 .OR. hash_table%table(j)%c == c) THEN p = hash_table%table(j)%p RETURN END IF END DO ! we should never reach this point. p = HUGE(p) END FUNCTION hash_table_get ! End of hashtable ! ----------------------------------------------------------------------------- ================================================ FILE: src/utils/dbcsr_hash_table_types.f90 ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! TYPE ele_type !! Types needed for the hashtable. INTEGER :: c = 0 INTEGER :: p = 0 END TYPE ele_type TYPE hash_table_type TYPE(ele_type), DIMENSION(:), POINTER :: table INTEGER :: nele = 0 INTEGER :: nmax = 0 INTEGER :: prime = 0 END TYPE hash_table_type ================================================ FILE: src/utils/dbcsr_min_heap.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_min_heap USE dbcsr_kinds, ONLY: int_4 #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE PUBLIC :: dbcsr_heap_type, keyt, valt PUBLIC :: dbcsr_heap_pop, dbcsr_heap_reset_node, dbcsr_heap_fill PUBLIC :: dbcsr_heap_new, dbcsr_heap_release PUBLIC :: dbcsr_heap_get_first, dbcsr_heap_reset_first ! Sets the types INTEGER, PARAMETER :: keyt = int_4 INTEGER, PARAMETER :: valt = int_4 TYPE dbcsr_heap_node INTEGER(KIND=keyt) :: key = -1_keyt INTEGER(KIND=valt) :: value = -1_valt END TYPE dbcsr_heap_node TYPE dbcsr_heap_node_e TYPE(dbcsr_heap_node) :: node = dbcsr_heap_node() END TYPE dbcsr_heap_node_e TYPE dbcsr_heap_type INTEGER :: n = -1 INTEGER, DIMENSION(:), POINTER :: index => NULL() TYPE(dbcsr_heap_node_e), DIMENSION(:), POINTER :: nodes => NULL() END TYPE dbcsr_heap_type CONTAINS ! Lookup functions ELEMENTAL FUNCTION get_parent(n) RESULT(parent) INTEGER, INTENT(IN) :: n INTEGER :: parent parent = INT(n/2) END FUNCTION get_parent ELEMENTAL FUNCTION get_left_child(n) RESULT(child) INTEGER, INTENT(IN) :: n INTEGER :: child child = 2*n END FUNCTION get_left_child ELEMENTAL FUNCTION get_value(heap, n) RESULT(value) TYPE(dbcsr_heap_type), INTENT(IN) :: heap INTEGER, INTENT(IN) :: n INTEGER(KIND=valt) :: value value = heap%nodes(n)%node%value END FUNCTION get_value ! Initialization functions SUBROUTINE dbcsr_heap_new(heap, n) TYPE(dbcsr_heap_type), INTENT(OUT) :: heap INTEGER, INTENT(IN) :: n heap%n = n ALLOCATE (heap%index(n)) ALLOCATE (heap%nodes(n)) END SUBROUTINE dbcsr_heap_new SUBROUTINE dbcsr_heap_release(heap) TYPE(dbcsr_heap_type), INTENT(INOUT) :: heap DEALLOCATE (heap%index) DEALLOCATE (heap%nodes) heap%n = 0 END SUBROUTINE dbcsr_heap_release SUBROUTINE dbcsr_heap_fill(heap, values) !! Fill heap with given values TYPE(dbcsr_heap_type), INTENT(INOUT) :: heap INTEGER(KIND=valt), DIMENSION(:), INTENT(IN) :: values INTEGER :: first, i, n n = SIZE(values) DBCSR_ASSERT(heap%n >= n) DO i = 1, n heap%index(i) = i heap%nodes(i)%node%key = i heap%nodes(i)%node%value = values(i) END DO ! Sort from the last full subtree first = get_parent(n) DO i = first, 1, -1 CALL bubble_down(heap, i) END DO END SUBROUTINE dbcsr_heap_fill SUBROUTINE dbcsr_heap_get_first(heap, key, value, found) !! Returns the first heap element without removing it. TYPE(dbcsr_heap_type), INTENT(INOUT) :: heap INTEGER(KIND=keyt), INTENT(OUT) :: key INTEGER(KIND=valt), INTENT(OUT) :: value LOGICAL, INTENT(OUT) :: found IF (heap%n .LT. 1) THEN found = .FALSE. ELSE found = .TRUE. key = heap%nodes(1)%node%key value = heap%nodes(1)%node%value END IF END SUBROUTINE dbcsr_heap_get_first SUBROUTINE dbcsr_heap_pop(heap, key, value, found) !! Returns and removes the first heap element and rebalances !! the heap. TYPE(dbcsr_heap_type), INTENT(INOUT) :: heap INTEGER(KIND=keyt), INTENT(OUT) :: key INTEGER(KIND=valt), INTENT(OUT) :: value LOGICAL, INTENT(OUT) :: found ! CALL dbcsr_heap_get_first(heap, key, value, found) IF (found) THEN IF (heap%n .GT. 1) THEN CALL dbcsr_heap_copy_node(heap, 1, heap%n) heap%n = heap%n - 1 CALL bubble_down(heap, 1) ELSE heap%n = heap%n - 1 END IF END IF END SUBROUTINE dbcsr_heap_pop SUBROUTINE dbcsr_heap_reset_node(heap, key, value) !! Changes the value of the heap element with given key and !! rebalances the heap. TYPE(dbcsr_heap_type), INTENT(INOUT) :: heap INTEGER(KIND=keyt), INTENT(IN) :: key INTEGER(KIND=valt), INTENT(IN) :: value INTEGER :: n, new_pos DBCSR_ASSERT(heap%n > 0) n = heap%index(key) DBCSR_ASSERT(heap%nodes(n)%node%key == key) heap%nodes(n)%node%value = value CALL bubble_up(heap, n, new_pos) CALL bubble_down(heap, new_pos) END SUBROUTINE dbcsr_heap_reset_node SUBROUTINE dbcsr_heap_reset_first(heap, value) !! Changes the value of the minimum heap element and rebalances the heap. TYPE(dbcsr_heap_type), INTENT(INOUT) :: heap INTEGER(KIND=valt), INTENT(IN) :: value DBCSR_ASSERT(heap%n > 0) heap%nodes(1)%node%value = value CALL bubble_down(heap, 1) END SUBROUTINE dbcsr_heap_reset_first PURE SUBROUTINE dbcsr_heap_swap(heap, e1, e2) TYPE(dbcsr_heap_type), INTENT(INOUT) :: heap INTEGER, INTENT(IN) :: e1, e2 INTEGER(KIND=keyt) :: key1, key2 TYPE(dbcsr_heap_node) :: tmp_node key1 = heap%nodes(e1)%node%key key2 = heap%nodes(e2)%node%key tmp_node = heap%nodes(e1)%node heap%nodes(e1)%node = heap%nodes(e2)%node heap%nodes(e2)%node = tmp_node heap%index(key1) = e2 heap%index(key2) = e1 END SUBROUTINE dbcsr_heap_swap PURE SUBROUTINE dbcsr_heap_copy_node(heap, e1, e2) !! Sets node e1 to e2 TYPE(dbcsr_heap_type), INTENT(INOUT) :: heap INTEGER, INTENT(IN) :: e1, e2 INTEGER(KIND=keyt) :: key1, key2 key1 = heap%nodes(e1)%node%key key2 = heap%nodes(e2)%node%key heap%nodes(e1)%node = heap%nodes(e2)%node heap%index(key1) = 0 heap%index(key2) = e1 END SUBROUTINE dbcsr_heap_copy_node SUBROUTINE bubble_down(heap, first) !! Balances a heap by bubbling down from the given element. TYPE(dbcsr_heap_type), INTENT(INOUT) :: heap INTEGER, INTENT(IN) :: first INTEGER :: e, left_child, right_child, smallest INTEGER(kind=valt) :: left_child_value, min_value, & right_child_value LOGICAL :: all_done ! DBCSR_ASSERT(0 < first .AND. first <= heap%n) e = first all_done = .FALSE. ! Check whether we are finished, i.e,. whether the element to ! bubble down is childless. DO WHILE (e .LE. get_parent(heap%n) .AND. .NOT. all_done) ! Determines which node (current, left, or right child) has the ! smallest value. smallest = e min_value = get_value(heap, e) left_child = get_left_child(e) IF (left_child .LE. heap%n) THEN left_child_value = get_value(heap, left_child) IF (left_child_value .LT. min_value) THEN min_value = left_child_value smallest = left_child END IF END IF right_child = left_child + 1 IF (right_child .LE. heap%n) THEN right_child_value = get_value(heap, right_child) IF (right_child_value .LT. min_value) THEN min_value = right_child_value smallest = right_child END IF END IF ! CALL dbcsr_heap_swap(heap, e, smallest) IF (smallest .EQ. e) THEN all_done = .TRUE. ELSE e = smallest END IF END DO END SUBROUTINE bubble_down SUBROUTINE bubble_up(heap, first, new_pos) !! Balances a heap by bubbling up from the given element. TYPE(dbcsr_heap_type), INTENT(INOUT) :: heap INTEGER, INTENT(IN) :: first INTEGER, INTENT(OUT) :: new_pos INTEGER :: e, parent INTEGER(kind=valt) :: my_value, parent_value LOGICAL :: all_done DBCSR_ASSERT(0 < first .AND. first <= heap%n) e = first all_done = .FALSE. IF (e .GT. 1) THEN my_value = get_value(heap, e) END IF ! Check whether we are finished, i.e,. whether the element to ! bubble up is an orphan. new_pos = e DO WHILE (e .GT. 1 .AND. .NOT. all_done) ! Switches the parent and the current element if the current ! element's value is greater than the parent's value. parent = get_parent(e) parent_value = get_value(heap, parent) IF (my_value .LT. parent_value) THEN CALL dbcsr_heap_swap(heap, e, parent) e = parent ELSE all_done = .TRUE. END IF END DO new_pos = e END SUBROUTINE bubble_up END MODULE dbcsr_min_heap ================================================ FILE: src/utils/dbcsr_string_utilities.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_string_utilities !! Utilities for string manipulations USE dbcsr_kinds, ONLY: default_blank_character IMPLICIT NONE PRIVATE PUBLIC :: compress, & stringify, & uppercase, & str2int INTERFACE stringify MODULE PROCEDURE integer_to_string END INTERFACE CONTAINS SUBROUTINE compress(string, full) !! Eliminate multiple space characters in a string. !! If full is .TRUE., then all spaces are eliminated. CHARACTER(LEN=*), INTENT(INOUT) :: string LOGICAL, INTENT(IN), OPTIONAL :: full CHARACTER :: tmp INTEGER :: i, z LOGICAL :: remove_all IF (PRESENT(full)) THEN remove_all = full ELSE remove_all = .FALSE. END IF z = 1 DO i = 1, LEN_TRIM(string) IF ((z == 1) .OR. remove_all) THEN IF (string(i:i) /= " ") THEN tmp = string(i:i) string(z:z) = tmp z = z + 1 END IF ELSE IF ((string(i:i) /= " ") .OR. (string(z - 1:z - 1) /= " ")) THEN tmp = string(i:i) string(z:z) = tmp z = z + 1 END IF END IF END DO string(z:) = "" END SUBROUTINE compress FUNCTION integer_to_string(inumber) RESULT(string) !! Converts an integer number to a string. !! The WRITE statement will return an error message, if the number of !! digits of the integer number is larger the than the length of the !! supplied string. INTEGER, INTENT(IN) :: inumber CHARACTER(:), ALLOCATABLE :: string CHARACTER(RANGE(inumber) + 2) :: tmp WRITE (UNIT=tmp, FMT='(I0)') inumber string = TRIM(tmp) END FUNCTION integer_to_string SUBROUTINE uppercase(string) !! Convert all lower case characters in a string to upper case. CHARACTER(LEN=*), INTENT(INOUT) :: string INTEGER :: i, iascii DO i = 1, LEN_TRIM(string) iascii = ICHAR(string(i:i)) IF ((iascii >= 97) .AND. (iascii <= 122)) THEN string(i:i) = CHAR(iascii - 32) END IF END DO END SUBROUTINE uppercase ELEMENTAL SUBROUTINE str2int(str, int, stat) !! Convert a string to integer CHARACTER(LEN=*), INTENT(in) :: str INTEGER, INTENT(OUT) :: int, stat read (str, *, iostat=stat) int END SUBROUTINE str2int END MODULE dbcsr_string_utilities ================================================ FILE: src/utils/dbcsr_toollib.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_toollib !! Tools usually found in a standard library. USE dbcsr_array_sort, ONLY: dbcsr_1d_d_sort, & dbcsr_1d_i4_sort, & dbcsr_1d_i8_sort, & dbcsr_1d_s_sort USE dbcsr_kinds, ONLY: int_4, & int_8, & real_8 #include "base/dbcsr_base_uses.f90" IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_toollib' ! Block sizes and arrays PUBLIC :: dbcsr_unpack_i8_2i4, make_coordinate_tuple PUBLIC :: swap ! math routines PUBLIC :: gcd, lcm ! utility routines PUBLIC :: sort, joaat_hash PUBLIC :: ordered_search PUBLIC :: atoi, atol, ator INTERFACE swap MODULE PROCEDURE iswap, bswap END INTERFACE INTERFACE sort MODULE PROCEDURE dbcsr_1d_i4_sort, dbcsr_1d_i8_sort MODULE PROCEDURE dbcsr_1d_s_sort, dbcsr_1d_d_sort END INTERFACE CONTAINS ELEMENTAL FUNCTION make_coordinate_tuple(most, least) RESULT(tuple) INTEGER, INTENT(IN) :: most, least INTEGER(KIND=int_8) :: tuple !tuple = IOR (ISHFT (most, 32), least) tuple = most tuple = IOR(ISHFT(tuple, 32), INT(least, int_8)) END FUNCTION make_coordinate_tuple ELEMENTAL SUBROUTINE iswap(a, b) !! Swaps two integers INTEGER, INTENT(INOUT) :: a, b !! Integers to swap !! Integers to swap INTEGER :: tmp tmp = a a = b b = tmp END SUBROUTINE iswap ELEMENTAL SUBROUTINE bswap(a, b) !! Swaps two logicals LOGICAL, INTENT(INOUT) :: a, b !! Logicals to swap !! Logicals to swap LOGICAL :: tmp tmp = a a = b b = tmp END SUBROUTINE bswap SUBROUTINE dbcsr_unpack_i8_2i4(merged, array_upper, array_lower) !! Splits an array of int8 values into two int4 arrays. INTEGER(KIND=int_8), DIMENSION(:), INTENT(IN) :: merged !! array of merged values INTEGER(KIND=int_4), DIMENSION(:), INTENT(OUT) :: array_upper, array_lower !! array to fill with the upper bytes of the merged values !! array to fill with the lower bytes of the merged values INTEGER(KIND=int_8), PARAMETER :: lmask8 = 4294967295_int_8 INTEGER :: i ! ! --------------------------------------------------------------------------- ! Lmask is used to filter in the lower 4 bytes and so its lower 32 bits are ! set to 1: lmask8 = 2^32-1. ! Umask is used to filter in the higher 4 bytes and so its higher 32 bits ! are set to 1: umask8 = 2^32-1 << 32 !lmask8 = 4294967295 ! 2^32-1 !umask8 = 18446744069414584320 ! (2^32-1) * 2^32 = (2^64-1)-(2^32-1) DO i = 1, SIZE(merged) array_upper(i) = INT(ISHFT(merged(i), -32), KIND=int_4) array_lower(i) = INT(IAND(merged(i), lmask8), KIND=int_4) END DO END SUBROUTINE dbcsr_unpack_i8_2i4 ELEMENTAL FUNCTION gcd(a, b) INTEGER, INTENT(IN) :: a, b INTEGER :: gcd INTEGER :: aa, ab, l, rem, s aa = ABS(a) ab = ABS(b) IF (aa < ab) THEN s = aa l = ab ELSE s = ab l = aa END IF IF (s .NE. 0) THEN DO rem = MOD(l, s) IF (rem == 0) EXIT l = s s = rem END DO GCD = s ELSE GCD = l END IF END FUNCTION gcd ELEMENTAL FUNCTION lcm(a, b) INTEGER, INTENT(IN) :: a, b INTEGER :: lcm INTEGER :: tmp tmp = gcd(a, b) IF (tmp == 0) THEN lcm = 0 ELSE ! could still overflow if the true lcm is larger than maxint lcm = ABS((a/tmp)*b) END IF END FUNCTION lcm FUNCTION joaat_hash(key) RESULT(hash_index) !! generates the hash of a string and the index in the table !! @note !! http://en.wikipedia.org/wiki/Hash_table !! http://www.burtleburtle.net/bob/hash/doobs.html !! However, since fortran doesn't have an unsigned 4 byte int !! we compute it using an integer with the appropriate range !! we return already the index in the table as a final result ! LIBXSMM: at least v1.9.0-6 is required #if defined(__LIBXSMM) && TO_VERSION(1, 10) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) USE libxsmm, ONLY: libxsmm_hash INTEGER, PARAMETER :: seed = 0 INTEGER, DIMENSION(:), INTENT(IN) :: key !! a string of any length INTEGER :: hash_index hash_index = libxsmm_hash(key, seed) #else INTEGER, DIMENSION(:), INTENT(IN) :: key INTEGER :: hash_index INTEGER(KIND=int_8), PARAMETER :: b32 = 2_int_8**32 - 1_int_8 INTEGER :: i, j INTEGER(KIND=int_8) :: byte, hash hash = 0_int_8 DO i = 1, SIZE(key) DO j = 0, 3 byte = IAND(ISHFT(key(i), -j*8), 255) hash = IAND(hash + byte, b32) hash = IAND(hash + IAND(ISHFT(hash, 10), b32), b32) hash = IAND(IEOR(hash, IAND(ISHFT(hash, -6), b32)), b32) END DO END DO hash = IAND(hash + IAND(ISHFT(hash, 3), b32), b32) hash = IAND(IEOR(hash, IAND(ISHFT(hash, -11), b32)), b32) hash = IAND(hash + IAND(ISHFT(hash, 15), b32), b32) ! In fortran 4-byte-integers have only 31 bits because they are signed ! In fortran the rightmost (least significant) bit is in position 0 hash_index = INT(IBCLR(hash, 31)) #endif END FUNCTION joaat_hash PURE SUBROUTINE ordered_search(array, key, loc, found, lb, ub) !! search a value in an ordered array of indices INTEGER, DIMENSION(:), INTENT(IN) :: array INTEGER, INTENT(IN) :: key INTEGER, INTENT(OUT) :: loc LOGICAL, INTENT(OUT) :: found INTEGER, INTENT(IN), OPTIONAL :: lb, ub INTEGER :: high, low, val found = .FALSE. IF (PRESENT(lb)) THEN low = lb ELSE low = LBOUND(array, 1) END IF IF (PRESENT(ub)) THEN high = ub ELSE high = UBOUND(array, 1) END IF loc = (low + high)/2 DO WHILE (loc .GE. low .AND. loc .LE. high) val = array(loc) IF (val .EQ. key) THEN found = .TRUE. EXIT ELSEIF (val .LT. key) THEN low = loc + 1 ELSE high = loc - 1 END IF loc = (low + high)/2 END DO END SUBROUTINE ordered_search FUNCTION atoi(a) CHARACTER(len=*), INTENT(in) :: a INTEGER :: atoi READ (a, '(I9)') atoi END FUNCTION atoi FUNCTION atol(a) CHARACTER(len=*), INTENT(in) :: a LOGICAL :: atol READ (a, '(L1)') atol END FUNCTION atol FUNCTION ator(a) CHARACTER(len=*), INTENT(in) :: a REAL(real_8) :: ator READ (a, '(E26.15)') ator END FUNCTION ator END MODULE dbcsr_toollib ================================================ FILE: src/work/PACKAGE ================================================ { "description": "DBCSR block level routines", "archive": "libdbcsr", "requires": ["../base", "../dist", "../utils", "../core", "../data", "../block"], } ================================================ FILE: src/work/dbcsr_work_operations.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_work_operations !! DBCSR work matrix utilities USE dbcsr_array_types, ONLY: array_data, & array_hold, & array_i1d_obj, & array_new, & array_nullify, & array_release, & array_size USE dbcsr_btree, ONLY: btree_data_cp2d, & btree_data_dp2d, & btree_data_sp2d, & btree_data_zp2d USE dbcsr_block_operations, ONLY: block_copy_c, & block_copy_d, & block_copy_s, & block_copy_z, & dbcsr_data_copy, & dbcsr_data_set USE dbcsr_config, ONLY: default_resize_factor USE dbcsr_data_methods, ONLY: & dbcsr_data_clear_pointer, dbcsr_data_ensure_size, dbcsr_data_get_memory_type, & dbcsr_data_get_size, dbcsr_data_get_size_referenced, dbcsr_data_get_type, dbcsr_data_hold, & dbcsr_data_init, dbcsr_data_new, dbcsr_data_release, dbcsr_data_set_size_referenced, & dbcsr_data_valid, dbcsr_get_data_p_c, dbcsr_get_data_p_d, dbcsr_get_data_p_s, & dbcsr_get_data_p_z USE dbcsr_data_operations, ONLY: dbcsr_data_copyall, & dbcsr_sort_data, & dbcsr_switch_data_area USE dbcsr_dist_methods, ONLY: dbcsr_distribution_has_threads, & dbcsr_distribution_hold, & dbcsr_distribution_make_threads, & dbcsr_distribution_ncols, & dbcsr_distribution_nrows, & dbcsr_distribution_release USE dbcsr_index_operations, ONLY: dbcsr_addto_index_array, & dbcsr_build_row_index, & dbcsr_clearfrom_index_array, & dbcsr_index_prune_deleted, & dbcsr_make_dbcsr_index, & dbcsr_make_index_exist, & dbcsr_repoint_index, & dbcsr_sort_indices USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left, & dbcsr_iterator_next_block, & dbcsr_iterator_start, & dbcsr_iterator_stop USE dbcsr_mem_methods, ONLY: dbcsr_memtype_equal USE dbcsr_methods, ONLY: & dbcsr_col_block_sizes, dbcsr_distribution, dbcsr_get_data_memory_type, & dbcsr_get_data_size_used, dbcsr_get_data_type, dbcsr_get_index_memory_type, & dbcsr_get_matrix_type, dbcsr_get_replication_type, dbcsr_matrix_counter, & dbcsr_max_col_size, dbcsr_max_row_size, dbcsr_mutable_destroy, dbcsr_mutable_init, & dbcsr_mutable_instantiated, dbcsr_mutable_new, dbcsr_mutable_release, dbcsr_name, & dbcsr_row_block_sizes, dbcsr_use_mutable, dbcsr_valid_index, dbcsr_wm_use_mutable USE dbcsr_ptr_util, ONLY: ensure_array_size USE dbcsr_toollib, ONLY: dbcsr_unpack_i8_2i4, & sort USE dbcsr_string_utilities, ONLY: uppercase USE dbcsr_types, ONLY: & dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_iterator, dbcsr_memtype_default, & dbcsr_memtype_type, dbcsr_meta_size, dbcsr_num_slots, dbcsr_repl_col, dbcsr_repl_full, & dbcsr_repl_none, dbcsr_repl_row, dbcsr_slot_blk_p, dbcsr_slot_col_i, dbcsr_slot_home_coli, & dbcsr_slot_home_pcol, dbcsr_slot_home_prow, dbcsr_slot_home_rowi, dbcsr_slot_home_vpcol, & dbcsr_slot_home_vprow, dbcsr_slot_nblkcols_local, dbcsr_slot_nblkcols_total, & dbcsr_slot_nblkrows_local, dbcsr_slot_nblkrows_total, dbcsr_slot_nblks, & dbcsr_slot_nfullcols_local, dbcsr_slot_nfullcols_total, dbcsr_slot_nfullrows_local, & dbcsr_slot_nfullrows_total, dbcsr_slot_nze, dbcsr_slot_row_p, dbcsr_slot_size, dbcsr_type, & dbcsr_type_antihermitian, dbcsr_type_antisymmetric, dbcsr_type_complex_4, & dbcsr_type_complex_8, dbcsr_type_hermitian, dbcsr_type_no_symmetry, dbcsr_type_real_4, & dbcsr_type_real_8, dbcsr_type_real_default, dbcsr_type_symmetric, dbcsr_work_type USE dbcsr_dist_util, ONLY: convert_sizes_to_offsets, & dbcsr_calc_block_sizes, & dbcsr_verify_matrix, & meta_from_dist USE dbcsr_kinds, ONLY: default_string_length, & int_8, & real_4, & real_8 #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_max_threads, omp_get_thread_num, omp_get_num_threads, omp_in_parallel IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_work_operations' LOGICAL, PARAMETER :: careful_mod = .FALSE. PUBLIC :: dbcsr_create, dbcsr_work_create, dbcsr_finalize, dbcsr_special_finalize PUBLIC :: dbcsr_add_wm_from_matrix, & add_work_coordinate PUBLIC :: dbcsr_work_destroy INTERFACE dbcsr_create MODULE PROCEDURE dbcsr_create_new, dbcsr_create_template END INTERFACE TYPE i_array_p INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: p => NULL() END TYPE i_array_p CONTAINS SUBROUTINE dbcsr_create_new(matrix, name, dist, matrix_type, & row_blk_size, col_blk_size, row_blk_size_obj, col_blk_size_obj, & nze, data_type, data_buffer, & data_memory_type, index_memory_type, & max_rbs, max_cbs, & row_blk_offset, col_blk_offset, & thread_dist, & reuse, reuse_arrays, mutable_work, make_index, replication_type) !! Creates a matrix, allocating the essentials. !! !! The matrix itself is allocated, as well as the essential parts of !! the index. When passed the nze argument, the data is also allocated !! to that size. !! see dbcsr_types.F TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! new matrix CHARACTER(len=*), INTENT(IN) :: name TYPE(dbcsr_distribution_obj), INTENT(IN) :: dist !! distribution_2d distribution CHARACTER, INTENT(IN) :: matrix_type !! 'N' for normal, 'T' for transposed, 'S' for symmetric, and 'A' for antisymmetric INTEGER, DIMENSION(:), INTENT(INOUT), POINTER, & CONTIGUOUS, OPTIONAL :: row_blk_size, col_blk_size TYPE(array_i1d_obj), INTENT(IN), OPTIONAL :: row_blk_size_obj, col_blk_size_obj INTEGER, INTENT(IN), OPTIONAL :: nze, data_type !! number of elements !! type of data from 'rRcC' for single/double precision real/complex, default is 'R' TYPE(dbcsr_data_obj), INTENT(IN), OPTIONAL :: data_buffer TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL :: data_memory_type, index_memory_type !! allocate indices and data using special memory !! allocate indices using special memory INTEGER, INTENT(IN), OPTIONAL :: max_rbs, max_cbs TYPE(array_i1d_obj), INTENT(IN), OPTIONAL :: row_blk_offset, col_blk_offset TYPE(dbcsr_distribution_obj), INTENT(IN), OPTIONAL :: thread_dist LOGICAL, INTENT(IN), OPTIONAL :: reuse, reuse_arrays, mutable_work, & make_index !! reuses an existing matrix, default is to create a fresh one !! uses the mutable data for working and not the append-only data; default is append-only CHARACTER, INTENT(IN), OPTIONAL :: replication_type !! replication to be used for this matrix; default is dbcsr_repl_none CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_create_new' CHARACTER :: matrix_type_l INTEGER :: handle, my_nze INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: vec_col_blk_offset, vec_row_blk_offset INTEGER, DIMENSION(dbcsr_meta_size) :: new_meta LOGICAL :: hijack, my_make_index ! --------------------------------------------------------------------------- MARK_USED(thread_dist) ! only used with OMP CALL timeset(routineN, handle) ! Reuse matrix only if has actually been allocated. hijack = ASSOCIATED(matrix%index) IF (PRESENT(reuse)) hijack = reuse my_make_index = .TRUE. IF (PRESENT(make_index)) my_make_index = make_index IF (.NOT. hijack) THEN matrix = dbcsr_type() matrix%refcount = 1 END IF !$OMP CRITICAL (crit_counter) matrix%serial_number = dbcsr_matrix_counter dbcsr_matrix_counter = dbcsr_matrix_counter + 1 !$OMP END CRITICAL (crit_counter) ! Mark matrix index as having an invalid index. matrix%valid = .FALSE. matrix%name = name ! Sets the type of matrix building/modifying work structures. IF (PRESENT(mutable_work)) THEN matrix%work_mutable = mutable_work ELSE matrix%work_mutable = .FALSE. END IF ! Sets the correct data type. IF (PRESENT(data_type)) THEN SELECT CASE (data_type) CASE (dbcsr_type_real_4) matrix%data_type = dbcsr_type_real_4 CASE (dbcsr_type_real_8) matrix%data_type = dbcsr_type_real_8 CASE (dbcsr_type_complex_4) matrix%data_type = dbcsr_type_complex_4 CASE (dbcsr_type_complex_8) matrix%data_type = dbcsr_type_complex_8 CASE DEFAULT DBCSR_ABORT("Invalid matrix type") END SELECT ELSE matrix%data_type = dbcsr_type_real_default END IF matrix%data_memory_type = dbcsr_memtype_default IF (PRESENT(data_memory_type)) & matrix%data_memory_type = data_memory_type matrix%index_memory_type = dbcsr_memtype_default IF (PRESENT(index_memory_type)) & matrix%index_memory_type = index_memory_type IF (hijack) THEN ! Release/deallocate elements that are replaced or not needed ! by the new matrix. This is similar to what dbcsr_destroy ! does, except that it keeps the index and data. CALL array_release(matrix%row_blk_size) CALL array_release(matrix%col_blk_size) CALL array_release(matrix%row_blk_offset) CALL array_release(matrix%col_blk_offset) IF (matrix%has_local_rows) & CALL array_release(matrix%local_rows) IF (matrix%has_global_rows) & CALL array_release(matrix%global_rows) IF (matrix%has_local_cols) & CALL array_release(matrix%local_cols) IF (matrix%has_global_cols) & CALL array_release(matrix%global_cols) CALL dbcsr_distribution_release(matrix%dist) IF (ASSOCIATED(matrix%wms)) THEN CALL dbcsr_work_destroy_all(matrix) END IF CALL array_nullify(matrix%local_rows) CALL array_nullify(matrix%global_rows) CALL array_nullify(matrix%local_cols) CALL array_nullify(matrix%global_cols) ! IF (matrix%data_type /= matrix%data_area%d%data_type) & DBCSR_ABORT("Inconsistent data type for the existing buffer.") CALL dbcsr_data_set_size_referenced(matrix%data_area, 0) ELSE ! Invalidate index NULLIFY (matrix%index) ! Invalidate data IF (PRESENT(data_buffer)) THEN IF (.NOT. dbcsr_data_valid(data_buffer)) & DBCSR_ABORT("Input data buffer not valid.") IF (matrix%data_type /= data_buffer%d%data_type) & DBCSR_ABORT("Input buffer data type different by matrix data type.") matrix%data_memory_type = data_buffer%d%memory_type matrix%data_area = data_buffer CALL dbcsr_data_hold(matrix%data_area) ELSE CALL dbcsr_data_init(matrix%data_area) END IF END IF ! These are always invalidated. NULLIFY (matrix%row_p, matrix%col_i, matrix%blk_p, matrix%thr_c, & matrix%coo_l) IF (PRESENT(row_blk_size_obj)) THEN matrix%row_blk_size = row_blk_size_obj CALL array_hold(matrix%row_blk_size) ELSEIF (PRESENT(row_blk_size)) THEN CALL array_new(matrix%row_blk_size, row_blk_size, gift=reuse_arrays) ELSE DBCSR_ABORT("Missing row_blk_size") END IF IF (PRESENT(max_rbs)) THEN matrix%max_rbs = max_rbs ELSE IF (array_size(matrix%row_blk_size) .GT. 0) THEN matrix%max_rbs = MAXVAL(array_data(matrix%row_blk_size)) ELSE matrix%max_rbs = 0 END IF IF (PRESENT(col_blk_size_obj)) THEN matrix%col_blk_size = col_blk_size_obj CALL array_hold(matrix%col_blk_size) ELSEIF (PRESENT(col_blk_size)) THEN CALL array_new(matrix%col_blk_size, col_blk_size, gift=reuse_arrays) ELSE DBCSR_ABORT("Missing col_blk_size") END IF IF (PRESENT(max_cbs)) THEN matrix%max_cbs = max_cbs ELSE IF (array_size(matrix%col_blk_size) .GT. 0) THEN matrix%max_cbs = MAXVAL(array_data(matrix%col_blk_size)) ELSE matrix%max_cbs = 0 END IF ! IF (array_size(matrix%row_blk_size) /= dbcsr_distribution_nrows(dist)) & DBCSR_ABORT("Number of blocked rows does match blocked row distribution.") IF (array_size(matrix%col_blk_size) /= dbcsr_distribution_ncols(dist)) & DBCSR_ABORT("Number of blocked columns does match blocked column distribution.") ! initialize row/col offsets IF (PRESENT(row_blk_offset)) THEN IF (dbcsr_distribution_nrows(dist) + 1 /= array_size(row_blk_offset)) & CALL dbcsr_abort(__LOCATION__, & "Number of blocked offset rows does match blocked row distribution.") matrix%row_blk_offset = row_blk_offset CALL array_hold(matrix%row_blk_offset) ELSE ALLOCATE (vec_row_blk_offset(array_size(matrix%row_blk_size) + 1)) CALL convert_sizes_to_offsets(array_data(matrix%row_blk_size), vec_row_blk_offset) CALL array_new(matrix%row_blk_offset, vec_row_blk_offset, gift=.TRUE.) END IF IF (PRESENT(col_blk_offset)) THEN IF (dbcsr_distribution_ncols(dist) + 1 /= array_size(col_blk_offset)) & CALL dbcsr_abort(__LOCATION__, & "Number of blocked offset columns does match blocked column distribution.") matrix%col_blk_offset = col_blk_offset CALL array_hold(matrix%col_blk_offset) ELSE ALLOCATE (vec_col_blk_offset(array_size(matrix%col_blk_size) + 1)) CALL convert_sizes_to_offsets(array_data(matrix%col_blk_size), vec_col_blk_offset) CALL array_new(matrix%col_blk_offset, vec_col_blk_offset, gift=.TRUE.) END IF matrix%dist = dist CALL dbcsr_distribution_hold(matrix%dist) !$ IF (.NOT. dbcsr_distribution_has_threads(matrix%dist) .AND. PRESENT(thread_dist)) THEN !$ IF (dbcsr_distribution_has_threads(thread_dist)) THEN !$ matrix%dist%d%num_threads = thread_dist%d%num_threads !$ matrix%dist%d%has_thread_dist = .TRUE. !$ matrix%dist%d%thread_dist = thread_dist%d%thread_dist !$ CALL array_hold(matrix%dist%d%thread_dist) !$ END IF !$ END IF !$ IF (.NOT. dbcsr_distribution_has_threads(matrix%dist)) THEN !$ CALL dbcsr_distribution_make_threads(matrix%dist, & !$ array_data(matrix%row_blk_size)) !$ END IF ! Set up some data. IF (my_make_index) THEN CALL meta_from_dist(new_meta, dist, array_data(matrix%row_blk_size), & array_data(matrix%col_blk_size)) matrix%nblkrows_total = new_meta(dbcsr_slot_nblkrows_total) matrix%nblkcols_total = new_meta(dbcsr_slot_nblkcols_total) matrix%nfullrows_total = new_meta(dbcsr_slot_nfullrows_total) matrix%nfullcols_total = new_meta(dbcsr_slot_nfullcols_total) matrix%nblkrows_local = new_meta(dbcsr_slot_nblkrows_local) matrix%nblkcols_local = new_meta(dbcsr_slot_nblkcols_local) matrix%nfullrows_local = new_meta(dbcsr_slot_nfullrows_local) matrix%nfullcols_local = new_meta(dbcsr_slot_nfullcols_local) END IF my_nze = 0; IF (PRESENT(nze)) my_nze = nze matrix%nblks = 0 matrix%nze = 0 IF (PRESENT(replication_type)) THEN IF (replication_type .NE. dbcsr_repl_none & .AND. replication_type .NE. dbcsr_repl_full & .AND. replication_type .NE. dbcsr_repl_row & .AND. replication_type .NE. dbcsr_repl_col) & DBCSR_ABORT("Invalid replication type '"//replication_type//"'") IF (replication_type .EQ. dbcsr_repl_row .OR. replication_type .EQ. dbcsr_repl_col) & DBCSR_WARN("Row and column replication not fully supported") matrix%replication_type = replication_type ELSE matrix%replication_type = dbcsr_repl_none END IF ! ! Setup a matrix from scratch IF (.NOT. hijack) THEN IF (.NOT. PRESENT(data_buffer)) THEN CALL dbcsr_data_new(matrix%data_area, matrix%data_type, my_nze, & memory_type=matrix%data_memory_type) CALL dbcsr_data_set_size_referenced(matrix%data_area, 0) END IF ! IF (my_make_index) THEN NULLIFY (matrix%index) CALL ensure_array_size(matrix%index, lb=1, ub=dbcsr_num_slots, & zero_pad=.TRUE., memory_type=matrix%index_memory_type) END IF END IF IF (my_make_index) THEN IF (LBOUND(matrix%index, 1) .GT. 1 & .OR. UBOUND(matrix%index, 1) .LT. dbcsr_num_slots) & DBCSR_ABORT("Index is not large enough") matrix%index(1:dbcsr_num_slots) = 0 matrix%index(1:dbcsr_meta_size) = new_meta(1:dbcsr_meta_size) matrix%index(dbcsr_slot_size) = dbcsr_num_slots END IF ! matrix%symmetry = .FALSE. matrix%negate_real = .FALSE. matrix%negate_imaginary = .FALSE. !matrix%transpose = .FALSE. matrix_type_l = matrix_type CALL uppercase(matrix_type_l) SELECT CASE (matrix_type_l) CASE (dbcsr_type_no_symmetry) CASE (dbcsr_type_symmetric) matrix%symmetry = .TRUE. CASE (dbcsr_type_antisymmetric) matrix%symmetry = .TRUE. matrix%negate_real = .TRUE. matrix%negate_imaginary = .TRUE. CASE (dbcsr_type_hermitian) matrix%symmetry = .TRUE. matrix%negate_imaginary = .TRUE. CASE (dbcsr_type_antihermitian) matrix%symmetry = .TRUE. matrix%negate_real = .TRUE. CASE DEFAULT DBCSR_ABORT("Invalid matrix type.") END SELECT matrix%bcsc = .FALSE. matrix%local_indexing = .FALSE. matrix%list_indexing = .FALSE. CALL array_nullify(matrix%local_rows) CALL array_nullify(matrix%global_rows) CALL array_nullify(matrix%local_cols) CALL array_nullify(matrix%global_cols) matrix%has_local_rows = .FALSE. matrix%has_global_rows = .FALSE. matrix%has_local_cols = .FALSE. matrix%has_global_cols = .FALSE. IF (my_make_index) THEN CALL dbcsr_make_index_exist(matrix) END IF matrix%valid = .TRUE. CALL timestop(handle) END SUBROUTINE dbcsr_create_new SUBROUTINE dbcsr_create_template(matrix, template, name, dist, matrix_type, & row_blk_size, col_blk_size, row_blk_size_obj, col_blk_size_obj, & nze, data_type, & data_buffer, data_memory_type, index_memory_type, & max_rbs, max_cbs, & row_blk_offset, col_blk_offset, & reuse_arrays, mutable_work, make_index, replication_type) TYPE(dbcsr_type), INTENT(INOUT) :: matrix TYPE(dbcsr_type), INTENT(IN) :: template CHARACTER(len=*), INTENT(IN), OPTIONAL :: name TYPE(dbcsr_distribution_obj), INTENT(IN), OPTIONAL :: dist CHARACTER, INTENT(IN), OPTIONAL :: matrix_type INTEGER, DIMENSION(:), INTENT(INOUT), OPTIONAL, & POINTER, CONTIGUOUS :: row_blk_size, col_blk_size TYPE(array_i1d_obj), INTENT(IN), OPTIONAL :: row_blk_size_obj, col_blk_size_obj INTEGER, INTENT(IN), OPTIONAL :: nze, data_type TYPE(dbcsr_data_obj), INTENT(IN), OPTIONAL :: data_buffer TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL :: data_memory_type, index_memory_type INTEGER, INTENT(IN), OPTIONAL :: max_rbs, max_cbs TYPE(array_i1d_obj), INTENT(IN), OPTIONAL :: row_blk_offset, col_blk_offset LOGICAL, INTENT(IN), OPTIONAL :: reuse_arrays, mutable_work, make_index CHARACTER, INTENT(IN), OPTIONAL :: replication_type CHARACTER :: new_matrix_type, new_replication_type CHARACTER(len=default_string_length) :: new_name INTEGER :: new_data_type, new_max_cbs, new_max_rbs LOGICAL :: my_make_index, new_mutable_work TYPE(array_i1d_obj) :: new_col_blk_offset, new_row_blk_offset TYPE(dbcsr_distribution_obj) :: new_dist TYPE(dbcsr_memtype_type) :: new_data_memory_type, & new_index_memory_type INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: blk_size ! --------------------------------------------------------------------------- IF (PRESENT(name)) THEN new_name = TRIM(name) ELSE new_name = TRIM(dbcsr_name(template)) END IF IF (PRESENT(dist)) THEN new_dist = dist ELSE new_dist = dbcsr_distribution(template) END IF IF (PRESENT(matrix_type)) THEN new_matrix_type = matrix_type ELSE new_matrix_type = dbcsr_get_matrix_type(template) END IF ! IF ((PRESENT(row_blk_size) .NEQV. PRESENT(col_blk_size)) .OR. & (PRESENT(row_blk_size_obj) .NEQV. PRESENT(col_blk_size_obj))) THEN DBCSR_ABORT("Both row_blk_size and col_blk_size must be provided") END IF ! IF (PRESENT(max_rbs)) new_max_rbs = max_rbs IF (PRESENT(row_blk_offset)) new_row_blk_offset = row_blk_offset NULLIFY (blk_size) IF (PRESENT(row_blk_size_obj)) THEN blk_size => array_data(row_blk_size_obj) ELSEIF (PRESENT(row_blk_size)) THEN blk_size => row_blk_size END IF IF (ASSOCIATED(blk_size)) THEN IF (.NOT. PRESENT(max_rbs)) & new_max_rbs = MAXVAL(blk_size) ELSE IF (.NOT. PRESENT(max_rbs)) & new_max_rbs = dbcsr_max_row_size(template) IF (.NOT. PRESENT(row_blk_offset)) & new_row_blk_offset = template%row_blk_offset END IF ! IF (PRESENT(max_cbs)) new_max_cbs = max_cbs IF (PRESENT(col_blk_offset)) new_col_blk_offset = col_blk_offset NULLIFY (blk_size) IF (PRESENT(col_blk_size_obj)) THEN blk_size => array_data(col_blk_size_obj) ELSEIF (PRESENT(col_blk_size)) THEN blk_size => col_blk_size END IF IF (ASSOCIATED(blk_size)) THEN IF (.NOT. PRESENT(max_cbs)) & new_max_cbs = MAXVAL(blk_size) ELSE IF (.NOT. PRESENT(max_cbs)) & new_max_cbs = dbcsr_max_col_size(template) IF (.NOT. PRESENT(col_blk_offset)) & new_col_blk_offset = template%col_blk_offset END IF IF (PRESENT(data_type)) THEN new_data_type = data_type ELSE new_data_type = dbcsr_get_data_type(template) END IF IF (PRESENT(data_memory_type)) THEN new_data_memory_type = data_memory_type ELSE new_data_memory_type = dbcsr_get_data_memory_type(template) END IF IF (PRESENT(index_memory_type)) THEN new_index_memory_type = index_memory_type ELSE new_index_memory_type = dbcsr_get_index_memory_type(template) END IF IF (PRESENT(replication_type)) THEN new_replication_type = replication_type ELSE new_replication_type = dbcsr_get_replication_type(template) END IF IF (PRESENT(mutable_work)) THEN new_mutable_work = mutable_work ELSE new_mutable_work = dbcsr_use_mutable(template) END IF IF (PRESENT(row_blk_size_obj)) THEN CALL dbcsr_create(matrix, name=new_name, dist=new_dist, & matrix_type=new_matrix_type, & row_blk_size_obj=row_blk_size_obj, & col_blk_size_obj=col_blk_size_obj, & nze=nze, & data_type=new_data_type, & data_buffer=data_buffer, & data_memory_type=new_data_memory_type, & index_memory_type=new_index_memory_type, & max_rbs=new_max_rbs, max_cbs=new_max_cbs, & row_blk_offset=row_blk_offset, col_blk_offset=col_blk_offset, & reuse_arrays=reuse_arrays, & mutable_work=new_mutable_work, & make_index=make_index, & replication_type=new_replication_type) ELSEIF (PRESENT(row_blk_size)) THEN CALL dbcsr_create(matrix, name=new_name, dist=new_dist, & matrix_type=new_matrix_type, & row_blk_size=row_blk_size, & col_blk_size=col_blk_size, & nze=nze, & data_type=new_data_type, & data_buffer=data_buffer, & data_memory_type=new_data_memory_type, & index_memory_type=new_index_memory_type, & max_rbs=new_max_rbs, max_cbs=new_max_cbs, & row_blk_offset=row_blk_offset, col_blk_offset=col_blk_offset, & reuse_arrays=reuse_arrays, & mutable_work=new_mutable_work, & make_index=make_index, & replication_type=new_replication_type) ELSE CALL dbcsr_create(matrix, name=new_name, dist=new_dist, & matrix_type=new_matrix_type, & row_blk_size_obj=template%row_blk_size, & col_blk_size_obj=template%col_blk_size, & nze=nze, & data_type=new_data_type, & data_buffer=data_buffer, & data_memory_type=new_data_memory_type, & index_memory_type=new_index_memory_type, & max_rbs=new_max_rbs, max_cbs=new_max_cbs, & row_blk_offset=new_row_blk_offset, col_blk_offset=new_col_blk_offset, & thread_dist=dbcsr_distribution(template), & reuse_arrays=reuse_arrays, & mutable_work=new_mutable_work, & make_index=make_index, & replication_type=new_replication_type) END IF ! Copy stuff from the meta-array. These are not normally needed, ! but have to be here for creating matrices from "image" matrices. my_make_index = .TRUE. IF (PRESENT(make_index)) my_make_index = make_index IF (my_make_index) THEN matrix%index(dbcsr_slot_home_prow) = template%index(dbcsr_slot_home_prow) matrix%index(dbcsr_slot_home_rowi) = template%index(dbcsr_slot_home_rowi) matrix%index(dbcsr_slot_home_pcol) = template%index(dbcsr_slot_home_pcol) matrix%index(dbcsr_slot_home_coli) = template%index(dbcsr_slot_home_coli) matrix%index(dbcsr_slot_home_vprow) = template%index(dbcsr_slot_home_vprow) matrix%index(dbcsr_slot_home_vpcol) = template%index(dbcsr_slot_home_vpcol) END IF IF (PRESENT(row_blk_size) .AND. .NOT. PRESENT(row_blk_offset)) THEN CALL array_release(new_row_blk_offset) END IF IF (PRESENT(col_blk_size) .AND. .NOT. PRESENT(col_blk_offset)) THEN CALL array_release(new_col_blk_offset) END IF END SUBROUTINE dbcsr_create_template SUBROUTINE dbcsr_init_wm(wm, data_type, nblks_guess, sizedata_guess, memory_type) !! Initializes one work matrix TYPE(dbcsr_work_type), INTENT(OUT) :: wm !! initialized work matrix INTEGER, INTENT(IN) :: data_type INTEGER, INTENT(IN), OPTIONAL :: nblks_guess, sizedata_guess !! estimated number of blocks !! estimated size of data TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL :: memory_type CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_init_wm' INTEGER :: handle, nblks, stat ! --------------------------------------------------------------------------- IF (careful_mod) CALL timeset(routineN, handle) wm%lastblk = 0 wm%datasize = 0 ! Index IF (PRESENT(nblks_guess)) THEN nblks = nblks_guess IF (nblks_guess < 0) & DBCSR_ABORT("Can not have negative block count.") ALLOCATE (wm%row_i(nblks), stat=stat) IF (stat /= 0) DBCSR_ABORT("wm%row_i") ALLOCATE (wm%col_i(nblks), stat=stat) IF (stat /= 0) DBCSR_ABORT("wm%col_i") ALLOCATE (wm%blk_p(nblks), stat=stat) IF (stat /= 0) DBCSR_ABORT("wm%blk_p") ELSE NULLIFY (wm%row_i, wm%col_i, wm%blk_p) !nblks = CEILING (REAL (matrix%nblkrows_local * matrix%nblkcols_local)& ! / REAL (dbcsr_mp_numnodes (dbcsr_distribution_mp (matrix%dist)))) END IF ! Data CALL dbcsr_data_init(wm%data_area) IF (PRESENT(sizedata_guess)) THEN IF (sizedata_guess < 0) & DBCSR_ABORT("Can not have negative data size.") CALL dbcsr_data_new(wm%data_area, data_type, & data_size=sizedata_guess, memory_type=memory_type) ELSE CALL dbcsr_data_new(wm%data_area, data_type, memory_type=memory_type) END IF CALL dbcsr_mutable_init(wm%mutable) IF (careful_mod) CALL timestop(handle) END SUBROUTINE dbcsr_init_wm SUBROUTINE dbcsr_work_create(matrix, nblks_guess, sizedata_guess, n, & work_mutable, memory_type) !! Creates a the working matrix(es) for a DBCSR matrix. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! new matrix INTEGER, INTENT(IN), OPTIONAL :: nblks_guess, sizedata_guess, n !! estimated number of blocks !! estimated size of data !! number work matrices to create, default is 1 LOGICAL, INTENT(in), OPTIONAL :: work_mutable !! use mutable work type, default is what was specified in create TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL :: memory_type CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_work_create' INTEGER :: handle, iw, nw, ow LOGICAL :: wms_new, wms_realloc TYPE(dbcsr_work_type), DIMENSION(:), POINTER :: wms ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (PRESENT(n)) THEN nw = n ELSE nw = 1 !$ IF (omp_in_parallel()) THEN !$ nw = omp_get_num_threads() !$ ELSE !$ nw = omp_get_max_threads() !$ END IF END IF !$OMP MASTER wms_new = .NOT. ASSOCIATED(matrix%wms) wms_realloc = .FALSE. IF (ASSOCIATED(matrix%wms)) THEN ow = SIZE(matrix%wms) IF (ow .LT. nw) & DBCSR_WARN("Number of work matrices less than threads.") IF (ow .LT. nw) wms_realloc = .TRUE. END IF IF (PRESENT(work_mutable)) THEN matrix%work_mutable = work_mutable END IF IF (wms_realloc) THEN ALLOCATE (wms(nw)) wms(1:ow) = matrix%wms(1:ow) DEALLOCATE (matrix%wms) matrix%wms => wms DO iw = ow + 1, nw CALL dbcsr_init_wm(matrix%wms(iw), matrix%data_type, & nblks_guess=nblks_guess, sizedata_guess=sizedata_guess, & memory_type=memory_type) IF (matrix%work_mutable) & CALL dbcsr_mutable_new(matrix%wms(iw)%mutable, & dbcsr_get_data_type(matrix)) END DO END IF IF (wms_new) THEN ALLOCATE (matrix%wms(nw)) DO iw = 1, nw CALL dbcsr_init_wm(matrix%wms(iw), matrix%data_type, & nblks_guess=nblks_guess, sizedata_guess=sizedata_guess, & memory_type=memory_type) IF (matrix%work_mutable) & CALL dbcsr_mutable_new(matrix%wms(iw)%mutable, & dbcsr_get_data_type(matrix)) END DO END IF matrix%valid = .FALSE. !$OMP END MASTER CALL timestop(handle) END SUBROUTINE dbcsr_work_create SUBROUTINE dbcsr_finalize(matrix, reshuffle) !! Creates the final dbcsr_type matrix from the working matrix. !! Work matrices (array or tree-based) are merged into the base DBCSR matrix. !! If a matrix is marked as having a valid index, then nothing is done. !! Deleted blocks are pruned from the index. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! final matrix LOGICAL, INTENT(IN), OPTIONAL :: reshuffle !! whether the data should be reshuffled, default is false CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_finalize' LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: handle, i, nblks, nwms, start_offset INTEGER, ALLOCATABLE, DIMENSION(:) :: empty_row_p INTEGER, DIMENSION(:), POINTER, SAVE :: old_blk_p, old_col_i, old_row_p LOGICAL :: can_quick, fake_row_p, sort_data, spawn ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) !$OMP MASTER NULLIFY (old_blk_p, old_col_i, old_row_p) !$OMP END MASTER !$OMP BARRIER ! If the matrix is not marked as dirty then skip the work. IF (dbcsr_valid_index(matrix)) THEN !"No need to finalize a valid matrix, skipping." ! ! A matrix with a valid index should not have associated work ! arrays. This may happen when this routine is called on a ! matrix that was not changed. !$OMP BARRIER !$OMP MASTER IF (ASSOCIATED(matrix%wms)) & CALL dbcsr_work_destroy_all(matrix) matrix%valid = .TRUE. !$OMP END MASTER !$OMP BARRIER CALL timestop(handle) RETURN END IF ! ! If possible, data copying is avoided. IF (PRESENT(reshuffle)) THEN sort_data = reshuffle ELSE sort_data = .FALSE. END IF ! ! Now make sure that a valid row_p exists. Also clear the row_p if ! the matrix is declared to have 0 blocks. !$OMP MASTER fake_row_p = .NOT. ASSOCIATED(matrix%row_p) IF (ASSOCIATED(matrix%row_p)) THEN fake_row_p = SIZE(matrix%row_p) .LE. 1 END IF fake_row_p = fake_row_p .OR. matrix%nblks .EQ. 0 !$OMP END MASTER ! ! See where data will be appended in the main data ! area. Alternatively, set to the start if the matrix is declared ! to have no data. (This value is ignored if reshuffle is true ! because the main data area is always new.) start_offset = matrix%nze i = dbcsr_get_data_size_used(matrix) !$OMP MASTER matrix%nze = 0 !$OMP END MASTER !$OMP BARRIER !$OMP ATOMIC matrix%nze = matrix%nze + i !$OMP BARRIER IF (dbg) THEN WRITE (*, *) routineN//" sizes", matrix%nze, i, & dbcsr_data_get_size_referenced(matrix%data_area), & dbcsr_data_get_size(matrix%data_area) END IF IF (.FALSE. .AND. dbcsr_data_get_size_referenced(matrix%data_area) .NE. & matrix%nze) THEN IF (matrix%nze .NE. dbcsr_data_get_size_referenced(matrix%data_area)) & DBCSR_WARN("Should reshuffle.") IF (ASSOCIATED(matrix%wms)) THEN sort_data = .NOT. dbcsr_wm_use_mutable(matrix%wms(1)) END IF END IF IF (sort_data .AND. matrix%nze .GT. 0) THEN CALL dbcsr_add_wm_from_matrix(matrix) matrix%nze = 0 !$OMP MASTER fake_row_p = .TRUE. !$OMP END MASTER END IF start_offset = dbcsr_data_get_size_referenced(matrix%data_area) + 1 IF (matrix%nze .EQ. 0) start_offset = 1 !$OMP MASTER matrix%index(dbcsr_slot_nze) = matrix%nze IF (fake_row_p) THEN ALLOCATE (empty_row_p(matrix%nblkrows_total + 1)) empty_row_p(:) = 0 CALL dbcsr_addto_index_array(matrix, dbcsr_slot_row_p, & DATA=empty_row_p, extra=0) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_col_i, & reservation=0) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, & reservation=0) CALL dbcsr_repoint_index(matrix) END IF !$OMP END MASTER ! !$OMP BARRIER can_quick = can_quickly_finalize(matrix) !$OMP BARRIER ! If the matrix, work matrices, and environment fit several ! criteria, then a quick O(1) finalization is performed. IF (can_quick .AND. .NOT. sort_data) THEN CALL quick_finalize(matrix) ELSE ! !$OMP MASTER ! ! Create work matrices if not yet existing IF (.NOT. ASSOCIATED(matrix%wms)) THEN nwms = 1 !$ nwms = omp_get_num_threads() CALL dbcsr_work_create(matrix, n=nwms) END IF !$OMP END MASTER !$OMP BARRIER ! ! Ensure index arrays at least exist. !$OMP DO SCHEDULE (STATIC, 1) DO i = 1, SIZE(matrix%wms) IF (.NOT. ASSOCIATED(matrix%wms(i)%row_i)) THEN CALL ensure_array_size(matrix%wms(i)%row_i, ub=0) END IF IF (.NOT. ASSOCIATED(matrix%wms(i)%col_i)) THEN CALL ensure_array_size(matrix%wms(i)%col_i, ub=0) END IF IF (.NOT. ASSOCIATED(matrix%wms(i)%blk_p)) THEN CALL ensure_array_size(matrix%wms(i)%blk_p, ub=0) END IF END DO !$OMP ENDDO ! ! Check for deleted blocks !$OMP MASTER nblks = matrix%row_p(matrix%nblkrows_total + 1) IF (ANY(matrix%blk_p(1:nblks) .EQ. 0)) THEN CALL dbcsr_index_prune_deleted(matrix) END IF old_row_p => matrix%row_p old_col_i => matrix%col_i old_blk_p => matrix%blk_p !$OMP END MASTER ! !$OMP BARRIER ! Check to see if we will need to create a parallel environment ! (needed when there are multiple work matrices but we are not ! in an OpenMP parallel section.) ! ! A parallel section is created and used when the matrix has ! more work matrices. It's a shortcut when the finalize is ! called from a non-parallel environment whereas the matrix was ! built/modified in a parallel environment nwms = SIZE(matrix%wms) spawn = .FALSE. !$ IF (.NOT. omp_in_parallel()) THEN !$ IF (nwms .GT. 1) spawn = .TRUE. !$ END IF IF (spawn) THEN !$OMP PARALLEL IF (spawn) & !$OMP DEFAULT (NONE) & !$OMP SHARED (matrix, old_row_p, old_col_i, old_blk_p,& !$OMP start_offset, sort_data) CALL dbcsr_merge_all(matrix, & old_row_p, old_col_i, old_blk_p, & sort_data=sort_data) !$OMP END PARALLEL ELSE CALL dbcsr_merge_all(matrix, & old_row_p, old_col_i, old_blk_p, & sort_data=sort_data) END IF END IF !$OMP BARRIER !$OMP MASTER ! Clean up. IF (ASSOCIATED(matrix%wms)) THEN CALL dbcsr_work_destroy_all(matrix) END IF matrix%valid = .TRUE. !$OMP END MASTER !$OMP BARRIER IF (dbg) THEN !$OMP SINGLE CALL dbcsr_verify_matrix(matrix) !$OMP END SINGLE END IF !$OMP MASTER IF (fake_row_p) THEN DEALLOCATE (empty_row_p) END IF !$OMP END MASTER !$OMP BARRIER CALL timestop(handle) END SUBROUTINE dbcsr_finalize SUBROUTINE dbcsr_special_finalize(matrix, reshuffle) TYPE(dbcsr_type), INTENT(INOUT) :: matrix LOGICAL, INTENT(IN), OPTIONAL :: reshuffle CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_special_finalize' LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: handle LOGICAL :: can_quick, sort_data ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (matrix%nblks .NE. 0) & DBCSR_ABORT("Optimized finalize requires empty matrix.") IF (dbcsr_valid_index(matrix)) & DBCSR_ABORT("Optimized finalize requires invalid matrix.") IF (.NOT. ASSOCIATED(matrix%wms)) & DBCSR_ABORT("Optimized finalize requires work matrices exist.") IF (SIZE(matrix%wms) .NE. 1) & DBCSR_ABORT("Optimized finalize requires single work matrix") ! ! If possible, data copying is avoided. IF (PRESENT(reshuffle)) THEN sort_data = reshuffle ELSE sort_data = .FALSE. END IF !$OMP BARRIER can_quick = can_quickly_finalize(matrix) !$OMP BARRIER ! If the matrix, work matrices, and environment fit several ! criteria, then a quick O(1) finalization is performed. IF (can_quick .AND. .NOT. sort_data) THEN CALL quick_finalize(matrix) ELSE IF (.NOT. sort_data) & DBCSR_ABORT("merge_single_wm only supports data sorting") ! ! Ensure needed index arrays at least exist. !$OMP MASTER ! IF (.NOT. ASSOCIATED(matrix%wms(1)%row_i)) THEN CALL ensure_array_size(matrix%wms(1)%row_i, ub=0) END IF IF (.NOT. ASSOCIATED(matrix%wms(1)%col_i)) THEN CALL ensure_array_size(matrix%wms(1)%col_i, ub=0) END IF IF (.NOT. ASSOCIATED(matrix%wms(1)%blk_p)) THEN CALL ensure_array_size(matrix%wms(1)%blk_p, ub=0) END IF ! !$OMP END MASTER !$OMP BARRIER ! !$OMP PARALLEL DEFAULT (NONE), SHARED(matrix) CALL dbcsr_merge_single_wm(matrix) !$OMP END PARALLEL END IF !$OMP MASTER ! Clean up. IF (ASSOCIATED(matrix%wms)) THEN CALL dbcsr_work_destroy_all(matrix) END IF matrix%valid = .TRUE. !$OMP END MASTER !$OMP BARRIER IF (dbg) THEN !$OMP SINGLE CALL dbcsr_verify_matrix(matrix) !$OMP END SINGLE END IF !$OMP BARRIER CALL timestop(handle) END SUBROUTINE dbcsr_special_finalize FUNCTION can_quickly_finalize(matrix) RESULT(quick) !! Checks whether the matrix can be finalized with minimal copying. TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix to check LOGICAL :: quick !! whether matrix can be quickly finalized ! --------------------------------------------------------------------------- IF (ASSOCIATED(matrix%wms)) THEN quick = matrix%nblks .EQ. 0 quick = quick .AND. SIZE(matrix%wms) .EQ. 1 .AND. & .NOT. dbcsr_wm_use_mutable(matrix%wms(1)) IF (quick) THEN quick = quick .AND. & dbcsr_memtype_equal( & dbcsr_data_get_memory_type(matrix%wms(1)%data_area), & dbcsr_data_get_memory_type(matrix%data_area)) quick = quick .AND. & ASSOCIATED(matrix%wms(1)%row_i) quick = quick .AND. & (matrix%wms(1)%datasize_after_filtering .LT. 0 .OR. & matrix%wms(1)%datasize .EQ. matrix%wms(1)%datasize_after_filtering) END IF ELSE quick = .FALSE. END IF END FUNCTION can_quickly_finalize SUBROUTINE quick_finalize(matrix) !! Performs quick finalization of matrix !! The data area from the work matrix is accepted as the new matrix's data !! area and the index is built from the work matrix. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! matrix to finalize CHARACTER(len=*), PARAMETER :: routineN = 'quick_finalize' INTEGER :: error_handle, nblks, nrows ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) !$OMP SECTIONS !$OMP SECTION nblks = matrix%wms(1)%lastblk nrows = matrix%nblkrows_total CALL dbcsr_sort_indices(nblks, & matrix%wms(1)%row_i, & matrix%wms(1)%col_i, & matrix%wms(1)%blk_p) CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_row_p) CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_col_i) CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_blk_p) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_row_p, & reservation=nrows + 1, extra=2*nblks) CALL dbcsr_make_dbcsr_index(matrix%row_p, matrix%wms(1)%row_i, & nrows, nblks) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_col_i, & DATA=matrix%wms(1)%col_i(1:nblks)) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, & DATA=matrix%wms(1)%blk_p(1:nblks)) matrix%nblks = nblks matrix%nze = matrix%wms(1)%datasize matrix%index(dbcsr_slot_nblks) = nblks matrix%index(dbcsr_slot_nze) = matrix%wms(1)%datasize CALL dbcsr_repoint_index(matrix) !$OMP SECTION CALL dbcsr_switch_data_area(matrix, matrix%wms(1)%data_area) !$OMP END SECTIONS CALL timestop(error_handle) END SUBROUTINE quick_finalize SUBROUTINE dbcsr_add_wm_from_matrix(matrix, limits) !! Creates a work matrix from the data present in a finalized matrix. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! DBCSR matrix INTEGER, DIMENSION(4), INTENT(IN), OPTIONAL :: limits !! the limits to use for copying CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_wm_from_matrix' INTEGER :: handle, ithread, nthreads, nwms, & old_nwms, size_used LOGICAL :: preexists ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) !$OMP BARRIER preexists = ASSOCIATED(matrix%wms) IF (preexists) THEN old_nwms = SIZE(matrix%wms) IF (old_nwms .EQ. 0) & DBCSR_WARN("Nonexisting work matrices?!") ELSE old_nwms = 0 END IF nthreads = 1; ithread = 0 !$ nthreads = OMP_GET_NUM_THREADS(); ithread = OMP_GET_THREAD_NUM() IF (nthreads .GT. 1) THEN IF (old_nwms /= nthreads .AND. old_nwms /= 0) & DBCSR_ABORT("Number of work matrices and threads do not match") END IF nwms = MAX(1, old_nwms) !$ nwms = MAX(nwms, nthreads) !$OMP BARRIER !$OMP MASTER IF (.NOT. ASSOCIATED(matrix%wms)) THEN CALL dbcsr_work_create(matrix, & INT(matrix%nblks*default_resize_factor/nwms), & INT(matrix%nze*default_resize_factor/nwms), & n=nwms, work_mutable=.FALSE.) END IF !$OMP END MASTER !$OMP BARRIER size_used = matrix%nze CALL dbcsr_fill_wm_from_matrix(matrix%wms, matrix, size_used, & limits=limits) !$OMP BARRIER CALL timestop(handle) END SUBROUTINE dbcsr_add_wm_from_matrix SUBROUTINE dbcsr_fill_wm_from_matrix(wm, matrix, size_used, limits) !! Fills index and data of the work matrix from the !! previously-finalized one. !! !! limits !! The limits is a 4-tuple !! (lower_row, higher_row, lower_column, higher_column). TYPE(dbcsr_work_type), DIMENSION(:), INTENT(INOUT) :: wm !! the work matrix to fill TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! DBCSR matrix INTEGER, INTENT(IN) :: size_used INTEGER, DIMENSION(4), INTENT(IN), OPTIONAL :: limits !! only fills blocks within this range CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_fill_wm_from_matrix' INTEGER :: blk, blk_p, col, handle, ithread, & nthreads, nwms, nze, row, wblk_p, & which_wm, wm_first, wm_last LOGICAL :: careful, limit, mt, tr LOGICAL, SAVE :: mutable TYPE(dbcsr_data_obj) :: data_block TYPE(dbcsr_iterator) :: iter ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) nwms = SIZE(matrix%wms) mt = .FALSE. !$ IF (nwms .GT. 1) mt = omp_get_num_threads() .GT. 1 ithread = 0; nthreads = 1 !$ ithread = omp_get_thread_num() !$ nthreads = omp_get_num_threads() limit = PRESENT(limits) careful = size_used + size_used/8 & .LT. dbcsr_data_get_size_referenced(matrix%data_area) CALL dbcsr_data_init(data_block) CALL dbcsr_data_new(data_block, dbcsr_data_get_type(matrix%data_area)) IF (mt) THEN wm_first = ithread + 1 wm_last = ithread + 1 ELSE wm_first = 1 wm_last = nwms END IF ! Prepares the work matrices to accept the main data. !$OMP MASTER mutable = .FALSE. DO which_wm = 1, nwms mutable = mutable .OR. dbcsr_wm_use_mutable(wm(which_wm)) END DO !$OMP END MASTER !$OMP BARRIER DO which_wm = wm_first, wm_last IF (dbcsr_wm_use_mutable(wm(which_wm))) & DBCSR_ABORT("Adding main matrix into mutable not supported.") IF (mutable) THEN IF (.NOT. dbcsr_mutable_instantiated(wm(which_wm)%mutable)) THEN CALL dbcsr_mutable_new(wm(which_wm)%mutable, matrix%data_type) END IF ELSE ! We don't know how much data we'll get so we have to be generous. CALL dbcsr_data_ensure_size(wm(which_wm)%data_area, & size_used/nwms) CALL dbcsr_data_set_size_referenced(wm(which_wm)%data_area, 0) END IF END DO ! Now copy the data CALL dbcsr_iterator_start(iter, matrix, shared=mt, & contiguous_pointers=.FALSE., read_only=.TRUE.) DO WHILE (dbcsr_iterator_blocks_left(iter)) CALL dbcsr_iterator_next_block(iter, row, col, data_block, & transposed=tr, block_number=blk) IF (limit) THEN IF (.NOT. within_limits(row, col, limits)) CYCLE END IF blk_p = matrix%blk_p(blk) which_wm = ithread + 1 wblk_p = SIGN(wm(which_wm)%datasize + 1, blk_p) nze = dbcsr_data_get_size(data_block) IF (mt .OR. limit .OR. careful .OR. mutable) THEN ! The data gets copied block by block so the block pointers ! are ordered accordingly. IF (.NOT. mutable) THEN CALL add_work_coordinate(wm(which_wm), row, col, wblk_p) CALL dbcsr_data_ensure_size(wm(which_wm)%data_area, & ABS(wblk_p) + nze - 1, factor=default_resize_factor) CALL dbcsr_data_set_size_referenced(wm(which_wm)%data_area, & ABS(wblk_p) + nze - 1) CALL dbcsr_data_set(wm(which_wm)%data_area, & lb=ABS(wblk_p), & data_size=nze, & src=data_block, source_lb=1) END IF ELSE ! The data gets copied all at once so the block pointers ! should remain the same as they were. CALL add_work_coordinate(wm(which_wm), row, col, blk_p) END IF IF (.NOT. mutable) & wm(which_wm)%datasize = wm(which_wm)%datasize + nze END DO CALL dbcsr_iterator_stop(iter) CALL dbcsr_data_clear_pointer(data_block) CALL dbcsr_data_release(data_block) ! Copy all blocks at once IF (.NOT. mt .AND. .NOT. limit .AND. .NOT. careful .AND. .NOT. mutable) THEN DO which_wm = 1, nwms CALL dbcsr_data_ensure_size(wm(which_wm)%data_area, & dbcsr_data_get_size_referenced(matrix%data_area)) CALL dbcsr_data_copyall(wm(which_wm)%data_area, matrix%data_area) wm(which_wm)%datasize = size_used END DO END IF CALL timestop(handle) END SUBROUTINE dbcsr_fill_wm_from_matrix PURE FUNCTION within_limits(row, column, limits) !! Checks whether a point is within bounds !! \return whether the point is within the bounds INTEGER, INTENT(IN) :: row, column !! point to check !! point to check INTEGER, DIMENSION(4), INTENT(IN) :: limits !! limits (low_row, high_row, low_col, high_col) LOGICAL :: within_limits within_limits = row .GE. limits(1) .AND. row .LE. limits(2) .AND. & column .GE. limits(3) .AND. column .LE. limits(4) END FUNCTION within_limits SUBROUTINE dbcsr_work_destroy(wm) !! Deallocates and destroys a work matrix. TYPE(dbcsr_work_type), INTENT(INOUT) :: wm !! work matrix CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_work_destroy' INTEGER :: handle ! --------------------------------------------------------------------------- IF (careful_mod) CALL timeset(routineN, handle) IF (ASSOCIATED(wm%row_i)) THEN DEALLOCATE (wm%row_i) END IF IF (ASSOCIATED(wm%col_i)) THEN DEALLOCATE (wm%col_i) END IF IF (ASSOCIATED(wm%blk_p)) THEN DEALLOCATE (wm%blk_p) END IF CALL dbcsr_data_release(wm%data_area) CALL dbcsr_mutable_destroy(wm%mutable) IF (careful_mod) CALL timestop(handle) END SUBROUTINE dbcsr_work_destroy SUBROUTINE dbcsr_work_destroy_all(m) !! Deallocates and destroys a work matrix. TYPE(dbcsr_type), INTENT(INOUT) :: m CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_work_destroy_all' INTEGER :: handle, i ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) IF (.NOT. ASSOCIATED(m%wms)) & DBCSR_WARN("Want to destroy nonexisting work matrices.") IF (ASSOCIATED(m%wms)) THEN DO i = 1, SIZE(m%wms) CALL dbcsr_work_destroy(m%wms(i)) END DO DEALLOCATE (m%wms) END IF CALL timestop(handle) END SUBROUTINE dbcsr_work_destroy_all SUBROUTINE add_work_coordinate(matrix, row, col, blk, index) !! Adds a coordinate (or other data) into a work matrix's row_i and !! col_i arrays and returns its position. !! @note !! Uses the matrix%lastblk to keep track of the current position. !! @endnote TYPE(dbcsr_work_type), INTENT(INOUT) :: matrix !! work matrix INTEGER, INTENT(IN) :: row, col !! row data to add !! col data to add INTEGER, INTENT(IN), OPTIONAL :: blk !! block pointer to add INTEGER, INTENT(OUT), OPTIONAL :: index !! saved position CHARACTER(len=*), PARAMETER :: routineN = 'add_work_coordinate' INTEGER :: handle ! --------------------------------------------------------------------------- IF (careful_mod) CALL timeset(routineN, handle) matrix%lastblk = matrix%lastblk + 1 CALL ensure_array_size(matrix%row_i, ub=matrix%lastblk, & factor=default_resize_factor) CALL ensure_array_size(matrix%col_i, ub=matrix%lastblk, & factor=default_resize_factor) matrix%row_i(matrix%lastblk) = row matrix%col_i(matrix%lastblk) = col IF (PRESENT(blk)) THEN CALL ensure_array_size(matrix%blk_p, ub=matrix%lastblk, & factor=default_resize_factor) matrix%blk_p(matrix%lastblk) = blk END IF IF (PRESENT(index)) index = matrix%lastblk IF (careful_mod) CALL timestop(handle) END SUBROUTINE add_work_coordinate SUBROUTINE dbcsr_merge_all(matrix, old_row_p, old_col_i, old_blk_p, & sort_data) !! Merge data from matrix and work matrices into the final matrix. TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! matrix to work on INTEGER, DIMENSION(*), INTENT(IN) :: old_row_p, old_col_i, old_blk_p LOGICAL, INTENT(IN) :: sort_data !! whether data will be fully sorted CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_merge_all' LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: handle, my_row_count, nblks, & nrows, nwms, row, t, & which_wm, wm_datasize INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: all_data_offsets, all_data_sizes, & new_blk_p_sorted, new_blk_sizes, & new_row_p INTEGER, ALLOCATABLE, DIMENSION(:), SAVE, TARGET :: blk_d, new_blk_p, new_col_i INTEGER, DIMENSION(:), CONTIGUOUS, POINTER :: my_row_p INTEGER, DIMENSION(:), POINTER, CONTIGUOUS, SAVE :: cbs, rbs INTEGER, SAVE :: max_row_count, new_nblks = 0, new_nze = 0 TYPE(dbcsr_data_obj), ALLOCATABLE, DIMENSION(:), & SAVE :: all_data_areas TYPE(dbcsr_work_type), POINTER :: wm TYPE(i_array_p), DIMENSION(:), POINTER, SAVE :: all_blk_p, all_col_i, all_row_p ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) ! Outline: ! Each thread has a work matrix. These must be merged and made ! into a new index. If sort_data is False, then the data areas ! are simply appended. This is probably quicker but the data ! blocks are not in order and the data size may expand beyond ! what is needed. If sort_data is True, then data blocks are ! sorted in order. IF (dbg) WRITE (*, *) routineN//" starting, sort?", sort_data !$OMP BARRIER nrows = matrix%nblkrows_total nwms = SIZE(matrix%wms) !$ IF (nwms /= OMP_GET_NUM_THREADS()) & !$ DBCSR_ABORT("Number of threads does not match number of work matrices.") which_wm = 1 !$ which_wm = OMP_GET_THREAD_NUM() + 1 wm => matrix%wms(which_wm) ! ! Currently B-tree-based work matrices are converted to array form. IF (dbcsr_wm_use_mutable(wm)) THEN SELECT CASE (wm%mutable%m%data_type) CASE (dbcsr_type_real_4) CALL tree_to_linear_s(wm) CASE (dbcsr_type_real_8) CALL tree_to_linear_d(wm) CASE (dbcsr_type_complex_4) CALL tree_to_linear_c(wm) CASE (dbcsr_type_complex_8) CALL tree_to_linear_z(wm) CASE default DBCSR_ABORT("Invalid data type") END SELECT END IF ! ! Initializations and some counts from the threads are summed. ! !$OMP MASTER new_nblks = old_row_p(nrows + 1) new_nze = matrix%nze ALLOCATE (all_row_p(nwms)) ALLOCATE (all_col_i(nwms)) ALLOCATE (all_blk_p(nwms)) ALLOCATE (all_data_sizes(0:nwms)) ALLOCATE (all_data_offsets(nwms)) IF (sort_data) THEN ALLOCATE (all_data_areas(0:nwms)) CALL dbcsr_data_init(all_data_areas(0)) all_data_areas(0) = matrix%data_area !$OMP CRITICAL (crit_data) CALL dbcsr_data_hold(all_data_areas(0)) !$OMP END CRITICAL (crit_data) END IF ! The following is valid because the data actually referenced ! by blocks is explicitly calculated in dbcsr_finalize. all_data_sizes(0) = matrix%nze rbs => array_data(matrix%row_blk_size) cbs => array_data(matrix%col_blk_size) !$OMP END MASTER ! !$OMP BARRIER IF (sort_data .AND. wm%datasize_after_filtering .GE. 0) THEN wm_datasize = wm%datasize_after_filtering ELSE wm_datasize = wm%datasize END IF nblks = wm%lastblk !$OMP ATOMIC new_nblks = new_nblks + nblks !$OMP ATOMIC new_nze = new_nze + wm_datasize !$OMP BARRIER ! !$OMP MASTER ALLOCATE (new_row_p(nrows + 1)) ALLOCATE (new_col_i(new_nblks)) ALLOCATE (new_blk_p(new_nblks)) IF (sort_data) THEN ALLOCATE (blk_d(new_nblks)) ELSE ALLOCATE (blk_d(1)) END IF !$OMP END MASTER ! ! Each thread creates a row_p index for its new blocks. This gives the ! number of new blocks per thread per row. CALL dbcsr_sort_indices(nblks, wm%row_i, wm%col_i, wm%blk_p) ALLOCATE (my_row_p(nrows + 1)) CALL dbcsr_make_dbcsr_index(my_row_p, wm%row_i, nrows, nblks) ! ! The threads must share their row_p, col_i, blk_p, and data areas ! among themselves. all_row_p(which_wm)%p => my_row_p all_data_sizes(which_wm) = wm_datasize IF (.NOT. sort_data) THEN IF (wm_datasize > dbcsr_data_get_size_referenced(wm%data_area)) & DBCSR_ABORT("Data size mismatch.") END IF all_col_i(which_wm)%p => wm%col_i all_blk_p(which_wm)%p => wm%blk_p !$OMP BARRIER IF (sort_data) THEN !$OMP MASTER all_data_offsets(:) = 0 !$OMP END MASTER CALL dbcsr_data_init(all_data_areas(which_wm)) all_data_areas(which_wm) = wm%data_area !$OMP CRITICAL (crit_data) CALL dbcsr_data_hold(all_data_areas(which_wm)) !$OMP END CRITICAL (crit_data) ELSE !$OMP MASTER all_data_offsets(1) = all_data_sizes(0) DO t = 2, nwms all_data_offsets(t) = all_data_offsets(t - 1) + all_data_sizes(t - 1) END DO !$OMP END MASTER END IF ! ! The new row counts are created, then the new row_p index is created. ! !$OMP DO DO row = 1, nrows my_row_count = old_row_p(row + 1) - old_row_p(row) DO t = 1, nwms my_row_count = my_row_count & & + all_row_p(t)%p(row + 1) - all_row_p(t)%p(row) END DO new_row_p(row) = my_row_count END DO !$OMP END DO !$OMP MASTER max_row_count = MAXVAL(new_row_p(1:nrows)) CALL dbcsr_build_row_index(new_row_p, nrows) !$OMP END MASTER !$OMP BARRIER ! ! The new index is built CALL merge_index(new_row_p, new_col_i, new_blk_p, & blk_d, & old_row_p, old_col_i, old_blk_p, & all_row_p, all_col_i, all_blk_p, & all_data_offsets, nwms, nrows, max_row_count, sort_data) ! ! The data is then merged in one of two ways. ! !$OMP MASTER IF (sort_data) THEN ! The matrix gets a fresh data area. Blocks from the work ! matrices will be copied into it in order. ! !$OMP CRITICAL (crit_data) CALL dbcsr_data_release(matrix%data_area) CALL dbcsr_data_init(matrix%data_area) !$OMP END CRITICAL (crit_data) CALL dbcsr_data_new(matrix%data_area, & data_size=new_nze, & data_type=dbcsr_data_get_type(all_data_areas(0)), & memory_type=dbcsr_data_get_memory_type(all_data_areas(0))) ALLOCATE (new_blk_p_sorted(new_nblks)) ALLOCATE (new_blk_sizes(new_nblks)) ELSE ! Data stored in the work matrices will be just appended to the ! current data area. CALL dbcsr_data_ensure_size(matrix%data_area, new_nze) END IF !$OMP END MASTER !$OMP BARRIER IF (sort_data) THEN CALL dbcsr_calc_block_sizes(new_blk_sizes, & new_row_p, new_col_i, rbs, cbs) CALL dbcsr_sort_data(new_blk_p_sorted, new_blk_p, & new_blk_sizes, dsts=matrix%data_area, & src=all_data_areas(0), & srcs=all_data_areas, old_blk_d=blk_d) ELSE IF (all_data_sizes(which_wm) .GT. 0) THEN CALL dbcsr_data_copy(dst=matrix%data_area, & dst_lb=(/all_data_offsets(which_wm) + 1/), & dst_sizes=(/all_data_sizes(which_wm)/), & src=wm%data_area, & src_lb=(/1/), & src_sizes=(/all_data_sizes(which_wm)/)) END IF END IF ! ! Creates a new index array. ! !$OMP BARRIER !$OMP MASTER CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_row_p) CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_col_i) CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_blk_p) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_row_p, & DATA=new_row_p(1:nrows + 1), extra=new_nblks*2) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_col_i, & DATA=new_col_i(1:new_nblks)) IF (sort_data) THEN CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, & DATA=new_blk_p_sorted) ELSE CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, & DATA=new_blk_p) END IF matrix%nblks = new_nblks matrix%nze = new_nze matrix%index(dbcsr_slot_nblks) = matrix%nblks matrix%index(dbcsr_slot_nze) = matrix%nze CALL dbcsr_repoint_index(matrix) !$OMP END MASTER ! !$OMP BARRIER ! DEALLOCATE (my_row_p) IF (sort_data) THEN !$OMP MASTER !$OMP CRITICAL (crit_data) CALL dbcsr_data_release(all_data_areas(0)) !$OMP END CRITICAL (crit_data) DO which_wm = 1, nwms !$OMP CRITICAL (crit_data) CALL dbcsr_data_release(all_data_areas(which_wm)) !$OMP END CRITICAL (crit_data) END DO !$OMP END MASTER END IF !$OMP BARRIER !$OMP MASTER DEALLOCATE (all_row_p) DEALLOCATE (all_col_i) DEALLOCATE (all_blk_p) DEALLOCATE (new_row_p) DEALLOCATE (new_col_i) DEALLOCATE (new_blk_p) DEALLOCATE (all_data_sizes) DEALLOCATE (all_data_offsets) IF (sort_data) THEN DEALLOCATE (all_data_areas) DEALLOCATE (new_blk_sizes) DEALLOCATE (new_blk_p_sorted) END IF DEALLOCATE (blk_d) !$OMP END MASTER !$OMP BARRIER IF (dbg) WRITE (*, *) routineN//" stopped" CALL timestop(handle) END SUBROUTINE dbcsr_merge_all SUBROUTINE dbcsr_merge_single_wm(matrix) !! Sort data from the WM into the final matrix, based closely on dbcsr_merge_all TYPE(dbcsr_type), INTENT(INOUT) :: matrix !! matrix to work on CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_merge_single_wm' LOGICAL, PARAMETER :: dbg = .FALSE. INTEGER :: handle, nblks, nrows INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: new_blk_p_sorted, new_blk_sizes, & new_row_p INTEGER, ALLOCATABLE, DIMENSION(:), SAVE, TARGET :: blk_d INTEGER, DIMENSION(:), POINTER, CONTIGUOUS, SAVE :: cbs, rbs TYPE(dbcsr_work_type), POINTER :: wm ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) ! Outline: ! There is a single work matrix. Data blocks are sorted and copied ! into the matrix data area (which is empty). The index is made consistent nrows = matrix%nblkrows_total wm => matrix%wms(1) nblks = wm%lastblk IF (dbcsr_wm_use_mutable(wm)) & DBCSR_ABORT("Number of threads does not match number of work matrices.") ! ! The following is valid because the data actually referenced ! by blocks is explicitly calculated in dbcsr_finalize. !$OMP MASTER rbs => array_data(matrix%row_blk_size) cbs => array_data(matrix%col_blk_size) ! ! Initializations ! ALLOCATE (new_row_p(nrows + 1)) ALLOCATE (blk_d(nblks)) ALLOCATE (new_blk_p_sorted(nblks)) ALLOCATE (new_blk_sizes(nblks)) ! ! Master thread creates a row_p index for the (sorted) blocks. CALL dbcsr_sort_indices(nblks, wm%row_i, wm%col_i, wm%blk_p) CALL dbcsr_make_dbcsr_index(new_row_p, wm%row_i, nrows, nblks) ! ! ! The matrix data area is resized. Blocks from the work ! matrices will be copied into it in order. ! CALL dbcsr_data_ensure_size(matrix%data_area, wm%datasize, nocopy=.TRUE.) !$OMP END MASTER !$OMP BARRIER CALL dbcsr_calc_block_sizes(new_blk_sizes, & new_row_p, wm%col_i, rbs, cbs) CALL dbcsr_sort_data(new_blk_p_sorted, wm%blk_p, & new_blk_sizes, dsts=matrix%data_area, & src=wm%data_area) ! ! Creates a new index array. ! !$OMP BARRIER !$OMP MASTER CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_row_p) CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_col_i) CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_blk_p) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_row_p, & DATA=new_row_p(1:nrows + 1), extra=nblks*2) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_col_i, & DATA=wm%col_i(1:nblks)) CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, & DATA=new_blk_p_sorted) matrix%nblks = nblks matrix%nze = wm%datasize matrix%index(dbcsr_slot_nblks) = matrix%nblks matrix%index(dbcsr_slot_nze) = matrix%nze CALL dbcsr_repoint_index(matrix) DEALLOCATE (new_row_p) DEALLOCATE (new_blk_sizes) DEALLOCATE (new_blk_p_sorted) DEALLOCATE (blk_d) !$OMP END MASTER IF (dbg) WRITE (*, *) routineN//" stopped" CALL timestop(handle) END SUBROUTINE dbcsr_merge_single_wm SUBROUTINE merge_index(new_row_p, new_col_i, new_blk_p, & !! Builds a new index from several work matrices. blk_d, old_row_p, old_col_i, old_blk_p, & all_row_p, all_col_i, all_blk_p, & all_data_offsets, nwms, nrows, max_row_count, sort_data) INTEGER, DIMENSION(*), INTENT(IN) :: new_row_p INTEGER, DIMENSION(*), INTENT(OUT), TARGET :: new_col_i, new_blk_p INTEGER, DIMENSION(*), INTENT(IN), TARGET :: blk_d INTEGER, DIMENSION(*), INTENT(IN) :: old_row_p, old_col_i, old_blk_p TYPE(i_array_p), DIMENSION(*), INTENT(IN) :: all_row_p, all_col_i, all_blk_p INTEGER, DIMENSION(*), INTENT(IN) :: all_data_offsets INTEGER, INTENT(IN) :: nwms, nrows, max_row_count LOGICAL, INTENT(IN) :: sort_data CHARACTER(len=*), PARAMETER :: routineN = 'merge_index' INTEGER :: blk1, blk2, error_handle, first_row_blk, & last_row_blk, row, src_blk_1, & src_blk_2, t INTEGER, ALLOCATABLE, DIMENSION(:) :: blk_p_buff, tmp_arr INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: blk_span, col_span, d_span ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) ! ALLOCATE (tmp_arr(max_row_count)) ALLOCATE (blk_p_buff(max_row_count)) ! !$OMP DO DO row = 1, nrows first_row_blk = new_row_p(row) + 1 last_row_blk = new_row_p(row + 1) col_span => new_col_i(first_row_blk:last_row_blk) blk_span => new_blk_p(first_row_blk:last_row_blk) IF (sort_data) d_span => blk_d(first_row_blk:last_row_blk) src_blk_1 = old_row_p(row) + 1 src_blk_2 = old_row_p(row + 1) blk1 = 1 blk2 = blk1 + (src_blk_2 - src_blk_1 + 1) - 1 col_span(blk1:blk2) = old_col_i(src_blk_1:src_blk_2) blk_span(blk1:blk2) = old_blk_p(src_blk_1:src_blk_2) IF (sort_data) THEN d_span(blk1:blk2) = 1 DO t = 1, nwms src_blk_1 = all_row_p(t)%p(row) + 1 src_blk_2 = all_row_p(t)%p(row + 1) blk1 = blk2 + 1 blk2 = blk1 + (src_blk_2 - src_blk_1 + 1) - 1 col_span(blk1:blk2) = all_col_i(t)%p(src_blk_1:src_blk_2) blk_span(blk1:blk2) = all_blk_p(t)%p(src_blk_1:src_blk_2) d_span(blk1:blk2) = t + 1 END DO ELSE DO t = 1, nwms src_blk_1 = all_row_p(t)%p(row) + 1 src_blk_2 = all_row_p(t)%p(row + 1) blk1 = blk2 + 1 blk2 = blk1 + (src_blk_2 - src_blk_1 + 1) - 1 col_span(blk1:blk2) = all_col_i(t)%p(src_blk_1:src_blk_2) blk_span(blk1:blk2) = all_blk_p(t)%p(src_blk_1:src_blk_2) & & + all_data_offsets(t) END DO END IF CALL sort(col_span, SIZE(col_span), tmp_arr) blk_p_buff(1:SIZE(blk_span)) = blk_span(:) blk_span(1:SIZE(blk_span)) = blk_p_buff(tmp_arr(1:SIZE(blk_span))) END DO !$OMP END DO ! DEALLOCATE (tmp_arr) DEALLOCATE (blk_p_buff) ! CALL timestop(error_handle) END SUBROUTINE merge_index #:include '../data/dbcsr.fypp' #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float SUBROUTINE tree_to_linear_${nametype1}$ (wm) !! Converts mutable data to linear (array) type. USE dbcsr_btree, & ONLY: btree_2d_data_${nametype1}$ => btree_data_${nametype1}$p2d, & btree_destroy_${nametype1}$ => btree_delete, & btree_size_${nametype1}$ => btree_get_entries TYPE(dbcsr_work_type), INTENT(INOUT) :: wm !! work matrix to convert CHARACTER(len=*), PARAMETER :: routineN = 'tree_to_linear_${nametype1}$' INTEGER :: blk, blk_p, treesize, & error_handler, needed_size INTEGER(KIND=int_8), ALLOCATABLE, & DIMENSION(:) :: keys ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: target_data ${type1}$, DIMENSION(:, :), POINTER :: block_2d TYPE(btree_2d_data_${nametype1}$), ALLOCATABLE, & DIMENSION(:) :: values ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handler) ! srt = .TRUE. ! Not needed because of the copy treesize = btree_size_${nametype1}$ (wm%mutable%m%btree_${nametype1}$) IF (wm%lastblk .NE. treesize) & DBCSR_ABORT("Mismatch in number of blocks") ALLOCATE (keys(treesize), values(treesize)) CALL btree_destroy_${nametype1}$ (wm%mutable%m%btree_${nametype1}$, keys, values) CALL ensure_array_size(wm%row_i, ub=treesize) CALL ensure_array_size(wm%col_i, ub=treesize) CALL dbcsr_unpack_i8_2i4(keys, wm%row_i, & wm%col_i) ! For now we also fill the data, sloooowly, but this should ! be avoided and the data should be copied directly from the ! source in the subroutine's main loop. CALL ensure_array_size(wm%blk_p, ub=treesize) needed_size = 0 DO blk = 1, treesize block_2d => values(blk)%p needed_size = needed_size + SIZE(block_2d) END DO wm%datasize = needed_size CALL dbcsr_data_ensure_size(wm%data_area, & wm%datasize) target_data => dbcsr_get_data_p_${nametype1}$ (wm%data_area) blk_p = 1 DO blk = 1, treesize block_2d => values(blk)%p IF (.NOT. values(blk)%tr) THEN wm%blk_p(blk) = blk_p ELSE wm%blk_p(blk) = -blk_p END IF CALL block_copy_${nametype1}$ (target_data, block_2d, & SIZE(block_2d), blk_p, 1) blk_p = blk_p + SIZE(block_2d) DEALLOCATE (block_2d) END DO DEALLOCATE (keys, values) CALL dbcsr_mutable_release(wm%mutable) CALL timestop(error_handler) END SUBROUTINE tree_to_linear_${nametype1}$ #:endfor END MODULE dbcsr_work_operations ================================================ FILE: tests/.gitignore ================================================ # Files generated at build stage libsmm_acc_unittest_multiply.cpp libsmm_acc_timer_multiply.cpp ================================================ FILE: tests/CMakeLists.txt ================================================ # =================================== OpenMP if (USE_OPENMP) set(NUM_THREADS ${TEST_OMP_THREADS}) else () set(NUM_THREADS 1) endif () # =================================== MPI if (USE_MPI) if (TEST_MPI_RANKS STREQUAL "auto") include(ProcessorCount) ProcessorCount(nproc) math(EXPR num_ranks "(${nproc}+${NUM_THREADS}-1)/${NUM_THREADS}" )# get 1/$NUM_THREADS the number of procs (rounded up) else () set(num_ranks ${TEST_MPI_RANKS}) endif () math(EXPR test_processors "${num_ranks} * ${NUM_THREADS}") message( "Tests will run with ${num_ranks} MPI ranks and ${NUM_THREADS} OpenMP threads each" ) else () set(test_processors ${NUM_THREADS}) endif () # =================================== DBCSR PERF TESTS set(DBCSR_PERF_SRCS dbcsr_performance_driver.F dbcsr_performance_multiply.F) add_executable(dbcsr_perf ${DBCSR_PERF_SRCS}) target_link_libraries(dbcsr_perf dbcsr) set_target_properties(dbcsr_perf PROPERTIES LINKER_LANGUAGE Fortran) target_link_libraries(dbcsr_perf $<$:OpenMP::OpenMP_Fortran>) file( GLOB DBCSR_PERF_TESTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "inputs/*.perf") if ("${MPI_Fortran_LIBRARY_VERSION_STRING}" MATCHES "Open MPI v2.1" OR "${MPI_Fortran_LIBRARY_VERSION_STRING}" MATCHES "Open MPI v3.1") list(FILTER DBCSR_PERF_TESTS EXCLUDE REGEX "_rma") endif () foreach (dbcsr_perf_test ${DBCSR_PERF_TESTS}) if (USE_MPI) separate_arguments(MPIEXEC_PREFLAGS) add_test( NAME dbcsr_perf:${dbcsr_perf_test} COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${num_ranks} ${MPIEXEC_PREFLAGS} $ ${MPIEXEC_POSTFLAGS} "${CMAKE_CURRENT_SOURCE_DIR}/${dbcsr_perf_test}") else () add_test(NAME dbcsr_perf:${dbcsr_perf_test} COMMAND $ "${CMAKE_CURRENT_SOURCE_DIR}/${dbcsr_perf_test}") endif () set_tests_properties( dbcsr_perf:${dbcsr_perf_test} PROPERTIES ENVIRONMENT OMP_NUM_THREADS=${NUM_THREADS} PROCESSORS ${test_processors}) endforeach () # =================================== DBCSR CORRECTNESS TESTS Define all the # tests here, will be used as the executable name set(DBCSR_TESTS_FTN dbcsr_unittest1 dbcsr_unittest2 dbcsr_unittest3 dbcsr_unittest4 dbcsr_tensor_unittest dbcsr_tas_unittest dbcsr_test_csr_conversions) if (USE_ACCEL) set(DBCSR_TESTS_BACKEND dbcsr_acc_test acc_bench) endif () if (NOT (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray")) set(DBCSR_TESTS_SRCS_CPP dbcsr_test.cpp dbcsr_tensor_test.cpp) endif () # For each test, set a variable testname_SRCS defining the sources of that test set(dbcsr_unittest1_SRCS dbcsr_unittest1.F) set(dbcsr_unittest2_SRCS dbcsr_unittest2.F) set(dbcsr_unittest3_SRCS dbcsr_unittest3.F) set(dbcsr_unittest4_SRCS dbcsr_unittest4.F dbcsr_test_scale_by_vector.F) set(dbcsr_tensor_unittest_SRCS dbcsr_tensor_unittest.F) set(dbcsr_tas_unittest_SRCS dbcsr_tas_unittest.F) set(dbcsr_test_csr_conversions_SRCS dbcsr_test_csr_conversions.F) set(dbcsr_test_cpp_SRCS dbcsr_test.cpp) set(dbcsr_tensor_test_cpp_SRCS dbcsr_tensor_test.cpp) set(dbcsr_acc_test_SRCS dbcsr_acc_test.c) set(acc_bench_SRCS ${CMAKE_SOURCE_DIR}/src/acc/acc_bench.c) # Make a list of the source files of fortran tests set(DBCSR_TESTS_SRCS_FTN) foreach (dbcsr_test ${DBCSR_TESTS_FTN}) set(DBCSR_TESTS_SRCS_FTN ${DBCSR_TESTS_SRCS_FTN} ${${dbcsr_test}_SRCS}) endforeach () # Common object files linked to all tests set(dbcsr_unittest_common_SRCS dbcsr_test_add.F dbcsr_test_multiply.F) # instead of building a full-blown lib, it would be better to simply build an # OBJECT lib, but we would need cmake 3.12 to be able to specify # target_link_libraries on those to get the proper compile flags add_library(dbcsr_unittest_common STATIC ${dbcsr_unittest_common_SRCS}) # target_link_libraries(dbcsr_unittest_common PUBLIC dbcsr) target_link_libraries(dbcsr_unittest_common PUBLIC ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) if (OpenMP_FOUND) target_link_libraries(dbcsr_unittest_common PUBLIC OpenMP::OpenMP_Fortran) endif () if (APPLE AND BLAS_LIBRARIES MATCHES "Accelerate") target_compile_definitions(dbcsr_unittest_common PRIVATE __ACCELERATE) endif () target_link_libraries(dbcsr_unittest_common PUBLIC dbcsr) # last # Compile Fortran tests foreach (dbcsr_test ${DBCSR_TESTS_FTN}) add_executable(${dbcsr_test} ${${dbcsr_test}_SRCS}) target_link_libraries(${dbcsr_test} dbcsr_unittest_common) set_target_properties(${dbcsr_test} PROPERTIES LINKER_LANGUAGE Fortran) # register unittest executable with CMake if (USE_MPI) separate_arguments(MPIEXEC_PREFLAGS) add_test( NAME ${dbcsr_test} COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${num_ranks} ${MPIEXEC_PREFLAGS} $ ${MPIEXEC_POSTFLAGS}) else () add_test(NAME ${dbcsr_test} COMMAND ${dbcsr_test}) endif () if (OpenMP_FOUND) target_link_libraries(${dbcsr_test} OpenMP::OpenMP_Fortran) endif () set_tests_properties( ${dbcsr_test} PROPERTIES ENVIRONMENT OMP_NUM_THREADS=${NUM_THREADS} PROCESSORS ${test_processors}) endforeach () # set the __SHORT_FILE__ per file for dbcsr sources foreach (tests_src ${DBCSR_PERF_SRCS} ${dbcsr_unittest_common_SRCS} ${DBCSR_TESTS_SRCS_FTN}) # add_fypp_sources returns a path in the current binary dir get_filename_component(short_file "${tests_src}" NAME) set_source_files_properties( ${tests_src} PROPERTIES COMPILE_DEFINITIONS __SHORT_FILE__="${short_file}") endforeach () if (WITH_C_API) foreach (dbcsr_test_cpp_src ${DBCSR_TESTS_SRCS_CPP}) get_filename_component(dbcsr_test_cpp_name ${dbcsr_test_cpp_src} NAME_WE) add_executable(${dbcsr_test_cpp_name} ${dbcsr_test_cpp_src}) target_link_libraries(${dbcsr_test_cpp_name} dbcsr_c MPI::MPI_CXX) set_target_properties(${dbcsr_test_cpp_name} PROPERTIES LINKER_LANGUAGE CXX) if (OpenMP_FOUND) target_link_libraries(${dbcsr_test_cpp_name} OpenMP::OpenMP_CXX) endif () # register unittest executable with CMake if (USE_MPI) separate_arguments(MPIEXEC_PREFLAGS) add_test( NAME ${dbcsr_test_cpp_name} COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${num_ranks} ${MPIEXEC_PREFLAGS} ./${dbcsr_test_cpp_name} ${MPIEXEC_POSTFLAGS}) else () add_test(NAME ${dbcsr_test_cpp_name} COMMAND ./${dbcsr_test_cpp_name}) endif () set_tests_properties( ${dbcsr_test_cpp_name} PROPERTIES ENVIRONMENT OMP_NUM_THREADS=${NUM_THREADS} PROCESSORS ${test_processors}) endforeach () endif () # =================================== BACKEND TESTS (ACC interface) if (NOT USE_MPI) foreach (dbcsr_test_backend ${DBCSR_TESTS_BACKEND}) add_executable(${dbcsr_test_backend} ${${dbcsr_test_backend}_SRCS}) # tests may not need to link dbcsr but there is no separate dbcsr_acc target_link_libraries(${dbcsr_test_backend} PRIVATE dbcsr) # register unittest executable with CMake add_test(NAME ${dbcsr_test_backend} COMMAND ./${dbcsr_test_backend}) set_tests_properties( ${dbcsr_test_backend} PROPERTIES ENVIRONMENT OMP_NUM_THREADS=${NUM_THREADS} PROCESSORS ${NUM_THREADS}) endforeach () endif () # =================================== GPU BACKEND TESTS (CUDA/HIP) # Add custom commands for the test files that need to be generated from a # template file(RELATIVE_PATH CURRENT_BINARY_DIR_RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/.. ${CMAKE_CURRENT_BINARY_DIR}) # libsmm_acc_unittest_multiply add_custom_target( generate_libsmm_acc_unittest_multiply_test_cpp COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/generate_libsmm_acc_unittest_multiply.py --base_dir ${CMAKE_CURRENT_SOURCE_DIR}/.. --out_dir ${CURRENT_BINARY_DIR_RELATIVE} --gpu_version=${WITH_GPU_PARAMS} DEPENDS libsmm_acc_unittest_multiply.cpp.template generate_libsmm_acc_unittest_multiply.py BYPRODUCTS libsmm_acc_unittest_multiply.cpp COMMENT "Generate tests/libsmm_acc_unittest_multiply.cpp") # libsmm_acc_timer_multiply add_custom_target( generate_libsmm_acc_timer_multiply_test_cpp COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/generate_libsmm_acc_timer_multiply.py --base_dir ${CMAKE_CURRENT_SOURCE_DIR}/.. --out_dir ${CURRENT_BINARY_DIR_RELATIVE} --gpu_version=${WITH_GPU_PARAMS} DEPENDS libsmm_acc_timer_multiply.cpp.template generate_libsmm_acc_timer_multiply.py BYPRODUCTS libsmm_acc_timer_multiply.cpp COMMENT "Generate tests/generate_libsmm_acc_timer_multiply.cpp") if (USE_ACCEL MATCHES "cuda|hip") # All libsmm_acc tests set(LIBSMM_ACC_TESTS_SRCS ${CMAKE_CURRENT_BINARY_DIR}/libsmm_acc_unittest_multiply.cpp ${CMAKE_CURRENT_BINARY_DIR}/libsmm_acc_timer_multiply.cpp libsmm_acc_unittest_transpose.cpp) # Add executables for all libsmm_acc tests foreach (libsmm_acc_test ${LIBSMM_ACC_TESTS_SRCS}) get_filename_component(libsmm_acc_test_name ${libsmm_acc_test} NAME_WE) add_executable(${libsmm_acc_test_name} ${libsmm_acc_test}) target_compile_definitions( ${libsmm_acc_test_name} PRIVATE $<$:__HIP> $<$:__CUDA>) # some of the tests access internal headers and functions, requiring include # paths to be present which are otherwise not exported target_link_libraries( ${libsmm_acc_test_name} dbcsr $<$:hip::host> $<$:CUDA::cuda_driver> libsmm_acc) set_target_properties(${libsmm_acc_test_name} PROPERTIES LINKER_LANGUAGE CXX) if (OpenMP_FOUND) target_link_libraries(${libsmm_acc_test_name} OpenMP::OpenMP_CXX) endif () endforeach () # Comment for the moment, they are not parallelized, very slow... Check issue # https://github.com/cp2k/dbcsr/issues/427 add_test(NAME # libsmm_acc_unittest_multiply COMMAND libsmm_acc_unittest_multiply) # add_test(NAME libsmm_acc_unittest_transpose COMMAND # libsmm_acc_unittest_transpose) add_test(NAME # libsmm_acc_timer_multiply-autotuned COMMAND libsmm_acc_timer_multiply # autotuned) add_test(NAME libsmm_acc_timer_multiply-predicted COMMAND # libsmm_acc_timer_multiply predicted) endif () # =================================== DOCUMENTATION GENERATION Copy test source # files into the build directory so that their documentation can be generated by # FORD set(DBCSR_TESTS dbcsr_performance_driver.F ${DBCSR_TESTS_SRCS_FTN} ${DBCSR_TESTS_SRCS_CPP} libsmm_acc_unittest_transpose.cpp) # Make a list of the copy commands set(test_copy_commands) foreach (test ${DBCSR_TESTS}) list( APPEND test_copy_commands COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/tests/${test} ${CMAKE_BINARY_DIR}/tests) endforeach () add_custom_target( doc_copy_tests COMMENT "Copy tests for documentation generation" COMMAND mkdir -p ${CMAKE_BINARY_DIR}/tests ${test_copy_commands} VERBATIM) # libsmm_acc_unittest_multiply.cpp and libsmm_acc_timer_multiply.cpp do not need # to be copied to the build directory since they are generated at build-time and # written to the build directory directly. We just need to make sure that the # documentation generation depends on the generation of these tests. add_dependencies(doc_copy_tests generate_libsmm_acc_unittest_multiply_test_cpp) add_dependencies(doc_copy_tests generate_libsmm_acc_timer_multiply_test_cpp) ================================================ FILE: tests/README.md ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! # DBCSR Testing and Performance ## Correctness tests - [dbcsr_tas_unittest](dbcsr_tas_unittest.F) : unit test for tall-and-skinny matrices - [dbcsr_tensor_test](dbcsr_tensor_test.cpp) : test the tensor contraction (13|2)x(54|21)=(3|45) 31 and other functions - [dbcsr_tensor_unittest](dbcsr_tensor_unittest.F) : unit test for tensor functionalities - [dbcsr_test_csr_conversions](dbcsr_test_csr_conversions.F) : test DBCSR to CSR conversion with random matrices - [dbcsr_unittest_1](dbcsr_unittest1.F) : test matrix operations: add, multiply and multiply-ghost - [dbcsr_unittest_2](dbcsr_unittest2.F) : test matrix-multiply with large blocks (block size=100) and rectangular matrices (block size=5) ### GPU-backend correctness tests: - [dbcsr_unittest_3](dbcsr_unittest3.F) : test matrix-multiply with various block sizes that are run by the libsmm_acc GPU backend if DBCSR is compiled with GPU support - [libsmm_acc_unittest_multiply](libsmm_acc_unittest_multiply.cpp.template) : tests all libsmm_acc transpose kernels - [libsmm_acc_unittest_transpose](libsmm_acc_unittest_transpose.cpp) : tests all libsmm_acc batch-multiplication kernels ## Performance tests DBCSR performance tests: - [dbcsr_performance_driver](dbcsr_performance_driver.F) : performance tester for matrix operations. The input matrices can be described in an input file in order to test different configurations. See below. ### GPU backend performance tests: - [libsmm_acc_timer_multiply](libsmm_acc_timer_multiply.cpp.template) : time all libsmm_acc batch-multiplication kernels --- See the [tests' documentation](../docs/guide/2-user-guide/2-tests/index.md). ================================================ FILE: tests/dbcsr_acc_test.c ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #include "acc/acc.h" #include #include #include #if !defined(NDEBUG) # include #endif #if defined(_OPENMP) # include #endif #if !defined(ACC_STRING_MAXLEN) # define ACC_STRING_MAXLEN 32 #endif #if !defined(ACC_STREAM_MAXCOUNT) # define ACC_STREAM_MAXCOUNT 16 #endif #if !defined(ACC_EVENT_MAXCOUNT) # define ACC_EVENT_MAXCOUNT (16 * ACC_STREAM_MAXCOUNT) #endif #if !defined(ACC_STREAM_MAXNTH_DESTROY) # define ACC_STREAM_MAXNTH_DESTROY 2 #endif #if !defined(ACC_EVENT_MAXNTH_DESTROY) # define ACC_EVENT_MAXNTH_DESTROY 3 #endif #if defined(NDEBUG) # define ACC_CHECK(RESULT) \ do { \ const int acc_check_result_ = (RESULT); \ if (EXIT_SUCCESS != acc_check_result_) exit(acc_check_result_); \ } while (0) # define PRINTF(A, ...) #else /* debug */ # define ACC_CHECK(RESULT) assert(EXIT_SUCCESS == (RESULT)) # define PRINTF(A, ...) printf(A, __VA_ARGS__) #endif /** * This program tests the ACC interface (include/acc.h) for adhering to expectations. * The expected behavior is to match the CUDA based implementation, which was available * first. This test program can serve as a specification for other backends such as the * OpenMP based backend. It may also be used to stress-test any backend including the * CUDA based backend for thread-safety. Thread-safety is an implicit requirement * induced by DBCSR (and CP2K). To test any backend (other than the OpenMP backend), * the Makefile must be adjusted to link with the desired backend. */ int main(int argc, char* argv[]) { const int device = (1 < argc ? atoi(argv[1]) : 0); #if defined(_OPENMP) const int max_nthreads = omp_get_max_threads(); #else const int max_nthreads = 1; #endif const int cli_nthreads = (2 < argc ? atoi(argv[2]) : max_nthreads); const int nthreads = ((0 < cli_nthreads && cli_nthreads <= max_nthreads) ? cli_nthreads : max_nthreads); int randnums[ACC_EVENT_MAXCOUNT], ndevices, priomin, priomax, i, nt; void *event[ACC_EVENT_MAXCOUNT], *s = NULL; const size_t mem_alloc = (16 /*MB*/ << 20); size_t mem_free, mem_total, mem_chunk; void *host_mem = NULL, *dev_mem = NULL; for (i = 0; i < ACC_EVENT_MAXCOUNT; ++i) { randnums[i] = rand(); } /* allow get_ndevices/set_active_device before init */ ACC_CHECK(c_dbcsr_acc_get_ndevices(&ndevices)); if (0 <= device && device < ndevices) { /* not an error */ ACC_CHECK(c_dbcsr_acc_set_active_device(device)); } ACC_CHECK(c_dbcsr_acc_init()); ACC_CHECK(c_dbcsr_acc_get_ndevices(&ndevices)); PRINTF("ndevices: %i\n", ndevices); /* continue tests even with no device */ if (0 <= device && device < ndevices) { /* not an error */ ACC_CHECK(c_dbcsr_acc_set_active_device(device)); } if (0 < ndevices) { ACC_CHECK(c_dbcsr_acc_dev_mem_info(&mem_free, &mem_total)); ACC_CHECK(mem_free <= mem_total ? EXIT_SUCCESS : EXIT_FAILURE); PRINTF("device memory: free=%i MB total=%i MB\n", (int)(mem_free >> 20), (int)(mem_total >> 20)); ACC_CHECK(c_dbcsr_acc_stream_priority_range(&priomin, &priomax)); PRINTF("stream priority: lowest=%i highest=%i\n", priomin, priomax); for (i = 0; i < ACC_EVENT_MAXCOUNT; ++i) { event[i] = NULL; } /* create stream with NULL-name and low priority */ ACC_CHECK(c_dbcsr_acc_stream_create(&s, NULL /*name*/, priomin)); ACC_CHECK(c_dbcsr_acc_stream_destroy(s)); /* create stream with empty name and medium priority */ ACC_CHECK(c_dbcsr_acc_stream_create(&s, "", (priomin + priomax) / 2)); ACC_CHECK(c_dbcsr_acc_stream_destroy(s)); /* destroying NULL-stream shall be valid (just like delete/free) */ ACC_CHECK(c_dbcsr_acc_stream_destroy(NULL)); ACC_CHECK(c_dbcsr_acc_event_destroy(NULL)); #if defined(_OPENMP) # pragma omp parallel for num_threads(nthreads) private(i) #endif for (i = 0; i < ACC_EVENT_MAXCOUNT; ++i) { const int r = randnums[i] % ACC_EVENT_MAXCOUNT; ACC_CHECK(c_dbcsr_acc_event_create(event + i)); if (ACC_EVENT_MAXNTH_DESTROY * r < ACC_EVENT_MAXCOUNT) { void* const ei = event[i]; event[i] = NULL; ACC_CHECK(c_dbcsr_acc_event_destroy(ei)); } } #if defined(_OPENMP) # pragma omp parallel for num_threads(nthreads) private(i) #endif for (i = 0; i < ACC_EVENT_MAXCOUNT; ++i) { if (NULL == event[i]) { ACC_CHECK(c_dbcsr_acc_event_create(event + i)); } ACC_CHECK(c_dbcsr_acc_event_destroy(event[i])); } #if defined(_OPENMP) # pragma omp parallel for num_threads(nthreads) private(i) #endif for (i = 0; i < ACC_EVENT_MAXCOUNT; ++i) ACC_CHECK(c_dbcsr_acc_event_create(event + i)); for (i = 0; i < ACC_EVENT_MAXCOUNT; ++i) { c_dbcsr_acc_bool_t has_occurred = 0; ACC_CHECK(c_dbcsr_acc_event_query(event[i], &has_occurred)); ACC_CHECK(has_occurred ? EXIT_SUCCESS : EXIT_FAILURE); } ACC_CHECK(c_dbcsr_acc_stream_create(&s, "stream", priomax)); if (NULL != s) { ACC_CHECK(c_dbcsr_acc_host_mem_allocate(&host_mem, mem_alloc, s)); ACC_CHECK(c_dbcsr_acc_stream_sync(s)); /* wait for completion */ memset(host_mem, 0xFF, mem_alloc); /* non-zero pattern */ } ACC_CHECK(c_dbcsr_acc_dev_mem_allocate(&dev_mem, mem_alloc)); nt = (nthreads < ACC_EVENT_MAXCOUNT ? nthreads : ACC_EVENT_MAXCOUNT); mem_chunk = (mem_alloc + nt - 1) / nt; #if defined(_OPENMP) # pragma omp parallel num_threads(nt) #endif { #if defined(_OPENMP) const int tid = omp_get_thread_num(); #else const int tid = 0; #endif const size_t offset = tid * mem_chunk, mem_rest = mem_alloc - offset; const size_t size = (mem_chunk <= mem_rest ? mem_chunk : mem_rest); c_dbcsr_acc_bool_t has_occurred = 0; ACC_CHECK(c_dbcsr_acc_memset_zero(dev_mem, offset, size, s)); /* can enqueue multiple/duplicate copies for the same memory region */ ACC_CHECK(c_dbcsr_acc_memcpy_d2h(dev_mem, host_mem, mem_alloc, s)); ACC_CHECK(c_dbcsr_acc_event_query(event[tid], &has_occurred)); /* unrecorded event has no work to wait for, hence it occurred */ ACC_CHECK(has_occurred ? EXIT_SUCCESS : EXIT_FAILURE); ACC_CHECK(c_dbcsr_acc_event_record(event[tid], s)); ACC_CHECK(c_dbcsr_acc_stream_wait_event(s, event[tid])); ACC_CHECK(c_dbcsr_acc_event_synchronize(event[tid])); ACC_CHECK(c_dbcsr_acc_event_query(event[tid], &has_occurred)); ACC_CHECK(has_occurred ? EXIT_SUCCESS : EXIT_FAILURE); } /* validate backwards from where the last transfers occurred */ for (i = (int)(mem_alloc - 1); 0 <= i; --i) { ACC_CHECK(0 == ((char*)host_mem)[i] ? EXIT_SUCCESS : EXIT_FAILURE); } #if defined(_OPENMP) # pragma omp parallel for num_threads(nthreads) private(i) #endif for (i = 0; i < ACC_EVENT_MAXCOUNT; ++i) ACC_CHECK(c_dbcsr_acc_event_destroy(event[i])); } ACC_CHECK(c_dbcsr_acc_dev_mem_deallocate(dev_mem)); if (NULL != s) ACC_CHECK(c_dbcsr_acc_host_mem_deallocate(host_mem, s)); ACC_CHECK(c_dbcsr_acc_stream_destroy(s)); c_dbcsr_acc_clear_errors(); /* no result code */ ACC_CHECK(c_dbcsr_acc_finalize()); return EXIT_SUCCESS; } ================================================ FILE: tests/dbcsr_performance_driver.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! PROGRAM dbcsr_performance_driver !! Performance tester for DBCSR operations USE dbcsr_config, ONLY: dbcsr_set_config, dbcsr_print_config USE dbcsr_files, ONLY: open_file USE dbcsr_kinds, ONLY: default_string_length USE dbcsr_lib, ONLY: dbcsr_finalize_lib, & dbcsr_init_lib, & dbcsr_print_statistics USE dbcsr_machine, ONLY: default_output_unit, & m_getarg, & m_iargc USE dbcsr_mp_methods, ONLY: dbcsr_mp_new, & dbcsr_mp_release USE dbcsr_mpiwrap, ONLY: & mp_bcast, mp_cart_create, mp_cart_rank, mp_comm_free, mp_environ, & mp_world_finalize, mp_world_init, mp_comm_type USE dbcsr_performance_multiply, ONLY: dbcsr_perf_multiply USE dbcsr_toollib, ONLY: atoi, atol USE dbcsr_types, ONLY: dbcsr_mp_obj #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_max_threads, omp_get_thread_num, omp_get_num_threads IMPLICIT NONE INTEGER :: numnodes, mynode, & prow, pcol, io_unit, narg, handle INTEGER, DIMENSION(2) :: npdims, myploc INTEGER, DIMENSION(:, :), POINTER :: pgrid TYPE(dbcsr_mp_obj) :: mp_env CHARACTER(len=default_string_length) :: args(100) TYPE(mp_comm_type) :: mp_comm, group CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_performance_driver' !*************************************************************************************** ! initialize mpi CALL mp_world_init(mp_comm) ! Number of nodes and rankid CALL mp_environ(numnodes, mynode, mp_comm) ! read and distribute input args IF (mynode .EQ. 0) CALL dbcsr_test_read_args(narg, args) CALL mp_bcast(narg, 0, mp_comm) CALL mp_bcast(args, 0, mp_comm) IF (narg .LT. 1) & DBCSR_ABORT("nargs not correct") ! setup the mp environment IF (atoi(args(1)) .LE. 0) THEN npdims(:) = 0 ELSE npdims(2) = atoi(args(1)) IF (MOD(numnodes, npdims(2)) .NE. 0) THEN CALL dbcsr_abort(__LOCATION__, & "numnodes is not multiple of npcols") END IF npdims(1) = numnodes/npdims(2) END IF CALL mp_cart_create(mp_comm, 2, npdims, myploc, group) ALLOCATE (pgrid(0:npdims(1) - 1, 0:npdims(2) - 1)) DO prow = 0, npdims(1) - 1 DO pcol = 0, npdims(2) - 1 CALL mp_cart_rank(group, (/prow, pcol/), pgrid(prow, pcol)) END DO END DO CALL dbcsr_mp_new(mp_env, group, pgrid, mynode, numnodes, & myprow=myploc(1), mypcol=myploc(2)) DEALLOCATE (pgrid) ! set standard output parameters io_unit = 0 IF (mynode .EQ. mp_env%mp%source) io_unit = default_output_unit ! initialize libdbcsr CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit) ! initialize libdbcsr errors CALL timeset(routineN, handle) ! Check for MPI-RMA algorithm CALL dbcsr_set_config(use_mpi_rma=atol(args(2))) ! print DBCSR configuration CALL dbcsr_print_config(io_unit) ! select the operation SELECT CASE (args(3)) CASE ('dbcsr_multiply') CALL dbcsr_perf_multiply(group, mp_env, npdims, io_unit, narg, 3, args) CASE DEFAULT DBCSR_ABORT("operation not found") END SELECT ! finalize libdbcsr errors CALL timestop(handle) ! clean mp environment CALL dbcsr_mp_release(mp_env) ! free comm CALL mp_comm_free(group) ! print statistics CALL dbcsr_print_statistics(.true., "test.callgraph") ! finalize DBCSR CALL dbcsr_finalize_lib() ! finalize mpi CALL mp_world_finalize() CONTAINS SUBROUTINE dbcsr_test_read_args(narg, args) INTEGER, INTENT(out) :: narg CHARACTER(len=*), DIMENSION(:), INTENT(out) :: args CHARACTER(len=1000) :: line INTEGER :: istat, unit ! Read for standard input unit = 5 ! ! Read from a file IF (m_iargc() .GT. 0) THEN CALL m_getarg(1, line) CALL open_file(TRIM(line), unit_number=unit) END IF narg = 0 DO READ (unit, *, IOSTAT=istat) line IF (istat .NE. 0) EXIT IF (line(1:1) .EQ. '#') CYCLE narg = narg + 1 args(narg) = line END DO END SUBROUTINE dbcsr_test_read_args END PROGRAM dbcsr_performance_driver ================================================ FILE: tests/dbcsr_performance_multiply.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_performance_multiply !! Performance for DBCSR multiply USE dbcsr_data_methods, ONLY: dbcsr_scalar, & dbcsr_scalar_negative, & dbcsr_scalar_one USE dbcsr_dist_methods, ONLY: dbcsr_distribution_col_dist, & dbcsr_distribution_new, & dbcsr_distribution_release, & dbcsr_distribution_row_dist USE dbcsr_dist_operations, ONLY: dbcsr_dist_bin USE dbcsr_dist_util, ONLY: dbcsr_checksum USE dbcsr_io, ONLY: dbcsr_print USE dbcsr_kinds, ONLY: int_8, & real_4, & real_8 USE dbcsr_machine, ONLY: m_walltime USE dbcsr_methods, ONLY: & dbcsr_col_block_offsets, dbcsr_col_block_sizes, dbcsr_distribution, dbcsr_get_data_type, & dbcsr_get_matrix_type, dbcsr_name, dbcsr_nfullcols_total, dbcsr_nfullrows_total, & dbcsr_release, dbcsr_row_block_offsets, dbcsr_row_block_sizes USE dbcsr_mp_methods, ONLY: dbcsr_mp_npcols, & dbcsr_mp_nprows USE dbcsr_mpiwrap, ONLY: mp_environ, & mp_sum, & mp_sync, mp_comm_type USE dbcsr_multiply_api, ONLY: dbcsr_multiply USE dbcsr_operations, ONLY: dbcsr_copy, & dbcsr_scale USE dbcsr_test_methods, ONLY: dbcsr_make_random_block_sizes, & dbcsr_make_random_matrix, & dbcsr_reset_randmat_seed USE dbcsr_toollib, ONLY: atoi, & atol, & ator USE dbcsr_transformations, ONLY: dbcsr_redistribute USE dbcsr_types, ONLY: & dbcsr_conjugate_transpose, dbcsr_distribution_obj, dbcsr_mp_obj, dbcsr_no_transpose, & dbcsr_scalar_type, dbcsr_transpose, dbcsr_type, dbcsr_type_antisymmetric, & dbcsr_type_complex_4, dbcsr_type_complex_8, dbcsr_type_no_symmetry, dbcsr_type_real_4, & dbcsr_type_real_8 USE dbcsr_work_operations, ONLY: dbcsr_create, & dbcsr_finalize #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_max_threads, omp_get_thread_num, omp_get_num_threads IMPLICIT NONE PRIVATE PUBLIC :: dbcsr_perf_multiply CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_performance_multiply' CONTAINS SUBROUTINE dbcsr_perf_multiply(group, mp_env, npdims, io_unit, narg, args_shift, args) TYPE(mp_comm_type) :: group TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER, DIMENSION(2), INTENT(in) :: npdims INTEGER :: io_unit, narg, args_shift CHARACTER(len=*), DIMENSION(:), INTENT(IN) :: args CHARACTER :: symmetries(3), trans(2) INTEGER :: i, iblk, kblk_to_read, limits(6), & matrix_sizes(3), mblk_to_read, & nblk_to_read, nrep, TYPE INTEGER, ALLOCATABLE, DIMENSION(:) :: bs_k, bs_m, bs_n LOGICAL :: chksum_check, retain_sparsity REAL(real_8) :: alpha(2), beta(2), chksum_ref, & chksum_ref_pos, chksum_threshold, & sparsities(3) ! ! parsing IF (narg .LT. args_shift + 31) THEN WRITE (io_unit, *) "Input file format:" WRITE (io_unit, *) " npcols for MPI grid \\" WRITE (io_unit, *) " use MPI-RMA algorithm \\" WRITE (io_unit, *) " dbcsr_multiply \\" WRITE (io_unit, *) " M N K \\" WRITE (io_unit, *) " SpA SpB SpC \\" WRITE (io_unit, *) " TrA TrB \\" WRITE (io_unit, *) " SymA SymB SymC \\" WRITE (io_unit, *) " data_type \\" WRITE (io_unit, *) " Re(alpha) Im(alpha) Re(beta) Im(beta) \\" WRITE (io_unit, *) " limRowL limRowU limColL limColU limKL limKU \\" WRITE (io_unit, *) " retain_sparsity nrep \\" WRITE (io_unit, *) " nmblksizes nnblksizes nkblksizes \\" WRITE (io_unit, *) " [mblksizes] [nblksizes] [kblksizes] \\" WRITE (io_unit, *) " checksum_check checksum_threshold checksum_ref checksum_ref_pos" DBCSR_ABORT("narg not correct") END IF matrix_sizes(1) = atoi(args(args_shift + 1)) matrix_sizes(2) = atoi(args(args_shift + 2)) matrix_sizes(3) = atoi(args(args_shift + 3)) sparsities(1) = ator(args(args_shift + 4)) sparsities(2) = ator(args(args_shift + 5)) sparsities(3) = ator(args(args_shift + 6)) trans(1) = args(args_shift + 7) trans(2) = args(args_shift + 8) symmetries(1) = args(args_shift + 9) symmetries(2) = args(args_shift + 10) symmetries(3) = args(args_shift + 11) TYPE = atoi(args(args_shift + 12)) alpha(1) = ator(args(args_shift + 13)) alpha(2) = ator(args(args_shift + 14)) beta(1) = ator(args(args_shift + 15)) beta(2) = ator(args(args_shift + 16)) limits(1) = atoi(args(args_shift + 17)) limits(2) = atoi(args(args_shift + 18)) limits(3) = atoi(args(args_shift + 19)) limits(4) = atoi(args(args_shift + 20)) limits(5) = atoi(args(args_shift + 21)) limits(6) = atoi(args(args_shift + 22)) retain_sparsity = atol(args(args_shift + 23)) nrep = atoi(args(args_shift + 24)) mblk_to_read = atoi(args(args_shift + 25)) nblk_to_read = atoi(args(args_shift + 26)) kblk_to_read = atoi(args(args_shift + 27)) IF (narg < 34 + 2*(mblk_to_read + nblk_to_read + kblk_to_read)) & DBCSR_ABORT("narg not correct") ALLOCATE (bs_m(2*mblk_to_read), bs_n(2*nblk_to_read), bs_k(2*kblk_to_read)) i = args_shift + 27 DO iblk = 1, mblk_to_read i = i + 1 bs_m(2*(iblk - 1) + 1) = atoi(args(i)) i = i + 1 bs_m(2*(iblk - 1) + 2) = atoi(args(i)) END DO DO iblk = 1, nblk_to_read i = i + 1 bs_n(2*(iblk - 1) + 1) = atoi(args(i)) i = i + 1 bs_n(2*(iblk - 1) + 2) = atoi(args(i)) END DO DO iblk = 1, kblk_to_read i = i + 1 bs_k(2*(iblk - 1) + 1) = atoi(args(i)) i = i + 1 bs_k(2*(iblk - 1) + 2) = atoi(args(i)) END DO chksum_check = atol(args(i + 1)) chksum_threshold = ator(args(i + 2)) IF (chksum_check .AND. chksum_threshold .LE. 0.0) & CALL dbcsr_abort(__LOCATION__, & "Checksum threshold must be positive!") chksum_ref = ator(args(i + 3)) chksum_ref_pos = ator(args(i + 4)) ! ! do checks here ! ! if the limits are not specified (i.e 0), we set them here IF (limits(1) .EQ. 0) limits(1) = 1 IF (limits(2) .EQ. 0) limits(2) = matrix_sizes(1) IF (limits(3) .EQ. 0) limits(3) = 1 IF (limits(4) .EQ. 0) limits(4) = matrix_sizes(2) IF (limits(5) .EQ. 0) limits(5) = 1 IF (limits(6) .EQ. 0) limits(6) = matrix_sizes(3) ! ! lets go ! CALL dbcsr_perf_multiply_low(group, mp_env, npdims, io_unit, matrix_sizes, & bs_m, bs_n, bs_k, sparsities, trans, symmetries, TYPE, & alpha, beta, limits, retain_sparsity, nrep, & chksum_check, chksum_threshold, chksum_ref, & chksum_ref_pos) DEALLOCATE (bs_m, bs_n, bs_k) END SUBROUTINE dbcsr_perf_multiply SUBROUTINE dbcsr_perf_multiply_low(mp_group, mp_env, npdims, io_unit, & matrix_sizes, bs_m, bs_n, bs_k, sparsities, trans, symmetries, data_type, & alpha_in, beta_in, limits, retain_sparsity, nrep, & chksum_check, chksum_threshold, chksum_ref, chksum_ref_pos) !! Performs a variety of matrix multiplies of same matrices on different !! processor grids TYPE(mp_comm_type), INTENT(IN) :: mp_group !! MPI communicator TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER, DIMENSION(2), INTENT(in) :: npdims INTEGER, INTENT(IN) :: io_unit !! which unit to write to, if not negative INTEGER, DIMENSION(:), INTENT(in) :: matrix_sizes, bs_m, bs_n, bs_k !! size of matrices to test !! block sizes of the 3 dimensions !! block sizes of the 3 dimensions !! block sizes of the 3 dimensions REAL(real_8), DIMENSION(3), INTENT(in) :: sparsities !! sparsities of matrices to create CHARACTER, DIMENSION(2), INTENT(in) :: trans !! transposes of the two matrices CHARACTER, DIMENSION(3), INTENT(in) :: symmetries INTEGER, INTENT(IN) :: data_type !! types of matrices to create REAL(real_8), DIMENSION(2), INTENT(in) :: alpha_in, beta_in !! alpha value to use in multiply !! beta value to use in multiply INTEGER, DIMENSION(6), INTENT(in) :: limits LOGICAL, INTENT(in) :: retain_sparsity INTEGER, INTENT(IN) :: nrep LOGICAL, INTENT(in) :: chksum_check REAL(real_8), INTENT(in) :: chksum_threshold, chksum_ref, & chksum_ref_pos CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_perf_multiply_low' CHARACTER :: a_symm, b_symm, c_symm, transa, transb INTEGER :: handle, mynode, numnodes, numthreads INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_dist_a, col_dist_b, col_dist_c, my_sizes_k, & my_sizes_m, my_sizes_n, row_dist_a, row_dist_b, row_dist_c, sizes_k, sizes_m, sizes_n LOGICAL :: do_complex LOGICAL, DIMENSION(2) :: trs TYPE(dbcsr_distribution_obj) :: dist_a, dist_b, dist_c TYPE(dbcsr_scalar_type) :: alpha, beta TYPE(dbcsr_type) :: matrix_a, matrix_b, matrix_c ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) NULLIFY (my_sizes_k, my_sizes_m, my_sizes_n, & sizes_k, sizes_m, sizes_n) ! ! print CALL mp_environ(numnodes, mynode, mp_group) IF (io_unit .GT. 0) THEN numthreads = 1 !$OMP PARALLEL !$OMP MASTER !$ numthreads = omp_get_num_threads() !$OMP END MASTER !$OMP END PARALLEL WRITE (io_unit, *) 'numthreads', numthreads WRITE (io_unit, *) 'numnodes', numnodes WRITE (io_unit, *) 'matrix_sizes', matrix_sizes WRITE (io_unit, *) 'sparsities', sparsities WRITE (io_unit, *) 'trans ', trans WRITE (io_unit, *) 'symmetries ', symmetries WRITE (io_unit, *) 'type ', data_type WRITE (io_unit, *) 'alpha_in', alpha_in WRITE (io_unit, *) 'beta_in', beta_in WRITE (io_unit, *) 'limits', limits WRITE (io_unit, *) 'retain_sparsity', retain_sparsity WRITE (io_unit, *) 'nrep', nrep WRITE (io_unit, *) 'bs_m', bs_m WRITE (io_unit, *) 'bs_n', bs_n WRITE (io_unit, *) 'bs_k', bs_k END IF ! CALL dbcsr_reset_randmat_seed() ! a_symm = symmetries(1) b_symm = symmetries(2) c_symm = symmetries(3) IF (a_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(1) .NE. matrix_sizes(3)) & DBCSR_ABORT("") IF (b_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(2) .NE. matrix_sizes(3)) & DBCSR_ABORT("") IF (c_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(1) .NE. matrix_sizes(2)) & DBCSR_ABORT("") do_complex = data_type .EQ. dbcsr_type_complex_4 .OR. data_type .EQ. dbcsr_type_complex_8 SELECT CASE (data_type) CASE (dbcsr_type_real_4) alpha = dbcsr_scalar(REAL(alpha_in(1), real_4)) beta = dbcsr_scalar(REAL(beta_in(1), real_4)) CASE (dbcsr_type_real_8) alpha = dbcsr_scalar(REAL(alpha_in(1), real_8)) beta = dbcsr_scalar(REAL(beta_in(1), real_8)) CASE (dbcsr_type_complex_4) alpha = dbcsr_scalar(CMPLX(alpha_in(1), alpha_in(2), real_4)) beta = dbcsr_scalar(CMPLX(beta_in(1), beta_in(2), real_4)) CASE (dbcsr_type_complex_8) alpha = dbcsr_scalar(CMPLX(alpha_in(1), alpha_in(2), real_8)) beta = dbcsr_scalar(CMPLX(beta_in(1), beta_in(2), real_8)) END SELECT transa = trans(1) transb = trans(2) ! ! if C has a symmetry, we need special transpositions IF (c_symm .NE. dbcsr_type_no_symmetry) THEN IF (.NOT. (transa .EQ. dbcsr_no_transpose .AND. & transb .EQ. dbcsr_transpose .OR. & transa .EQ. dbcsr_transpose .AND. & transb .EQ. dbcsr_no_transpose .OR. & transa .EQ. dbcsr_no_transpose .AND. & transb .EQ. dbcsr_conjugate_transpose .AND. & .NOT. do_complex .OR. & transa .EQ. dbcsr_conjugate_transpose .AND. & transb .EQ. dbcsr_no_transpose .AND. & .NOT. do_complex)) THEN DBCSR_ABORT("") END IF END IF ! ! if C has symmetry and special limits IF (c_symm .NE. dbcsr_type_no_symmetry) THEN IF (limits(1) .NE. 1 .OR. limits(2) .NE. matrix_sizes(1) .OR. & limits(3) .NE. 1 .OR. limits(4) .NE. matrix_sizes(2)) THEN DBCSR_ABORT("") END IF END IF ! ! Create the row/column block sizes. CALL dbcsr_make_random_block_sizes(sizes_m, matrix_sizes(1), bs_m) CALL dbcsr_make_random_block_sizes(sizes_n, matrix_sizes(2), bs_n) CALL dbcsr_make_random_block_sizes(sizes_k, matrix_sizes(3), bs_k) ! ! if we have symmetry the row and column block sizes have to match IF (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. & b_symm .NE. dbcsr_type_no_symmetry) THEN my_sizes_m => sizes_m; my_sizes_n => sizes_m; my_sizes_k => sizes_m ELSEIF ((c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. & b_symm .NE. dbcsr_type_no_symmetry) .OR. & (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. & b_symm .NE. dbcsr_type_no_symmetry) .OR. & (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. & b_symm .EQ. dbcsr_type_no_symmetry)) THEN my_sizes_m => sizes_m; my_sizes_n => sizes_m; my_sizes_k => sizes_m ELSEIF (c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. & b_symm .NE. dbcsr_type_no_symmetry) THEN my_sizes_m => sizes_m; my_sizes_n => sizes_n; my_sizes_k => sizes_n ELSEIF (c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. & b_symm .EQ. dbcsr_type_no_symmetry) THEN my_sizes_m => sizes_m; my_sizes_n => sizes_n; my_sizes_k => sizes_m ELSEIF (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. & b_symm .EQ. dbcsr_type_no_symmetry) THEN my_sizes_m => sizes_m; my_sizes_n => sizes_m; my_sizes_k => sizes_k ELSEIF (c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. & b_symm .EQ. dbcsr_type_no_symmetry) THEN my_sizes_m => sizes_m; my_sizes_n => sizes_n; my_sizes_k => sizes_k ELSE DBCSR_ABORT("something wrong here...") END IF ! Create the random matrices. trs(1) = transa .NE. dbcsr_no_transpose trs(2) = transb .NE. dbcsr_no_transpose CALL dbcsr_dist_bin(row_dist_c, SIZE(sizes_m), npdims(1), & sizes_m) CALL dbcsr_dist_bin(col_dist_c, SIZE(sizes_n), npdims(2), & sizes_n) CALL dbcsr_distribution_new(dist_c, mp_env, row_dist_c, col_dist_c) CALL dbcsr_make_random_matrix(matrix_c, sizes_m, sizes_n, "Matrix C", & REAL(sparsities(3), real_8), & mp_group, data_type=data_type, dist=dist_c) CALL dbcsr_distribution_release(dist_c) IF (trs(1)) THEN CALL dbcsr_dist_bin(row_dist_a, SIZE(sizes_k), npdims(1), & sizes_k) CALL dbcsr_dist_bin(col_dist_a, SIZE(sizes_m), npdims(2), & sizes_m) CALL dbcsr_distribution_new(dist_a, mp_env, row_dist_a, col_dist_a) CALL dbcsr_make_random_matrix(matrix_a, sizes_k, sizes_m, "Matrix A", & REAL(sparsities(1), real_8), & mp_group, data_type=data_type, dist=dist_a) DEALLOCATE (row_dist_a, col_dist_a) ELSE CALL dbcsr_dist_bin(col_dist_a, SIZE(sizes_k), npdims(2), & sizes_k) CALL dbcsr_distribution_new(dist_a, mp_env, row_dist_c, col_dist_a) CALL dbcsr_make_random_matrix(matrix_a, sizes_m, sizes_k, "Matrix A", & REAL(sparsities(1), real_8), & mp_group, data_type=data_type, dist=dist_a) DEALLOCATE (col_dist_a) END IF CALL dbcsr_distribution_release(dist_a) IF (trs(2)) THEN CALL dbcsr_dist_bin(row_dist_b, SIZE(sizes_n), npdims(1), & sizes_n) CALL dbcsr_dist_bin(col_dist_b, SIZE(sizes_k), npdims(2), & sizes_k) CALL dbcsr_distribution_new(dist_b, mp_env, row_dist_b, col_dist_b) CALL dbcsr_make_random_matrix(matrix_b, sizes_n, sizes_k, "Matrix B", & REAL(sparsities(2), real_8), & mp_group, data_type=data_type, dist=dist_b) DEALLOCATE (row_dist_b, col_dist_b) ELSE CALL dbcsr_dist_bin(row_dist_b, SIZE(sizes_k), npdims(1), & sizes_k) CALL dbcsr_distribution_new(dist_b, mp_env, row_dist_b, col_dist_c) CALL dbcsr_make_random_matrix(matrix_b, sizes_k, sizes_n, "Matrix B", & REAL(sparsities(2), real_8), & mp_group, data_type=data_type, dist=dist_b) DEALLOCATE (row_dist_b) END IF CALL dbcsr_distribution_release(dist_b) DEALLOCATE (row_dist_c, col_dist_c, sizes_m, sizes_n, sizes_k) ! ! if C has a symmetry, we build it accordingly, i.e. C=A*A and C=A*(-A) IF (c_symm .NE. dbcsr_type_no_symmetry) THEN CALL dbcsr_copy(matrix_b, matrix_a) !print*, a_symm,b_symm,dbcsr_get_matrix_type(matrix_a),dbcsr_get_matrix_type(matrix_b) IF (c_symm .EQ. dbcsr_type_antisymmetric) THEN CALL dbcsr_scale(matrix_b, & alpha_scalar=dbcsr_scalar_negative( & dbcsr_scalar_one(data_type))) END IF END IF ! ! Prepare test parameters CALL perf_multiply(mp_group, mp_env, io_unit, & matrix_a, matrix_b, matrix_c, & transa, transb, & alpha, beta, & limits, retain_sparsity, & nrep, & chksum_check, chksum_threshold, chksum_ref, & chksum_ref_pos) ! ! cleanup CALL dbcsr_release(matrix_a) CALL dbcsr_release(matrix_b) CALL dbcsr_release(matrix_c) CALL timestop(handle) END SUBROUTINE dbcsr_perf_multiply_low SUBROUTINE perf_multiply(mp_group, mp_env, io_unit, & matrix_a, matrix_b, matrix_c, & transa, transb, alpha, beta, limits, retain_sparsity, & nrep, chksum_check, chksum_threshold, chksum_ref, chksum_ref_pos) !! Performs a variety of matrix multiplies of same matrices on different !! processor grids TYPE(mp_comm_type), INTENT(IN) :: mp_group !! MPI communicator TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER, INTENT(IN) :: io_unit !! which unit to write to, if not negative TYPE(dbcsr_type), INTENT(in) :: matrix_a, matrix_b, matrix_c !! matrices to multiply !! matrices to multiply !! matrices to multiply CHARACTER, INTENT(in) :: transa, transb TYPE(dbcsr_scalar_type), INTENT(in) :: alpha, beta INTEGER, DIMENSION(6), INTENT(in) :: limits LOGICAL, INTENT(in) :: retain_sparsity INTEGER, INTENT(IN) :: nrep LOGICAL, INTENT(in) :: chksum_check REAL(real_8), INTENT(in) :: chksum_threshold, chksum_ref, & chksum_ref_pos CHARACTER(len=*), PARAMETER :: routineN = 'perf_multiply' INTEGER :: c_a, c_b, c_c, handle, irep, mynode, & nthreads, numnodes, r_a, r_b, r_c INTEGER(int_8) :: flop INTEGER(int_8), ALLOCATABLE, DIMENSION(:) :: flop_sum INTEGER(int_8), ALLOCATABLE, DIMENSION(:, :) :: flops INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: blk_offsets, col_dist_a, col_dist_b, & col_dist_c, row_dist_a, row_dist_b, & row_dist_c LOGICAL :: chksum_err REAL(real_8) :: chksum_a, chksum_b, chksum_c_in, & chksum_c_out, chksum_c_out_pos, & rel_diff, std_all, std_t, t1, t2 REAL(real_8), ALLOCATABLE, DIMENSION(:) :: flops_all, flops_node, flops_thread, & load_imb, t, t_max, t_min REAL(real_8), ALLOCATABLE, DIMENSION(:, :) :: times TYPE(dbcsr_distribution_obj) :: dist_a, dist_b, dist_c TYPE(dbcsr_type) :: m_a, m_b, m_c, m_c_orig ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) CALL mp_environ(numnodes, mynode, mp_group) nthreads = 1 !$ nthreads = OMP_GET_MAX_THREADS() ALLOCATE (times(0:numnodes - 1, nrep), flops(0:numnodes - 1, nrep), t_max(nrep), & flops_node(nrep), flops_thread(nrep), flops_all(nrep), flop_sum(nrep), & t_min(nrep), t(nrep), load_imb(nrep)) times(:, :) = 0.0_real_8 t_max(:) = 0.0_real_8 t_min(:) = 0.0_real_8 t(:) = 0.0_real_8 flops_node(:) = 0.0_real_8 flops_thread(:) = 0.0_real_8 flops_all(:) = 0.0_real_8 flops(:, :) = 0 flop_sum(:) = 0 load_imb(:) = 0.0_real_8 ! Row & column distributions row_dist_c => dbcsr_distribution_row_dist(dbcsr_distribution(matrix_c)) col_dist_c => dbcsr_distribution_col_dist(dbcsr_distribution(matrix_c)) row_dist_a => dbcsr_distribution_row_dist(dbcsr_distribution(matrix_a)) col_dist_a => dbcsr_distribution_col_dist(dbcsr_distribution(matrix_a)) row_dist_b => dbcsr_distribution_row_dist(dbcsr_distribution(matrix_b)) col_dist_b => dbcsr_distribution_col_dist(dbcsr_distribution(matrix_b)) CALL dbcsr_distribution_new(dist_a, mp_env, row_dist_a, col_dist_a) CALL dbcsr_distribution_new(dist_b, mp_env, row_dist_b, col_dist_b) CALL dbcsr_distribution_new(dist_c, mp_env, row_dist_c, col_dist_c) ! Redistribute the matrices ! A CALL dbcsr_create(m_a, "Test for "//TRIM(dbcsr_name(matrix_a)), & dist_a, dbcsr_get_matrix_type(matrix_a), & row_blk_size_obj=matrix_a%row_blk_size, & col_blk_size_obj=matrix_a%col_blk_size, & data_type=dbcsr_get_data_type(matrix_a)) CALL dbcsr_distribution_release(dist_a) CALL dbcsr_redistribute(matrix_a, m_a) ! B CALL dbcsr_create(m_b, "Test for "//TRIM(dbcsr_name(matrix_b)), & dist_b, dbcsr_get_matrix_type(matrix_b), & row_blk_size_obj=matrix_b%row_blk_size, & col_blk_size_obj=matrix_b%col_blk_size, & data_type=dbcsr_get_data_type(matrix_b)) CALL dbcsr_distribution_release(dist_b) CALL dbcsr_redistribute(matrix_b, m_b) ! C orig CALL dbcsr_create(m_c_orig, "Test for "//TRIM(dbcsr_name(matrix_c)), & dist_c, dbcsr_get_matrix_type(matrix_c), & row_blk_size_obj=matrix_c%row_blk_size, & col_blk_size_obj=matrix_c%col_blk_size, & data_type=dbcsr_get_data_type(matrix_c)) CALL dbcsr_distribution_release(dist_c) CALL dbcsr_redistribute(matrix_c, m_c_orig) ! C CALL dbcsr_create(m_c, "Test for "//TRIM(dbcsr_name(matrix_c)), & dist_c, dbcsr_get_matrix_type(matrix_c), & row_blk_size_obj=matrix_c%row_blk_size, & col_blk_size_obj=matrix_c%col_blk_size, & data_type=dbcsr_get_data_type(matrix_c)) CALL dbcsr_finalize(m_c) IF (.FALSE.) THEN blk_offsets => dbcsr_row_block_offsets(matrix_c) WRITE (io_unit, *) 'row_block_offsets(matrix_c)', blk_offsets blk_offsets => dbcsr_col_block_offsets(matrix_c) WRITE (io_unit, *) 'col_block_offsets(matrix_c)', blk_offsets END IF IF (.FALSE.) THEN CALL dbcsr_print(m_c, matlab_format=.FALSE., variable_name='c_in_') CALL dbcsr_print(m_a, matlab_format=.FALSE., variable_name='a_') CALL dbcsr_print(m_b, matlab_format=.FALSE., variable_name='b_') CALL dbcsr_print(m_c, matlab_format=.FALSE., variable_name='c_out_') END IF r_a = dbcsr_nfullrows_total(m_a) c_a = dbcsr_nfullcols_total(m_a) r_b = dbcsr_nfullrows_total(m_b) c_b = dbcsr_nfullcols_total(m_b) r_c = dbcsr_nfullrows_total(m_c_orig) c_c = dbcsr_nfullcols_total(m_c_orig) chksum_a = dbcsr_checksum(m_a) chksum_b = dbcsr_checksum(m_b) chksum_c_in = dbcsr_checksum(m_c_orig) ! ! DO irep = 1, nrep ! ! set the C matrix CALL dbcsr_copy(m_c, m_c_orig) ! ! Perform multiply CALL mp_sync(mp_group) t1 = m_walltime() flop = 0 CALL dbcsr_multiply(transa, transb, alpha, & m_a, m_b, beta, m_c, & first_row=limits(1), & last_row=limits(2), & first_column=limits(3), & last_column=limits(4), & first_k=limits(5), & last_k=limits(6), & retain_sparsity=retain_sparsity, & flop=flop) t2 = m_walltime() times(mynode, irep) = t2 - t1 flops(mynode, irep) = flop END DO chksum_c_out = dbcsr_checksum(m_c) chksum_c_out_pos = dbcsr_checksum(m_c, pos=.TRUE.) CALL mp_sum(times, 0, mp_group) CALL mp_sum(flops, 0, mp_group) ! ! t_max(:) = MAXVAL(times, DIM=1) t_min(:) = MINVAL(times, DIM=1) t(:) = SUM(times, DIM=1)/REAL(numnodes, real_8) flop_sum(:) = SUM(flops, DIM=1) t_max(:) = MAX(t_max(:), 0.001_real_8) flops_all(:) = REAL(flop_sum(:), KIND=real_8)/t_max(:) !* 1.0e-9_real_8 flops_node(:) = flops_all(:)/REAL(numnodes, real_8) flops_thread(:) = flops_node(:)/REAL(nthreads, real_8) load_imb(:) = t_max(:) - t(:)/REAL(numnodes, real_8) std_t = 1.0_real_8 std_all = 1.0_real_8 IF (io_unit .GT. 0) THEN WRITE (io_unit, *) REPEAT("*", 80) WRITE (io_unit, *) " -- PERF dbcsr_multiply (", transa, ", ", transb, & ", ", dbcsr_get_data_type(m_a), & ", ", dbcsr_get_matrix_type(m_a), & ", ", dbcsr_get_matrix_type(m_b), & ", ", dbcsr_get_matrix_type(m_c), & ")" WRITE (io_unit, '(T4,3(A,I9,A,I9),A)') & "matrix sizes A(", r_a, " x", c_a, "), B(", r_b, " x", c_b, ") and C(", r_c, " x", c_c, ")" WRITE (io_unit, '(T4,A,I5,A,I3,A,I3,A)') 'numnodes (nprows X npcols) = ', numnodes, & "(", dbcsr_mp_nprows(mp_env), " X ", & dbcsr_mp_npcols(mp_env), ")" WRITE (io_unit, '(T4,A,I5)') 'nthreads = ', nthreads WRITE (io_unit, '(T4,A,E26.15)') 'checksum(A) = ', chksum_a WRITE (io_unit, '(T4,A,E26.15)') 'checksum(B) = ', chksum_b WRITE (io_unit, '(T4,A,E26.15)') 'checksum(C_in) = ', chksum_c_in WRITE (io_unit, '(T4,A,E26.15)') 'checksum(C_out) = ', chksum_c_out WRITE (io_unit, '(T4,A,E26.15)') 'checksum(C_out) POS = ', chksum_c_out_pos IF (chksum_check) THEN chksum_err = .FALSE. rel_diff = ABS(chksum_c_out/MAX(chksum_ref, chksum_threshold) - 1.) IF (rel_diff .GT. chksum_threshold) THEN WRITE (io_unit, '(T4,A,E26.15,A,E26.15,A,E26.15)') "Wrong checksum(C_out), ref = ", & chksum_ref, & " rel_diff = ", rel_diff, & " threshold = ", chksum_threshold chksum_err = .TRUE. END IF rel_diff = ABS(chksum_c_out_pos/MAX(chksum_ref_pos, chksum_threshold) - 1.) IF (rel_diff .GT. chksum_threshold) THEN WRITE (io_unit, '(T4,A,E26.15,A,E26.15,A,E26.15)') "Wrong checksum(C_out) POS, ref = ", & chksum_ref_pos, & " rel_diff = ", rel_diff, & " threshold = ", chksum_threshold chksum_err = .TRUE. END IF IF (chksum_err) & CALL dbcsr_abort(__LOCATION__, & "Wrong Checksums. Test failed!") END IF WRITE (io_unit, *) WRITE (io_unit, *) WRITE (io_unit, '(T4,A)') " mean std minmin maxmax" WRITE (io_unit, '(T4,A,4EN12.2,A)') "time = ", mean(t), std(t), & MINVAL(times), MAXVAL(times), ' seconds' WRITE (io_unit, '(T4,A,4EN12.2,A)') "perf total = ", mean(flops_all), std(flops_all), & MINVAL(flops_all), MAXVAL(flops_all), ' FLOPS' WRITE (io_unit, '(T4,A,4EN12.2,A)') "perf per node = ", mean(flops_node), std(flops_node), & MINVAL(flops_node), MAXVAL(flops_node), ' FLOPS' WRITE (io_unit, '(T4,A,4EN12.2,A)') "perf per thread = ", mean(flops_thread), std(flops_thread), & MINVAL(flops_thread), MAXVAL(flops_thread), ' FLOPS' WRITE (io_unit, '(T4,A,4E12.2,A)') "load imbalance = ", mean(load_imb), std(load_imb), & MINVAL(load_imb), MAXVAL(load_imb), '' WRITE (io_unit, '(T4,A,4E12.2,A)') "rel load imbal = ", mean(load_imb/t_max), std(load_imb/t_max), & MINVAL(load_imb/t_max), MAXVAL(load_imb/t_max), '' WRITE (io_unit, *) REPEAT("*", 80) END IF CALL dbcsr_release(m_a) CALL dbcsr_release(m_b) CALL dbcsr_release(m_c) CALL dbcsr_release(m_c_orig) DEALLOCATE (times, flops, t_max, flops_node, flops_thread, flops_all, & flop_sum, t_min, t, load_imb) CALL timestop(handle) END SUBROUTINE perf_multiply FUNCTION mean(v) REAL(real_8), DIMENSION(:) :: v REAL(real_8) :: mean INTEGER :: i, n mean = 0.0_real_8 n = SIZE(v, 1) DO i = 1, n mean = mean + v(i) END DO mean = mean/REAL(n, real_8) END FUNCTION mean FUNCTION std(v) REAL(real_8), DIMENSION(:) :: v REAL(real_8) :: std INTEGER :: i, n REAL(real_8) :: mn mn = mean(v) std = 0.0_real_8 n = SIZE(v, 1) DO i = 1, n std = std + (v(i) - mn)**2 END DO std = SQRT(std)/REAL(n, real_8) END FUNCTION std END MODULE dbcsr_performance_multiply ================================================ FILE: tests/dbcsr_tas_unittest.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! PROGRAM dbcsr_tas_unittest !! Unit testing for tall-and-skinny matrices USE dbcsr_api, ONLY: dbcsr_finalize_lib, & dbcsr_init_lib, & dbcsr_print_statistics USE dbcsr_tas_base, ONLY: dbcsr_tas_destroy, & dbcsr_tas_info, & dbcsr_tas_nblkcols_total, & dbcsr_tas_nblkrows_total, & dbcsr_tas_create USE dbcsr_tas_types, ONLY: dbcsr_tas_type USE dbcsr_tas_test, ONLY: dbcsr_tas_random_bsizes, & dbcsr_tas_setup_test_matrix, & dbcsr_tas_test_mm, & dbcsr_tas_reset_randmat_seed USE dbcsr_kinds, ONLY: int_8, & real_8 USE dbcsr_machine, ONLY: default_output_unit USE dbcsr_mpiwrap, ONLY: mp_comm_free, & mp_environ, & mp_world_finalize, & mp_world_init, mp_comm_type USE dbcsr_tas_io, ONLY: dbcsr_tas_write_split_info #include "base/dbcsr_base_uses.f90" IMPLICIT NONE INTEGER(KIND=int_8), PARAMETER :: m = 100, k = 20, n = 10 TYPE(dbcsr_tas_type) :: A, B, C, At, Bt, Ct, A_out, B_out, C_out, At_out, Bt_out, Ct_out INTEGER, DIMENSION(m) :: bsize_m INTEGER, DIMENSION(n) :: bsize_n INTEGER, DIMENSION(k) :: bsize_k REAL(KIND=real_8), PARAMETER :: sparsity = 0.1 INTEGER :: numnodes, mynode, io_unit TYPE(mp_comm_type) :: mp_comm, mp_comm_A, mp_comm_At, mp_comm_B, mp_comm_Bt, mp_comm_C, mp_comm_Ct REAL(KIND=real_8), PARAMETER :: filter_eps = 1.0E-08 CALL mp_world_init(mp_comm) CALL mp_environ(numnodes, mynode, mp_comm) io_unit = -1 IF (mynode .EQ. 0) io_unit = default_output_unit CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit) CALL dbcsr_tas_reset_randmat_seed() CALL dbcsr_tas_random_bsizes([13, 8, 5, 25, 12], 2, bsize_m) CALL dbcsr_tas_random_bsizes([3, 78, 33, 12, 3, 15], 1, bsize_n) CALL dbcsr_tas_random_bsizes([9, 64, 23, 2], 3, bsize_k) CALL mp_environ(numnodes, mynode, mp_comm) CALL dbcsr_tas_setup_test_matrix(A, mp_comm_A, mp_comm, m, k, bsize_m, bsize_k, [5, 1], "A", sparsity) CALL dbcsr_tas_setup_test_matrix(At, mp_comm_At, mp_comm, k, m, bsize_k, bsize_m, [3, 8], "A^t", sparsity) CALL dbcsr_tas_setup_test_matrix(B, mp_comm_B, mp_comm, n, m, bsize_n, bsize_m, [3, 2], "B", sparsity) CALL dbcsr_tas_setup_test_matrix(Bt, mp_comm_Bt, mp_comm, m, n, bsize_m, bsize_n, [1, 3], "B^t", sparsity) CALL dbcsr_tas_setup_test_matrix(C, mp_comm_C, mp_comm, k, n, bsize_k, bsize_n, [5, 7], "C", sparsity) CALL dbcsr_tas_setup_test_matrix(Ct, mp_comm_Ct, mp_comm, n, k, bsize_n, bsize_k, [1, 1], "C^t", sparsity) CALL dbcsr_tas_create(A, A_out) CALL dbcsr_tas_create(At, At_out) CALL dbcsr_tas_create(B, B_out) CALL dbcsr_tas_create(Bt, Bt_out) CALL dbcsr_tas_create(C, C_out) CALL dbcsr_tas_create(Ct, Ct_out) IF (mynode == 0) WRITE (io_unit, '(A)') "DBCSR TALL-AND-SKINNY MATRICES" IF (mynode == 0) WRITE (io_unit, '(1X, A, 1X, A, I10, 1X, A, 1X, I10)') "Split info for matrix", & TRIM(A%matrix%name), dbcsr_tas_nblkrows_total(A), 'X', dbcsr_tas_nblkcols_total(A) CALL dbcsr_tas_write_split_info(dbcsr_tas_info(A), io_unit, name="A") IF (mynode == 0) WRITE (io_unit, '(1X, A, 1X, A, I10, 1X, A, 1X, I10)') "Split info for matrix", & TRIM(At%matrix%name), dbcsr_tas_nblkrows_total(At), 'X', dbcsr_tas_nblkcols_total(At) CALL dbcsr_tas_write_split_info(dbcsr_tas_info(At), io_unit, name="At") IF (mynode == 0) WRITE (io_unit, '(1X, A, 1X, A, I10, 1X, A, 1X, I10)') "Split info for matrix", & TRIM(B%matrix%name), dbcsr_tas_nblkrows_total(B), 'X', dbcsr_tas_nblkcols_total(B) CALL dbcsr_tas_write_split_info(dbcsr_tas_info(B), io_unit, name="B") IF (mynode == 0) WRITE (io_unit, '(1X, A, 1X, A, I10, 1X, A, 1X, I10)') "Split info for matrix", & TRIM(Bt%matrix%name), dbcsr_tas_nblkrows_total(Bt), 'X', dbcsr_tas_nblkcols_total(Bt) CALL dbcsr_tas_write_split_info(dbcsr_tas_info(Bt), io_unit, name="Bt") IF (mynode == 0) WRITE (io_unit, '(1X, A, 1X, A, I10, 1X, A, 1X, I10)') "Split info for matrix", & TRIM(C%matrix%name), dbcsr_tas_nblkrows_total(C), 'X', dbcsr_tas_nblkcols_total(C) CALL dbcsr_tas_write_split_info(dbcsr_tas_info(C), io_unit, name="C") IF (mynode == 0) WRITE (io_unit, '(1X, A, 1X, A, I10, 1X, A, 1X, I10)') "Split info for matrix", & TRIM(Ct%matrix%name), dbcsr_tas_nblkrows_total(Ct), 'X', dbcsr_tas_nblkcols_total(Ct) CALL dbcsr_tas_write_split_info(dbcsr_tas_info(Ct), io_unit, name="Ct") CALL dbcsr_tas_test_mm('N', 'N', 'N', B, A, Ct_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('T', 'N', 'N', Bt, A, Ct_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('N', 'T', 'N', B, At, Ct_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('T', 'T', 'N', Bt, At, Ct_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('N', 'N', 'T', B, A, C_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('T', 'N', 'T', Bt, A, C_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('N', 'T', 'T', B, At, C_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('T', 'T', 'T', Bt, At, C_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('N', 'N', 'N', A, C, Bt_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('T', 'N', 'N', At, C, Bt_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('N', 'T', 'N', A, Ct, Bt_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('T', 'T', 'N', At, Ct, Bt_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('N', 'N', 'T', A, C, B_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('T', 'N', 'T', At, C, B_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('N', 'T', 'T', A, Ct, B_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('T', 'T', 'T', At, Ct, B_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('N', 'N', 'N', C, B, At_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('T', 'N', 'N', Ct, B, At_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('N', 'T', 'N', C, Bt, At_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('T', 'T', 'N', Ct, Bt, At_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('N', 'N', 'T', C, B, A_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('T', 'N', 'T', Ct, B, A_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('N', 'T', 'T', C, Bt, A_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_test_mm('T', 'T', 'T', Ct, Bt, A_out, unit_nr=io_unit, filter_eps=filter_eps) CALL dbcsr_tas_destroy(A) CALL dbcsr_tas_destroy(At) CALL dbcsr_tas_destroy(B) CALL dbcsr_tas_destroy(Bt) CALL dbcsr_tas_destroy(C) CALL dbcsr_tas_destroy(Ct) CALL dbcsr_tas_destroy(A_out) CALL dbcsr_tas_destroy(At_out) CALL dbcsr_tas_destroy(B_out) CALL dbcsr_tas_destroy(Bt_out) CALL dbcsr_tas_destroy(C_out) CALL dbcsr_tas_destroy(Ct_out) CALL mp_comm_free(mp_comm_A) CALL mp_comm_free(mp_comm_At) CALL mp_comm_free(mp_comm_B) CALL mp_comm_free(mp_comm_Bt) CALL mp_comm_free(mp_comm_C) CALL mp_comm_free(mp_comm_Ct) call dbcsr_print_statistics(.true.) CALL dbcsr_finalize_lib() CALL mp_world_finalize() END PROGRAM ================================================ FILE: tests/dbcsr_tensor_test.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #include #include #include #include #include #include #include #include #include #include #include #include #include //-------------------------------------------------------------------------------------------------! // Testing the tensor contraction (13|2)x(54|21)=(3|45) // and several other functions, to make sure there are not any segmentation faults //-------------------------------------------------------------------------------------------------! std::random_device rd; std::mt19937 gen(rd()); std::uniform_real_distribution<> dis(-1.0, 1.0); template T get_rand_real() { return dis(gen); } std::vector random_dist(int dist_size, int nbins) { std::vector dist(dist_size); for (int i = 0; i < dist_size; i++) dist[i] = i % nbins; return dist; } template void printvec(T& v) { for (auto i : v) { std::cout << i << " "; } std::cout << '\n' << std::endl; } template void fill_random(void* tensor, std::vector> nzblocks, std::function& rand_func) { int myrank, mpi_size; int dim = nzblocks.size(); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); if (myrank == 0) std::cout << "Filling Tensor..." << std::endl; if (myrank == 0) std::cout << "Dimension: " << dim << std::endl; int nblocks = nzblocks[0].size(); std::vector> mynzblocks(dim); std::vector idx(dim); for (int i = 0; i != nblocks; ++i) { // make index out of nzblocks for (int j = 0; j != dim; ++j) idx[j] = nzblocks[j][i]; int proc = -1; c_dbcsr_t_get_stored_coordinates(tensor, idx.data(), &proc); if (proc == myrank) { for (int j = 0; j != dim; ++j) mynzblocks[j].push_back(idx[j]); } } std::vector dataptr(4, nullptr); for (int i = 0; i != dim; ++i) { dataptr[i] = mynzblocks[i].size() == 0 ? nullptr : &mynzblocks[i][0]; } if (myrank == 0) std::cout << "Reserving blocks..." << std::endl; if (mynzblocks[0].size() != 0) c_dbcsr_t_reserve_blocks_index(tensor, mynzblocks[0].size(), dataptr[0], dataptr[1], dataptr[2], dataptr[3]); auto fill_rand = [&](std::vector& blk) { for (T& e : blk) { e = rand_func(); //std::cout << e << std::endl; } }; void* iter = nullptr; c_dbcsr_t_iterator_start(&iter, tensor); std::vector loc_idx(dim); std::vector blk_sizes(dim); std::vector block(1); int blk = 0; int blk_proc = 0; while (c_dbcsr_t_iterator_blocks_left(iter)) { c_dbcsr_t_iterator_next_block(iter, loc_idx.data(), &blk, &blk_proc, blk_sizes.data(), nullptr); int tot = 1; for (int i = 0; i != dim; ++i) { tot *= blk_sizes[i]; } block.resize(tot); fill_rand(block); c_dbcsr_t_put_block(tensor, loc_idx.data(), blk_sizes.data(), block.data(), nullptr, nullptr); } c_dbcsr_t_iterator_stop(&iter); c_dbcsr_t_finalize(tensor); } int main(int argc, char* argv[]) { MPI_Init(&argc, &argv); int mpi_size, mpi_rank; MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); c_dbcsr_init_lib(MPI_COMM_WORLD, nullptr); void* pgrid_3d = nullptr; void* pgrid_4d = nullptr; std::vector dims4(4); std::vector dims3(3); MPI_Fint fcomm = MPI_Comm_c2f(MPI_COMM_WORLD); c_dbcsr_t_pgrid_create(&fcomm, dims3.data(), dims3.size(), &pgrid_3d, nullptr); c_dbcsr_t_pgrid_create(&fcomm, dims4.data(), dims4.size(), &pgrid_4d, nullptr); if (mpi_rank == 0) { std::cout << "pgrid3-dimensions:" << std::endl; printvec(dims3); std::cout << "pgrid4-dimensions:" << std::endl; printvec(dims4); } // block sizes std::vector blk1, blk2, blk3, blk4, blk5; // blk indices of non-zero blocks std::vector nz11, nz12, nz13, nz21, nz22, nz24, nz25, nz33, nz34, nz35; blk1 = {3, 9, 12, 1}; blk2 = {4, 2, 3, 1, 9, 2, 32, 10, 5, 8, 7}; blk3 = {7, 3, 8, 7, 9, 5, 10, 23, 2}; blk4 = {8, 1, 4, 13, 6}; blk5 = {4, 2, 22}; nz11 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3}; nz12 = {2, 4, 4, 4, 5, 5, 6, 7, 9, 10, 10, 0, 0, 3, 6, 6, 8, 9, 1, 1, 4, 5, 7, 7, 8, 10, 10, 1, 3, 4, 4, 7}; nz13 = {6, 2, 4, 8, 5, 7, 1, 7, 2, 1, 2, 0, 3, 5, 1, 6, 4, 7, 2, 6, 0, 3, 2, 6, 7, 4, 7, 8, 5, 0, 1, 6}; nz21 = {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3}; nz22 = {0, 2, 3, 5, 9, 1, 1, 3, 4, 4, 5, 5, 5, 6, 6, 8, 8, 8, 9, 10, 0, 2, 2, 3, 4, 5, 7, 8, 10, 10, 0, 2, 3, 5, 9, 10}; nz24 = {2, 4, 1, 2, 1, 2, 4, 0, 0, 3, 1, 2, 3, 0, 3, 2, 3, 3, 1, 0, 2, 0, 0, 2, 3, 2, 3, 1, 1, 2, 0, 0, 2, 1, 4, 4}; nz25 = {0, 2, 1, 0, 0, 1, 2, 0, 2, 0, 1, 2, 1, 0, 2, 1, 2, 1, 0, 1, 2, 0, 1, 2, 1, 1, 1, 2, 0, 1, 0, 2, 1, 0, 2, 1}; nz33 = {1, 3, 4, 4, 4, 5, 5, 7}; nz34 = {2, 1, 0, 0, 2, 1, 3, 4}; nz35 = {2, 1, 0, 1, 2, 1, 0, 0}; // (13|2)x(54|21)=(3|45) // distribute blocks std::vector dist11 = random_dist(blk1.size(), dims3[0]); std::vector dist12 = random_dist(blk2.size(), dims3[1]); std::vector dist13 = random_dist(blk3.size(), dims3[2]); std::vector dist21 = random_dist(blk1.size(), dims4[0]); std::vector dist22 = random_dist(blk2.size(), dims4[1]); std::vector dist23 = random_dist(blk4.size(), dims4[2]); std::vector dist24 = random_dist(blk5.size(), dims4[3]); std::vector dist31 = random_dist(blk3.size(), dims3[0]); std::vector dist32 = random_dist(blk4.size(), dims3[1]); std::vector dist33 = random_dist(blk5.size(), dims3[2]); if (mpi_rank == 0) { std::cout << "dist11:" << std::endl; printvec(dist11); std::cout << "dist12:" << std::endl; printvec(dist12); std::cout << "dist13:" << std::endl; printvec(dist13); std::cout << "dist21:" << std::endl; printvec(dist21); std::cout << "dist22:" << std::endl; printvec(dist22); std::cout << "dist23:" << std::endl; printvec(dist23); std::cout << "dist24:" << std::endl; printvec(dist24); std::cout << "dist31:" << std::endl; printvec(dist31); std::cout << "dist32:" << std::endl; printvec(dist32); std::cout << "dist33:" << std::endl; printvec(dist33); } void* dist1 = nullptr; void* dist2 = nullptr; void* dist3 = nullptr; // (13|2)x(54|21)=(3|45) std::vector map11, map12, map21, map22, map31, map32; map11 = {0, 2}; map12 = {1}; map21 = {3, 2}; map22 = {1, 0}; map31 = {0}; map32 = {1, 2}; if (mpi_rank == 0) std::cout << "Creating dist objects..." << '\n' << std::endl; // create distribution objects c_dbcsr_t_distribution_new( &dist1, pgrid_3d, dist11.data(), dist11.size(), dist12.data(), dist12.size(), dist13.data(), dist13.size(), nullptr, 0); c_dbcsr_t_distribution_new(&dist2, pgrid_4d, dist21.data(), dist21.size(), dist22.data(), dist22.size(), dist23.data(), dist23.size(), dist24.data(), dist24.size()); c_dbcsr_t_distribution_new( &dist3, pgrid_3d, dist31.data(), dist31.size(), dist32.data(), dist32.size(), dist33.data(), dist33.size(), nullptr, 0); // create tensors // (13|2)x(54|21)=(3|45) void* tensor1 = nullptr; void* tensor2 = nullptr; void* tensor3 = nullptr; if (mpi_rank == 0) std::cout << "Creating tensors..." << std::endl; c_dbcsr_t_create_new(&tensor1, "(13|2)", dist1, map11.data(), map11.size(), map12.data(), map12.size(), nullptr, blk1.data(), blk1.size(), blk2.data(), blk2.size(), blk3.data(), blk3.size(), nullptr, 0); c_dbcsr_t_create_new(&tensor2, "(54|21)", dist2, map21.data(), map21.size(), map22.data(), map22.size(), nullptr, blk1.data(), blk1.size(), blk2.data(), blk2.size(), blk4.data(), blk4.size(), blk5.data(), blk5.size()); c_dbcsr_t_create_new(&tensor3, "(3|45)", dist3, map31.data(), map31.size(), map32.data(), map32.size(), nullptr, blk3.data(), blk3.size(), blk4.data(), blk4.size(), blk5.data(), blk5.size(), nullptr, 0); // fill the tensors std::function drand = get_rand_real; if (mpi_rank == 0) std::cout << "Tensor 1" << '\n' << std::endl; fill_random(tensor1, {nz11, nz12, nz13}, drand); if (mpi_rank == 0) std::cout << "Tensor 2" << '\n' << std::endl; fill_random(tensor2, {nz21, nz22, nz24, nz25}, drand); if (mpi_rank == 0) std::cout << "Tensor 3" << '\n' << std::endl; fill_random(tensor3, {nz33, nz34, nz35}, drand); // contracting // (13|2)x(54|21)=(3|45) if (mpi_rank == 0) std::cout << "Contracting..." << std::endl; // cn : indices to be contracted // noncn : indices not to be contracted // mapn : how nonc indices map to tensor 3 std::vector c1, nonc1, c2, nonc2, map1, map2; c1 = {0, 1}; nonc1 = {2}; c2 = {0, 1}; nonc2 = {2, 3}; map1 = {0}; map2 = {1, 2}; int unit_nr = -1; if (mpi_rank == 0) unit_nr = 6; bool log_verbose = true; // tensor_3(map_1, map_2) := 0.2 * tensor_1(notcontract_1, contract_1) // * tensor_2(contract_2, notcontract_2) // + 0.8 * tensor_3(map_1, map_2) c_dbcsr_t_contract_r_dp(0.2, tensor1, tensor2, 0.8, tensor3, c1.data(), c1.size(), nonc1.data(), nonc1.size(), c2.data(), c2.size(), nonc2.data(), nonc2.size(), map1.data(), map1.size(), map2.data(), map2.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, &unit_nr, &log_verbose); // ==================================================== // ====== TESTING OTHER FUNCTIONS ============= // ==================================================== // ======== GET_INFO =========== std::vector cnblkstot(3), nfulltot(3), cnblksloc(3), nfullloc(3), pdims(3), ploc(3); char* name = nullptr; int data_type = 0; std::vector nblksloc(3); std::vector nblkstot(3); for (int i = 0; i != 3; ++i) { nblksloc[i] = c_dbcsr_t_nblks_local(tensor1, i); nblkstot[i] = c_dbcsr_t_nblks_total(tensor1, i); } std::vector> c_blks_local(3); std::vector> c_proc_dist(3); std::vector> c_blk_size(3); std::vector> c_blk_offset(3); for (int i = 0; i != 3; ++i) { c_blks_local[i].resize(nblksloc[i]); c_proc_dist[i].resize(nblkstot[i]); c_blk_size[i].resize(nblkstot[i]); c_blk_offset[i].resize(nblkstot[i]); } c_dbcsr_t_get_info(tensor1, 3, cnblkstot.data(), nfulltot.data(), cnblksloc.data(), nfullloc.data(), pdims.data(), ploc.data(), nblksloc[0], nblksloc[1], nblksloc[2], 0, nblkstot[0], nblkstot[1], nblkstot[2], 0, c_blks_local[0].data(), c_blks_local[1].data(), c_blks_local[2].data(), nullptr, c_proc_dist[0].data(), c_proc_dist[1].data(), c_proc_dist[2].data(), nullptr, c_blk_size[0].data(), c_blk_size[1].data(), c_blk_size[2].data(), nullptr, c_blk_offset[0].data(), c_blk_offset[1].data(), c_blk_offset[2].data(), nullptr, nullptr, &name, &data_type); std::string tname(name); if (mpi_rank == 0) { std::cout << "Testing get_info for Tensor 1..." << std::endl; std::cout << "Name: " << tname << std::endl; std::cout << "Data_type: " << data_type << std::endl; } for (int rank = 0; rank != mpi_size; ++rank) { if (rank == mpi_rank) { std::cout << "======= Process: " << rank << " ========" << std::endl; std::cout << "Total number of blocks:" << std::endl; printvec(cnblkstot); std::cout << "Total number of elements:" << std::endl; printvec(nfulltot); std::cout << "Total number of local blocks:" << std::endl; printvec(cnblksloc); std::cout << "Total number of local elements:" << std::endl; printvec(nfullloc); std::cout << "Pgrid dimensions:" << std::endl; printvec(pdims); std::cout << "Process coordinates:" << std::endl; printvec(ploc); std::cout << "blks_local:" << std::endl; for (int i = 0; i != 3; ++i) { printvec(c_blks_local[i]); } std::cout << "proc_dist:" << std::endl; for (int i = 0; i != 3; ++i) { printvec(c_proc_dist[i]); } std::cout << "blk_size:" << std::endl; for (int i = 0; i != 3; ++i) { printvec(c_blk_size[i]); } std::cout << "blk_offset:" << std::endl; for (int i = 0; i != 3; ++i) { printvec(c_blk_offset[i]); } } MPI_Barrier(MPI_COMM_WORLD); } // ================ GET_MAPPING_INFO ====================== int ndim_nd = 0, ndim1_2d = 0, ndim2_2d = 0; std::vector dims_2d_i8(2); std::vector dims_2d(2); int nd_size = 3; int nd_row_size = c_dbcsr_t_ndims_matrix_row(tensor1); int nd_col_size = c_dbcsr_t_ndims_matrix_column(tensor1); std::vector dims_nd(nd_size), dims1_2d(nd_row_size), dims2_2d(nd_col_size), map1_2d(nd_row_size), map2_2d(nd_col_size), map_nd(nd_size); int base; bool col_major; c_dbcsr_t_get_mapping_info(tensor1, 3, nd_row_size, nd_col_size, &ndim_nd, &ndim1_2d, &ndim2_2d, dims_2d_i8.data(), dims_2d.data(), dims_nd.data(), dims1_2d.data(), dims2_2d.data(), map1_2d.data(), map2_2d.data(), map_nd.data(), &base, &col_major); if (mpi_rank == 0) { std::cout << "Testing get_mapping_info for Tensor 1..." << std::endl; std::cout << "ndim_nd = " << ndim_nd << std::endl; std::cout << "ndim1_2d = " << ndim1_2d << std::endl; std::cout << "ndim2_2d = " << ndim2_2d << std::endl; std::cout << "dims_2d_i8: "; printvec(dims_2d_i8); std::cout << "dims_2d: "; printvec(dims_2d); std::cout << "dims_nd: " << std::endl; printvec(dims_nd); std::cout << "dims1_2d: " << std::endl; printvec(dims1_2d); std::cout << "dims2_2d: " << std::endl; printvec(dims2_2d); std::cout << "map1_2d: " << std::endl; printvec(map1_2d); std::cout << "map2_2d: " << std::endl; printvec(map2_2d); std::cout << "map_nd: " << std::endl; printvec(map_nd); std::cout << "Base: " << base << std::endl; std::cout << "col_major " << col_major << std::endl; } // ======== TESTING contract_index ================ long long int rsize = c_dbcsr_t_max_nblks_local(tensor3); std::vector result_index(rsize * 3); int nblks_loc = 0; if (mpi_rank == 0) std::cout << "\n" << "Testing c_dbcsr_t_contract_index...\n" << std::endl; c_dbcsr_t_contract_index_r_dp(0.2, tensor1, tensor2, 0.8, tensor3, c1.data(), c1.size(), nonc1.data(), nonc1.size(), c2.data(), c2.size(), nonc2.data(), nonc2.size(), map1.data(), map1.size(), map2.data(), map2.size(), nullptr, nullptr, nullptr, nullptr, &nblks_loc, result_index.data(), rsize, 3); for (int ip = 0; ip != mpi_size; ++ip) { if (ip == mpi_rank) { std::cout << "Result Indices on Rank " << ip << std::endl; for (int i = 0; i != nblks_loc; ++i) { for (int n = 0; n != 3; ++n) { std::cout << result_index[i + n * rsize] << " "; } std::cout << std::endl; } } MPI_Barrier(MPI_COMM_WORLD); } c_dbcsr_t_destroy(&tensor1); c_dbcsr_t_destroy(&tensor2); c_dbcsr_t_destroy(&tensor3); c_dbcsr_t_distribution_destroy(&dist1); c_dbcsr_t_distribution_destroy(&dist2); c_dbcsr_t_distribution_destroy(&dist3); c_dbcsr_t_pgrid_destroy(&pgrid_3d, nullptr); c_dbcsr_t_pgrid_destroy(&pgrid_4d, nullptr); c_free_string(&name); c_dbcsr_finalize_lib(); MPI_Finalize(); return 0; } ================================================ FILE: tests/dbcsr_tensor_unittest.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! PROGRAM dbcsr_tensor_unittest !! DBCSR tensor unit test USE dbcsr_api, ONLY: dbcsr_finalize_lib, & dbcsr_init_lib, & dbcsr_type_real_8, & dbcsr_print_statistics USE dbcsr_machine, ONLY: default_output_unit USE dbcsr_mpiwrap, ONLY: mp_cart_create, & mp_comm_free, & mp_environ, & mp_world_finalize, & mp_world_init, mp_comm_type USE dbcsr_tensor_test, ONLY: dbcsr_t_contract_test, & dbcsr_t_setup_test_tensor, & dbcsr_t_test_formats, & dbcsr_t_reset_randmat_seed USE dbcsr_tensor_types, ONLY: & dbcsr_t_create, dbcsr_t_destroy, dbcsr_t_distribution_destroy, dbcsr_t_distribution_new, & dbcsr_t_distribution_type, dbcsr_t_nd_mp_comm, dbcsr_t_type, dbcsr_t_pgrid_type, & dbcsr_t_pgrid_create, dbcsr_t_get_info, dbcsr_t_pgrid_destroy, ndims_tensor, dbcsr_t_default_distvec USE dbcsr_data_methods, ONLY: dbcsr_scalar USE dbcsr_kinds, ONLY: real_8 #include "base/dbcsr_base_uses.f90" IMPLICIT NONE INTEGER :: numnodes, mynode, io_unit INTEGER :: ndims, nblks_alloc, nblks_1, nblks_2, nblks_3, nblks_4, nblks_5, & nblks_alloc_1, nblks_alloc_2, nblks_alloc_3, nblks_alloc_4, nblks_alloc_5 INTEGER, DIMENSION(:), ALLOCATABLE :: size_1, size_2, size_3, size_4, size_5, dist1_1, dist1_2, dist1_3, & dist2_1, dist2_2, dist3_1, dist3_2, dist3_3, dist4_1, dist4_2, & dist4_3, dist4_4, dist5_1, dist5_2, dist5_3 INTEGER, DIMENSION(:), ALLOCATABLE :: blk_ind_1, blk_ind_2, blk_ind_3, blk_ind_4, blk_ind_1_1, blk_ind_2_1, & blk_ind_3_1, blk_ind_3_2, blk_ind_4_2, blk_ind_1_3, blk_ind_2_3, & blk_ind_4_3, blk_ind_1_4, blk_ind_2_4, blk_ind_4_4, blk_ind_5_4, & blk_ind_3_5, blk_ind_4_5, blk_ind_5_5 INTEGER, DIMENSION(:), ALLOCATABLE :: map11, map31, map12, map32, map21, map22 LOGICAL, PARAMETER :: verbose = .FALSE. TYPE(dbcsr_t_distribution_type) :: dist1, dist2, dist3 TYPE(dbcsr_t_type) :: tensor_A, tensor_B, tensor_C LOGICAL, PARAMETER :: test_format = .TRUE. LOGICAL, PARAMETER :: test_contraction = .TRUE. INTEGER, DIMENSION(4) :: pdims_4d INTEGER, DIMENSION(3) :: pdims_3d INTEGER, DIMENSION(2) :: pdims_2d TYPE(dbcsr_t_pgrid_type) :: pgrid_2d, pgrid_3d, pgrid_4d INTEGER, DIMENSION(:), ALLOCATABLE :: bounds_t INTEGER, DIMENSION(:, :), ALLOCATABLE :: bounds, bounds_1, bounds_2 TYPE(mp_comm_type) :: mp_comm CALL mp_world_init(mp_comm) CALL mp_environ(numnodes, mynode, mp_comm) ! set standard output parameters io_unit = -1 IF (mynode .EQ. 0) io_unit = default_output_unit ! initialize libdbcsr CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit) CALL dbcsr_t_reset_randmat_seed() ! Process grid IF (test_format) THEN !--------------------------------------------------------------------------------------------------! ! Test 1: Testing matrix representations of tensor rank 2 ! !--------------------------------------------------------------------------------------------------! ndims = 2 ! Number of blocks in each dimension nblks_1 = 14 nblks_2 = 21 ! Block sizes in each dimension ALLOCATE (size_1(nblks_1), size_2(nblks_2)) size_1(:) = [3, 5, 1, 23, 2, 3, 1, 6, 3, 8, 2, 3, 5, 1] size_2(:) = [4, 2, 5, 3, 1, 5, 13, 5, 2, 4, 5, 6, 7, 2, 3, 1, 2, 6, 9, 12, 21] ! Number of non-zero blocks nblks_alloc = 12 ALLOCATE (blk_ind_1(nblks_alloc), blk_ind_2(nblks_alloc)) ! Indices of non-zero blocks (s.t. index of ith block is [blk_ind_1(i), blk_ind_2(i), ...]) blk_ind_1(:) = [1, 1, 1, 2, 4, 4, 7, 10, 10, 10, 10, 13] !& blk_ind_2(:) = [1, 3, 11, 15, 4, 17, 21, 6, 9, 13, 19, 7] !& ! Test tensor formats CALL dbcsr_t_test_formats(ndims, mp_comm, io_unit, verbose, & blk_size_1=size_1, blk_size_2=size_2, & blk_ind_1=blk_ind_1, blk_ind_2=blk_ind_2) DEALLOCATE (size_1, size_2) DEALLOCATE (blk_ind_1, blk_ind_2) !--------------------------------------------------------------------------------------------------! ! Test 2: Testing matrix representations of tensor rank 3 ! !--------------------------------------------------------------------------------------------------! ndims = 3 ! Number of blocks in each dimension nblks_1 = 4 nblks_2 = 6 nblks_3 = 3 ! Block sizes in each dimension ALLOCATE (size_1(nblks_1), size_2(nblks_2), size_3(nblks_3)) size_1(:) = [3, 1, 5, 2] size_2(:) = [1, 2, 5, 3, 2, 4] size_3(:) = [4, 2, 10] ! Number of non-zero blocks nblks_alloc = 6 ALLOCATE (blk_ind_1(nblks_alloc), blk_ind_2(nblks_alloc), blk_ind_3(nblks_alloc)) ! Indices of non-zero blocks (s.t. index of ith block is [blk_ind_1(i), blk_ind_2(i), ...]) blk_ind_1(:) = [1, 1, 1, 2, 2, 2] !& blk_ind_2(:) = [2, 2, 4, 1, 1, 2] !& blk_ind_3(:) = [1, 3, 3, 2, 3, 2] !& ! Test tensor formats CALL dbcsr_t_test_formats(ndims, mp_comm, io_unit, verbose, & blk_size_1=size_1, blk_size_2=size_2, blk_size_3=size_3, & blk_ind_1=blk_ind_1, blk_ind_2=blk_ind_2, blk_ind_3=blk_ind_3) DEALLOCATE (size_1, size_2, size_3) DEALLOCATE (blk_ind_1, blk_ind_2, blk_ind_3) !--------------------------------------------------------------------------------------------------! ! Test 3: Testing matrix representations of tensor rank 4 ! !--------------------------------------------------------------------------------------------------! ndims = 4 ! Number of blocks in each dimension nblks_1 = 2 nblks_2 = 13 nblks_3 = 7 nblks_4 = 3 ! Block sizes in each dimension ALLOCATE (size_1(nblks_1), size_2(nblks_2), size_3(nblks_3), size_4(nblks_4)) size_1(:) = [5, 9] size_2(:) = [6, 2, 5, 12, 3, 1, 7, 2, 5, 17, 9, 3, 4] size_3(:) = [2, 7, 3, 8, 5, 15, 1] size_4(:) = [12, 5, 3] ! Number of non-zero blocks nblks_alloc = 19 ALLOCATE (blk_ind_1(nblks_alloc), blk_ind_2(nblks_alloc), blk_ind_3(nblks_alloc), blk_ind_4(nblks_alloc)) ! Indices of non-zero blocks (s.t. index of ith block is [blk_ind_1(i), blk_ind_2(i), ...]) blk_ind_1(:) = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2] !& blk_ind_2(:) = [2, 2, 3, 4, 7, 7, 10, 11, 11, 12, 12, 1, 1, 3, 5, 6, 6, 9, 12] !& blk_ind_3(:) = [1, 4, 6, 3, 1, 4, 2, 5, 7, 3, 3, 1, 4, 7, 6, 4, 5, 2, 3] !& blk_ind_4(:) = [3, 2, 3, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 1, 1, 3, 2, 2] !& ! Test tensor formats CALL dbcsr_t_test_formats(ndims, mp_comm, io_unit, verbose, & blk_size_1=size_1, blk_size_2=size_2, blk_size_3=size_3, blk_size_4=size_4, & blk_ind_1=blk_ind_1, blk_ind_2=blk_ind_2, blk_ind_3=blk_ind_3, blk_ind_4=blk_ind_4) DEALLOCATE (size_1, size_2, size_3, size_4) DEALLOCATE (blk_ind_1, blk_ind_2, blk_ind_3, blk_ind_4) END IF IF (test_contraction) THEN !--------------------------------------------------------------------------------------------------! ! Preparations for tensor contraction tests ! !--------------------------------------------------------------------------------------------------! nblks_1 = 4 nblks_2 = 11 nblks_3 = 9 nblks_4 = 5 nblks_5 = 3 ! Block sizes in each dimension ALLOCATE (size_1(nblks_1), size_2(nblks_2), size_3(nblks_3), size_4(nblks_4), size_5(nblks_5)) size_1(:) = [3, 9, 12, 1] size_2(:) = [4, 2, 3, 1, 9, 2, 32, 10, 5, 8, 7] size_3(:) = [7, 3, 8, 7, 9, 5, 10, 23, 2] size_4(:) = [8, 1, 4, 13, 6] size_5(:) = [4, 2, 22] nblks_alloc_1 = 32 ALLOCATE (blk_ind_1_1(nblks_alloc_1), blk_ind_2_1(nblks_alloc_1), blk_ind_3_1(nblks_alloc_1)) blk_ind_1_1(:) = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, & !& 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, & !& 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, & !& 4, 4] !& blk_ind_2_1(:) = [ 3, 5, 5, 5, 6, 6, 7, 8, 10, 11, & !& 11, 1, 1, 4, 7, 7, 9, 10 , 2, 2, & !& 5, 6, 8, 8, 9, 11, 11, 2 , 4, 5, & !& 5, 8] !& blk_ind_3_1(:) = [7, 3, 5, 9, 6, 8, 2, 8, 3, 2, & !& 3, 1, 4, 6, 2, 7, 5, 8, 3, 7, & !& 1, 4, 3, 7, 8, 5, 8, 9, 6, 1, & !& 2, 7] !& nblks_alloc_2 = 12 ALLOCATE (blk_ind_3_2(nblks_alloc_2), blk_ind_4_2(nblks_alloc_2)) blk_ind_3_2(:) = [1, 1, 2, 2, 2, 4, 4, 5, 5, 6, & !& 8, 8] !& blk_ind_4_2(:) = [2, 3, 2, 4, 5, 3, 5, 1, 3, 3, & !& 1, 4] !& nblks_alloc_3 = 5 ALLOCATE (blk_ind_1_3(nblks_alloc_3), blk_ind_2_3(nblks_alloc_3), blk_ind_4_3(nblks_alloc_3)) blk_ind_1_3(:) = [1, 1, 2, 4, 4] blk_ind_2_3(:) = [2, 6, 6, 7, 9] blk_ind_4_3(:) = [1, 3, 4, 4, 5] nblks_alloc_4 = 36 ALLOCATE (blk_ind_1_4(nblks_alloc_4)) ALLOCATE (blk_ind_2_4(nblks_alloc_4)) ALLOCATE (blk_ind_4_4(nblks_alloc_4)) ALLOCATE (blk_ind_5_4(nblks_alloc_4)) blk_ind_1_4(:) = [ 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, & !& 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, & !& 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, & !& 4, 4, 4, 4, 4, 4] !& blk_ind_2_4(:) = [ 1, 3, 4, 6, 10, 2, 2, 4, 5, 5, & !& 6, 6, 6, 7, 7, 9, 9, 9, 10, 11, & !& 1, 3, 3, 4, 5, 6, 8, 9, 11, 11, & !& 1, 3, 4, 6, 10, 11] !& blk_ind_4_4(:) = [ 3, 5, 2, 3, 2, 3, 5, 1, 1, 4, & !& 2, 3, 4, 1, 4, 3, 4, 4, 2, 1, & !& 3, 1, 1, 3, 4, 3, 4, 2, 2, 3, & !& 1, 1, 3, 2, 5, 5] !& blk_ind_5_4(:) = [ 1, 3, 2, 1, 1, 2, 3, 1, 3, 1, & !& 2, 3, 2, 1, 3, 2, 3, 2, 1, 2, & !& 3, 1, 2, 3, 2, 2, 2, 3, 1, 2, & !& 1, 3, 2, 1, 3, 2] !& nblks_alloc_5 = 8 ALLOCATE (blk_ind_3_5(nblks_alloc_5), blk_ind_4_5(nblks_alloc_5), blk_ind_5_5(nblks_alloc_5)) blk_ind_3_5(:) = [2, 4, 5, 5, 5, 6, 6, 8] blk_ind_4_5(:) = [3, 2, 1, 1, 3, 2, 4, 5] blk_ind_5_5(:) = [3, 2, 1, 2, 3, 2, 1, 1] pdims_4d(:) = 0; pdims_3d(:) = 0; pdims_2d(:) = 0 CALL dbcsr_t_pgrid_create(mp_comm, pdims_4d, pgrid_4d) CALL dbcsr_t_pgrid_create(mp_comm, pdims_3d, pgrid_3d) CALL dbcsr_t_pgrid_create(mp_comm, pdims_2d, pgrid_2d) ALLOCATE (dist1_1(nblks_1)) CALL dbcsr_t_default_distvec(nblks_1, pdims_3d(1), size_1, dist1_1) ALLOCATE (dist1_2(nblks_2)) CALL dbcsr_t_default_distvec(nblks_2, pdims_3d(2), size_2, dist1_2) ALLOCATE (dist1_3(nblks_3)) CALL dbcsr_t_default_distvec(nblks_3, pdims_3d(3), size_3, dist1_3) ALLOCATE (dist2_1(nblks_3)) CALL dbcsr_t_default_distvec(nblks_3, pdims_2d(1), size_3, dist2_1) ALLOCATE (dist2_2(nblks_4)) CALL dbcsr_t_default_distvec(nblks_4, pdims_2d(2), size_4, dist2_2) ALLOCATE (dist3_1(nblks_1)) CALL dbcsr_t_default_distvec(nblks_1, pdims_3d(1), size_1, dist3_1) ALLOCATE (dist3_2(nblks_2)) CALL dbcsr_t_default_distvec(nblks_2, pdims_3d(2), size_2, dist3_2) ALLOCATE (dist3_3(nblks_4)) CALL dbcsr_t_default_distvec(nblks_4, pdims_3d(3), size_4, dist3_3) ALLOCATE (dist4_1(nblks_1)) CALL dbcsr_t_default_distvec(nblks_1, pdims_4d(1), size_1, dist4_1) ALLOCATE (dist4_2(nblks_2)) CALL dbcsr_t_default_distvec(nblks_2, pdims_4d(2), size_2, dist4_2) ALLOCATE (dist4_3(nblks_4)) CALL dbcsr_t_default_distvec(nblks_4, pdims_4d(3), size_4, dist4_3) ALLOCATE (dist4_4(nblks_5)) CALL dbcsr_t_default_distvec(nblks_5, pdims_4d(4), size_5, dist4_4) ALLOCATE (dist5_1(nblks_3)) CALL dbcsr_t_default_distvec(nblks_3, pdims_3d(1), size_3, dist5_1) ALLOCATE (dist5_2(nblks_4)) CALL dbcsr_t_default_distvec(nblks_4, pdims_3d(2), size_4, dist5_2) ALLOCATE (dist5_3(nblks_5)) CALL dbcsr_t_default_distvec(nblks_5, pdims_3d(3), size_5, dist5_3) !--------------------------------------------------------------------------------------------------! ! Test 4: Testing tensor contraction (12|3)x(3|4)=(12|4) ! !--------------------------------------------------------------------------------------------------! ALLOCATE (map11(2), map12(1), map21(1), map22(1), map31(2), map32(1)) map11(:) = [1, 2] map12(:) = [3] map21(:) = [1] map22(:) = [2] map31(:) = [1, 2] map32(:) = [3] CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3) CALL dbcsr_t_distribution_new(dist2, pgrid_2d, dist2_1, dist2_2) CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist3_1, dist3_2, dist3_3) CALL dbcsr_t_create(tensor_A, "(12|3)", dist1, map11, map12, dbcsr_type_real_8, & size_1, size_2, size_3) CALL dbcsr_t_create(tensor_B, "(3|4)", dist2, map21, map22, dbcsr_type_real_8, & size_3, size_4) CALL dbcsr_t_create(tensor_C, "(12|4)", dist3, map31, map32, dbcsr_type_real_8, & size_1, size_2, size_4) CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1) CALL dbcsr_t_setup_test_tensor(tensor_B, mp_comm, .FALSE., blk_ind_3_2, blk_ind_4_2) CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_1_3, blk_ind_2_3, blk_ind_4_3) CALL dbcsr_t_contract_test(dbcsr_scalar(0.9_real_8), tensor_A, tensor_B, dbcsr_scalar(0.1_real_8), tensor_C, & [3], [2, 1], & [1], [2], & [2, 1], [3], & io_unit, & log_verbose=verbose, & write_int=.TRUE.) DEALLOCATE (map11, map12, map21, map22, map31, map32) CALL dbcsr_t_destroy(tensor_A) CALL dbcsr_t_destroy(tensor_B) CALL dbcsr_t_destroy(tensor_C) CALL dbcsr_t_distribution_destroy(dist1) CALL dbcsr_t_distribution_destroy(dist2) CALL dbcsr_t_distribution_destroy(dist3) !--------------------------------------------------------------------------------------------------! ! Test 5: Testing tensor contraction (2|31)x(4|3)=(24|1) ! !--------------------------------------------------------------------------------------------------! ALLOCATE (map11(1), map12(2), map21(1), map22(1), map31(2), map32(1)) map11(:) = [2] map12(:) = [3, 1] map21(:) = [2] map22(:) = [1] map31(:) = [2, 3] map32(:) = [1] CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3) CALL dbcsr_t_distribution_new(dist2, pgrid_2d, dist2_1, dist2_2) CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist3_1, dist3_2, dist3_3) CALL dbcsr_t_create(tensor_A, "(2|31)", dist1, map11, map12, dbcsr_type_real_8, & size_1, size_2, size_3) CALL dbcsr_t_create(tensor_B, "(4|3)", dist2, map21, map22, dbcsr_type_real_8, & size_3, size_4) CALL dbcsr_t_create(tensor_C, "(24|1)", dist3, map31, map32, dbcsr_type_real_8, & size_1, size_2, size_4) CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1) CALL dbcsr_t_setup_test_tensor(tensor_B, mp_comm, .FALSE., blk_ind_3_2, blk_ind_4_2) CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_1_3, blk_ind_2_3, blk_ind_4_3) CALL dbcsr_t_contract_test(dbcsr_scalar(0.9_real_8), tensor_A, tensor_B, dbcsr_scalar(0.1_real_8), tensor_C, & [3], [1, 2], & [1], [2], & [1, 2], [3], & io_unit, & log_verbose=verbose, & write_int=.TRUE.) DEALLOCATE (map11, map12, map21, map22, map31, map32) CALL dbcsr_t_destroy(tensor_A) CALL dbcsr_t_destroy(tensor_B) CALL dbcsr_t_destroy(tensor_C) CALL dbcsr_t_distribution_destroy(dist1) CALL dbcsr_t_distribution_destroy(dist2) CALL dbcsr_t_distribution_destroy(dist3) !-------------------------------------------------------------------------------------------------! ! Test 6: Testing tensor contraction (4|3)x(1|32)=(24|1) ! !-------------------------------------------------------------------------------------------------! ALLOCATE (map11(1), map12(2), map21(1), map22(1), map31(2), map32(1)) map11(:) = [1] map12(:) = [3, 2] map21(:) = [2] map22(:) = [1] map31(:) = [2, 3] map32(:) = [1] CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3) CALL dbcsr_t_distribution_new(dist2, pgrid_2d, dist2_1, dist2_2) CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist3_1, dist3_2, dist3_3) CALL dbcsr_t_create(tensor_A, "(1|32)", dist1, map11, map12, dbcsr_type_real_8, & size_1, size_2, size_3) CALL dbcsr_t_create(tensor_B, "(4|3)", dist2, map21, map22, dbcsr_type_real_8, & size_3, size_4) CALL dbcsr_t_create(tensor_C, "(24|1)", dist3, map31, map32, dbcsr_type_real_8, & size_1, size_2, size_4) CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1) CALL dbcsr_t_setup_test_tensor(tensor_B, mp_comm, .FALSE., blk_ind_3_2, blk_ind_4_2) CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_1_3, blk_ind_2_3, blk_ind_4_3) ALLOCATE (bounds_t(ndims_tensor(tensor_B))) CALL dbcsr_t_get_info(tensor_B, nfull_total=bounds_t) ALLOCATE (bounds(2, 1)) bounds(1, 1) = 1 bounds(2, 1) = bounds_t(1) - 21 CALL dbcsr_t_contract_test(dbcsr_scalar(0.9_real_8), tensor_B, tensor_A, dbcsr_scalar(0.1_real_8), tensor_C, & [1], [2], & [3], [1, 2], & [3], [1, 2], & io_unit, & bounds_1=bounds, & log_verbose=verbose, & write_int=.TRUE.) DEALLOCATE (map11, map12, map21, map22, map31, map32, bounds_t, bounds) CALL dbcsr_t_destroy(tensor_A) CALL dbcsr_t_destroy(tensor_B) CALL dbcsr_t_destroy(tensor_C) CALL dbcsr_t_distribution_destroy(dist1) CALL dbcsr_t_distribution_destroy(dist2) CALL dbcsr_t_distribution_destroy(dist3) !-------------------------------------------------------------------------------------------------! ! Test 7: Testing tensor contraction (1|24)x(3|4)=(21|3) ! !-------------------------------------------------------------------------------------------------! ALLOCATE (map11(2), map12(1), map21(1), map22(1), map31(1), map32(2)) map11(:) = [2, 1] map12(:) = [3] map21(:) = [1] map22(:) = [2] map31(:) = [1] map32(:) = [2, 3] CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3) CALL dbcsr_t_distribution_new(dist2, pgrid_2d, dist2_1, dist2_2) CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist3_1, dist3_2, dist3_3) CALL dbcsr_t_create(tensor_A, "(21|3)", dist1, map11, map12, dbcsr_type_real_8, & size_1, size_2, size_3) CALL dbcsr_t_create(tensor_B, "(3|4)", dist2, map21, map22, dbcsr_type_real_8, & size_3, size_4) CALL dbcsr_t_create(tensor_C, "(1|24)", dist3, map31, map32, dbcsr_type_real_8, & size_1, size_2, size_4) CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1) CALL dbcsr_t_setup_test_tensor(tensor_B, mp_comm, .FALSE., blk_ind_3_2, blk_ind_4_2) CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_1_3, blk_ind_2_3, blk_ind_4_3) ALLOCATE (bounds_t(ndims_tensor(tensor_C))) CALL dbcsr_t_get_info(tensor_C, nfull_total=bounds_t) ALLOCATE (bounds(2, 2)) bounds(1, 1) = 4 bounds(2, 1) = bounds_t(1) bounds(1, 2) = 13 bounds(2, 2) = bounds_t(2) - 10 DEALLOCATE (bounds_t) CALL dbcsr_t_contract_test(dbcsr_scalar(0.2_real_8), tensor_C, tensor_B, dbcsr_scalar(0.8_real_8), tensor_A, & [3], [1, 2], & [2], [1], & [1, 2], [3], & io_unit, & bounds_2=bounds, & log_verbose=verbose, & write_int=.TRUE.) DEALLOCATE (map11, map12, map21, map22, map31, map32, bounds) CALL dbcsr_t_destroy(tensor_A) CALL dbcsr_t_destroy(tensor_B) CALL dbcsr_t_destroy(tensor_C) CALL dbcsr_t_distribution_destroy(dist1) CALL dbcsr_t_distribution_destroy(dist2) CALL dbcsr_t_distribution_destroy(dist3) !-------------------------------------------------------------------------------------------------! ! Test 8: Testing tensor contraction (12|3)x(12|45)=(3|45) !-------------------------------------------------------------------------------------------------! ALLOCATE (map11(2), map12(1), map21(2), map22(2), map31(1), map32(2)) map11(:) = [1, 2] map12(:) = [3] map21(:) = [1, 2] map22(:) = [3, 4] map31(:) = [1] map32(:) = [2, 3] CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3) CALL dbcsr_t_distribution_new(dist2, pgrid_4d, dist4_1, dist4_2, dist4_3, dist4_4) CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist5_1, dist5_2, dist5_3) CALL dbcsr_t_create(tensor_A, "(12|3)", dist1, map11, map12, dbcsr_type_real_8, & size_1, size_2, size_3) CALL dbcsr_t_create(tensor_B, "(12|45)", dist2, map21, map22, dbcsr_type_real_8, & size_1, size_2, size_4, size_5) CALL dbcsr_t_create(tensor_C, "(3|45)", dist3, map31, map32, dbcsr_type_real_8, & size_3, size_4, size_5) CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1) CALL dbcsr_t_setup_test_tensor(tensor_B, mp_comm, .FALSE., blk_ind_1_4, blk_ind_2_4, blk_ind_4_4, blk_ind_5_4) CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_3_5, blk_ind_4_5, blk_ind_5_5) ALLOCATE (bounds_t(ndims_tensor(tensor_A))) CALL dbcsr_t_get_info(tensor_A, nfull_total=bounds_t) ALLOCATE (bounds_1(2, 2)) bounds_1(1, 1) = 7 bounds_1(2, 1) = bounds_t(2) - 17 bounds_1(1, 2) = 8 bounds_1(2, 2) = bounds_t(1) DEALLOCATE (bounds_t) ALLOCATE (bounds_t(ndims_tensor(tensor_B))) CALL dbcsr_t_get_info(tensor_B, nfull_total=bounds_t) ALLOCATE (bounds_2(2, 2)) bounds_2(1, 1) = 1 bounds_2(2, 1) = bounds_t(3) bounds_2(1, 2) = 1 bounds_2(2, 2) = bounds_t(4) - 18 DEALLOCATE (bounds_t) CALL dbcsr_t_contract_test(dbcsr_scalar(0.2_real_8), tensor_A, tensor_B, dbcsr_scalar(0.8_real_8), tensor_C, & [2, 1], [3], & [2, 1], [3, 4], & [1], [2, 3], & io_unit, & bounds_1=bounds_1, & bounds_3=bounds_2, & log_verbose=verbose, & write_int=.TRUE.) DEALLOCATE (map11, map12, map21, map22, map31, map32, bounds_1, bounds_2) CALL dbcsr_t_destroy(tensor_A) CALL dbcsr_t_destroy(tensor_B) CALL dbcsr_t_destroy(tensor_C) CALL dbcsr_t_distribution_destroy(dist1) CALL dbcsr_t_distribution_destroy(dist2) CALL dbcsr_t_distribution_destroy(dist3) !-------------------------------------------------------------------------------------------------! ! Test 9: Testing tensor contraction (3|21)x(12|45)=(3|45) !-------------------------------------------------------------------------------------------------! ALLOCATE (map11(1), map12(2), map21(2), map22(2), map31(1), map32(2)) map11(:) = [3] map12(:) = [2, 1] map21(:) = [1, 2] map22(:) = [3, 4] map31(:) = [1] map32(:) = [2, 3] CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3) CALL dbcsr_t_distribution_new(dist2, pgrid_4d, dist4_1, dist4_2, dist4_3, dist4_4) CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist5_1, dist5_2, dist5_3) CALL dbcsr_t_create(tensor_A, "(3|21)", dist1, map11, map12, dbcsr_type_real_8, & size_1, size_2, size_3) CALL dbcsr_t_create(tensor_B, "(12|45)", dist2, map21, map22, dbcsr_type_real_8, & size_1, size_2, size_4, size_5) CALL dbcsr_t_create(tensor_C, "(3|45)", dist3, map31, map32, dbcsr_type_real_8, & size_3, size_4, size_5) CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1) CALL dbcsr_t_setup_test_tensor(tensor_B, mp_comm, .FALSE., blk_ind_1_4, blk_ind_2_4, blk_ind_4_4, blk_ind_5_4) CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_3_5, blk_ind_4_5, blk_ind_5_5) CALL dbcsr_t_contract_test(dbcsr_scalar(0.2_real_8), tensor_A, tensor_B, dbcsr_scalar(0.8_real_8), tensor_C, & [2, 1], [3], & [2, 1], [3, 4], & [1], [2, 3], & io_unit, & log_verbose=verbose, & write_int=.TRUE.) DEALLOCATE (map11, map12, map21, map22, map31, map32) CALL dbcsr_t_destroy(tensor_A) CALL dbcsr_t_destroy(tensor_B) CALL dbcsr_t_destroy(tensor_C) CALL dbcsr_t_distribution_destroy(dist1) CALL dbcsr_t_distribution_destroy(dist2) CALL dbcsr_t_distribution_destroy(dist3) !-------------------------------------------------------------------------------------------------! ! Test 10: Testing tensor contraction (13|2)x(54|21)=(3|45) !-------------------------------------------------------------------------------------------------! ALLOCATE (map11(2), map12(1), map21(2), map22(2), map31(1), map32(2)) map11(:) = [1, 3] map12(:) = [2] map21(:) = [4, 3] map22(:) = [2, 1] map31(:) = [1] map32(:) = [2, 3] CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3) CALL dbcsr_t_distribution_new(dist2, pgrid_4d, dist4_1, dist4_2, dist4_3, dist4_4) CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist5_1, dist5_2, dist5_3) CALL dbcsr_t_create(tensor_A, "(13|2)", dist1, map11, map12, dbcsr_type_real_8, & size_1, size_2, size_3) CALL dbcsr_t_create(tensor_B, "(54|21)", dist2, map21, map22, dbcsr_type_real_8, & size_1, size_2, size_4, size_5) CALL dbcsr_t_create(tensor_C, "(3|45)", dist3, map31, map32, dbcsr_type_real_8, & size_3, size_4, size_5) CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1) CALL dbcsr_t_setup_test_tensor(tensor_B, mp_comm, .FALSE., blk_ind_1_4, blk_ind_2_4, blk_ind_4_4, blk_ind_5_4) CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_3_5, blk_ind_4_5, blk_ind_5_5) CALL dbcsr_t_contract_test(dbcsr_scalar(0.2_real_8), tensor_A, tensor_B, dbcsr_scalar(0.8_real_8), tensor_C, & [1, 2], [3], & [1, 2], [3, 4], & [1], [2, 3], & io_unit, & log_verbose=verbose, & write_int=.TRUE.) DEALLOCATE (map11, map12, map21, map22, map31, map32) CALL dbcsr_t_destroy(tensor_A) CALL dbcsr_t_destroy(tensor_B) CALL dbcsr_t_destroy(tensor_C) CALL dbcsr_t_distribution_destroy(dist1) CALL dbcsr_t_distribution_destroy(dist2) CALL dbcsr_t_distribution_destroy(dist3) !-------------------------------------------------------------------------------------------------! ! Test 10: Testing tensor contraction (54|21)x(2|31)=(43|5) !-------------------------------------------------------------------------------------------------! ALLOCATE (map11(1), map12(2), map21(2), map22(2), map31(2), map32(1)) map11(:) = [2] map12(:) = [3, 1] map21(:) = [4, 3] map22(:) = [2, 1] map31(:) = [2, 1] map32(:) = [3] CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3) CALL dbcsr_t_distribution_new(dist2, pgrid_4d, dist4_1, dist4_2, dist4_3, dist4_4) CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist5_1, dist5_2, dist5_3) CALL dbcsr_t_create(tensor_A, "(2|31)", dist1, map11, map12, dbcsr_type_real_8, & size_1, size_2, size_3) CALL dbcsr_t_create(tensor_B, "(54|21)", dist2, map21, map22, dbcsr_type_real_8, & size_1, size_2, size_4, size_5) CALL dbcsr_t_create(tensor_C, "(43|5)", dist3, map31, map32, dbcsr_type_real_8, & size_3, size_4, size_5) CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1) CALL dbcsr_t_setup_test_tensor(tensor_B, mp_comm, .FALSE., blk_ind_1_4, blk_ind_2_4, blk_ind_4_4, blk_ind_5_4) CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_3_5, blk_ind_4_5, blk_ind_5_5) CALL dbcsr_t_contract_test(dbcsr_scalar(0.2_real_8), tensor_B, tensor_A, dbcsr_scalar(0.8_real_8), tensor_C, & [2, 1], [4, 3], & [2, 1], [3], & [3, 2], [1], & io_unit, & log_verbose=verbose, & write_int=.TRUE.) DEALLOCATE (map11, map12, map21, map22, map31, map32) CALL dbcsr_t_destroy(tensor_A) CALL dbcsr_t_destroy(tensor_B) CALL dbcsr_t_destroy(tensor_C) CALL dbcsr_t_distribution_destroy(dist1) CALL dbcsr_t_distribution_destroy(dist2) CALL dbcsr_t_distribution_destroy(dist3) !-------------------------------------------------------------------------------------------------! ! Test 11: Testing tensor contraction (241|5)x(31|2)=(5|43) !-------------------------------------------------------------------------------------------------! ALLOCATE (map11(2), map12(1), map21(3), map22(1), map31(1), map32(2)) map11(:) = [3, 1] map12(:) = [2] map21(:) = [2, 3, 1] map22(:) = [4] map31(:) = [3] map32(:) = [2, 1] CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3) CALL dbcsr_t_distribution_new(dist2, pgrid_4d, dist4_1, dist4_2, dist4_3, dist4_4) CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist5_1, dist5_2, dist5_3) CALL dbcsr_t_create(tensor_A, "(31|2)", dist1, map11, map12, dbcsr_type_real_8, & size_1, size_2, size_3) CALL dbcsr_t_create(tensor_B, "(241|5)", dist2, map21, map22, dbcsr_type_real_8, & size_1, size_2, size_4, size_5) CALL dbcsr_t_create(tensor_C, "(5|43)", dist3, map31, map32, dbcsr_type_real_8, & size_3, size_4, size_5) CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1) CALL dbcsr_t_setup_test_tensor(tensor_B, mp_comm, .FALSE., blk_ind_1_4, blk_ind_2_4, blk_ind_4_4, blk_ind_5_4) CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_3_5, blk_ind_4_5, blk_ind_5_5) CALL dbcsr_t_contract_test(dbcsr_scalar(0.6_real_8), tensor_B, tensor_A, dbcsr_scalar(0.4_real_8), tensor_C, & [2, 1], [3, 4], & [2, 1], [3], & [2, 3], [1], & io_unit, & log_verbose=verbose, & write_int=.TRUE.) DEALLOCATE (map11, map12, map21, map22, map31, map32) CALL dbcsr_t_destroy(tensor_A) CALL dbcsr_t_destroy(tensor_B) CALL dbcsr_t_destroy(tensor_C) CALL dbcsr_t_distribution_destroy(dist1) CALL dbcsr_t_distribution_destroy(dist2) CALL dbcsr_t_distribution_destroy(dist3) !-------------------------------------------------------------------------------------------------! ! Test 12: Testing tensor contraction (34|5)x(12|3)=(14|25) !-------------------------------------------------------------------------------------------------! ALLOCATE (map11(2), map12(1), map21(2), map22(2), map31(2), map32(1)) map11(:) = [1, 2] map12(:) = [3] map21(:) = [1, 3] map22(:) = [2, 4] map31(:) = [1, 2] map32(:) = [3] CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3) CALL dbcsr_t_distribution_new(dist2, pgrid_4d, dist4_1, dist4_2, dist4_3, dist4_4) CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist5_1, dist5_2, dist5_3) CALL dbcsr_t_create(tensor_A, "(12|3)", dist1, map11, map12, dbcsr_type_real_8, & size_1, size_2, size_3) CALL dbcsr_t_create(tensor_B, "(14|25)", dist2, map21, map22, dbcsr_type_real_8, & size_1, size_2, size_4, size_5) CALL dbcsr_t_create(tensor_C, "(34|5)", dist3, map31, map32, dbcsr_type_real_8, & size_3, size_4, size_5) CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1) CALL dbcsr_t_setup_test_tensor(tensor_B, mp_comm, .FALSE., blk_ind_1_4, blk_ind_2_4, blk_ind_4_4, blk_ind_5_4) CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_3_5, blk_ind_4_5, blk_ind_5_5) CALL dbcsr_t_contract_test(dbcsr_scalar(0.2_real_8), tensor_C, tensor_A, dbcsr_scalar(0.8_real_8), tensor_B, & [1], [2, 3], & [3], [1, 2], & [3, 4], [1, 2], & io_unit, & log_verbose=verbose, & write_int=.TRUE.) DEALLOCATE (map11, map12, map21, map22, map31, map32) CALL dbcsr_t_destroy(tensor_A) CALL dbcsr_t_destroy(tensor_B) CALL dbcsr_t_destroy(tensor_C) CALL dbcsr_t_distribution_destroy(dist1) CALL dbcsr_t_distribution_destroy(dist2) CALL dbcsr_t_distribution_destroy(dist3) !--------------------------------------------------------------------------------------------------! ! Cleanup for tensor contraction tests ! !--------------------------------------------------------------------------------------------------! DEALLOCATE (blk_ind_1_1, blk_ind_2_1, blk_ind_3_1) DEALLOCATE (blk_ind_3_2, blk_ind_4_2) DEALLOCATE (blk_ind_1_3, blk_ind_2_3, blk_ind_4_3) DEALLOCATE (blk_ind_1_4, blk_ind_2_4, blk_ind_4_4, blk_ind_5_4) DEALLOCATE (blk_ind_3_5, blk_ind_4_5, blk_ind_5_5) DEALLOCATE (size_1, size_2, size_3, size_4, size_5, dist1_1, dist1_2, dist1_3, & dist2_1, dist2_2, dist3_1, dist3_2, dist3_3, dist4_1, dist4_2, & dist4_3, dist4_4, dist5_1, dist5_2, dist5_3) CALL dbcsr_t_pgrid_destroy(pgrid_3d) CALL dbcsr_t_pgrid_destroy(pgrid_2d) CALL dbcsr_t_pgrid_destroy(pgrid_4d) END IF !--------------------------------------------------------------------------------------------------! ! End tests ! !--------------------------------------------------------------------------------------------------! call dbcsr_print_statistics(.true.) ! finalize libdbcsr CALL dbcsr_finalize_lib() ! finalize mpi CALL mp_world_finalize() END PROGRAM ================================================ FILE: tests/dbcsr_test.cpp ================================================ /*------------------------------------------------------------------------------------------------*/ /* Copyright (C) by the DBCSR developers group - All rights reserved */ /* This file is part of the DBCSR library. */ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ /* SPDX-License-Identifier: GPL-2.0+ */ /*------------------------------------------------------------------------------------------------*/ #include #include #include #include #include #include #include #include #include // Random distribution by using round-robin assignment // of blocks to processors std::vector random_dist(int dist_size, int nbins) { std::vector dist(dist_size); for (int i = 0; i < dist_size; i++) dist[i] = i % nbins; return dist; } int main(int argc, char* argv[]) { MPI_Init(&argc, &argv); int mpi_size, mpi_rank; MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); // Make 2D grid int dims[2] = {0}; MPI_Dims_create(mpi_size, 2, dims); int periods[2] = {1}; int reorder = 0; MPI_Comm group; MPI_Cart_create(MPI_COMM_WORLD, 2, dims, periods, reorder, &group); int coord[2]; MPI_Cart_coords(group, mpi_rank, 2, coord); for (int i = 0; i != mpi_size; ++i) { if (mpi_rank == i) { std::cout << "I'm processor " << mpi_rank << " over " << mpi_size << " proc" << ", (" << coord[0] << ", " << coord[1] << ") in the 2D grid" << std::endl; } MPI_Barrier(MPI_COMM_WORLD); } c_dbcsr_init_lib(MPI_COMM_WORLD, nullptr); // Total number of blocks int nrows_1 = 4; int ncols_1 = 5; int nrows_2 = 5; int ncols_2 = 4; // Block sizes std::vector row_blk_sizes_1 = {2, 3, 5, 2}; std::vector col_blk_sizes_1 = {3, 3, 4, 6, 2}; std::vector row_blk_sizes_2 = col_blk_sizes_1; std::vector col_blk_sizes_2 = {5, 2, 5, 3}; auto row_dist_1 = random_dist(nrows_1, dims[0]); auto col_dist_1 = random_dist(ncols_1, dims[1]); auto row_dist_2 = random_dist(nrows_2, dims[0]); auto col_dist_2 = random_dist(ncols_2, dims[1]); void* dist1 = nullptr; void* dist2 = nullptr; void* dist3 = nullptr; if (mpi_rank == 0) std::cout << "Creating distributions..." << std::endl; c_dbcsr_distribution_new(&dist1, group, row_dist_1.data(), row_dist_1.size(), col_dist_1.data(), col_dist_1.size()); c_dbcsr_distribution_new(&dist2, group, row_dist_2.data(), row_dist_2.size(), col_dist_2.data(), col_dist_2.size()); c_dbcsr_distribution_new(&dist3, group, row_dist_1.data(), row_dist_1.size(), col_dist_2.data(), col_dist_2.size()); // Fill all blocks, i.e. dense matrices auto fill_matrix = [&](void* matrix, std::vector& irblks, std::vector& icblks) { std::vector block; std::vector loc_irblks, loc_icblks; for (int i = 0; i != (int)irblks.size(); ++i) { int blk_proc = -1; int ix = irblks[i]; int jx = icblks[i]; c_dbcsr_get_stored_coordinates(matrix, ix, jx, &blk_proc); if (mpi_rank == blk_proc) { loc_irblks.push_back(ix); loc_icblks.push_back(jx); } } c_dbcsr_reserve_blocks(matrix, loc_irblks.data(), loc_icblks.data(), loc_irblks.size()); void* iter = nullptr; c_dbcsr_iterator_start(&iter, matrix, nullptr, nullptr, nullptr, nullptr, nullptr); while (c_dbcsr_iterator_blocks_left(iter)) { int i = -1; int j = -1; int nblk = -1; int rsize = -1; int csize = -1; int roff = -1; int coff = -1; bool tr = false; double* blk = nullptr; c_dbcsr_iterator_next_2d_block_d(iter, &i, &j, &blk, &tr, &nblk, &rsize, &csize, &roff, &coff); std::generate(blk, blk + rsize * csize, [&]() { return static_cast(std::rand()) / RAND_MAX; }); } c_dbcsr_iterator_stop(&iter); }; // create and fill matrix a void* matrix_a = nullptr; void* matrix_b = nullptr; void* matrix_c = nullptr; if (mpi_rank == 0) std::cout << "Creating matrices..." << std::endl; c_dbcsr_create_new(&matrix_a, "matrix a", dist1, dbcsr_type_no_symmetry, row_blk_sizes_1.data(), row_blk_sizes_1.size(), col_blk_sizes_1.data(), col_blk_sizes_1.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); c_dbcsr_create_new(&matrix_b, "matrix b", dist2, dbcsr_type_no_symmetry, row_blk_sizes_2.data(), row_blk_sizes_2.size(), col_blk_sizes_2.data(), col_blk_sizes_2.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); c_dbcsr_create_new(&matrix_c, "matrix c", dist3, dbcsr_type_no_symmetry, row_blk_sizes_1.data(), row_blk_sizes_1.size(), col_blk_sizes_2.data(), col_blk_sizes_2.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); std::vector irblks_1 = {0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3}; std::vector icblks_1 = {0, 1, 2, 4, 0, 2, 3, 1, 3, 4, 0, 1, 2}; std::vector irblks_2 = {0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4}; std::vector icblks_2 = {0, 2, 3, 0, 1, 2, 3, 0, 2, 3, 1, 2, 3, 0, 1, 2, 3}; std::vector irblks_3 = {0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3}; std::vector icblks_3 = {0, 1, 2, 3, 0, 2, 3, 1, 2, 3, 0, 1, 2, 3}; if (mpi_rank == 0) std::cout << "Filling matrices..." << std::endl; fill_matrix(matrix_a, irblks_1, icblks_1); c_dbcsr_finalize(matrix_a); fill_matrix(matrix_b, irblks_2, icblks_2); c_dbcsr_finalize(matrix_b); fill_matrix(matrix_c, irblks_3, icblks_3); c_dbcsr_finalize(matrix_c); if (mpi_rank == 0) std::cout << "Multiplying..." << std::endl; c_dbcsr_multiply_d('N', 'N', 1.0, matrix_a, matrix_b, 2.0, matrix_c, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); if (mpi_rank == 0) std::cout << "Testing get_info for matrix_c" << std::endl; int nblkrowstot(0), nblkcolstot(0), nfullrowstot(0), nfullcolstot(0), nblkrowsloc(0), nblkcolsloc(0), nfullrowsloc(0), nfullcolsloc(0), my_prow(0), my_pcol(0); //int *local_rows, *local_cols, *proc_row_dist, *proc_col_dist, // *row_blk_size, *col_blk_size, *row_blk_offset, *col_blk_offset; std::vector local_rows(c_dbcsr_nblkrows_local(matrix_a)); std::vector local_cols(c_dbcsr_nblkcols_local(matrix_a)); std::vector proc_row(c_dbcsr_nblkrows_total(matrix_a)); std::vector proc_col(c_dbcsr_nblkcols_total(matrix_a)); std::vector row_blk(c_dbcsr_nblkrows_total(matrix_a)); std::vector col_blk(c_dbcsr_nblkcols_total(matrix_a)); std::vector row_off(c_dbcsr_nblkrows_total(matrix_a)); std::vector col_off(c_dbcsr_nblkcols_total(matrix_a)); char* name; char matrix_type; int data_type; c_dbcsr_get_info(matrix_c, &nblkrowstot, &nblkcolstot, &nfullrowstot, &nfullcolstot, &nblkrowsloc, &nblkcolsloc, &nfullrowsloc, &nfullcolsloc, &my_prow, &my_pcol, local_rows.data(), local_cols.data(), proc_row.data(), proc_col.data(), row_blk.data(), col_blk.data(), nullptr, nullptr, nullptr, &name, &matrix_type, &data_type, nullptr); auto printv = [](std::vector& v) { for (auto x : v) std::cout << x << " "; std::cout << std::endl; }; #define print_var(name) std::cout << #name << ": " << name << std::endl; #define print_vec(name) \ std::cout << #name << ": " << std::endl; \ printv(name); if (mpi_rank == 0) { std::cout << "Name: " << name << std::endl; print_var(nblkrowstot) print_var(nblkcolstot) print_var(nfullrowstot) print_var(nfullcolstot) print_var(nblkrowsloc) print_var(nblkcolsloc) print_var(nfullrowsloc) print_var(nfullcolsloc) print_vec(local_rows) print_vec(local_cols) print_vec(proc_row) print_vec(proc_col) print_vec(row_blk) print_vec(col_blk) print_vec(row_off) print_vec(col_off) } c_free_string(&name); MPI_Barrier(MPI_COMM_WORLD); if (mpi_rank == 0) std::cout << "Testing distribution_get for dist1" << std::endl; int *row_dist, *col_dist, *pgrid; int nrows, ncols, mynode, numnodes, nprows, npcols, myprow, mypcol, prow_group, pcol_group; bool has_threads, subgroups_defined; MPI_Comm cgroup; c_dbcsr_distribution_get(dist1, &row_dist, &col_dist, &nrows, &ncols, &has_threads, &cgroup, &mynode, &numnodes, &nprows, &npcols, &myprow, &mypcol, &pgrid, &subgroups_defined, &prow_group, &pcol_group); if (mpi_rank == 0) { print_var(nrows) print_var(ncols) print_var(mynode) print_var(numnodes) print_var(nprows) print_var(npcols) print_var(myprow) print_var(mypcol) print_var(prow_group) print_var(pcol_group) if (cgroup == group) { std::cout << "Correct MPI communicator." << std::endl; } std::cout << "dist row:" << std::endl; for (int i = 0; i != nrows; ++i) std::cout << row_dist[i] << " "; std::cout << std::endl; std::cout << "dist col:" << std::endl; for (int i = 0; i != ncols; ++i) std::cout << col_dist[i] << " "; std::cout << std::endl; std::cout << "grid: " << std::endl; for (int i = 0; i != nprows; ++i) { for (int j = 0; j != npcols; ++j) std::cout << pgrid[i + nprows * j] << " "; std::cout << std::endl; } } MPI_Barrier(MPI_COMM_WORLD); c_dbcsr_release(&matrix_a); c_dbcsr_release(&matrix_b); c_dbcsr_release(&matrix_c); c_dbcsr_distribution_release(&dist1); c_dbcsr_distribution_release(&dist2); c_dbcsr_distribution_release(&dist3); if (mpi_rank == 0) std::cout << "Extracting block diagonal..." << std::endl; std::vector blk_sizes = {3, 3, 3}; auto rowdist = random_dist(blk_sizes.size(), dims[0]); auto coldist = random_dist(blk_sizes.size(), dims[1]); void* dist4 = nullptr; c_dbcsr_distribution_new(&dist4, group, rowdist.data(), rowdist.size(), coldist.data(), coldist.size()); void* matrix_d = nullptr; c_dbcsr_create_new(&matrix_d, "matrix d", dist4, dbcsr_type_no_symmetry, blk_sizes.data(), blk_sizes.size(), blk_sizes.data(), blk_sizes.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); c_dbcsr_init_random(matrix_d, nullptr); c_dbcsr_print(matrix_d); std::vector alpha(9); for (size_t i = 0; i != alpha.size(); ++i) { alpha[i] = (double)i; } c_dbcsr_scale_by_vector_d(matrix_d, alpha.data(), alpha.size(), "right"); c_dbcsr_print(matrix_d); double* data = nullptr; double type = 1.0; long long int data_size = 0; c_dbcsr_get_data_d(matrix_d, &data, &data_size, &type, nullptr, nullptr); if (mpi_rank == 0) { std::cout << "Data on rank 0:" << std::endl; for (int i = 0; i != data_size; ++i) std::cout << data[i] << " "; std::cout << std::endl; } void* diag = nullptr; c_dbcsr_get_block_diag(matrix_d, &diag); c_dbcsr_print(diag); c_dbcsr_release(&matrix_d); c_dbcsr_release(&diag); c_dbcsr_distribution_release(&dist4); c_dbcsr_print_statistics(nullptr, nullptr); MPI_Comm_free(&group); c_dbcsr_finalize_lib(); MPI_Finalize(); return 0; } ================================================ FILE: tests/dbcsr_test_add.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_test_add !! Tests for DBCSR add USE dbcsr_data_methods, ONLY: dbcsr_data_get_sizes, & dbcsr_data_init, & dbcsr_data_new, & dbcsr_data_release, & dbcsr_type_1d_to_2d USE dbcsr_dist_methods, ONLY: dbcsr_distribution_new, & dbcsr_distribution_release USE dbcsr_io, ONLY: dbcsr_print USE dbcsr_kinds, ONLY: dp, & real_4, & real_8 USE dbcsr_methods, ONLY: & dbcsr_col_block_sizes, dbcsr_get_data_type, dbcsr_get_matrix_type, dbcsr_name, & dbcsr_nblkcols_total, dbcsr_nblkrows_total, dbcsr_nfullcols_total, dbcsr_nfullrows_total, & dbcsr_release, dbcsr_row_block_sizes USE dbcsr_mpiwrap, ONLY: mp_bcast, & mp_environ, mp_comm_type USE dbcsr_operations, ONLY: dbcsr_add, & dbcsr_get_occupation USE dbcsr_test_methods, ONLY: compx_to_dbcsr_scalar, & dbcsr_impose_sparsity, & dbcsr_make_random_block_sizes, & dbcsr_make_random_matrix, & dbcsr_random_dist, & dbcsr_to_dense_local USE dbcsr_transformations, ONLY: dbcsr_redistribute, & dbcsr_replicate_all USE dbcsr_types, ONLY: & dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_mp_obj, dbcsr_scalar_type, dbcsr_type, & dbcsr_type_antihermitian, dbcsr_type_antisymmetric, dbcsr_type_complex_4, & dbcsr_type_complex_4_2d, dbcsr_type_complex_8, dbcsr_type_complex_8_2d, & dbcsr_type_hermitian, dbcsr_type_no_symmetry, dbcsr_type_real_4, dbcsr_type_real_4_2d, & dbcsr_type_real_8, dbcsr_type_real_8_2d, dbcsr_type_symmetric USE dbcsr_work_operations, ONLY: dbcsr_create #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_max_threads, omp_get_thread_num, omp_get_num_threads IMPLICIT NONE PRIVATE PUBLIC :: dbcsr_test_adds CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_test_add' CONTAINS SUBROUTINE dbcsr_test_adds(test_name, mp_group, mp_env, npdims, io_unit, & matrix_sizes, bs_m, bs_n, sparsities, & alpha, beta, limits, retain_sparsity) !! Performs a variety of matrix add CHARACTER(len=*), INTENT(IN) :: test_name TYPE(mp_comm_type), INTENT(IN) :: mp_group !! MPI communicator TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER, DIMENSION(2), INTENT(in) :: npdims INTEGER, INTENT(IN) :: io_unit !! which unit to write to, if not negative INTEGER, DIMENSION(:), INTENT(in) :: matrix_sizes, bs_m, bs_n !! size of matrices to test !! block sizes of the 3 dimensions !! block sizes of the 3 dimensions REAL(real_8), DIMENSION(2), INTENT(in) :: sparsities !! sparsities of matrices to create COMPLEX(real_8) :: alpha, beta INTEGER, DIMENSION(4), INTENT(in) :: limits LOGICAL, INTENT(in) :: retain_sparsity CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_test_adds' CHARACTER, DIMENSION(2, 5), PARAMETER :: symmetries = & RESHAPE((/dbcsr_type_no_symmetry, dbcsr_type_no_symmetry, & dbcsr_type_symmetric, dbcsr_type_symmetric, & dbcsr_type_antisymmetric, dbcsr_type_antisymmetric, & dbcsr_type_hermitian, dbcsr_type_hermitian, & dbcsr_type_antihermitian, dbcsr_type_antihermitian/), (/2, 5/)) INTEGER, DIMENSION(4), PARAMETER :: types = (/dbcsr_type_real_4, dbcsr_type_real_8, & dbcsr_type_complex_4, dbcsr_type_complex_8/) CHARACTER :: a_symm, b_symm INTEGER :: a_c, a_r, b_c, b_r, handle, isymm, & itype, mynode, numnodes, numthreads, & TYPE INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: my_sizes_m, my_sizes_n, sizes_m, sizes_n LOGICAL :: do_complex TYPE(dbcsr_data_obj) :: data_a, data_a_dbcsr, data_b TYPE(dbcsr_scalar_type) :: alpha_obj, beta_obj TYPE(dbcsr_type) :: matrix_a, matrix_b ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) NULLIFY (my_sizes_m, my_sizes_n, sizes_m, sizes_n) ! ! print CALL mp_environ(numnodes, mynode, mp_group) IF (io_unit .GT. 0) THEN WRITE (io_unit, *) 'test_name ', test_name numthreads = 1 !$OMP PARALLEL !$OMP MASTER !$ numthreads = omp_get_num_threads() !$OMP END MASTER !$OMP END PARALLEL WRITE (io_unit, *) 'numthreads', numthreads WRITE (io_unit, *) 'numnodes', numnodes WRITE (io_unit, *) 'matrix_sizes', matrix_sizes WRITE (io_unit, *) 'sparsities', sparsities WRITE (io_unit, *) 'alpha', alpha WRITE (io_unit, *) 'beta', beta WRITE (io_unit, *) 'limits', limits WRITE (io_unit, *) 'retain_sparsity', retain_sparsity WRITE (io_unit, *) 'bs_m', bs_m WRITE (io_unit, *) 'bs_n', bs_n END IF ! ! ! loop over symmetry DO isymm = 1, SIZE(symmetries, 2) a_symm = symmetries(1, isymm) b_symm = symmetries(2, isymm) IF (a_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(1) .NE. matrix_sizes(2)) CYCLE IF (b_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(1) .NE. matrix_sizes(2)) CYCLE ! ! loop over types DO itype = 1, SIZE(types) TYPE = types(itype) do_complex = TYPE .EQ. dbcsr_type_complex_4 .OR. TYPE .EQ. dbcsr_type_complex_8 alpha_obj = compx_to_dbcsr_scalar(alpha, TYPE) beta_obj = compx_to_dbcsr_scalar(beta, TYPE) IF (do_complex .AND. (a_symm .EQ. dbcsr_type_hermitian .OR. a_symm .EQ. dbcsr_type_antihermitian)) & alpha_obj = compx_to_dbcsr_scalar(CMPLX(REAL(alpha, kind=dp), 0.0, dp), TYPE) IF (do_complex .AND. (b_symm .EQ. dbcsr_type_hermitian .OR. b_symm .EQ. dbcsr_type_antihermitian)) & beta_obj = compx_to_dbcsr_scalar(CMPLX(REAL(beta, kind=dp), 0.0, dp), TYPE) ! ! Create the row/column block sizes. CALL dbcsr_make_random_block_sizes(sizes_m, matrix_sizes(1), bs_m) CALL dbcsr_make_random_block_sizes(sizes_n, matrix_sizes(2), bs_n) ! ! If A/B has symmetry we need the same row/col blocking my_sizes_m => sizes_m my_sizes_n => sizes_n IF (a_symm .NE. dbcsr_type_no_symmetry) THEN my_sizes_n => sizes_m END IF IF (b_symm .NE. dbcsr_type_no_symmetry) THEN my_sizes_n => sizes_m END IF IF (.FALSE.) THEN WRITE (*, *) 'sizes_m', my_sizes_m WRITE (*, *) 'sum(sizes_m)', SUM(my_sizes_m), ' matrix_sizes(1)', matrix_sizes(1) WRITE (*, *) 'sizes_n', my_sizes_n WRITE (*, *) 'sum(sizes_n)', SUM(my_sizes_n), ' matrix_sizes(2)', matrix_sizes(2) END IF ! ! Create the undistributed matrices. CALL dbcsr_make_random_matrix(matrix_a, my_sizes_m, my_sizes_n, "Matrix A", & sparsities(1), & mp_group, data_type=TYPE, symmetry=a_symm) CALL dbcsr_make_random_matrix(matrix_b, my_sizes_m, my_sizes_n, "Matrix B", & sparsities(2), & mp_group, data_type=TYPE, symmetry=b_symm) DEALLOCATE (sizes_m, sizes_n) ! ! convert the dbcsr matrices to denses a_r = dbcsr_nfullrows_total(matrix_a); a_c = dbcsr_nfullcols_total(matrix_a) b_r = dbcsr_nfullrows_total(matrix_b); b_c = dbcsr_nfullcols_total(matrix_b) CALL dbcsr_data_init(data_a) CALL dbcsr_data_init(data_b) CALL dbcsr_data_init(data_a_dbcsr) CALL dbcsr_data_new(data_a, dbcsr_type_1d_to_2d(TYPE), data_size=a_r, data_size2=a_c) CALL dbcsr_data_new(data_b, dbcsr_type_1d_to_2d(TYPE), data_size=b_r, data_size2=b_c) CALL dbcsr_data_new(data_a_dbcsr, dbcsr_type_1d_to_2d(TYPE), data_size=a_r, data_size2=a_c) CALL dbcsr_to_dense_local(matrix_a, data_a) CALL dbcsr_to_dense_local(matrix_b, data_b) IF (.FALSE.) THEN CALL dbcsr_print(matrix_a, matlab_format=.TRUE., variable_name='a0') CALL dbcsr_print(matrix_b, matlab_format=.TRUE., variable_name='b0') END IF ! ! Prepare test parameters CALL test_add(test_name, mp_group, mp_env, npdims, io_unit, & matrix_a, matrix_b, & data_a, data_b, data_a_dbcsr, & alpha_obj, beta_obj, & limits, retain_sparsity) ! ! cleanup CALL dbcsr_release(matrix_a) CALL dbcsr_release(matrix_b) CALL dbcsr_data_release(data_a) CALL dbcsr_data_release(data_b) CALL dbcsr_data_release(data_a_dbcsr) END DO ! itype END DO !isymm CALL timestop(handle) END SUBROUTINE dbcsr_test_adds SUBROUTINE test_add(test_name, mp_group, mp_env, npdims, io_unit, & matrix_a, matrix_b, & data_a, data_b, data_a_dbcsr, & alpha, beta, limits, retain_sparsity) !! Performs a variety of matrix add CHARACTER(len=*), INTENT(IN) :: test_name TYPE(mp_comm_type), INTENT(IN) :: mp_group !! MPI communicator TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER, DIMENSION(2), INTENT(in) :: npdims INTEGER, INTENT(IN) :: io_unit !! which unit to write to, if not negative TYPE(dbcsr_type), INTENT(in) :: matrix_a, matrix_b !! matrices to add !! matrices to add TYPE(dbcsr_data_obj) :: data_a, data_b, data_a_dbcsr TYPE(dbcsr_scalar_type), INTENT(in) :: alpha, beta INTEGER, DIMENSION(4), INTENT(in) :: limits LOGICAL, INTENT(in) :: retain_sparsity CHARACTER(len=*), PARAMETER :: routineN = 'test_add' INTEGER :: c, handle, r INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_dist_a, col_dist_b, row_dist_a, & row_dist_b LOGICAL :: success REAL(real_8) :: occ_a_in, occ_a_out, occ_b TYPE(dbcsr_distribution_obj) :: dist_a, dist_b TYPE(dbcsr_type) :: m_a, m_b ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) ! Row & column distributions CALL dbcsr_random_dist(row_dist_a, dbcsr_nblkrows_total(matrix_a), npdims(1)) CALL dbcsr_random_dist(col_dist_a, dbcsr_nblkcols_total(matrix_a), npdims(2)) CALL dbcsr_random_dist(row_dist_b, dbcsr_nblkrows_total(matrix_b), npdims(1)) CALL dbcsr_random_dist(col_dist_b, dbcsr_nblkcols_total(matrix_b), npdims(2)) CALL dbcsr_distribution_new(dist_a, mp_env, row_dist_a, col_dist_a, reuse_arrays=.TRUE.) CALL dbcsr_distribution_new(dist_b, mp_env, row_dist_b, col_dist_b, reuse_arrays=.TRUE.) ! Redistribute the matrices ! A CALL dbcsr_create(m_a, "Test for "//TRIM(dbcsr_name(matrix_a)), & dist_a, dbcsr_get_matrix_type(matrix_a), & row_blk_size_obj=matrix_a%row_blk_size, & col_blk_size_obj=matrix_a%col_blk_size, & data_type=dbcsr_get_data_type(matrix_a)) CALL dbcsr_distribution_release(dist_a) CALL dbcsr_redistribute(matrix_a, m_a) ! B CALL dbcsr_create(m_b, "Test for "//TRIM(dbcsr_name(matrix_b)), & dist_b, dbcsr_get_matrix_type(matrix_b), & row_blk_size_obj=matrix_b%row_blk_size, & col_blk_size_obj=matrix_b%col_blk_size, & data_type=dbcsr_get_data_type(matrix_b)) CALL dbcsr_distribution_release(dist_b) CALL dbcsr_redistribute(matrix_b, m_b) IF (.FALSE.) THEN CALL dbcsr_print(m_a, matlab_format=.FALSE., variable_name='a_in_') CALL dbcsr_print(m_b, matlab_format=.FALSE., variable_name='b_') END IF occ_a_in = dbcsr_get_occupation(m_a) occ_b = dbcsr_get_occupation(m_b) ! ! Perform add IF (ALL(limits == 0)) THEN DBCSR_ABORT("limits shouldnt be 0") ELSE CALL dbcsr_add(m_a, m_b, alpha, beta) END IF occ_a_out = dbcsr_get_occupation(m_a) IF (.FALSE.) THEN PRINT *, 'retain_sparsity', retain_sparsity, occ_a_in, occ_b, occ_a_out CALL dbcsr_print(m_a, matlab_format=.TRUE., variable_name='a_out_') END IF CALL dbcsr_replicate_all(m_a) CALL dbcsr_to_dense_local(m_a, data_a_dbcsr) CALL dbcsr_check_add(test_name, m_a, data_a_dbcsr, data_a, data_b, & alpha, beta, limits, retain_sparsity, io_unit, mp_group, & success) r = dbcsr_nfullrows_total(m_a) c = dbcsr_nfullcols_total(m_a) IF (io_unit .GT. 0) THEN IF (success) THEN WRITE (io_unit, *) REPEAT("*", 70) WRITE (io_unit, *) " -- TESTING dbcsr_add (", & dbcsr_get_data_type(m_a), & ", ", dbcsr_get_matrix_type(m_a), & ", ", dbcsr_get_matrix_type(m_b), & ") ............................. PASSED !" WRITE (io_unit, *) REPEAT("*", 70) ELSE WRITE (io_unit, *) REPEAT("*", 70) WRITE (io_unit, *) " -- TESTING dbcsr_add (", & dbcsr_get_data_type(m_a), & ", ", dbcsr_get_matrix_type(m_a), & ", ", dbcsr_get_matrix_type(m_b), & ") ................. FAILED !" WRITE (io_unit, *) REPEAT("*", 70) DBCSR_ABORT('Test failed') END IF END IF CALL dbcsr_release(m_a) CALL dbcsr_release(m_b) CALL timestop(handle) END SUBROUTINE test_add SUBROUTINE dbcsr_check_add(test_name, matrix_a, dense_a_dbcsr, dense_a, dense_b, & alpha, beta, limits, retain_sparsity, io_unit, mp_group, & success) !! Performs a check of matrix adds CHARACTER(len=*), INTENT(IN) :: test_name TYPE(dbcsr_type), INTENT(IN) :: matrix_a TYPE(dbcsr_data_obj), INTENT(inout) :: dense_a_dbcsr, dense_a, dense_b !! input dense matrices !! input dense matrices TYPE(dbcsr_scalar_type), INTENT(in) :: alpha, beta !! coefficients for the add !! coefficients for the add INTEGER, DIMENSION(4), INTENT(in) :: limits !! limits for the add LOGICAL, INTENT(in) :: retain_sparsity INTEGER, INTENT(IN) :: io_unit !! io unit for printing TYPE(mp_comm_type), INTENT(IN) :: mp_group LOGICAL, INTENT(out) :: success !! if passed the check success=T CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_check_add' INTEGER :: col, col_size, handle, i, istat, j, ld, & lwork, m, mynode, n, numnodes, row, & row_size CHARACTER, PARAMETER :: norm = 'I' LOGICAL :: valid REAL(real_4), ALLOCATABLE, DIMENSION(:) :: work_sp #if defined (__ACCELERATE) REAL(real_8), EXTERNAL :: clange, slamch, slange #else REAL(real_4), EXTERNAL :: clange, slamch, slange #endif REAL(real_8) :: a_norm_dbcsr, a_norm_in, a_norm_out, & b_norm, eps, residual REAL(real_8), ALLOCATABLE, DIMENSION(:) :: work REAL(real_8), EXTERNAL :: dlamch, dlange, zlange CALL timeset(routineN, handle) CALL mp_environ(numnodes, mynode, mp_group) CALL dbcsr_data_get_sizes(dense_a, row_size, col_size, valid) IF (.NOT. valid) & DBCSR_ABORT("dense matrix not valid") ! ! m = limits(2) - limits(1) + 1 n = limits(4) - limits(3) + 1 row = limits(1); col = limits(3) ! ! set the size of the work array lwork = row_size ld = row_size ! ! SELECT CASE (dense_a%d%data_type) CASE (dbcsr_type_real_8_2d) ALLOCATE (work(lwork), STAT=istat) IF (istat /= 0) & DBCSR_ABORT("allocation problem") eps = dlamch('eps') a_norm_in = dlange(norm, row_size, col_size, dense_a%d%r2_dp(1, 1), ld, work) b_norm = dlange(norm, row_size, col_size, dense_b%d%r2_dp(1, 1), ld, work) a_norm_dbcsr = dlange(norm, row_size, col_size, dense_a_dbcsr%d%r2_dp(1, 1), ld, work) ! dense_a%d%r2_dp(row:row + m - 1, col:col + n - 1) = alpha%r_dp*dense_a%d%r2_dp(row:row + m - 1, col:col + n - 1) + & beta%r_dp*dense_b%d%r2_dp(row:row + m - 1, col:col + n - 1) ! ! impose the sparsity if needed IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_a, dense_a) ! a_norm_out = dlange(norm, row_size, col_size, dense_a%d%r2_dp(1, 1), ld, work) ! ! take the difference dense/sparse dense_a%d%r2_dp = dense_a%d%r2_dp - dense_a_dbcsr%d%r2_dp ! ! compute the residual residual = dlange(norm, row_size, col_size, dense_a%d%r2_dp(1, 1), ld, work) DEALLOCATE (work) CASE (dbcsr_type_real_4_2d) ALLOCATE (work_sp(lwork), STAT=istat) IF (istat /= 0) & DBCSR_ABORT("allocation problem") eps = slamch('eps') a_norm_in = slange(norm, row_size, col_size, dense_a%d%r2_sp(1, 1), ld, work_sp) b_norm = slange(norm, row_size, col_size, dense_b%d%r2_sp(1, 1), ld, work_sp) a_norm_dbcsr = slange(norm, row_size, col_size, dense_a_dbcsr%d%r2_sp(1, 1), ld, work_sp) ! dense_a%d%r2_sp(row:row + m - 1, col:col + n - 1) = alpha%r_sp*dense_a%d%r2_sp(row:row + m - 1, col:col + n - 1) + & beta%r_sp*dense_b%d%r2_sp(row:row + m - 1, col:col + n - 1) ! ! impose the sparsity if needed IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_a, dense_a) ! a_norm_out = slange(norm, row_size, col_size, dense_a%d%r2_sp(1, 1), ld, work_sp) ! ! take the difference dense/sparse dense_a%d%r2_sp = dense_a%d%r2_sp - dense_a_dbcsr%d%r2_sp ! ! compute the residual residual = REAL(slange(norm, row_size, col_size, dense_a%d%r2_sp(1, 1), ld, work_sp), real_8) DEALLOCATE (work_sp) CASE (dbcsr_type_complex_8_2d) ALLOCATE (work(lwork), STAT=istat) IF (istat /= 0) & DBCSR_ABORT("allocation problem") eps = dlamch('eps') a_norm_in = zlange(norm, row_size, col_size, dense_a%d%c2_dp(1, 1), ld, work) b_norm = zlange(norm, row_size, col_size, dense_b%d%c2_dp(1, 1), ld, work) a_norm_dbcsr = zlange(norm, row_size, col_size, dense_a_dbcsr%d%c2_dp(1, 1), ld, work) ! dense_a%d%c2_dp(row:row + m - 1, col:col + n - 1) = alpha%c_dp*dense_a%d%c2_dp(row:row + m - 1, col:col + n - 1) + & beta%c_dp*dense_b%d%c2_dp(row:row + m - 1, col:col + n - 1) ! ! impose the sparsity if needed IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_a, dense_a) ! a_norm_out = zlange(norm, row_size, col_size, dense_a%d%c2_dp(1, 1), ld, work) ! ! take the difference dense/sparse dense_a%d%c2_dp = dense_a%d%c2_dp - dense_a_dbcsr%d%c2_dp ! ! compute the residual residual = zlange(norm, row_size, col_size, dense_a%d%c2_dp(1, 1), ld, work) DEALLOCATE (work) CASE (dbcsr_type_complex_4_2d) ALLOCATE (work_sp(lwork), STAT=istat) IF (istat /= 0) & DBCSR_ABORT("allocation problem") eps = REAL(slamch('eps'), real_8) a_norm_in = clange(norm, row_size, col_size, dense_a%d%c2_sp(1, 1), ld, work_sp) b_norm = clange(norm, row_size, col_size, dense_b%d%c2_sp(1, 1), ld, work_sp) a_norm_dbcsr = clange(norm, row_size, col_size, dense_a_dbcsr%d%c2_sp(1, 1), ld, work_sp) ! IF (.FALSE.) THEN !IF(io_unit .GT. 0) THEN DO j = 1, SIZE(dense_a%d%c2_sp, 2) DO i = 1, SIZE(dense_a%d%c2_sp, 1) WRITE (*, '(A,I3,A,I3,A,E15.7,A,E15.7,A)') 'a_in(', i, ',', j, ')=', REAL(dense_a%d%c2_sp(i, j)), '+', & AIMAG(dense_a%d%c2_sp(i, j)), 'i;' END DO END DO DO j = 1, SIZE(dense_b%d%c2_sp, 2) DO i = 1, SIZE(dense_b%d%c2_sp, 1) WRITE (*, '(A,I3,A,I3,A,E15.7,A,E15.7,A)') 'b(', i, ',', j, ')=', REAL(dense_b%d%c2_sp(i, j)), '+', & AIMAG(dense_b%d%c2_sp(i, j)), 'i;' END DO END DO END IF dense_a%d%c2_sp(row:row + m - 1, col:col + n - 1) = alpha%c_sp*dense_a%d%c2_sp(row:row + m - 1, col:col + n - 1) + & beta%c_sp*dense_b%d%c2_sp(row:row + m - 1, col:col + n - 1) ! ! impose the sparsity if needed IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_a, dense_a) ! IF (.FALSE.) THEN !IF(io_unit .GT. 0) THEN DO j = 1, SIZE(dense_a%d%c2_sp, 2) DO i = 1, SIZE(dense_a%d%c2_sp, 1) WRITE (*, '(A,I3,A,I3,A,E15.7,A,E15.7,A)') 'a_out(', i, ',', j, ')=', REAL(dense_a%d%c2_sp(i, j)), '+', & AIMAG(dense_a%d%c2_sp(i, j)), 'i;' END DO END DO DO j = 1, SIZE(dense_a_dbcsr%d%c2_sp, 2) DO i = 1, SIZE(dense_a_dbcsr%d%c2_sp, 1) WRITE (*, '(A,I3,A,I3,A,E15.7,A,E15.7,A)') 'a_dbcsr(', i, ',', j, ')=', REAL(dense_a_dbcsr%d%c2_sp(i, j)), '+', & AIMAG(dense_a_dbcsr%d%c2_sp(i, j)), 'i;' END DO END DO END IF a_norm_out = clange(norm, row_size, col_size, dense_a%d%c2_sp(1, 1), ld, work_sp) ! ! take the difference dense/sparse dense_a%d%c2_sp = dense_a%d%c2_sp - dense_a_dbcsr%d%c2_sp ! ! compute the residual residual = REAL(clange(norm, row_size, col_size, dense_a%d%c2_sp(1, 1), ld, work_sp), real_8) DEALLOCATE (work_sp) CASE default DBCSR_ABORT("Incorrect or 1-D data type") END SELECT IF (mynode .EQ. 0) THEN IF (residual/((a_norm_in + b_norm)*REAL(row_size, real_8)*eps) .GT. 10.0_real_8) THEN success = .FALSE. ELSE success = .TRUE. END IF END IF ! ! synchronize the result... CALL mp_bcast(success, 0, mp_group) ! ! printing IF (io_unit .GT. 0) THEN WRITE (io_unit, *) 'test_name ', test_name WRITE (io_unit, '(2(A,E12.5))') ' residual ', residual, ', b_norm ', b_norm WRITE (io_unit, '(3(A,E12.5))') ' a_norm_in ', a_norm_in, ', a_norm_out ', a_norm_out, & ', a_norm_dbcsr ', a_norm_dbcsr WRITE (io_unit, '(A)') ' Checking the norm of the difference against reference ADD ' WRITE (io_unit, '(A,E12.5)') ' -- ||A_dbcsr-A_dense||_oo/((||A||_oo+||B||_oo).N.eps)=', & residual/((a_norm_in + b_norm)*n*eps) ! ! check for nan or inf here IF (success) THEN WRITE (io_unit, '(A)') ' The solution is CORRECT !' ELSE WRITE (io_unit, '(A)') ' The solution is suspicious !' END IF END IF CALL timestop(handle) END SUBROUTINE dbcsr_check_add END MODULE dbcsr_test_add ================================================ FILE: tests/dbcsr_test_csr_conversions.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! PROGRAM dbcsr_test_csr_conversions !! Testing DBCSR to CSR conversion with random matrices USE dbcsr_kinds, ONLY: dp, real_8 USE dbcsr_api, ONLY: & dbcsr_convert_csr_to_dbcsr, dbcsr_convert_dbcsr_to_csr, & dbcsr_csr_create_from_dbcsr, dbcsr_csr_destroy, & dbcsr_csr_eqrow_ceil_dist, dbcsr_csr_type, dbcsr_add, dbcsr_copy, dbcsr_create, & dbcsr_distribution_get, dbcsr_distribution_new, dbcsr_distribution_release, & dbcsr_distribution_type, dbcsr_finalize, dbcsr_finalize_lib, dbcsr_get_stored_coordinates, & dbcsr_init_lib, dbcsr_nblkcols_total, dbcsr_nblkrows_total, dbcsr_norm, & dbcsr_norm_maxabsnorm, dbcsr_put_block, dbcsr_release, dbcsr_to_csr_filter, dbcsr_type, & dbcsr_type_no_symmetry, dbcsr_type_real_8, dbcsr_print_statistics USE dbcsr_machine, ONLY: default_output_unit USE dbcsr_mpiwrap, ONLY: mp_bcast, & mp_cart_create, & mp_comm_free, & mp_environ, & mp_world_finalize, & mp_world_init, mp_comm_type #include "base/dbcsr_base_uses.f90" IMPLICIT NONE TYPE(dbcsr_type) :: matrix_a TYPE(dbcsr_csr_type) :: matrix_b INTEGER, DIMENSION(:), POINTER :: col_blk_sizes, row_blk_sizes INTEGER :: nblkrows_total, nblkcols_total INTEGER, DIMENSION(:), POINTER :: col_dist, row_dist INTEGER :: numnodes, mynode, io_unit INTEGER, DIMENSION(2) :: npdims, myploc INTEGER :: max_blks_total, max_blk_size, k, seedsz INTEGER, ALLOCATABLE, DIMENSION(:) ::seed REAL :: rn REAL, ALLOCATABLE, DIMENSION(:) :: rn_array REAL(KIND=real_8) :: norm, norm_eps, sparsity, eps CHARACTER(LEN=10) :: k_str, mynode_str TYPE(mp_comm_type) :: mp_comm, group ! Set up everything as in the dbcsr example codes CALL mp_world_init(mp_comm) CALL mp_environ(numnodes, mynode, mp_comm) io_unit = 0 IF (mynode .EQ. 0) io_unit = default_output_unit CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit) npdims(:) = 0 CALL mp_cart_create(mp_comm, 2, npdims, myploc, group) CALL mp_environ(numnodes, mynode, group) ! Set seed for random number generator CALL RANDOM_SEED(size=seedsz) ALLOCATE (seed(seedsz)) seed = 434358235 ! Maximum number of blocks and maximum block sizes (in 1 dimension) max_blks_total = 50 max_blk_size = 10 eps = 0.1_dp ! Filter threshold DO k = 1, 100 ! test 100 matrices CALL RANDOM_SEED(get=seed) CALL mp_bcast(seed, 0, mp_comm) CALL RANDOM_SEED(put=seed) CALL RANDOM_NUMBER(rn) nblkrows_total = FLOOR(rn*(max_blks_total)) + 1 CALL RANDOM_NUMBER(rn) nblkcols_total = FLOOR(rn*(max_blks_total)) + 1 ALLOCATE (rn_array(MAX(nblkcols_total, nblkrows_total))) ALLOCATE (col_blk_sizes(nblkcols_total)) ALLOCATE (row_blk_sizes(nblkrows_total)) ALLOCATE (row_dist(nblkrows_total)) ALLOCATE (col_dist(nblkcols_total)) CALL RANDOM_NUMBER(rn_array) col_blk_sizes = FLOOR(rn_array(1:nblkcols_total)*(max_blk_size)) + 1 CALL RANDOM_NUMBER(rn_array) row_blk_sizes = FLOOR(rn_array(1:nblkrows_total)*(max_blk_size)) + 1 CALL RANDOM_NUMBER(rn) sparsity = rn CALL RANDOM_NUMBER(rn_array) row_dist = FLOOR(rn_array(1:nblkrows_total)*npdims(1)) CALL RANDOM_NUMBER(rn_array) col_dist = FLOOR(rn_array(1:nblkcols_total)*npdims(2)) CALL make_random_dbcsr_matrix(matrix_a, group, col_blk_sizes, row_blk_sizes, col_dist, row_dist, sparsity) WRITE (UNIT=k_str, FMT='(I0)') k WRITE (UNIT=mynode_str, FMT='(I0)') mynode CALL csr_conversion_test(matrix_a, matrix_b, norm, 0.0_dp) CALL dbcsr_csr_destroy(matrix_b) CALL csr_conversion_test(matrix_a, matrix_b, norm_eps, eps) CALL dbcsr_csr_destroy(matrix_b) IF ((norm > EPSILON(norm)) .OR. (norm_eps > eps)) THEN IF (io_unit > 0) WRITE (io_unit, *) "Conversion error > 0 for matrix no.", k_str DBCSR_ABORT("Error in csr conversion") ELSE IF (io_unit > 0) WRITE (io_unit, *) "Conversion OK!" END IF CALL dbcsr_release(matrix_a) DEALLOCATE (rn_array) END DO DEALLOCATE (seed) CALL mp_comm_free(group) call dbcsr_print_statistics(.true.) CALL dbcsr_finalize_lib() CALL mp_world_finalize() CONTAINS SUBROUTINE csr_conversion_test(dbcsr_mat, csr_mat, norm, eps) !! Test the conversion by converting to CSR format and converting back, !! where the CSR sparsity is defined by some filtering threshold eps. !! The maximum norm of the differences between the original and the !! back-converted matrix is calculated. TYPE(dbcsr_type), INTENT(IN) :: dbcsr_mat TYPE(dbcsr_csr_type), INTENT(OUT) :: csr_mat REAL(KIND=real_8), INTENT(OUT) :: norm REAL(KIND=real_8), INTENT(IN) :: eps TYPE(dbcsr_type) :: csr_sparsity, dbcsr_mat_conv CALL dbcsr_to_csr_filter(dbcsr_mat, csr_sparsity, eps) CALL dbcsr_csr_create_from_dbcsr(dbcsr_mat, csr_mat, dbcsr_csr_eqrow_ceil_dist, csr_sparsity) CALL dbcsr_convert_dbcsr_to_csr(dbcsr_mat, csr_mat) CALL dbcsr_copy(dbcsr_mat_conv, dbcsr_mat) CALL dbcsr_convert_csr_to_dbcsr(dbcsr_mat_conv, csr_mat) CALL dbcsr_add(dbcsr_mat_conv, dbcsr_mat, 1.0_dp, -1.0_dp) CALL dbcsr_norm(dbcsr_mat_conv, dbcsr_norm_maxabsnorm, norm_scalar=norm) CALL dbcsr_release(dbcsr_mat_conv) CALL dbcsr_release(csr_sparsity) END SUBROUTINE csr_conversion_test SUBROUTINE make_random_dbcsr_matrix(matrix_a, group, & !! Create a DBCSR matrix with random values and random blocks col_blk_sizes, row_blk_sizes, col_dist, row_dist, sparsity) TYPE(dbcsr_type), INTENT(OUT) :: matrix_a TYPE(mp_comm_type), INTENT(IN) :: group INTEGER, DIMENSION(:), POINTER :: col_blk_sizes, row_blk_sizes, col_dist, & row_dist REAL(real_8), INTENT(IN) :: sparsity INTEGER :: col, col_s, max_col_size, max_nze, & max_row_size, node_holds_blk, nze, & row, row_s LOGICAL :: tr REAL(real_8) :: rn REAL(real_8), ALLOCATABLE, DIMENSION(:) :: values TYPE(dbcsr_distribution_type) :: dist CALL dbcsr_distribution_new(dist, group=group%get_handle(), row_dist=row_dist, col_dist=col_dist, reuse_arrays=.TRUE.) CALL dbcsr_create(matrix=matrix_a, & name="this is my matrix a", & dist=dist, & matrix_type=dbcsr_type_no_symmetry, & row_blk_size=row_blk_sizes, & col_blk_size=col_blk_sizes, & data_type=dbcsr_type_real_8) CALL dbcsr_distribution_get(dist, mynode=mynode) ! get the maximum block size of the matrix max_row_size = MAXVAL(row_blk_sizes) max_col_size = MAXVAL(col_blk_sizes) max_nze = max_row_size*max_col_size ALLOCATE (values(max_nze)) DO row = 1, dbcsr_nblkrows_total(matrix_a) DO col = 1, dbcsr_nblkcols_total(matrix_a) CALL RANDOM_NUMBER(rn) IF (rn .GT. sparsity) THEN tr = .FALSE. row_s = row; col_s = col CALL dbcsr_get_stored_coordinates(matrix_a, row_s, col_s, node_holds_blk) IF (node_holds_blk .EQ. mynode) THEN nze = row_blk_sizes(row_s)*col_blk_sizes(col_s) CALL RANDOM_NUMBER(values(1:nze)) CALL dbcsr_put_block(matrix_a, row_s, col_s, values(1:nze)) END IF END IF END DO END DO DEALLOCATE (values) CALL dbcsr_finalize(matrix_a) CALL dbcsr_distribution_release(dist) DEALLOCATE (row_blk_sizes, col_blk_sizes) END SUBROUTINE make_random_dbcsr_matrix END PROGRAM dbcsr_test_csr_conversions ================================================ FILE: tests/dbcsr_test_multiply.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_test_multiply !! Tests for DBCSR multiply USE dbcsr_data_methods, ONLY: dbcsr_data_get_sizes, & dbcsr_data_init, & dbcsr_data_new, & dbcsr_data_release, & dbcsr_scalar_negative, & dbcsr_scalar_one, & dbcsr_type_1d_to_2d USE dbcsr_dist_methods, ONLY: dbcsr_distribution_new, & dbcsr_distribution_release USE dbcsr_io, ONLY: dbcsr_print USE dbcsr_kinds, ONLY: real_4, & real_8 USE dbcsr_methods, ONLY: & dbcsr_col_block_offsets, dbcsr_col_block_sizes, dbcsr_get_data_type, & dbcsr_get_matrix_type, dbcsr_name, dbcsr_nblkcols_total, dbcsr_nblkrows_total, & dbcsr_nfullcols_total, dbcsr_nfullrows_total, dbcsr_release, dbcsr_row_block_offsets, & dbcsr_row_block_sizes USE dbcsr_mpiwrap, ONLY: mp_bcast, & mp_environ, mp_comm_type USE dbcsr_multiply_api, ONLY: dbcsr_multiply USE dbcsr_operations, ONLY: dbcsr_copy, & dbcsr_get_occupation, & dbcsr_scale USE dbcsr_test_methods, ONLY: compx_to_dbcsr_scalar, & dbcsr_impose_sparsity, & dbcsr_make_random_block_sizes, & dbcsr_make_random_matrix, & dbcsr_random_dist, & dbcsr_to_dense_local USE dbcsr_transformations, ONLY: dbcsr_redistribute, & dbcsr_replicate_all USE dbcsr_types, ONLY: & dbcsr_conjugate_transpose, dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_mp_obj, & dbcsr_no_transpose, dbcsr_scalar_type, dbcsr_transpose, dbcsr_type, & dbcsr_type_antisymmetric, dbcsr_type_complex_4, dbcsr_type_complex_4_2d, & dbcsr_type_complex_8, dbcsr_type_complex_8_2d, dbcsr_type_no_symmetry, dbcsr_type_real_4, & dbcsr_type_real_4_2d, dbcsr_type_real_8, dbcsr_type_real_8_2d, dbcsr_type_symmetric USE dbcsr_work_operations, ONLY: dbcsr_create #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_max_threads, omp_get_thread_num, omp_get_num_threads IMPLICIT NONE PRIVATE PUBLIC :: dbcsr_test_multiplies CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_test_multiply' LOGICAL, PARAMETER :: debug_mod = .FALSE. CONTAINS SUBROUTINE dbcsr_test_multiplies(test_name, mp_group, mp_env, npdims, io_unit, & matrix_sizes, bs_m, bs_n, bs_k, sparsities, & alpha, beta, limits, retain_sparsity) !! Performs a variety of matrix multiplies of same matrices on different !! processor grids CHARACTER(len=*), INTENT(IN) :: test_name TYPE(mp_comm_type), INTENT(IN) :: mp_group !! MPI communicator TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER, DIMENSION(2), INTENT(in) :: npdims INTEGER, INTENT(IN) :: io_unit !! which unit to write to, if not negative INTEGER, DIMENSION(:), INTENT(in) :: matrix_sizes, bs_m, bs_n, bs_k !! size of matrices to test !! block sizes of the 3 dimension !! block sizes of the 3 dimension !! block sizes of the 3 dimension REAL(real_8), DIMENSION(3), INTENT(in) :: sparsities !! sparsities of matrices to create COMPLEX(real_8), INTENT(in) :: alpha, beta !! alpha value to use in multiply !! beta value to use in multiply INTEGER, DIMENSION(6), INTENT(in) :: limits LOGICAL, INTENT(in) :: retain_sparsity CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_test_multiplies' CHARACTER, DIMENSION(3), PARAMETER :: & trans = (/dbcsr_no_transpose, dbcsr_transpose, dbcsr_conjugate_transpose/) CHARACTER, DIMENSION(3, 12), PARAMETER :: symmetries = & RESHAPE((/dbcsr_type_no_symmetry, dbcsr_type_no_symmetry, & dbcsr_type_no_symmetry, dbcsr_type_symmetric, & dbcsr_type_no_symmetry, dbcsr_type_no_symmetry, & dbcsr_type_antisymmetric, dbcsr_type_no_symmetry, & dbcsr_type_no_symmetry, dbcsr_type_no_symmetry, & dbcsr_type_symmetric, dbcsr_type_no_symmetry, & dbcsr_type_symmetric, dbcsr_type_symmetric, & dbcsr_type_no_symmetry, dbcsr_type_antisymmetric, & dbcsr_type_symmetric, dbcsr_type_no_symmetry, & dbcsr_type_no_symmetry, dbcsr_type_antisymmetric, & dbcsr_type_no_symmetry, dbcsr_type_symmetric, & dbcsr_type_antisymmetric, dbcsr_type_no_symmetry, & dbcsr_type_antisymmetric, dbcsr_type_antisymmetric, & dbcsr_type_no_symmetry, dbcsr_type_no_symmetry, & dbcsr_type_no_symmetry, dbcsr_type_symmetric, & dbcsr_type_symmetric, dbcsr_type_symmetric, & dbcsr_type_symmetric, dbcsr_type_antisymmetric, & dbcsr_type_antisymmetric, dbcsr_type_symmetric/), (/3, 12/)) INTEGER, DIMENSION(4), PARAMETER :: types = (/dbcsr_type_real_4, dbcsr_type_real_8, & dbcsr_type_complex_4, dbcsr_type_complex_8/) CHARACTER :: a_symm, b_symm, c_symm, transa, transb INTEGER :: a_c, a_r, a_tr, b_c, b_r, b_tr, c_c, & c_r, handle, isymm, itype, mynode, & numnodes, numthreads, TYPE INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: my_sizes_k, my_sizes_m, my_sizes_n, & sizes_k, sizes_m, sizes_n LOGICAL :: do_complex TYPE(dbcsr_data_obj) :: data_a, data_b, data_c, data_c_dbcsr TYPE(dbcsr_scalar_type) :: alpha_obj, beta_obj TYPE(dbcsr_type) :: matrix_a, matrix_b, matrix_c ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) NULLIFY (my_sizes_k, my_sizes_m, my_sizes_n, & sizes_k, sizes_m, sizes_n) ! ! print CALL mp_environ(numnodes, mynode, mp_group) IF (io_unit .GT. 0) THEN WRITE (io_unit, *) 'test_name ', test_name numthreads = 1 !$OMP PARALLEL !$OMP MASTER !$ numthreads = omp_get_num_threads() !$OMP END MASTER !$OMP END PARALLEL WRITE (io_unit, *) 'numthreads', numthreads WRITE (io_unit, *) 'numnodes', numnodes WRITE (io_unit, *) 'matrix_sizes', matrix_sizes WRITE (io_unit, *) 'sparsities', sparsities WRITE (io_unit, *) 'alpha', alpha WRITE (io_unit, *) 'beta', beta WRITE (io_unit, *) 'limits', limits WRITE (io_unit, *) 'retain_sparsity', retain_sparsity WRITE (io_unit, *) 'bs_m', bs_m WRITE (io_unit, *) 'bs_n', bs_n WRITE (io_unit, *) 'bs_k', bs_k END IF ! ! ! loop over symmetry DO isymm = 1, SIZE(symmetries, 2) a_symm = symmetries(1, isymm) b_symm = symmetries(2, isymm) c_symm = symmetries(3, isymm) IF (a_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(1) .NE. matrix_sizes(3)) CYCLE IF (b_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(2) .NE. matrix_sizes(3)) CYCLE IF (c_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(1) .NE. matrix_sizes(2)) CYCLE ! ! loop over types DO itype = 1, SIZE(types) TYPE = types(itype) do_complex = TYPE .EQ. dbcsr_type_complex_4 .OR. TYPE .EQ. dbcsr_type_complex_8 alpha_obj = compx_to_dbcsr_scalar(alpha, TYPE) beta_obj = compx_to_dbcsr_scalar(beta, TYPE) IF (do_complex .AND. c_symm == dbcsr_type_symmetric) CYCLE ! ! loop over transpositions DO a_tr = 1, SIZE(trans) DO b_tr = 1, SIZE(trans) transa = trans(a_tr) transb = trans(b_tr) ! ! if C has a symmetry, we need special transpositions IF (c_symm .NE. dbcsr_type_no_symmetry) THEN IF (.NOT. (transa .EQ. dbcsr_no_transpose .AND. transb .EQ. dbcsr_transpose .OR. & transa .EQ. dbcsr_transpose .AND. transb .EQ. dbcsr_no_transpose .OR. & transa .EQ. dbcsr_no_transpose .AND. transb .EQ. dbcsr_conjugate_transpose .AND. & .NOT. do_complex .OR. & transa .EQ. dbcsr_conjugate_transpose .AND. transb .EQ. dbcsr_no_transpose .AND. & .NOT. do_complex)) CYCLE END IF ! ! if C has symmetry and special limits IF (c_symm .NE. dbcsr_type_no_symmetry) THEN IF (limits(1) .NE. 1 .OR. limits(2) .NE. matrix_sizes(1) .OR. & limits(3) .NE. 1 .OR. limits(4) .NE. matrix_sizes(2)) CYCLE END IF ! ! Create the row/column block sizes. CALL dbcsr_make_random_block_sizes(sizes_m, matrix_sizes(1), bs_m) CALL dbcsr_make_random_block_sizes(sizes_n, matrix_sizes(2), bs_n) CALL dbcsr_make_random_block_sizes(sizes_k, matrix_sizes(3), bs_k) ! ! if we have symmetry the row and column block sizes have to match IF (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. & b_symm .NE. dbcsr_type_no_symmetry) THEN my_sizes_m => sizes_m my_sizes_n => sizes_m my_sizes_k => sizes_m ELSE IF ((c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. & b_symm .NE. dbcsr_type_no_symmetry) .OR. & (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. & b_symm .NE. dbcsr_type_no_symmetry) .OR. & (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. & b_symm .EQ. dbcsr_type_no_symmetry)) THEN my_sizes_m => sizes_m my_sizes_n => sizes_m my_sizes_k => sizes_m ELSE IF (c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. & b_symm .NE. dbcsr_type_no_symmetry) THEN my_sizes_m => sizes_m my_sizes_n => sizes_n my_sizes_k => sizes_n ELSE IF (c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. & b_symm .EQ. dbcsr_type_no_symmetry) THEN my_sizes_m => sizes_m my_sizes_n => sizes_n my_sizes_k => sizes_m ELSE IF (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. & b_symm .EQ. dbcsr_type_no_symmetry) THEN my_sizes_m => sizes_m my_sizes_n => sizes_m my_sizes_k => sizes_k ELSE IF (c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. & b_symm .EQ. dbcsr_type_no_symmetry) THEN my_sizes_m => sizes_m my_sizes_n => sizes_n my_sizes_k => sizes_k ELSE CALL dbcsr_abort(__LOCATION__, & "something wrong here... ") END IF IF (.FALSE.) THEN WRITE (*, *) 'sizes_m', my_sizes_m WRITE (*, *) 'sum(sizes_m)', SUM(my_sizes_m), ' matrix_sizes(1)', matrix_sizes(1) WRITE (*, *) 'sizes_n', my_sizes_n WRITE (*, *) 'sum(sizes_n)', SUM(my_sizes_n), ' matrix_sizes(2)', matrix_sizes(2) WRITE (*, *) 'sizes_k', my_sizes_k WRITE (*, *) 'sum(sizes_k)', SUM(my_sizes_k), ' matrix_sizes(3)', matrix_sizes(3) END IF ! ! Create the undistributed matrices. CALL dbcsr_make_random_matrix(matrix_c, my_sizes_m, my_sizes_n, "Matrix C", & sparsities(3), & mp_group, data_type=TYPE, symmetry=c_symm) IF (transa .NE. dbcsr_no_transpose) THEN CALL dbcsr_make_random_matrix(matrix_a, my_sizes_k, my_sizes_m, "Matrix A", & sparsities(1), & mp_group, data_type=TYPE, symmetry=a_symm) ELSE CALL dbcsr_make_random_matrix(matrix_a, my_sizes_m, my_sizes_k, "Matrix A", & sparsities(1), & mp_group, data_type=TYPE, symmetry=a_symm) END IF IF (transb .NE. dbcsr_no_transpose) THEN CALL dbcsr_make_random_matrix(matrix_b, my_sizes_n, my_sizes_k, "Matrix B", & sparsities(2), & mp_group, data_type=TYPE, symmetry=b_symm) ELSE CALL dbcsr_make_random_matrix(matrix_b, my_sizes_k, my_sizes_n, "Matrix B", & sparsities(2), & mp_group, data_type=TYPE, symmetry=b_symm) END IF DEALLOCATE (sizes_m, sizes_n, sizes_k) ! ! if C has a symmetry, we build it accordingly, i.e. C=A*A and C=A*(-A) IF (c_symm .NE. dbcsr_type_no_symmetry) THEN CALL dbcsr_copy(matrix_b, matrix_a) !print*, a_symm,b_symm,dbcsr_get_matrix_type(matrix_a),dbcsr_get_matrix_type(matrix_b) IF (c_symm .EQ. dbcsr_type_antisymmetric) THEN CALL dbcsr_scale(matrix_b, & alpha_scalar=dbcsr_scalar_negative( & dbcsr_scalar_one(TYPE))) END IF END IF ! ! convert the dbcsr matrices to denses a_r = dbcsr_nfullrows_total(matrix_a) a_c = dbcsr_nfullcols_total(matrix_a) b_r = dbcsr_nfullrows_total(matrix_b) b_c = dbcsr_nfullcols_total(matrix_b) c_r = dbcsr_nfullrows_total(matrix_c) c_c = dbcsr_nfullcols_total(matrix_c) CALL dbcsr_data_init(data_a) CALL dbcsr_data_init(data_b) CALL dbcsr_data_init(data_c) CALL dbcsr_data_init(data_c_dbcsr) CALL dbcsr_data_new(data_a, dbcsr_type_1d_to_2d(TYPE), data_size=a_r, data_size2=a_c) CALL dbcsr_data_new(data_b, dbcsr_type_1d_to_2d(TYPE), data_size=b_r, data_size2=b_c) CALL dbcsr_data_new(data_c, dbcsr_type_1d_to_2d(TYPE), data_size=c_r, data_size2=c_c) CALL dbcsr_data_new(data_c_dbcsr, dbcsr_type_1d_to_2d(TYPE), data_size=c_r, data_size2=c_c) CALL dbcsr_to_dense_local(matrix_a, data_a) CALL dbcsr_to_dense_local(matrix_b, data_b) CALL dbcsr_to_dense_local(matrix_c, data_c) ! ! Prepare test parameters CALL test_multiply(test_name, mp_group, mp_env, npdims, io_unit, & matrix_a, matrix_b, matrix_c, & data_a, data_b, data_c, data_c_dbcsr, & transa, transb, & alpha_obj, beta_obj, & limits, retain_sparsity) ! ! cleanup CALL dbcsr_release(matrix_a) CALL dbcsr_release(matrix_b) CALL dbcsr_release(matrix_c) CALL dbcsr_data_release(data_a) CALL dbcsr_data_release(data_b) CALL dbcsr_data_release(data_c) CALL dbcsr_data_release(data_c_dbcsr) END DO END DO END DO ! itype END DO !isymm CALL timestop(handle) END SUBROUTINE dbcsr_test_multiplies SUBROUTINE test_multiply(test_name, mp_group, mp_env, npdims, io_unit, & matrix_a, matrix_b, matrix_c, & data_a, data_b, data_c, data_c_dbcsr, & transa, transb, alpha, beta, limits, retain_sparsity) !! Performs a variety of matrix multiplies of same matrices on different !! processor grids CHARACTER(len=*), INTENT(IN) :: test_name TYPE(mp_comm_type), INTENT(IN) :: mp_group !! MPI communicator TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER, DIMENSION(2), INTENT(in) :: npdims INTEGER, INTENT(IN) :: io_unit !! which unit to write to, if not negative TYPE(dbcsr_type), INTENT(in) :: matrix_a, matrix_b, matrix_c !! matrices to multiply !! matrices to multiply !! matrices to multiply TYPE(dbcsr_data_obj) :: data_a, data_b, data_c, data_c_dbcsr CHARACTER, INTENT(in) :: transa, transb TYPE(dbcsr_scalar_type), INTENT(in) :: alpha, beta INTEGER, DIMENSION(6), INTENT(in) :: limits LOGICAL, INTENT(in) :: retain_sparsity CHARACTER(len=*), PARAMETER :: routineN = 'test_multiply' INTEGER :: c_a, c_b, c_c, handle, r_a, r_b, r_c INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: blk_offsets, col_dist_a, col_dist_b, & col_dist_c, row_dist_a, row_dist_b, & row_dist_c LOGICAL :: success REAL(real_8) :: occ_a, occ_b, occ_c_in, occ_c_out TYPE(dbcsr_distribution_obj) :: dist_a, dist_b, dist_c TYPE(dbcsr_type) :: m_a, m_b, m_c ! --------------------------------------------------------------------------- CALL timeset(routineN, handle) NULLIFY (row_dist_a, col_dist_a, & row_dist_b, col_dist_b, & row_dist_c, col_dist_c) IF (debug_mod .AND. io_unit .GT. 0) THEN WRITE (io_unit, *) REPEAT("*", 70) WRITE (io_unit, *) " -- TESTING dbcsr_multiply (", transa, ", ", transb, & ", ", dbcsr_get_data_type(m_a), & ", ", dbcsr_get_matrix_type(m_a), & ", ", dbcsr_get_matrix_type(m_b), & ", ", dbcsr_get_matrix_type(m_c), & ") ............... !" WRITE (io_unit, *) REPEAT("*", 70) END IF ! Row & column distributions CALL dbcsr_random_dist(row_dist_a, dbcsr_nblkrows_total(matrix_a), npdims(1)) CALL dbcsr_random_dist(col_dist_a, dbcsr_nblkcols_total(matrix_a), npdims(2)) CALL dbcsr_random_dist(row_dist_b, dbcsr_nblkrows_total(matrix_b), npdims(1)) CALL dbcsr_random_dist(col_dist_b, dbcsr_nblkcols_total(matrix_b), npdims(2)) CALL dbcsr_random_dist(row_dist_c, dbcsr_nblkrows_total(matrix_c), npdims(1)) CALL dbcsr_random_dist(col_dist_c, dbcsr_nblkcols_total(matrix_c), npdims(2)) CALL dbcsr_distribution_new(dist_a, mp_env, row_dist_a, col_dist_a, reuse_arrays=.TRUE.) CALL dbcsr_distribution_new(dist_b, mp_env, row_dist_b, col_dist_b, reuse_arrays=.TRUE.) CALL dbcsr_distribution_new(dist_c, mp_env, row_dist_c, col_dist_c, reuse_arrays=.TRUE.) ! Redistribute the matrices ! A CALL dbcsr_create(m_a, "Test for "//TRIM(dbcsr_name(matrix_a)), & dist_a, dbcsr_get_matrix_type(matrix_a), & row_blk_size_obj=matrix_a%row_blk_size, & col_blk_size_obj=matrix_a%col_blk_size, & data_type=dbcsr_get_data_type(matrix_a)) CALL dbcsr_distribution_release(dist_a) CALL dbcsr_redistribute(matrix_a, m_a) ! B CALL dbcsr_create(m_b, "Test for "//TRIM(dbcsr_name(matrix_b)), & dist_b, dbcsr_get_matrix_type(matrix_b), & row_blk_size_obj=matrix_b%row_blk_size, & col_blk_size_obj=matrix_b%col_blk_size, & data_type=dbcsr_get_data_type(matrix_b)) CALL dbcsr_distribution_release(dist_b) CALL dbcsr_redistribute(matrix_b, m_b) ! C CALL dbcsr_create(m_c, "Test for "//TRIM(dbcsr_name(matrix_c)), & dist_c, dbcsr_get_matrix_type(matrix_c), & row_blk_size_obj=matrix_c%row_blk_size, & col_blk_size_obj=matrix_c%col_blk_size, & data_type=dbcsr_get_data_type(matrix_c)) CALL dbcsr_distribution_release(dist_c) CALL dbcsr_redistribute(matrix_c, m_c) IF (.FALSE.) THEN blk_offsets => dbcsr_row_block_offsets(matrix_c) WRITE (*, *) 'row_block_offsets(matrix_c)', blk_offsets blk_offsets => dbcsr_col_block_offsets(matrix_c) WRITE (*, *) 'col_block_offsets(matrix_c)', blk_offsets END IF IF (.FALSE.) THEN CALL dbcsr_print(m_c, matlab_format=.FALSE., variable_name='c_in_') CALL dbcsr_print(m_a, matlab_format=.FALSE., variable_name='a_') CALL dbcsr_print(m_b, matlab_format=.FALSE., variable_name='b_') CALL dbcsr_print(m_c, matlab_format=.FALSE., variable_name='c_out_') END IF occ_a = dbcsr_get_occupation(m_a) occ_b = dbcsr_get_occupation(m_b) occ_c_in = dbcsr_get_occupation(m_c) ! ! Perform multiply IF (ALL(limits == 0)) THEN DBCSR_ABORT("limits shouldnt be 0") ELSE CALL dbcsr_multiply(transa, transb, alpha, & m_a, m_b, beta, m_c, & first_row=limits(1), & last_row=limits(2), & first_column=limits(3), & last_column=limits(4), & first_k=limits(5), & last_k=limits(6), & retain_sparsity=retain_sparsity) END IF occ_c_out = dbcsr_get_occupation(m_c) IF (.FALSE.) THEN PRINT *, 'retain_sparsity', retain_sparsity, occ_a, occ_b, occ_c_in, occ_c_out CALL dbcsr_print(m_a, matlab_format=.TRUE., variable_name='a_') CALL dbcsr_print(m_b, matlab_format=.TRUE., variable_name='b_') CALL dbcsr_print(m_c, matlab_format=.FALSE., variable_name='c_out_') END IF CALL dbcsr_replicate_all(m_c) CALL dbcsr_to_dense_local(m_c, data_c_dbcsr) CALL dbcsr_check_multiply(test_name, m_c, data_c_dbcsr, data_a, data_b, data_c, & transa, transb, alpha, beta, limits, retain_sparsity, io_unit, mp_group, & success) r_a = dbcsr_nfullrows_total(m_a) c_a = dbcsr_nfullcols_total(m_a) r_b = dbcsr_nfullrows_total(m_b) c_b = dbcsr_nfullcols_total(m_b) r_c = dbcsr_nfullrows_total(m_c) c_c = dbcsr_nfullcols_total(m_c) IF (io_unit .GT. 0) THEN IF (success) THEN WRITE (io_unit, *) REPEAT("*", 70) WRITE (io_unit, *) " -- TESTING dbcsr_multiply (", transa, ", ", transb, & ", ", dbcsr_get_data_type(m_a), & ", ", dbcsr_get_matrix_type(m_a), & ", ", dbcsr_get_matrix_type(m_b), & ", ", dbcsr_get_matrix_type(m_c), & ") ............... PASSED !" WRITE (io_unit, *) REPEAT("*", 70) ELSE WRITE (io_unit, *) REPEAT("*", 70) WRITE (io_unit, *) " -- TESTING dbcsr_multiply (", transa, ", ", transb, & ", ", dbcsr_get_data_type(m_a), & ", ", dbcsr_get_matrix_type(m_a), & ", ", dbcsr_get_matrix_type(m_b), & ", ", dbcsr_get_matrix_type(m_c), & ") ... FAILED !" WRITE (io_unit, *) REPEAT("*", 70) DBCSR_ABORT('Test failed') END IF END IF CALL dbcsr_release(m_a) CALL dbcsr_release(m_b) CALL dbcsr_release(m_c) CALL timestop(handle) END SUBROUTINE test_multiply SUBROUTINE dbcsr_check_multiply(test_name, matrix_c, dense_c_dbcsr, dense_a, dense_b, dense_c, & transa, transb, alpha, beta, limits, retain_sparsity, io_unit, mp_group, & success) !! Performs a check of matrix multiplies CHARACTER(len=*), INTENT(IN) :: test_name TYPE(dbcsr_type), INTENT(IN) :: matrix_c TYPE(dbcsr_data_obj), INTENT(inout) :: dense_c_dbcsr, dense_a, dense_b, dense_c !! dense result of the dbcsr_multiply !! input dense matrices !! input dense matrices !! input dense matrices CHARACTER, INTENT(in) :: transa, transb !! transposition status !! transposition status TYPE(dbcsr_scalar_type), INTENT(in) :: alpha, beta !! coefficients for the gemm !! coefficients for the gemm INTEGER, DIMENSION(6), INTENT(in) :: limits !! limits for the gemm LOGICAL, INTENT(in) :: retain_sparsity INTEGER, INTENT(IN) :: io_unit !! io unit for printing TYPE(mp_comm_type), INTENT(IN) :: mp_group LOGICAL, INTENT(out) :: success !! if passed the check success=T CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_check_multiply' INTEGER :: a_col, a_m, a_n, a_row, b_col, b_m, b_n, b_row, c_col, c_col_size, c_row, & c_row_size, handle, i, istat, j, k, lda, ldb, ldc, lwork, m, mynode, n, numnodes CHARACTER, PARAMETER :: norm = 'I' LOGICAL :: valid REAL(real_4), ALLOCATABLE, DIMENSION(:) :: work_sp #if defined (__ACCELERATE) REAL(real_8), EXTERNAL :: clange, slamch, slange #else REAL(real_4), EXTERNAL :: clange, slamch, slange #endif REAL(real_8) :: a_norm, b_norm, c_norm_dbcsr, c_norm_in, & c_norm_out, eps, eps_norm, residual REAL(real_8), ALLOCATABLE, DIMENSION(:) :: work REAL(real_8), EXTERNAL :: dlamch, dlange, zlange CALL timeset(routineN, handle) CALL mp_environ(numnodes, mynode, mp_group) CALL dbcsr_data_get_sizes(dense_c, c_row_size, c_col_size, valid) IF (.NOT. valid) & DBCSR_ABORT("dense matrix not valid") CALL dbcsr_data_get_sizes(dense_c, ldc, i, valid) IF (.NOT. valid) & DBCSR_ABORT("dense matrix not valid") CALL dbcsr_data_get_sizes(dense_a, lda, i, valid) IF (.NOT. valid) & DBCSR_ABORT("dense matrix not valid") CALL dbcsr_data_get_sizes(dense_b, ldb, i, valid) IF (.NOT. valid) & DBCSR_ABORT("dense matrix not valid") ! ! m = limits(2) - limits(1) + 1 n = limits(4) - limits(3) + 1 k = limits(6) - limits(5) + 1 a_row = limits(1); a_col = limits(5) b_row = limits(5); b_col = limits(3) c_row = limits(1); c_col = limits(3) ! ! IF (transA == dbcsr_no_transpose) THEN a_m = m a_n = k ELSE a_m = k a_n = m i = a_row a_row = a_col a_col = i END IF IF (transB == dbcsr_no_transpose) THEN b_m = k b_n = n ELSE b_m = n b_n = k i = b_row b_row = b_col b_col = i END IF ! ! set the size of the work array lwork = MAXVAL((/lda, ldb, ldc/)) ! ! SELECT CASE (dense_a%d%data_type) CASE (dbcsr_type_real_8_2d) ALLOCATE (work(lwork), STAT=istat) IF (istat /= 0) & DBCSR_ABORT("allocation problem") eps = dlamch('eps') a_norm = dlange(norm, a_m, a_n, dense_a%d%r2_dp(a_row, a_col), lda, work) b_norm = dlange(norm, b_m, b_n, dense_b%d%r2_dp(b_row, b_col), ldb, work) c_norm_in = dlange(norm, c_row_size, c_col_size, dense_c%d%r2_dp(1, 1), ldc, work) c_norm_dbcsr = dlange(norm, c_row_size, c_col_size, dense_c_dbcsr%d%r2_dp(1, 1), ldc, work) ! CALL dgemm(transa, transb, m, n, k, alpha%r_dp, dense_a%d%r2_dp(a_row, a_col), lda, & dense_b%d%r2_dp(b_row, b_col), ldb, beta%r_dp, dense_c%d%r2_dp(c_row, c_col), ldc) ! ! impose the sparsity if needed IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_c, dense_c) ! c_norm_out = dlange(norm, m, n, dense_c%d%r2_dp(c_row, c_col), ldc, work) ! ! take the difference dense/sparse dense_c%d%r2_dp = dense_c%d%r2_dp - dense_c_dbcsr%d%r2_dp ! ! compute the residual residual = dlange(norm, c_row_size, c_col_size, dense_c%d%r2_dp(1, 1), ldc, work) DEALLOCATE (work) CASE (dbcsr_type_real_4_2d) ALLOCATE (work_sp(lwork), STAT=istat) IF (istat /= 0) & DBCSR_ABORT("allocation problem") eps = REAL(slamch('eps'), real_8) a_norm = slange(norm, a_m, a_n, dense_a%d%r2_sp(a_row, a_col), lda, work_sp) b_norm = slange(norm, b_m, b_n, dense_b%d%r2_sp(b_row, b_col), ldb, work_sp) c_norm_in = slange(norm, c_row_size, c_col_size, dense_c%d%r2_sp(1, 1), ldc, work_sp) c_norm_dbcsr = slange(norm, c_row_size, c_col_size, dense_c_dbcsr%d%r2_sp(1, 1), ldc, work_sp) ! IF (.FALSE.) THEN !IF (io_unit .GT. 0) THEN DO j = 1, SIZE(dense_a%d%r2_sp, 2) DO i = 1, SIZE(dense_a%d%r2_sp, 1) WRITE (*, '(A,I3,A,I3,A,E15.7,A)') 'a(', i, ',', j, ')=', dense_a%d%r2_sp(i, j), ';' END DO END DO DO j = 1, SIZE(dense_b%d%r2_sp, 2) DO i = 1, SIZE(dense_b%d%r2_sp, 1) WRITE (*, '(A,I3,A,I3,A,E15.7,A)') 'b(', i, ',', j, ')=', dense_b%d%r2_sp(i, j), ';' END DO END DO DO j = 1, SIZE(dense_c%d%r2_sp, 2) DO i = 1, SIZE(dense_c%d%r2_sp, 1) WRITE (*, '(A,I3,A,I3,A,E15.7,A)') 'c_in(', i, ',', j, ')=', dense_c%d%r2_sp(i, j), ';' END DO END DO END IF CALL sgemm(transa, transb, m, n, k, alpha%r_sp, dense_a%d%r2_sp(a_row, a_col), lda, & dense_b%d%r2_sp(b_row, b_col), ldb, beta%r_sp, dense_c%d%r2_sp(c_row, c_col), ldc) ! ! impose the sparsity if needed IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_c, dense_c) IF (.FALSE.) THEN !IF (io_unit .GT. 0) THEN DO j = 1, SIZE(dense_c%d%r2_sp, 2) DO i = 1, SIZE(dense_c%d%r2_sp, 1) WRITE (*, '(A,I3,A,I3,A,E15.7,A)') 'c_out(', i, ',', j, ')=', dense_c%d%r2_sp(i, j), ';' END DO END DO DO j = 1, SIZE(dense_c_dbcsr%d%r2_sp, 2) DO i = 1, SIZE(dense_c_dbcsr%d%r2_sp, 1) WRITE (*, '(A,I3,A,I3,A,E15.7,A)') 'c_dbcsr(', i, ',', j, ')=', dense_c_dbcsr%d%r2_sp(i, j), ';' END DO END DO END IF ! c_norm_out = slange(norm, m, n, dense_c%d%r2_sp(c_row, c_col), ldc, work_sp) ! ! take the difference dense/sparse dense_c%d%r2_sp = dense_c%d%r2_sp - dense_c_dbcsr%d%r2_sp ! ! compute the residual residual = REAL(slange(norm, c_row_size, c_col_size, dense_c%d%r2_sp(1, 1), ldc, work_sp), real_8) DEALLOCATE (work_sp) CASE (dbcsr_type_complex_8_2d) ALLOCATE (work(lwork), STAT=istat) IF (istat /= 0) & DBCSR_ABORT("allocation problem") eps = dlamch('eps') a_norm = zlange(norm, a_m, a_n, dense_a%d%c2_dp(a_row, a_col), lda, work) b_norm = zlange(norm, b_m, b_n, dense_b%d%c2_dp(b_row, b_col), ldb, work) c_norm_in = zlange(norm, c_row_size, c_col_size, dense_c%d%c2_dp(1, 1), ldc, work) c_norm_dbcsr = zlange(norm, c_row_size, c_col_size, dense_c_dbcsr%d%c2_dp(1, 1), ldc, work) ! CALL zgemm(transa, transb, m, n, k, alpha%c_dp, dense_a%d%c2_dp(a_row, a_col), lda, & dense_b%d%c2_dp(b_row, b_col), ldb, beta%c_dp, dense_c%d%c2_dp(c_row, c_col), ldc) ! ! impose the sparsity if needed IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_c, dense_c) ! c_norm_out = zlange(norm, m, n, dense_c%d%c2_dp(c_row, c_col), ldc, work) ! ! take the difference dense/sparse dense_c%d%c2_dp = dense_c%d%c2_dp - dense_c_dbcsr%d%c2_dp ! ! compute the residual residual = zlange(norm, c_row_size, c_col_size, dense_c%d%c2_dp(1, 1), ldc, work) DEALLOCATE (work) CASE (dbcsr_type_complex_4_2d) ALLOCATE (work_sp(lwork), STAT=istat) IF (istat /= 0) & DBCSR_ABORT("allocation problem") eps = REAL(slamch('eps'), real_8) a_norm = clange(norm, a_m, a_n, dense_a%d%c2_sp(a_row, a_col), lda, work_sp) b_norm = clange(norm, b_m, b_n, dense_b%d%c2_sp(b_row, b_col), ldb, work_sp) c_norm_in = clange(norm, c_row_size, c_col_size, dense_c%d%c2_sp(1, 1), ldc, work_sp) c_norm_dbcsr = clange(norm, c_row_size, c_col_size, dense_c_dbcsr%d%c2_sp(1, 1), ldc, work_sp) ! CALL cgemm(transa, transb, m, n, k, alpha%c_sp, dense_a%d%c2_sp(a_row, a_col), lda, & dense_b%d%c2_sp(b_row, b_col), ldb, beta%c_sp, dense_c%d%c2_sp(c_row, c_col), ldc) ! ! impose the sparsity if needed IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_c, dense_c) ! c_norm_out = clange(norm, m, n, dense_c%d%c2_sp(c_row, c_col), ldc, work_sp) ! ! take the difference dense/sparse dense_c%d%c2_sp = dense_c%d%c2_sp - dense_c_dbcsr%d%c2_sp ! ! compute the residual residual = clange(norm, c_row_size, c_col_size, dense_c%d%c2_sp(1, 1), ldc, work_sp) DEALLOCATE (work_sp) CASE default DBCSR_ABORT("Incorrect or 1-D data type") END SELECT IF (mynode .EQ. 0) THEN eps_norm = residual/((a_norm + b_norm + c_norm_in)*REAL(n, real_8)*eps) IF (eps_norm .GT. 10.0_real_8) THEN success = .FALSE. ELSE success = .TRUE. END IF END IF ! ! synchronize the result... CALL mp_bcast(success, 0, mp_group) CALL mp_bcast(eps_norm, 0, mp_group) ! ! printing IF (io_unit .GT. 0) THEN WRITE (io_unit, *) 'test_name ', test_name ! ! check for nan or inf here IF (success) THEN WRITE (io_unit, '(A)') ' The solution is CORRECT !' ELSE WRITE (io_unit, '(A)') ' The solution is suspicious !' WRITE (io_unit, '(3(A,E12.5))') ' residual ', residual, ', a_norm ', a_norm, ', b_norm ', b_norm WRITE (io_unit, '(3(A,E12.5))') ' c_norm_in ', c_norm_in, ', c_norm_out ', c_norm_out, & ', c_norm_dbcsr ', c_norm_dbcsr WRITE (io_unit, '(A)') ' Checking the norm of the difference against reference GEMM ' WRITE (io_unit, '(A,E12.5)') ' -- ||C_dbcsr-C_dense||_oo/((||A||_oo+||B||_oo+||C||_oo).N.eps)=', & eps_norm END IF END IF CALL timestop(handle) END SUBROUTINE dbcsr_check_multiply END MODULE dbcsr_test_multiply ================================================ FILE: tests/dbcsr_test_scale_by_vector.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! MODULE dbcsr_test_scale_by_vector !! Tests for DBCSR scale_by_vector USE dbcsr_data_methods, ONLY: dbcsr_data_get_sizes, & dbcsr_data_init, & dbcsr_data_new, & dbcsr_data_release, & dbcsr_type_1d_to_2d USE dbcsr_dist_methods, ONLY: dbcsr_distribution_new, & dbcsr_distribution_release USE dbcsr_kinds, ONLY: real_8 USE dbcsr_methods, ONLY: & dbcsr_get_data_type, & dbcsr_get_matrix_type, dbcsr_name, dbcsr_nblkcols_total, dbcsr_nblkrows_total, & dbcsr_nfullcols_total, dbcsr_nfullrows_total, dbcsr_release USE dbcsr_mpiwrap, ONLY: mp_environ, mp_comm_type USE dbcsr_test_methods, ONLY: dbcsr_make_random_block_sizes, & dbcsr_make_random_matrix, & dbcsr_random_dist, & dbcsr_to_dense_local USE dbcsr_transformations, ONLY: dbcsr_redistribute, & dbcsr_new_transposed USE dbcsr_types, ONLY: & dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_mp_obj, dbcsr_type, & dbcsr_type_antisymmetric, dbcsr_type_no_symmetry, dbcsr_type_symmetric, & dbcsr_type_real_4, dbcsr_type_real_8, & dbcsr_type_complex_4, dbcsr_type_complex_8 USE dbcsr_work_operations, ONLY: dbcsr_create USE dbcsr_operations, ONLY: dbcsr_scale_by_vector USE dbcsr_dist_util, ONLY: dbcsr_checksum #include "base/dbcsr_base_uses.f90" !$ USE OMP_LIB, ONLY: omp_get_num_threads IMPLICIT NONE PRIVATE PUBLIC :: dbcsr_test_scale_by_vectors LOGICAL, PARAMETER :: debug_mod = .FALSE. CONTAINS FUNCTION dbcsr_test_scale_by_vectors(test_name, mp_group, mp_env, npdims, io_unit, & matrix_size, bs_m, bs_n, sparsity, do_exact_comparison) RESULT(success) !! Performs a variety of matrix multiplies of same matrices on different !! processor grids CHARACTER(len=*), INTENT(IN) :: test_name TYPE(mp_comm_type), INTENT(IN) :: mp_group !! MPI communicator TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER, DIMENSION(2), INTENT(IN) :: npdims INTEGER, INTENT(IN) :: io_unit !! which unit to write to, if not negative INTEGER, DIMENSION(2), INTENT(IN) :: matrix_size !! size of matrix to test INTEGER, DIMENSION(:), INTENT(IN) :: bs_m, bs_n !! block sizes of the 2 dimension !! block sizes of the 2 dimension REAL(real_8), INTENT(IN) :: sparsity !! sparsity of the matrix to create LOGICAL, INTENT(IN) :: do_exact_comparison !! whether or not to do exact comparison for the matrix values CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_test_scale_by_vectors' CHARACTER, DIMENSION(3), PARAMETER :: symmetries = [dbcsr_type_no_symmetry, dbcsr_type_symmetric, dbcsr_type_antisymmetric] INTEGER, DIMENSION(4), PARAMETER :: types = [dbcsr_type_real_4, dbcsr_type_real_8, dbcsr_type_complex_4, dbcsr_type_complex_8] CHARACTER :: symm INTEGER :: handle, isymm, itype, mynode, & numnodes, numthreads, type, nrows INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: sizes_m, sizes_n, sizes_1 LOGICAL :: success TYPE(dbcsr_data_obj) :: vector_data TYPE(dbcsr_type) :: matrix, vector CALL timeset(routineN, handle) NULLIFY (sizes_m, sizes_n, sizes_1) ! ! print CALL mp_environ(numnodes, mynode, mp_group) IF (io_unit > 0) THEN WRITE (io_unit, *) 'test_name ', test_name numthreads = 1 !$OMP PARALLEL !$OMP MASTER !$ numthreads = omp_get_num_threads() !$OMP END MASTER !$OMP END PARALLEL WRITE (io_unit, *) 'numthreads', numthreads WRITE (io_unit, *) 'numnodes', numnodes WRITE (io_unit, *) 'matrix_size', matrix_size WRITE (io_unit, *) 'sparsity', sparsity WRITE (io_unit, *) 'bs_m', bs_m WRITE (io_unit, *) 'bs_n', bs_n END IF success = .TRUE. ! ! ! loop over symmetry DO isymm = 1, SIZE(symmetries) symm = symmetries(isymm) IF (matrix_size(1) /= matrix_size(2) .AND. symm /= dbcsr_type_no_symmetry) & CYCLE ! ! loop over types DO itype = 1, SIZE(types) type = types(itype) ! ! Create the row/column block sizes. CALL dbcsr_make_random_block_sizes(sizes_m, matrix_size(1), bs_m) CALL dbcsr_make_random_block_sizes(sizes_n, matrix_size(2), bs_n) ALLOCATE (sizes_1(1)) sizes_1 = 1 ! ! Create the undistributed matrices. CALL dbcsr_make_random_matrix(matrix, sizes_m, sizes_n, "Matrix", & sparsity, mp_group, data_type=type, symmetry=symm) ! ! Use a very skinny matrix to generate our test data CALL dbcsr_make_random_matrix(vector, sizes_n, sizes_1, "Vector", 0.0_real_8, mp_group, data_type=type) DEALLOCATE (sizes_m, sizes_n, sizes_1) ! ! Densify the the vector nrows = dbcsr_nfullrows_total(vector) CALL dbcsr_data_init(vector_data) CALL dbcsr_data_new(vector_data, type, data_size=nrows) CALL dbcsr_to_dense_local(vector, vector_data) IF (debug_mod .AND. io_unit > 0) THEN CALL write_1d_data_obj(io_unit, vector_data) CALL write_matrix_dense(io_unit, matrix) END IF ! ! Prepare test parameters success = test_scale_by_vector(mp_env, npdims, matrix, vector_data, do_exact_comparison) .AND. success IF (io_unit > 0) THEN IF (success) THEN WRITE (io_unit, *) REPEAT("*", 70) WRITE (io_unit, *) " -- TESTING dbcsr_scale_by_vector (", & dbcsr_get_data_type(matrix), & dbcsr_get_matrix_type(matrix), & do_exact_comparison, & ") ............... PASSED !" WRITE (io_unit, *) REPEAT("*", 70) ELSE WRITE (io_unit, *) REPEAT("*", 70) WRITE (io_unit, *) " -- TESTING dbcsr_scale_by_vector (", & dbcsr_get_data_type(matrix), & dbcsr_get_matrix_type(matrix), & do_exact_comparison, & ") ............... FAILED !" WRITE (io_unit, *) REPEAT("*", 70) END IF END IF ! ! cleanup CALL dbcsr_release(matrix) CALL dbcsr_release(vector) CALL dbcsr_data_release(vector_data) END DO ! itype END DO !isymm CALL timestop(handle) END FUNCTION SUBROUTINE write_1d_data_obj(io_unit, vector) INTEGER, INTENT(IN) :: io_unit TYPE(dbcsr_data_obj), INTENT(IN) :: vector INTEGER :: i, sz LOGICAL :: valid CALL dbcsr_data_get_sizes(vector, sz, valid) IF (.NOT. valid) & RETURN SELECT CASE (vector%d%data_type) CASE (dbcsr_type_real_4) WRITE (io_unit, "(A,I3)") "Vector dbcsr_type_real_4, size:", sz DO i = 1, SIZE(vector%d%r_sp) WRITE (io_unit, '(T2,A,I3,A,E15.7,A)') 'vector(', i, ')=', vector%d%r_sp(i), ';' END DO CASE (dbcsr_type_real_8) WRITE (io_unit, "(A,I3)") "Vector dbcsr_type_real_8, size:", sz DO i = 1, SIZE(vector%d%r_dp) WRITE (io_unit, '(T2,A,I3,A,E15.7,A)') 'vector(', i, ')=', vector%d%r_dp(i), ';' END DO CASE (dbcsr_type_complex_4) WRITE (io_unit, "(A,I3)") "Vector dbcsr_type_complex_4, size:", sz DO i = 1, SIZE(vector%d%c_sp) WRITE (io_unit, '(T2,A,I3,A,E15.7,SP,E15.7,"i",A)') 'vector(', i, ')=', vector%d%c_sp(i), ';' END DO CASE (dbcsr_type_complex_8) WRITE (io_unit, "(A,I3)") "Vector dbcsr_type_complex_8, size:", sz DO i = 1, SIZE(vector%d%c_dp) WRITE (io_unit, '(T2,A,I3,A,E15.7,SP,E15.7,"i",A)') 'vector(', i, ')=', vector%d%c_dp(i), ';' END DO END SELECT END SUBROUTINE SUBROUTINE write_matrix_dense(io_unit, matrix) INTEGER, INTENT(IN) :: io_unit TYPE(dbcsr_type), INTENT(IN) :: matrix TYPE(dbcsr_data_obj) :: mdata INTEGER :: i, j, sz(2) LOGICAL :: valid CALL dbcsr_data_init(mdata) CALL dbcsr_data_new(mdata, dbcsr_type_1d_to_2d(matrix%data_type), & data_size=dbcsr_nfullrows_total(matrix), data_size2=dbcsr_nfullcols_total(matrix)) CALL dbcsr_to_dense_local(matrix, mdata) CALL dbcsr_data_get_sizes(mdata, sz, valid) IF (.NOT. valid) & CALL dbcsr_abort(__LOCATION__, & "densification failed?!") SELECT CASE (matrix%data_type) CASE (dbcsr_type_real_4) WRITE (io_unit, "(A,I3,I3)") "Matrix dbcsr_type_real_4, size:", sz DO j = 1, SIZE(mdata%d%r2_sp, 2) DO i = 1, SIZE(mdata%d%r2_sp, 1) WRITE (io_unit, '(T2,A,I3,A,I3,A,E15.7,A)') 'matrix(', i, ',', j, ')=', mdata%d%r2_sp(i, j), ';' END DO END DO CASE (dbcsr_type_real_8) WRITE (io_unit, "(A,I3,I3)") "Matrix dbcsr_type_real_8, size:", sz DO j = 1, SIZE(mdata%d%r2_dp, 2) DO i = 1, SIZE(mdata%d%r2_dp, 1) WRITE (io_unit, '(T2,A,I3,A,I3,A,E15.7,A)') 'matrix(', i, ',', j, ')=', mdata%d%r2_dp(i, j), ';' END DO END DO CASE (dbcsr_type_complex_4) WRITE (io_unit, "(A,I3,I3)") "Matrix dbcsr_type_complex_4, size:", sz DO j = 1, SIZE(mdata%d%c2_sp, 2) DO i = 1, SIZE(mdata%d%c2_sp, 1) WRITE (io_unit, '(T2,A,I3,A,I3,A,E15.7,SP,E15.7,"i",A)') 'matrix(', i, ',', j, ')=', mdata%d%c2_sp(i, j), ';' END DO END DO CASE (dbcsr_type_complex_8) WRITE (io_unit, "(A,I3,I3)") "Matrix dbcsr_type_complex_8, size:", sz DO j = 1, SIZE(mdata%d%c2_dp, 2) DO i = 1, SIZE(mdata%d%c2_dp, 1) WRITE (io_unit, '(T2,A,I3,A,I3,A,E15.7,SP,E15.7,"i",A)') 'matrix(', i, ',', j, ')=', mdata%d%c2_dp(i, j), ';' END DO END DO END SELECT CALL dbcsr_data_release(mdata) END SUBROUTINE FUNCTION test_scale_by_vector(mp_env, npdims, matrix, vector, do_exact_comparison) RESULT(res) !! Performs T(v * T(M)) == M*v TYPE(dbcsr_mp_obj), INTENT(IN) :: mp_env INTEGER, DIMENSION(2), INTENT(IN) :: npdims !! processor grid TYPE(dbcsr_type), INTENT(IN) :: matrix !! matrix to scale TYPE(dbcsr_data_obj), INTENT(IN) :: vector !! scaling vector LOGICAL, INTENT(IN) :: do_exact_comparison !! whether to do an exact comparison (via densification) INTEGER :: handle INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_dist, row_dist TYPE(dbcsr_distribution_obj) :: dist TYPE(dbcsr_type) :: matrix_right, matrix_left, matrix_left_transposed LOGICAL :: res CHARACTER(len=*), PARAMETER :: routineN = 'test_scale_by_vector' CALL timeset(routineN, handle) NULLIFY (row_dist, col_dist) ! Row & column distributions CALL dbcsr_random_dist(row_dist, dbcsr_nblkrows_total(matrix), npdims(1)) CALL dbcsr_random_dist(col_dist, dbcsr_nblkcols_total(matrix), npdims(2)) CALL dbcsr_distribution_new(dist, mp_env, row_dist, col_dist, reuse_arrays=.TRUE.) ! Create redistributed matrix CALL dbcsr_create(matrix_right, "RHS Test for "//TRIM(dbcsr_name(matrix)), & dist, dbcsr_get_matrix_type(matrix), & row_blk_size_obj=matrix%row_blk_size, & col_blk_size_obj=matrix%col_blk_size, & data_type=dbcsr_get_data_type(matrix)) CALL dbcsr_distribution_release(dist) CALL dbcsr_redistribute(matrix, matrix_right) CALL dbcsr_new_transposed(matrix_left, matrix_right) ! ! Perform scaling, once from right, once from left CALL dbcsr_scale_by_vector(matrix_right, vector, side="right") CALL dbcsr_scale_by_vector(matrix_left, vector, side="left") ! for the comparison we need the transposed LHS again CALL dbcsr_new_transposed(matrix_left_transposed, matrix_left) ! now compare either exactly via densification or less exactly via checksums IF (do_exact_comparison) THEN BLOCK TYPE(dbcsr_data_obj) :: mdata_left, mdata_right CALL dbcsr_data_init(mdata_left) CALL dbcsr_data_new(mdata_left, dbcsr_type_1d_to_2d(dbcsr_get_data_type(matrix_left_transposed)), & data_size=dbcsr_nfullrows_total(matrix_left_transposed), & data_size2=dbcsr_nfullcols_total(matrix_left_transposed)) CALL dbcsr_to_dense_local(matrix_left_transposed, mdata_left) CALL dbcsr_data_init(mdata_right) CALL dbcsr_data_new(mdata_right, dbcsr_type_1d_to_2d(dbcsr_get_data_type(matrix_right)), & data_size=dbcsr_nfullrows_total(matrix_right), data_size2=dbcsr_nfullcols_total(matrix_right)) CALL dbcsr_to_dense_local(matrix_right, mdata_right) SELECT CASE (dbcsr_get_data_type(matrix_right)) CASE (dbcsr_type_real_4) res = ALL(ABS(mdata_right%d%r2_sp - mdata_left%d%r2_sp) < 1.0D-5) CASE (dbcsr_type_real_8) res = ALL(ABS(mdata_right%d%r2_dp - mdata_left%d%r2_dp) < 1.0D-5) CASE (dbcsr_type_complex_4) res = ALL(ABS(mdata_right%d%c2_sp - mdata_left%d%c2_sp) < 1.0D-5) CASE (dbcsr_type_complex_8) res = ALL(ABS(mdata_right%d%c2_dp - mdata_left%d%c2_dp) < 1.0D-5) END SELECT CALL dbcsr_data_release(mdata_left) CALL dbcsr_data_release(mdata_right) END BLOCK ELSE ! ! Calculate checksums and set result res = ABS(dbcsr_checksum(matrix_right, pos=.TRUE.) - dbcsr_checksum(matrix_left_transposed, pos=.TRUE.)) < 1.0D-5 END IF CALL dbcsr_release(matrix_left) CALL dbcsr_release(matrix_left_transposed) CALL dbcsr_release(matrix_right) CALL timestop(handle) END FUNCTION END MODULE ================================================ FILE: tests/dbcsr_unittest1.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! PROGRAM dbcsr_unittest_1 !! Tests for DBCSR operations: !! add, multiply and multiply-ghost USE dbcsr_kinds, ONLY: dp USE dbcsr_lib, ONLY: dbcsr_finalize_lib, & dbcsr_init_lib, & dbcsr_print_statistics USE dbcsr_machine, ONLY: default_output_unit USE dbcsr_mp_methods, ONLY: dbcsr_mp_new, & dbcsr_mp_release USE dbcsr_mpiwrap, ONLY: mp_cart_create, & mp_cart_rank, & mp_comm_free, & mp_environ, & mp_world_finalize, & mp_world_init, mp_comm_type USE dbcsr_test_add, ONLY: dbcsr_test_adds USE dbcsr_test_methods, ONLY: dbcsr_reset_randmat_seed USE dbcsr_test_multiply, ONLY: dbcsr_test_multiplies USE dbcsr_types, ONLY: dbcsr_mp_obj #include "base/dbcsr_base_uses.f90" IMPLICIT NONE INTEGER :: numnodes, mynode, & prow, pcol, io_unit, handle INTEGER, DIMENSION(2) :: npdims, myploc INTEGER, DIMENSION(:, :), POINTER :: pgrid TYPE(dbcsr_mp_obj) :: mp_env TYPE(mp_comm_type) :: mp_comm, group CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_unittest' !*************************************************************************************** ! initialize mpi CALL mp_world_init(mp_comm) ! setup the mp environment npdims(:) = 0 CALL mp_cart_create(mp_comm, 2, npdims, myploc, group) CALL mp_environ(numnodes, mynode, group) ALLOCATE (pgrid(0:npdims(1) - 1, 0:npdims(2) - 1)) DO prow = 0, npdims(1) - 1 DO pcol = 0, npdims(2) - 1 CALL mp_cart_rank(group, (/prow, pcol/), pgrid(prow, pcol)) END DO END DO CALL dbcsr_mp_new(mp_env, group, pgrid, mynode, numnodes, & myprow=myploc(1), mypcol=myploc(2)) DEALLOCATE (pgrid) ! set standard output parameters io_unit = 0 IF (mynode .EQ. 0) io_unit = default_output_unit ! initialize libdbcsr CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit) ! initialize libdbcsr errors CALL timeset(routineN, handle) CALL dbcsr_reset_randmat_seed() ! run tests ! add ----------------------------------------------------------------------- CALL dbcsr_test_adds("add_1", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 25/), & sparsities=(/0.7_dp, 0.5_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 1.0_dp, dp), beta=CMPLX(2.0_dp, 2.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2, 1, 3/), & limits=(/1, 50, 1, 25/)) CALL dbcsr_test_adds("add_2", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50/), & sparsities=(/0.4_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(3.0_dp, 2.0_dp, dp), beta=CMPLX(4.0_dp, 0.5_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), & limits=(/1, 50, 1, 50/)) ! multiply ------------------------------------------------------------------ CALL dbcsr_test_multiplies("multiply_ALPHA", & group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(-3.0_dp, -4.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 4/), bs_n=(/1, 4/), bs_k=(/1, 4/), & limits=(/2, 6, 3, 7, 6, 7/)) CALL dbcsr_test_multiplies("multiply_BETA", & group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(3.0_dp, -2.0_dp, dp), & bs_m=(/1, 4/), bs_n=(/1, 4/), bs_k=(/1, 4/), & limits=(/2, 6, 3, 7, 6, 7/)) CALL dbcsr_test_multiplies("multiply_LIMITS_COL_1", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/1, 50, 1, 20, 1, 50/)) CALL dbcsr_test_multiplies("multiply_LIMITS_COL_2", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/1, 50, 9, 18, 1, 50/)) CALL dbcsr_test_multiplies("multiply_LIMITS_COL_3", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/1, 50, 9, 18, 1, 50/)) CALL dbcsr_test_multiplies("multiply_LIMITS_COL_4", & group, mp_env, npdims, io_unit, matrix_sizes=(/25, 50, 75/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/1, 25, 9, 18, 1, 75/)) CALL dbcsr_test_multiplies("multiply_LIMITS_K_1", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/1, 50, 1, 50, 1, 20/)) CALL dbcsr_test_multiplies("multiply_LIMITS_K_2", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/1, 50, 1, 50, 9, 18/)) CALL dbcsr_test_multiplies("multiply_LIMITS_K_3", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/1, 50, 1, 50, 9, 18/)) CALL dbcsr_test_multiplies("multiply_LIMITS_K_4", & group, mp_env, npdims, io_unit, matrix_sizes=(/25, 50, 75/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/1, 25, 1, 50, 9, 18/)) CALL dbcsr_test_multiplies("multiply_LIMITS_MIX_1", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/9, 18, 11, 20, 1, 50/)) CALL dbcsr_test_multiplies("multiply_LIMITS_MIX_2", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/1, 50, 9, 10, 11, 20/)) CALL dbcsr_test_multiplies("multiply_LIMITS_MIX_3", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/9, 20, 1, 50, 11, 18/)) CALL dbcsr_test_multiplies("multiply_LIMITS_MIX_4", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/11, 20, 11, 20, 13, 18/)) CALL dbcsr_test_multiplies("multiply_LIMITS_MIX_5", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/11, 20, 11, 20, 13, 18/)) CALL dbcsr_test_multiplies("multiply_LIMITS_MIX_6", & group, mp_env, npdims, io_unit, matrix_sizes=(/25, 50, 75/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/11, 20, 11, 20, 13, 18/)) CALL dbcsr_test_multiplies("multiply_LIMITS_MIX_7", & group, mp_env, npdims, io_unit, matrix_sizes=(/25, 50, 75/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 1.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2, 1, 3/), bs_k=(/1, 3, 1, 2, 1, 0/), & limits=(/11, 20, 11, 20, 6, 10/)) CALL dbcsr_test_multiplies("multiply_LIMITS_ROW_1", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/1, 20, 1, 50, 1, 50/)) CALL dbcsr_test_multiplies("multiply_LIMITS_ROW_2", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/9, 18, 1, 50, 1, 50/)) CALL dbcsr_test_multiplies("multiply_LIMITS_ROW_3", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/9, 18, 1, 50, 1, 50/)) CALL dbcsr_test_multiplies("multiply_LIMITS_ROW_4", & group, mp_env, npdims, io_unit, matrix_sizes=(/25, 50, 75/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/9, 18, 1, 50, 1, 75/)) CALL dbcsr_test_multiplies("multiply_RT", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/1, 50, 1, 50, 1, 50/)) CALL dbcsr_test_multiplies("multiply_SQ", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), & sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/1, 50, 1, 50, 1, 50/)) ! multiply-ghost ------------------------------------------------------------ CALL dbcsr_test_multiplies("ub2", & group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 4/), bs_n=(/1, 4/), bs_k=(/1, 4/), & limits=(/2, 6, 3, 7, 6, 7/)) CALL dbcsr_test_multiplies("ub-k-ghost", & group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 4/), bs_n=(/1, 4/), bs_k=(/1, 4, 1, 0/), & limits=(/2, 6, 3, 7, 2, 7/)) CALL dbcsr_test_multiplies("ub-m-ghost", & group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 4, 1, 0/), bs_n=(/1, 4/), bs_k=(/1, 4/), & limits=(/2, 6, 3, 7, 2, 7/)) CALL dbcsr_test_multiplies("ub-mnk-ghost", & group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 4, 1, 0/), bs_n=(/1, 4, 1, 0/), bs_k=(/1, 4, 1, 0/), & limits=(/2, 6, 3, 7, 2, 7/)) CALL dbcsr_test_multiplies("ub-n-ghost", & group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 4/), bs_n=(/1, 4, 1, 0/), bs_k=(/1, 4/), & limits=(/2, 6, 3, 7, 2, 7/)) CALL dbcsr_test_multiplies("ub", & group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), & limits=(/1, 20, 1, 20, 9, 18/)) ! end of test cases --------------------------------------------------------- CALL timestop(handle) ! clean mp environment CALL dbcsr_mp_release(mp_env) ! finalize mpi CALL mp_comm_free(group) call dbcsr_print_statistics(.true.) ! finalize libdbcsr CALL dbcsr_finalize_lib() CALL mp_world_finalize() END PROGRAM dbcsr_unittest_1 ================================================ FILE: tests/dbcsr_unittest2.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! PROGRAM dbcsr_unittest_2 !! Tests for DBCSR multiply: !! large blocks (block size=100) !! and rectangular matrices (block size=5) USE dbcsr_kinds, ONLY: dp USE dbcsr_lib, ONLY: dbcsr_finalize_lib, & dbcsr_init_lib, & dbcsr_print_statistics USE dbcsr_machine, ONLY: default_output_unit USE dbcsr_mp_methods, ONLY: dbcsr_mp_new, & dbcsr_mp_release USE dbcsr_mpiwrap, ONLY: mp_cart_create, & mp_cart_rank, & mp_comm_free, & mp_environ, & mp_world_finalize, & mp_world_init, mp_comm_type USE dbcsr_test_methods, ONLY: dbcsr_reset_randmat_seed USE dbcsr_test_multiply, ONLY: dbcsr_test_multiplies USE dbcsr_types, ONLY: dbcsr_mp_obj #include "base/dbcsr_base_uses.f90" IMPLICIT NONE INTEGER :: numnodes, mynode, & prow, pcol, io_unit, handle INTEGER, DIMENSION(2) :: npdims, myploc INTEGER, DIMENSION(:, :), POINTER :: pgrid TYPE(dbcsr_mp_obj) :: mp_env TYPE(mp_comm_type) :: mp_comm, group CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_unittest' !*************************************************************************************** ! initialize mpi CALL mp_world_init(mp_comm) ! setup the mp environment npdims(:) = 0 CALL mp_cart_create(mp_comm, 2, npdims, myploc, group) CALL mp_environ(numnodes, mynode, group) ALLOCATE (pgrid(0:npdims(1) - 1, 0:npdims(2) - 1)) DO prow = 0, npdims(1) - 1 DO pcol = 0, npdims(2) - 1 CALL mp_cart_rank(group, (/prow, pcol/), pgrid(prow, pcol)) END DO END DO CALL dbcsr_mp_new(mp_env, group, pgrid, mynode, numnodes, & myprow=myploc(1), mypcol=myploc(2)) DEALLOCATE (pgrid) ! set standard output parameters io_unit = 0 IF (mynode .EQ. 0) io_unit = default_output_unit ! initialize libdbcsr CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit) ! initialize libdbcsr errors CALL timeset(routineN, handle) CALL dbcsr_reset_randmat_seed() ! run tests ! multiply ------------------------------------------------------------------ ! Large Blocks CALL dbcsr_test_multiplies("large_blocks_1", & group, mp_env, npdims, io_unit, matrix_sizes=(/500, 500, 500/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 100/), bs_n=(/1, 100/), bs_k=(/1, 100/), & limits=(/1, 500, 1, 500, 1, 500/)) CALL dbcsr_test_multiplies("large_blocks_2", & group, mp_env, npdims, io_unit, matrix_sizes=(/500, 50, 50/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 100/), bs_n=(/1, 10/), bs_k=(/1, 10/), & limits=(/1, 500, 1, 50, 1, 50/)) ! Rectangular matrices CALL dbcsr_test_multiplies("rectangular_matrix_M", & group, mp_env, npdims, io_unit, matrix_sizes=(/500, 50, 50/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 5/), bs_n=(/1, 5/), bs_k=(/1, 5/), & limits=(/1, 500, 1, 50, 1, 50/)) CALL dbcsr_test_multiplies("rectangular_matrix_K", & group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 500/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 5/), bs_n=(/1, 5/), bs_k=(/1, 5/), & limits=(/1, 50, 1, 50, 1, 500/)) ! end of test cases --------------------------------------------------------- ! finalize libdbcsr errors CALL timestop(handle) ! clean mp environment CALL dbcsr_mp_release(mp_env) ! finalize mpi CALL mp_comm_free(group) call dbcsr_print_statistics(.true.) ! finalize libdbcsr CALL dbcsr_finalize_lib() CALL mp_world_finalize() END PROGRAM dbcsr_unittest_2 ================================================ FILE: tests/dbcsr_unittest3.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! PROGRAM dbcsr_unittest_3 !! Tests for DBCSR multiply: !! various block sizes that are run by the libsmm_acc GPU backend if !! DBCSR is compiled with GPU support. USE dbcsr_kinds, ONLY: dp USE dbcsr_lib, ONLY: dbcsr_finalize_lib, & dbcsr_init_lib, & dbcsr_print_statistics USE dbcsr_machine, ONLY: default_output_unit USE dbcsr_mp_methods, ONLY: dbcsr_mp_new, & dbcsr_mp_release USE dbcsr_mpiwrap, ONLY: mp_cart_create, & mp_cart_rank, & mp_comm_free, & mp_environ, & mp_world_finalize, & mp_world_init, mp_comm_type USE dbcsr_test_methods, ONLY: dbcsr_reset_randmat_seed USE dbcsr_test_multiply, ONLY: dbcsr_test_multiplies USE dbcsr_types, ONLY: dbcsr_mp_obj #include "base/dbcsr_base_uses.f90" IMPLICIT NONE INTEGER :: numnodes, mynode, & prow, pcol, io_unit, handle INTEGER, DIMENSION(2) :: npdims, myploc INTEGER, DIMENSION(:, :), POINTER :: pgrid TYPE(dbcsr_mp_obj) :: mp_env TYPE(mp_comm_type) :: mp_comm, group CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_unittest' !*************************************************************************************** ! initialize mpi CALL mp_world_init(mp_comm) ! setup the mp environment npdims(:) = 0 CALL mp_cart_create(mp_comm, 2, npdims, myploc, group) CALL mp_environ(numnodes, mynode, group) ALLOCATE (pgrid(0:npdims(1) - 1, 0:npdims(2) - 1)) DO prow = 0, npdims(1) - 1 DO pcol = 0, npdims(2) - 1 CALL mp_cart_rank(group, (/prow, pcol/), pgrid(prow, pcol)) END DO END DO CALL dbcsr_mp_new(mp_env, group, pgrid, mynode, numnodes, & myprow=myploc(1), mypcol=myploc(2)) DEALLOCATE (pgrid) ! set standard output parameters io_unit = 0 IF (mynode .EQ. 0) io_unit = default_output_unit ! initialize libdbcsr CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit) ! initialize libdbcsr errors CALL timeset(routineN, handle) CALL dbcsr_reset_randmat_seed() ! run tests ! multiply ------------------------------------------------------------------ CALL dbcsr_test_multiplies("blocks_1_3_4", & group, mp_env, npdims, io_unit, matrix_sizes=(/496, 48, 48/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 1, 1, 3, 1, 4/), bs_n=(/1, 1, 1, 3, 1, 4/), bs_k=(/1, 1, 1, 3, 1, 4/), & limits=(/1, 496, 1, 48, 1, 48/)) CALL dbcsr_test_multiplies("blocks_4_5_7", & group, mp_env, npdims, io_unit, matrix_sizes=(/496, 48, 48/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 4, 1, 5, 1, 7/), bs_n=(/1, 4, 1, 5, 1, 7/), bs_k=(/1, 4, 1, 5, 1, 7/), & limits=(/1, 496, 1, 48, 1, 48/)) CALL dbcsr_test_multiplies("blocks_5_8_9", & group, mp_env, npdims, io_unit, matrix_sizes=(/506, 44, 44/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 5, 1, 8, 1, 9/), bs_n=(/1, 5, 1, 8, 1, 9/), bs_k=(/1, 5, 1, 8, 1, 9/), & limits=(/1, 506, 1, 44, 1, 44/)) CALL dbcsr_test_multiplies("blocks_4_13_25", & group, mp_env, npdims, io_unit, matrix_sizes=(/504, 42, 42/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 4, 1, 13, 1, 25/), bs_n=(/1, 4, 1, 13, 1, 25/), bs_k=(/1, 4, 1, 13, 1, 25/), & limits=(/1, 504, 1, 42, 1, 42/)) CALL dbcsr_test_multiplies("blocks_14_29_32", & group, mp_env, npdims, io_unit, matrix_sizes=(/525, 75, 75/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 14, 1, 29, 1, 32/), bs_n=(/1, 14, 1, 29, 1, 32/), bs_k=(/1, 14, 1, 29, 1, 32/), & limits=(/1, 525, 1, 75, 1, 75/)) CALL dbcsr_test_multiplies("blocks_H2O", & group, mp_env, npdims, io_unit, matrix_sizes=(/552, 46, 46/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 23/), bs_n=(/1, 23/), bs_k=(/1, 23/), & limits=(/1, 552, 1, 46, 1, 46/)) CALL dbcsr_test_multiplies("blocks_45_67_78", & group, mp_env, npdims, io_unit, matrix_sizes=(/570, 190, 190/), & sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., & alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), & bs_m=(/1, 45, 1, 67, 1, 78/), bs_n=(/1, 45, 1, 67, 1, 78/), bs_k=(/1, 45, 1, 67, 1, 78/), & limits=(/1, 570, 1, 190, 1, 190/)) ! end of test cases --------------------------------------------------------- ! finalize libdbcsr errors CALL timestop(handle) ! clean mp environment CALL dbcsr_mp_release(mp_env) ! finalize mpi CALL mp_comm_free(group) call dbcsr_print_statistics(.true.) ! finalize libdbcsr CALL dbcsr_finalize_lib() CALL mp_world_finalize() END PROGRAM dbcsr_unittest_3 ================================================ FILE: tests/dbcsr_unittest4.F ================================================ !--------------------------------------------------------------------------------------------------! ! Copyright (C) by the DBCSR developers group - All rights reserved ! ! This file is part of the DBCSR library. ! ! ! ! For information on the license, see the LICENSE file. ! ! For further information please visit https://dbcsr.cp2k.org ! ! SPDX-License-Identifier: GPL-2.0+ ! !--------------------------------------------------------------------------------------------------! PROGRAM dbcsr_unittest !! Tests for DBCSR operations USE dbcsr_kinds, ONLY: dp USE dbcsr_lib, ONLY: dbcsr_finalize_lib, & dbcsr_init_lib, & dbcsr_print_statistics USE dbcsr_machine, ONLY: default_output_unit USE dbcsr_mp_methods, ONLY: dbcsr_mp_new, & dbcsr_mp_release USE dbcsr_mpiwrap, ONLY: mp_cart_create, & mp_cart_rank, & mp_comm_free, & mp_environ, & mp_world_finalize, & mp_world_init, mp_comm_type USE dbcsr_test_add, ONLY: dbcsr_test_adds USE dbcsr_test_methods, ONLY: dbcsr_reset_randmat_seed USE dbcsr_test_scale_by_vector, ONLY: dbcsr_test_scale_by_vectors USE dbcsr_types, ONLY: dbcsr_mp_obj #include "base/dbcsr_base_uses.f90" IMPLICIT NONE INTEGER :: numnodes, mynode, & prow, pcol, io_unit, handle INTEGER, DIMENSION(2) :: npdims, myploc INTEGER, DIMENSION(:, :), POINTER :: pgrid TYPE(dbcsr_mp_obj) :: mp_env LOGICAL :: success TYPE(mp_comm_type) :: mp_comm, group CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_unittest' ! initialize mpi CALL mp_world_init(mp_comm) ! setup the mp environment npdims(:) = 0 CALL mp_cart_create(mp_comm, 2, npdims, myploc, group) CALL mp_environ(numnodes, mynode, group) ALLOCATE (pgrid(0:npdims(1) - 1, 0:npdims(2) - 1)) DO prow = 0, npdims(1) - 1 DO pcol = 0, npdims(2) - 1 CALL mp_cart_rank(group, (/prow, pcol/), pgrid(prow, pcol)) END DO END DO CALL dbcsr_mp_new(mp_env, group, pgrid, mynode, numnodes, & myprow=myploc(1), mypcol=myploc(2)) DEALLOCATE (pgrid) ! set standard output parameters io_unit = 0 IF (mynode .EQ. 0) io_unit = default_output_unit ! initialize DBCSR CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit) ! start measuring the complete test CALL timeset(routineN, handle) CALL dbcsr_reset_randmat_seed() ! run tests success = .TRUE. success = dbcsr_test_scale_by_vectors("scale_by_vector_symmetric", & group, mp_env, npdims, io_unit, matrix_size=[20, 20], & sparsity=0.5_dp, bs_m=[1, 4], bs_n=[1, 4], do_exact_comparison=.FALSE.) & .AND. success ! specific reproducers of https://github.com/cp2k/dbcsr/issues/362 ! the first one gives wrong results when scaling success = dbcsr_test_scale_by_vectors("scale_by_vector_asymm_exact1", & group, mp_env, npdims, io_unit, matrix_size=[30, 20], & sparsity=0.0_dp, bs_m=[1, 4], bs_n=[1, 4], do_exact_comparison=.TRUE.) & .AND. success ! the second one triggers segfaults without the fix success = dbcsr_test_scale_by_vectors("scale_by_vector_asymm_exact2", & group, mp_env, npdims, io_unit, matrix_size=[20, 30], & sparsity=0.0_dp, bs_m=[1, 4], bs_n=[1, 4], do_exact_comparison=.TRUE.) & .AND. success CALL timestop(handle) ! clean mp environment CALL dbcsr_mp_release(mp_env) ! finalize mpi CALL mp_comm_free(group) call dbcsr_print_statistics(.true.) ! finalize libdbcsr CALL dbcsr_finalize_lib() CALL mp_world_finalize() ! finalize libdbcsr errors IF (.NOT. success) & ERROR STOP "one or more tests failed" END PROGRAM dbcsr_unittest ================================================ FILE: tests/generate_libsmm_acc_timer_multiply.py ================================================ #!/usr/bin/env python3 # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### import os import random import json import argparse def format_to_cpp(kernels): """Given a list of kernels represented as dictionaries, return a string representing them as C++ vector of vectors using initializer lists""" kernels = sorted(kernels, key=lambda k: (k["m"], k["n"], k["k"])) out = "" init_list_line = " {{{m:>2}, {n:>2}, {k:>2}}},\n" for k in kernels: out += init_list_line.format(m=k["m"], n=k["n"], k=k["k"]) return out # =============================================================================== def main( dbcsr_base_dir, libsmm_acc_base_dir, test_template_dir, test_output_dir, gpu_version, nsamples, ): """ Generate a performance test of libsmm_acc in the form of a CUDA or HIP file, using libsmm_acc_timer_multiply.cpp.template as a template """ # Read parameter file print("GPU version: {}".format(gpu_version)) param_fn = os.path.join( libsmm_acc_base_dir, os.path.join("parameters", "parameters_{}.json".format(gpu_version)), ) with open(param_fn, "r") as f: all_kernels = json.load(f) # Get the autotuned kernels to test autotuned_kernels = [k for k in all_kernels if k["source"] == "autotuned"] print("Found {:,} autotuned kernels".format(len(autotuned_kernels))) kernels_to_print_autotuned = format_to_cpp(autotuned_kernels) # Get the non-autotuned kernels to test predicted_kernels = [k for k in all_kernels if k["source"] != "autotuned"] print("Found {:,} predicted kernels".format(len(predicted_kernels))) num_predicted_kernels = len(predicted_kernels) if num_predicted_kernels > 0: if nsamples >= num_predicted_kernels: nsamples = num_predicted_kernels kernels_to_test_predicted = random.sample(predicted_kernels, nsamples) kernels_to_print_predicted = format_to_cpp(kernels_to_test_predicted) else: kernels_to_test_predicted = list() kernels_to_print_predicted = "" # Print to test file file_template = os.path.join( test_template_dir, "libsmm_acc_timer_multiply.cpp.template" ) file_generate = os.path.join(test_output_dir, "libsmm_acc_timer_multiply.cpp") with open(file_template, "r") as f: test = f.read() test = test.replace( "[[AUTOTUNED_KERNELS_HERE]]", kernels_to_print_autotuned.lstrip() ) test = test.replace( "[[PREDICTED_KERNELS_HERE]]", kernels_to_print_predicted.lstrip() ) with open(file_generate, "w") as f: f.write(test) print( "Wrote {:,} test kernels to {}".format( len(autotuned_kernels + kernels_to_test_predicted), file_generate ) ) # =============================================================================== if __name__ == "__main__": parser = argparse.ArgumentParser( description=""" Generate a performance test of libsmm_acc in the form of a CUDA or HIP file, using libsmm_acc_timer_multiply.cpp.template as a template """, formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) parser.add_argument( "-f", "--base_dir", metavar="DBCSRHOME", default="", help="DBCSR base directory" ) parser.add_argument( "-o", "--out_dir", metavar="OUTDIR", default="tests", help="Directory in which to write the generated test files. Expressed relatively to base_dir", ) parser.add_argument( "-g", "--gpu_version", metavar="GPU_VERSION", default="P100", help="GPU card version, used to select the appropriate libsmm_acc parameters file", ) parser.add_argument( "-n", "--nsamples", default=1000, help=( "Number of samples from the matrix sizes space 4 <= m,n,k <= 45 (except autotuned kernels)" " to sample for performance testing" ), ) args = parser.parse_args() # Folders in/to which to read/write files libsmm_acc_base_dir = os.path.join(args.base_dir, "src/acc/libsmm_acc") test_template_dir = os.path.join(args.base_dir, "tests") test_output_dir = os.path.join(args.base_dir, args.out_dir) main( args.base_dir, libsmm_acc_base_dir, test_template_dir, test_output_dir, args.gpu_version, args.nsamples, ) ================================================ FILE: tests/generate_libsmm_acc_unittest_multiply.py ================================================ #!/usr/bin/env python3 # -*- coding: utf-8 -*- #################################################################################################### # Copyright (C) by the DBCSR developers group - All rights reserved # # This file is part of the DBCSR library. # # # # For information on the license, see the LICENSE file. # # For further information please visit https://dbcsr.cp2k.org # # SPDX-License-Identifier: GPL-2.0+ # #################################################################################################### import os import random import json import argparse def format_to_cpp(kernels): """Given a list of kernels represented as dictionaries, return a string representing them as C++ vector of vectors using initializer lists""" kernels = sorted(kernels, key=lambda k: (k["m"], k["n"], k["k"])) out = "" init_list_line = " {{{m:>2}, {n:>2}, {k:>2}}},\n" for k in kernels: out += init_list_line.format(m=k["m"], n=k["n"], k=k["k"]) return out # =============================================================================== def main( dbcsr_base_dir, libsmm_acc_base_dir, test_template_dir, test_output_dir, gpu_version, nsamples, ): """ Generate a performance test of libsmm_acc in the form of a CUDA or HIP file, using libsmm_acc_unittest_multiply.cpp.template as a template """ # Read parameter file print("GPU version: {}".format(gpu_version)) param_fn = os.path.join( libsmm_acc_base_dir, os.path.join("parameters", "parameters_{}.json".format(gpu_version)), ) with open(param_fn, "r") as f: all_kernels = json.load(f) # Get the autotuned kernels to test autotuned_kernels = [k for k in all_kernels if k["source"] == "autotuned"] print("Found {:,} autotuned kernels".format(len(autotuned_kernels))) # Get the non-autotuned kernels to test predicted_kernels = [k for k in all_kernels if k["source"] != "autotuned"] print("Found {:,} predicted kernels".format(len(predicted_kernels))) num_predicted_kernels = len(predicted_kernels) if num_predicted_kernels > 0: if nsamples >= num_predicted_kernels: nsamples = num_predicted_kernels kernels_to_test_predicted = random.sample(predicted_kernels, nsamples) else: kernels_to_test_predicted = list() kernels_to_print = format_to_cpp(autotuned_kernels + kernels_to_test_predicted) # Print to test file file_template = os.path.join( test_template_dir, "libsmm_acc_unittest_multiply.cpp.template" ) file_generate = os.path.join(test_output_dir, "libsmm_acc_unittest_multiply.cpp") with open(file_template, "r") as f: test = f.read() test = test.replace("[[UNITTEST_KERNELS_HERE]]", kernels_to_print.lstrip()) with open(file_generate, "w") as f: f.write(test) print("Wrote {:,} test kernels to {}".format(len(kernels_to_print), file_generate)) # =============================================================================== if __name__ == "__main__": parser = argparse.ArgumentParser( description=""" Generate a performance test of libsmm_acc in the form of a CUDA or HIP file, using libsmm_acc_unittest_multiply.cpp.template as a template """, formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) parser.add_argument( "-f", "--base_dir", metavar="DBCSRHOME", default="", help="DBCSR base directory" ) parser.add_argument( "-o", "--out_dir", metavar="OUTDIR", default="./tests", help="Directory in which to write the generated test files", ) parser.add_argument( "-g", "--gpu_version", metavar="GPU_VERSION", default="P100", help="GPU card version, used to select the appropriate libsmm_acc parameters file", ) parser.add_argument( "-n", "--nsamples", default=1000, help=( "Number of samples from the matrix sizes space 4 <= m,n,k <= 45 (except autotuned kernels)" " to sample for performance testing" ), ) args = parser.parse_args() # Folders in/to which to read/write files libsmm_acc_base_dir = os.path.join(args.base_dir, "src/acc/libsmm_acc/") test_template_dir = os.path.join(args.base_dir, "tests") test_output_dir = os.path.join(args.base_dir, args.out_dir) main( args.base_dir, libsmm_acc_base_dir, test_template_dir, test_output_dir, args.gpu_version, args.nsamples, ) ================================================ FILE: tests/input.perf ================================================ # Template Input File for DBCSR Performance Driver # ----------------------------------------------------------------------- # npcols MPI grid # - 0 leaves MPI to find the best grid. # - Note that the total number of processors must be divisible per npcols 0 # use MPI-RMA F # operation dbcsr_multiply # matrix sizes (M, N, K) 1000 1000 1000 # sparsity (matrix A, matrix B, matrix C) 0.0d0 0.0d0 0.0d0 # transposes N N # symmetries N N N # data type # - 3: double # - other types, see "Type definitions" in dbcsr/src/data/dbcsr_data_types.F 3 # alpha (real, imag) 1.0d0 0.0d0 # beta (real, imag) 1.0d0 0.0d0 # limits # - 0 means full size # - row # -- limRowL (First full row of limiting submatrix) 0 # -- limRowU 0 # - col # -- limColL (First full col of limiting submatrix) 0 # -- limColU 0 # - k # -- limKL first full col of imiting inner product) 0 # -- limKU 0 # retain sparsity (T/F) F # number of repetitions 1 # number of different blocks to read (m, n, k) 1 1 1 # the m blocks (multiplicity, block size, ...) # - this configuration, eg, will generate blocks of # - size 5 in the m-dimension 1 5 # - this configuration would generate a block of # - size 5 followed by 2 blocks of size 3 in the m-dimension, # - followed by a block of size 5, etc. until size M is reached # - 1 # - 5 # - 2 # - 3 # the n blocks (multiplicity, block size, ...) 1 5 # the k blocks (multiplicity, block size, ...) 1 5 # checksum (check, threshold, references) F 0. 0. 0. ================================================ FILE: tests/inputs/test_H2O.perf ================================================ # npcols MPI grid, 0 leaves MPI to find the best grid. # Note that the total number of processors must be divisible per npcols 0 # Use MPI-RMA F # operation dbcsr_multiply # matrix sizes (M, N, K) 2208 2208 2208 # sparsity (A, B, C) 0.2d0 0.2d0 0.2d0 # transposes N N # symmetries N N N # data type 3 # alpha (real, imag) 1.0d0 0.0d0 # beta (real, imag) 1.0d0 0.0d0 # limits (0 means full size) # row 0 0 # col 0 0 # k 0 0 # retain sparsity (T/F) F # number of repetitions 50 # number of different blocks to read (m, n, k) 1 1 1 # the m blocks (multiplicity, block size, ...) 1 23 # the n blocks (multiplicity, block size, ...) 1 23 # the k blocks (multiplicity, block size, ...) 1 23 # checksum (check, threshold, references) F 0. 0. 0. ================================================ FILE: tests/inputs/test_rect1_dense.perf ================================================ # npcols MPI grid, 0 leaves MPI to find the best grid. # Note that the total number of processors must be divisible per npcols 1 # Use MPI-RMA F # operation dbcsr_multiply # matrix sizes (M, N, K) 1000 100 100 # sparsity (A, B, C) 0.0d0 0.0d0 0.0d0 # transposes N N # symmetries N N N # data type 3 # alpha (real, imag) 1.0d0 0.0d0 # beta (real, imag) 1.0d0 0.0d0 # limits (0 means full size) # row 0 0 # col 0 0 # k 0 0 # retain sparsity (T/F) F # number of repetitions 10 # number of different blocks to read (m, n, k) 1 1 1 # the m blocks (multiplicity, block size, ...) 1 5 # the n blocks (multiplicity, block size, ...) 1 5 # the k blocks (multiplicity, block size, ...) 1 5 # checksum (check, threshold, references) T 0.1E-10 0.675410189104774E+08 0.247302643276505E+08 ================================================ FILE: tests/inputs/test_rect1_sparse.perf ================================================ # npcols MPI grid, 0 leaves MPI to find the best grid. # Note that the total number of processors must be divisible per npcols 1 # Use MPI-RMA F # operation dbcsr_multiply # matrix sizes (M, N, K) 5000 1000 1000 # sparsity (A, B, C) 0.9d0 0.9d0 0.9d0 # transposes N N # symmetries N N N # data type 3 # alpha (real, imag) 1.0d0 0.0d0 # beta (real, imag) 1.0d0 0.0d0 # limits (0 means full size) # row 0 0 # col 0 0 # k 0 0 # retain sparsity (T/F) F # number of repetitions 10 # number of different blocks to read (m, n, k) 1 1 1 # the m blocks (multiplicity, block size, ...) 1 5 # the n blocks (multiplicity, block size, ...) 1 5 # the k blocks (multiplicity, block size, ...) 1 5 # checksum (check, threshold, references) T 0.1E-10 0.515505547242877E+08 0.173182002166628E+09 ================================================ FILE: tests/inputs/test_rect2_dense.perf ================================================ # npcols MPI grid, 0 leaves MPI to find the best grid. # Note that the total number of processors must be divisible per npcols 1 # Use MPI-RMA F # operation dbcsr_multiply # matrix sizes (M, N, K) 100 100 1000 # sparsity (A, B, C) 0.0d0 0.0d0 0.0d0 # transposes T N # symmetries N N N # data type 3 # alpha (real, imag) 1.0d0 0.0d0 # beta (real, imag) 1.0d0 0.0d0 # limits (0 means full size) # row 0 0 # col 0 0 # k 0 0 # retain sparsity (T/F) F # number of repetitions 10 # number of different blocks to read (m, n, k) 1 1 1 # the m blocks (multiplicity, block size, ...) 1 5 # the n blocks (multiplicity, block size, ...) 1 5 # the k blocks (multiplicity, block size, ...) 1 5 # checksum (check, threshold, references) T 0.1E-10 0.628267155865818E+09 0.182181529654306E+08 ================================================ FILE: tests/inputs/test_rect2_sparse.perf ================================================ # npcols MPI grid, 0 leaves MPI to find the best grid. # Note that the total number of processors must be divisible per npcols 1 # Use MPI-RMA F # operation dbcsr_multiply # matrix sizes (M, N, K) 1000 1000 5000 # sparsity (A, B, C) 0.9d0 0.9d0 0.9d0 # transposes T N # symmetries N N N # data type 3 # alpha (real, imag) 1.0d0 0.0d0 # beta (real, imag) 1.0d0 0.0d0 # limits (0 means full size) # row 0 0 # col 0 0 # k 0 0 # retain sparsity (T/F) F # number of repetitions 10 # number of different blocks to read (m, n, k) 1 1 1 # the m blocks (multiplicity, block size, ...) 1 5 # the n blocks (multiplicity, block size, ...) 1 5 # the k blocks (multiplicity, block size, ...) 1 5 # checksum (check, threshold, references) T 0.1E-10 0.176967186312957E+09 0.149098274728932E+09 ================================================ FILE: tests/inputs/test_singleblock.perf ================================================ # npcols MPI grid, 0 leaves MPI to find the best grid. # Note that the total number of processors must be divisible per npcols 0 # Use MPI-RMA F # operation dbcsr_multiply # matrix sizes (M, N, K) 50 50 50 # sparsity (A, B, C) 0.0d0 0.0d0 0.0d0 # transposes N N # symmetries N N N # data type 3 # alpha (real, imag) 1.0d0 0.0d0 # beta (real, imag) 1.0d0 0.0d0 # limits (0 means full size) # row 0 0 # col 0 0 # k 0 0 # retain sparsity (T/F) F # number of repetitions 10 # number of different blocks to read (m, n, k) 1 1 1 # the m blocks (multiplicity, block size, ...) 1 50 # the n blocks (multiplicity, block size, ...) 1 50 # the k blocks (multiplicity, block size, ...) 1 50 # checksum (check, threshold, references) T 0.1E-10 0.418186760034529E+06 0.190157258297048E+06 ================================================ FILE: tests/inputs/test_square_dense.perf ================================================ # npcols MPI grid, 0 leaves MPI to find the best grid. # Note that the total number of processors must be divisible per npcols 0 # Use MPI-RMA F # operation dbcsr_multiply # matrix sizes (M, N, K) 100 100 100 # sparsity (A, B, C) 0.0d0 0.0d0 0.0d0 # transposes N N # symmetries N N N # data type 3 # alpha (real, imag) 1.0d0 0.0d0 # beta (real, imag) 1.0d0 0.0d0 # limits (0 means full size) # row 0 0 # col 0 0 # k 0 0 # retain sparsity (T/F) F # number of repetitions 10 # number of different blocks to read (m, n, k) 1 1 1 # the m blocks (multiplicity, block size, ...) 1 5 # the n blocks (multiplicity, block size, ...) 1 5 # the k blocks (multiplicity, block size, ...) 1 5 # checksum (check, threshold, references) T 0.1E-10 0.673287171736802E+07 0.188077024338804E+07 ================================================ FILE: tests/inputs/test_square_sparse.perf ================================================ # npcols MPI grid, 0 leaves MPI to find the best grid. # Note that the total number of processors must be divisible per npcols 0 # Use MPI-RMA F # operation dbcsr_multiply # matrix sizes (M, N, K) 1000 1000 1000 # sparsity (A, B, C) 0.9d0 0.9d0 0.9d0 # transposes N N # symmetries N N N # data type 3 # alpha (real, imag) 1.0d0 0.0d0 # beta (real, imag) 1.0d0 0.0d0 # limits (0 means full size) # row 0 0 # col 0 0 # k 0 0 # retain sparsity (T/F) F # number of repetitions 10 # number of different blocks to read (m, n, k) 1 1 1 # the m blocks (multiplicity, block size, ...) 1 5 # the n blocks (multiplicity, block size, ...) 1 5 # the k blocks (multiplicity, block size, ...) 1 5 # checksum (check, threshold, references) T 0.1E-10 0.996149460464712E+07 0.299382963262912E+08 ================================================ FILE: tests/inputs/test_square_sparse_bigblocks.perf ================================================ # npcols MPI grid, 0 leaves MPI to find the best grid. # Note that the total number of processors must be divisible per npcols 0 # Use MPI-RMA F # operation dbcsr_multiply # matrix sizes (M, N, K) 10000 1000 1000 # sparsity (A, B, C) 0.9d0 0.9d0 0.9d0 # transposes N N # symmetries N N N # data type 3 # alpha (real, imag) 1.0d0 0.0d0 # beta (real, imag) 1.0d0 0.0d0 # limits (0 means full size) # row 0 0 # col 0 0 # k 0 0 # retain sparsity (T/F) F # number of repetitions 10 # number of different blocks to read (m, n, k) 1 1 1 # the m blocks (multiplicity, block size, ...) 1 100 # the n blocks (multiplicity, block size, ...) 1 50 # the k blocks (multiplicity, block size, ...) 1 20 # checksum (check, threshold, references) T 0.1E-10 0.179511893085946E+09 0.349170005426525E+09 ================================================ FILE: tests/inputs/test_square_sparse_rma.perf ================================================ # npcols MPI grid, 0 leaves MPI to find the best grid. # Note that the total number of processors must be divisible per npcols 0 # Use MPI-RMA T # operation dbcsr_multiply # matrix sizes (M, N, K) 1000 1000 1000 # sparsity (A, B, C) 0.9d0 0.9d0 0.9d0 # transposes N N # symmetries N N N # data type 3 # alpha (real, imag) 1.0d0 0.0d0 # beta (real, imag) 1.0d0 0.0d0 # limits (0 means full size) # row 0 0 # col 0 0 # k 0 0 # retain sparsity (T/F) F # number of repetitions 10 # number of different blocks to read (m, n, k) 1 1 1 # the m blocks (multiplicity, block size, ...) 1 5 # the n blocks (multiplicity, block size, ...) 1 5 # the k blocks (multiplicity, block size, ...) 1 5 # checksum (check, threshold, references) T 0.1E-10 0.996149460464712E+07 0.299382963262912E+08 ================================================ FILE: tests/libsmm_acc_timer_multiply.cpp.template ================================================ /*------------------------------------------------------------------------------------------------* * Copyright (C) by the DBCSR developers group - All rights reserved * * This file is part of the DBCSR library. * * * * For information on the license, see the LICENSE file. * * For further information please visit https://dbcsr.cp2k.org * * SPDX-License-Identifier: GPL-2.0+ * *------------------------------------------------------------------------------------------------*/ #include #include #include #include #include #include "libsmm_acc_benchmark.h" #include "libsmm_acc.h" std::vector combinations(std::vector to_combine) { std::vector v; size_t len = to_combine.size(); for (size_t i=0; i0 with n being the number of errors, 0 otherwise \****************************************************************************/ int main(int argc, char* argv[]) { if (argc < 2) { printf("Usage: %s \n", argv[0]); return -1; } printf("Time kernels: %s\n", argv[1]); std::vector libsmm_acc_triplets; if (argv[1] == std::string("autotuned")) { libsmm_acc_triplets = { [[AUTOTUNED_KERNELS_HERE]] }; } else if (argv[1] == std::string("predicted")) { libsmm_acc_triplets = { [[PREDICTED_KERNELS_HERE]] }; } else { printf("Unrecognized option: %s, exiting ...\n", argv[1]); return -1; } // Build benchmark KernelLauncher launcher = libsmm_acc_process_d; char buffer[1000]; char * kernel_descr[1] = {buffer}; int n_triplets = libsmm_acc_triplets.size(); printf("# Time %d blocksizes ...\n", n_triplets); int errors = 0; libsmm_acc_benchmark_t* handle; for (int i=0; i #include #include #include #include "libsmm_acc_benchmark.h" #include "libsmm_acc.h" /****************************************************************************\ \brief Checks correctness of randomly selected libsmm_acc multiplication kernels \****************************************************************************/ int main(int argc, char** argv) { DBCSR_MARK_USED(argc); DBCSR_MARK_USED(argv); KernelLauncher launcher_mm = libsmm_acc_process_d; char buffer[1000]; char * kernel_descr[1] = {buffer}; // Get all blocksizes available in libsmm_acc std::vector libsmm_acc_triplets = { [[UNITTEST_KERNELS_HERE]] }; int n_triplets = libsmm_acc_triplets.size(); printf("# libsmm_acc has %d blocksizes for multiplication\n", n_triplets); int max_m=0, max_n=0, max_k=0; for (int i=0; i #include #include #include #include #include #include "libsmm_acc_benchmark.h" #include "libsmm_acc.h" /****************************************************************************\ \brief Checks correctness of all libsmm transpose kernels \****************************************************************************/ int main(int argc, char** argv) { DBCSR_MARK_USED(argc); DBCSR_MARK_USED(argv); TransposeLauncher launcher_tr = libsmm_acc_transpose_d; char buffer[1000]; char* kernel_descr[1] = {buffer}; // Get all blocksizes available in libsmm std::vector libsmm_acc_triplets; extern const std::unordered_map ht; get_libsmm_acc_triplets(libsmm_acc_triplets, ht); int n_triplets = libsmm_acc_triplets.size(); int max_m = 0, max_n = 0, max_k = 0; for (int i = 0; i < n_triplets; i++) { max_m = std::max(max_n, libsmm_acc_triplets[i][0]); max_n = std::max(max_m, libsmm_acc_triplets[i][1]); max_k = std::max(max_k, libsmm_acc_triplets[i][2]); } libsmm_acc_benchmark_t* handle; libsmm_acc_benchmark_init(&handle, test, max_m, max_n, max_k); // Get (m,n) pairs to test transposition std::vector> libsmm_acc_transpose_pairs; for (int i = 0; i < n_triplets; i++) { int m = libsmm_acc_triplets[i][0]; int n = libsmm_acc_triplets[i][1]; int k = libsmm_acc_triplets[i][2]; libsmm_acc_transpose_pairs.push_back(std::make_pair(m, k)); libsmm_acc_transpose_pairs.push_back(std::make_pair(k, n)); } std::sort(libsmm_acc_transpose_pairs.begin(), libsmm_acc_transpose_pairs.end(), [](std::pair a, std::pair b) { return (a.first > b.first) || (a.first == b.first && a.second > b.second); }); auto last = std::unique(libsmm_acc_transpose_pairs.begin(), libsmm_acc_transpose_pairs.end()); libsmm_acc_transpose_pairs.erase(last, libsmm_acc_transpose_pairs.end()); int n_pairs = libsmm_acc_transpose_pairs.size(); printf("# libsmm_acc has %d blocksizes for transposition\n", n_pairs); // Sort (m,n) pairs in growing order std::sort( libsmm_acc_transpose_pairs.begin(), libsmm_acc_transpose_pairs.end(), [](std::pair mn1, std::pair mn2) { if (mn1.first != mn2.first) { return mn1.first < mn2.first; } else { return mn1.second < mn2.second; } }); int errors = 0; for (int i = 0; i < n_pairs; i++) { int m = libsmm_acc_transpose_pairs[i].first; int n = libsmm_acc_transpose_pairs[i].second; sprintf(buffer, "%d x %d", m, n); errors += libsmm_acc_benchmark_transpose(handle, m, n, &launcher_tr, kernel_descr); } libsmm_acc_benchmark_finalize(handle); printf("# Done, found %d transpose errors.\n", errors); return errors; } ================================================ FILE: tools/build_libsmm/COPYRIGHT ================================================ !==================================================================================================================== ! * Copyright (c) 2015 Joost VandeVondele and Alfio Lazzaro ! * All rights reserved. ! * ! * Redistribution and use in source and binary forms, with or without ! * modification, are permitted provided that the following conditions are met: ! * * Redistributions of source code must retain the above copyright ! * notice, this list of conditions and the following disclaimer. ! * * Redistributions in binary form must reproduce the above copyright ! * notice, this list of conditions and the following disclaimer in the ! * documentation and/or other materials provided with the distribution. ! * ! * THIS SOFTWARE IS PROVIDED BY Joost VandeVondele ''AS IS'' AND ANY ! * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ! * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ! * DISCLAIMED. IN NO EVENT SHALL Joost VandeVondele BE LIABLE FOR ANY ! * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ! * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ! * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ! * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ! * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ! * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ! * !==================================================================================================================== ================================================ FILE: tools/build_libsmm/README ================================================ libsmm: a library for small matrix multiplies. In order to deal efficiently with small matrix multiplies, often involving 'special' matrix dimensions such as 5,13,17,22, a dedicated matrix library can be generated that outperforms (or matches) general purpose (optimized) blas libraries. Generation requires extensive compilation and timing runs, and is machine specific, i.e. the library should be constructed on the architecture it is supposed to run. Users can modify the values inside the file config.in to set which kind of library they want to generate. Furthermore, they can modify (or add) the files inside the config directory to set the compiler options used to build the library. They can use the existing files as template. There are several options for building the library. Run ./generate -h to see them. Below you can find the detailed instructions for some examples. ==================================================================================================================== a) How to generate the library running several jobs in a cluster, where each node allows for both execution and compilation. For this example we will use a CRAY system with GNU compiler and SLURM. Run "./generate -h" to see the meaning of the options. 1) Run: ./generate -c config/cray.gnu -j 100 -t 16 -w slurm tiny1 This command submits 100 jobs in batch. Wait until their completion. 2) Run: ./generate -c config/cray.gnu tiny2 This command collects all results produced in the tiny1 phase and it generates a file tiny_gen_optimal_dnn_cray.gnu.out 3) As done in 1) and 2), run: ./generate -c config/cray.gnu -j 20 -t 16 -w slurm small1 This command submits 20 jobs in batch. Wait until their completion. Then run: ./generate -c config/cray.gnu small2 This command collects all results produced in the small1 phase and it generates a file small_gen_optimal_dnn_cray.gnu.out 4) Run: ./generate -c config/cray.gnu -t 16 -w slurm lib This commman submit in batch a single job that compiles the library. At the end the library is produced inside the directory lib/ (libsmm_dnn_cray.gnu.a). 5) It is highly recommended to run the final test to check the correctness of the library. Run: ./generate -c config/cray.gnu -j 20 -w slurm check1 After the batch jobs completion, run: ./generate -c config/cray.gnu -j 20 check2 Note that it is important to use the same number of jobs specified in check1 phase. Finally check test_smm_dnn_cray.gnu.out for performance and correctness. 6) Intermediate files (but not some key output and the library itself) might be removed using ./generate clean ==================================================================================================================== b) How to generate the library running a single job interactively. For this example we will use a Linux system with GNU compiler. Run "./generate -h" to see the meaning of the options. 1) Run: ./generate -c config/linux.gnu -j 10 -t 16 -w none tiny1 This command generates, compiles and executes the tiny kernels in 10 groups. Please increase the number of groups (-j <#> option) if you get the error "Argument list too long". 2) Run: ./generate -c config/linux.gnu tiny2 This command collects all results produced in the tiny1 phase and it generates a file tiny_gen_optimal_dnn_linux.gnu.out 3) Run: ./generate -c config/linux.gnu -j 0 -t 16 small1 This command generates a file small_gen_optimal_dnn_linux.gnu.out 4) Run: ./generate -c config/linux.gnu -j 0 -t 16 -w slurm lib This command produces the llibrary inside the directory lib/ (libsmm_dnn_linux.gnu.a). 5) It is highly recommended to run the final test to check the correctness of the library. Run: ./generate -c config/linux.gnu -j 0 -w slurm check1 Finally check test_smm_dnn_linux.gnu.out for performance and correctness. 6) Intermediate files (but not some key output and the library itself) might be removed using ./generate clean ==================================================================================================================== c) How to generate the library for the Intel Xeon Phi in batch mode. For this example we will use a cluster with SLURM, where each node has a Intel Xeon Phi card. Run "./generate -h" to see the meaning of the options. We use the config file mic.intel (inside the directory config). Check if all options are OK for your case, in particular: - the target_compile variable with the flag "-offload-attribute-target=mic". - the target_compile_offload variable with the flag "-offload=mandatory". - Set the MIC_OMP_NUM_THREADS variable to the number of cores on the card. Note that the library is produced by offloading the kernels to the Xeon Phi. Performance output files are written in the same directory where the library is executed on the host, therefore this directory must be exported to the Xeon Phi with the right permission (read/write). 1) Run: ./generate -c config/mic.intel -j 100 -t 16 -w slurm tiny1 This command submits 100 jobs in batch. Each job offloads executions to the Intel Xeon Phi card (MIC_OMP_NUM_THREADS threads). Wait until completion of all jobs. 2) Run: ./generate -c config/mic.intel tiny2 This command collects all results of the tiny1 phase and it generates the file tiny_gen_optimal_dnn_mic.intel.out. 3) As done in 1) and 2), run: ./generate -c config/mic.intel -j 100 -t 16 -w slurm small1 This command submits 100 jobs in batch, where each job offloads executions to the Intel Xeon Phi card (MIC_OMP_NUM_THREADS threads). Wait until their completion. Then run: ./generate -c config/mic.intel small2 This command collects all results produced in the small1 phase and it generates a file small_gen_optimal_dnn_mic.intel.out 4) Run: ./generate -c config/mic.intel -t 16 -w slurm lib This commman submit in batch a single job that compiles the library. At the end the library is produced inside the directory lib/ (libsmm_dnn_mic.intel.a). 5) It is highly recommended to run the final test to check the correctness of the library. Run: ./generate -c config/mic.intel -j 200 -w slurm check1 After the batch jobs completion, run: ./generate -c config/mic.intel -j 200 check2 Note that it is important to use the same number of jobs specified in check1 phase. Finally check test_smm_dnn_mic.intel.out for performance and correctness. 6) Intermediate files (but not some key output and the library itself) might be removed using ./generate clean The following copyright covers code and generated library !==================================================================================================================== ! * Copyright (c) 2015 Joost VandeVondele and Alfio Lazzaro ! * All rights reserved. ! * ! * Redistribution and use in source and binary forms, with or without ! * modification, are permitted provided that the following conditions are met: ! * * Redistributions of source code must retain the above copyright ! * notice, this list of conditions and the following disclaimer. ! * * Redistributions in binary form must reproduce the above copyright ! * notice, this list of conditions and the following disclaimer in the ! * documentation and/or other materials provided with the distribution. ! * ! * THIS SOFTWARE IS PROVIDED BY Joost VandeVondele ''AS IS'' AND ANY ! * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ! * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ! * DISCLAIMED. IN NO EVENT SHALL Joost VandeVondele BE LIABLE FOR ANY ! * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ! * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ! * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ! * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ! * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ! * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ! * !==================================================================================================================== ================================================ FILE: tools/build_libsmm/config/cray.cce ================================================ # Author: Alfio Lazzaro, alazzaro@cray.com (2013) # Use: module load PrgEnv-cray # Remember to remove any module specific for GPU, e.g. module unload craype-accel-nvidia35 cudatoolkit # # target compiler... these are the options used for building the library. # They should be aggessive enough to e.g. perform vectorization for the specific CPU (e.g. -ftree-vectorize -march=native), # and allow some flexibility in reordering floating point expressions (-ffast-math). # Higher level optimisation (in particular loop nest optimization) should not be used. # target_compile="ftn -O2 -hfp3 -hnodwarf -Onopattern -hvector1 -eF -ffree" # # target dgemm link options... these are the options needed to link blas (e.g. -lblas) # blas is used as a fall back option for sizes not included in the library or in those cases where it is faster # the same blas library should thus also be used when libsmm is linked. # # Use libsci when using ftn, therefore no need to set blas_linking # # # host compiler... this is used only to compile a few tools needed to build # the library. The library itself is not compiled this way. # This compiler needs to be able to deal with some Fortran2003 constructs. # host_compile="gfortran-4.6 -O2" # # Show affinity mask # export CRAY_OMP_CHECK_AFFINITY=TRUE # # Set the aprun command and its options for batch submission # aprun_cmd="aprun -n 1 -N 1 -d ${ntasks} -r 1" ================================================ FILE: tools/build_libsmm/config/cray.gnu ================================================ # Author: Alfio Lazzaro, alazzaro@cray.com (2013) # Use: module load PrgEnv-gnu # Remember to remove any module specific for GPU, e.g. module unload craype-accel-nvidia35 cudatoolkit # # target compiler... these are the options used for building the library. # They should be aggessive enough to e.g. perform vectorization for the specific CPU (e.g. -ftree-vectorize -march=native), # and allow some flexibility in reordering floating point expressions (-ffast-math). # Higher level optimisation (in particular loop nest optimization) should not be used. # target_compile="ftn -O2 -funroll-loops -ffast-math -ftree-vectorize -cpp -finline-functions -fopenmp -march=native" # # target dgemm link options... these are the options needed to link blas (e.g. -lblas) # blas is used as a fall back option for sizes not included in the library or in those cases where it is faster # the same blas library should thus also be used when libsmm is linked. # # Use libsci when using ftn, therefore no need to set blas_linking # # # host compiler... this is used only to compile a few tools needed to build # the library. The library itself is not compiled this way. # This compiler needs to be able to deal with some Fortran2003 constructs. # host_compile="gfortran -O2" # # Set the aprun command and its options for batch submission # aprun_cmd="aprun -n 1 -N 1 -d ${ntasks} -r 1" ================================================ FILE: tools/build_libsmm/config/cray.intel.libsci ================================================ # Author: Alfio Lazzaro, alazzaro@cray.com (2013) # Use: module load PrgEnv-intel # Remember to remove any module specific for GPU, e.g. module unload craype-accel-nvidia35 cudatoolkit # # target compiler... these are the options used for building the library. # They should be aggessive enough to e.g. perform vectorization for the specific CPU (e.g. -ftree-vectorize -march=native), # and allow some flexibility in reordering floating point expressions (-ffast-math). # Higher level optimisation (in particular loop nest optimization) should not be used. # target_compile="ftn -O2 -funroll-loops -warn -fpp -finline-functions -nogen-interfaces -openmp -nolib-inline -no-offload" # # target dgemm link options... these are the options needed to link blas (e.g. -lblas) # blas is used as a fall back option for sizes not included in the library or in those cases where it is faster # the same blas library should thus also be used when libsmm is linked. # # Use libsci when using ftn, therefore no need to set blas_linking # # host compiler... this is used only to compile a few tools needed to build # the library. The library itself is not compiled this way. # This compiler needs to be able to deal with some Fortran2003 constructs. # host_compile="ifort -O2" # # Set KMP affinity # export KMP_AFFINITY=verbose,granularity=fine,scatter # # Set the aprun command and its options for batch submission # aprun_cmd="aprun -n 1 -N 1 -d ${ntasks} -r 1 -cc none" ================================================ FILE: tools/build_libsmm/config/cray.intel.mkl ================================================ # Author: Alfio Lazzaro, alazzaro@cray.com (2013) # Use: module load PrgEnv-intel # Remember to remove any module specific for GPU, e.g. module unload craype-accel-nvidia35 cudatoolkit # # target compiler... these are the options used for building the library. # They should be aggessive enough to e.g. perform vectorization for the specific CPU (e.g. -ftree-vectorize -march=native), # and allow some flexibility in reordering floating point expressions (-ffast-math). # Higher level optimisation (in particular loop nest optimization) should not be used. # target_compile="ftn -O2 -funroll-loops -warn -fpp -finline-functions -nogen-interfaces -openmp -nolib-inline -no-offload " # # target dgemm link options... these are the options needed to link blas (e.g. -lblas) # blas is used as a fall back option for sizes not included in the library or in those cases where it is faster # the same blas library should thus also be used when libsmm is linked. # blas_linking="-static-intel -mkl=sequential" # # host compiler... this is used only to compile a few tools needed to build # the library. The library itself is not compiled this way. # This compiler needs to be able to deal with some Fortran2003 constructs. # host_compile="ifort -O2" # # Set KMP affinity # export KMP_AFFINITY=verbose,granularity=fine,scatter # # Set the aprun command and its options for batch submission # aprun_cmd="aprun -n 1 -N 1 -d ${ntasks} -r 1 -cc none" ================================================ FILE: tools/build_libsmm/config/cray_mic.intel ================================================ # Author: Alfio Lazzaro, alazzaro@cray.com (2014) # # This file uses offload mode for the execution of the kernels on the Intel Xeon phi. # Remember to set the variable target_compile_offload. # # target compiler... these are the options used for building the Intel Xeon Phi kernels. # They should be aggessive enough to e.g. perform vectorization, # and allow some flexibility in reordering floating point expressions. # Higher level optimisation (in particular loop nest optimization) should not # be used. # Mandatory to add "-offload-attribute-target=mic" # target_compile="ftn -O2 -funroll-loops -warn -offload-attribute-target=mic -fpp -finline-functions -nogen-interfaces -openmp" # # target compiler used to build the CPU driven code for the offload execution # of the Intel Xeon Phi kernels. # You can reuse most of the flags defined in the target_compile variable. # Replace "-offload-attribute-target=mic" with "-offload=mandatory". # target_compile_offload="ftn -O2 -funroll-loops -warn -offload=mandatory -watch=mic-cmd -fpp -finline-functions -nogen-interfaces -openmp" # # target dgemm link options... these are the options needed to link blas (e.g. -lblas) # blas is used as a fall back option for sizes not included in the library or in those cases where it is faster # the same blas library should thus also be used when libsmm is linked. # blas_linking="-mkl=sequential" # # SIMD registers type (bytes): sse (16), avx (32), knc (64) # SIMD=knc # # Number of threads to be used on the card. # Do not use hyperthreads! # MIC_OMP_NUM_THREADS=58 # # host compiler... this is used only to compile a few tools needed to build # the library. The library itself is not compiled this way. # This compiler needs to be able to deal with some Fortran2003 constructs. # host_compile="ftn -O2" # # Set KMP affinity and other variables # export KMP_AFFINITY=verbose,granularity=fine,scatter export OFFLOAD_REPORT=3 export OMP_STACKSIZE=256M export MIC_STACKSIZE=256M export CRAYPE_LINK_TYPE=dynamic # # Set the aprun command and its options for batch submission # aprun_cmd="aprun -n 1 -N 1 -d ${ntasks} -r 1 -cc none" ================================================ FILE: tools/build_libsmm/config/linux.gnu ================================================ # Author: Alfio Lazzaro, alazzaro@cray.com (2013) # # target compiler... these are the options used for building the library. # They should be aggessive enough to e.g. perform vectorization for the specific CPU (e.g. -ftree-vectorize -march=native), # and allow some flexibility in reordering floating point expressions (-ffast-math). # Higher level optimisation (in particular loop nest optimization) should not be used. # target_compile="gfortran -O2 -funroll-loops -ffast-math -ftree-vectorize -march=native -cpp -finline-functions -fopenmp" # # target dgemm link options... these are the options needed to link blas (e.g. -lblas) # blas is used as a fall back option for sizes not included in the library or in those cases where it is faster # the same blas library should thus also be used when libsmm is linked. # blas_linking="-L${INTEL_PATH}/mkl/lib/intel64 -Wl,--start-group -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -Wl,--end-group" # # host compiler... this is used only to compile a few tools needed to build # the library. The library itself is not compiled this way. # This compiler needs to be able to deal with some Fortran2003 constructs. # host_compile="gfortran -O2" ================================================ FILE: tools/build_libsmm/config/linux.intel ================================================ # Author: Alfio Lazzaro, alazzaro@cray.com (2013) # # target compiler... these are the options used for building the library. # They should be aggessive enough to e.g. perform vectorization for the specific CPU (e.g. -ftree-vectorize -march=native), # and allow some flexibility in reordering floating point expressions (-ffast-math). # Higher level optimisation (in particular loop nest optimization) should not be used. # Note: -fp-model fast=1 is default for the Intel compiler # target_compile="ifort -O2 -funroll-loops -warn -xHost -fpp -finline-functions -nogen-interfaces -openmp -nolib-inline -no-offload" # # target dgemm link options... these are the options needed to link blas (e.g. -lblas) # blas is used as a fall back option for sizes not included in the library or in those cases where it is faster # the same blas library should thus also be used when libsmm is linked. # blas_linking="-static-intel -mkl=sequential" # # host compiler... this is used only to compile a few tools needed to build # the library. The library itself is not compiled this way. # This compiler needs to be able to deal with some Fortran2003 constructs. # host_compile="gfortran -O2" ================================================ FILE: tools/build_libsmm/config/local_libxsmm.gnu ================================================ # Author: Alfio Lazzaro, alfio.lazzaro@mat.ethz.ch (2015) # # target compiler... these are the options used for building the library. # They should be aggessive enough to e.g. perform vectorization for the specific CPU (e.g. -ftree-vectorize -march=native), # and allow some flexibility in reordering floating point expressions (-ffast-math). # Higher level optimisation (in particular loop nest optimization) should not be used. # target_compile="gfortran -O2 -funroll-loops -ffast-math -ftree-vectorize -march=native -cpp -finline-functions -fopenmp" # # target dgemm link options... these are the options needed to link blas (e.g. -lblas) # blas is used as a fall back option for sizes not included in the library or in those cases where it is faster # the same blas library should thus also be used when libsmm is linked. # blas_linking="-L${CP2KINSTALLDIR}/lib -lrefblas" # # host compiler... this is used only to compile a few tools needed to build # the library. The library itself is not compiled this way. # This compiler needs to be able to deal with some Fortran2003 constructs. # host_compile="gfortran -O2" # # include libxsmm (absolute path) # libxsmm_dir=/data/lazzaral/new_libsmm/libxsmm-1.0 ================================================ FILE: tools/build_libsmm/config/mic.intel ================================================ # Author: Alfio Lazzaro, alazzaro@cray.com (2014) # # This file uses offload mode for the execution of the kernels on the Intel Xeon phi. # Remember to set the variable target_compile_offload. # # target compiler... these are the options used for building the Intel Xeon Phi kernels. # They should be aggessive enough to e.g. perform vectorization, # and allow some flexibility in reordering floating point expressions. # Higher level optimisation (in particular loop nest optimization) should not # be used. # Mandatory to add "-offload-attribute-target=mic" # target_compile="ifort -O2 -funroll-loops -warn -offload-attribute-target=mic -fpp -finline-functions -nogen-interfaces -openmp" # # target compiler used to build the CPU driven code for the offload execution # of the Intel Xeon Phi kernels. # You can reuse most of the flags defined in the target_compile variable. # Replace "-offload-attribute-target=mic" with "-offload=mandatory". # target_compile_offload="ifort -O2 -funroll-loops -warn -offload=mandatory -watch=mic-cmd -fpp -finline-functions -nogen-interfaces -openmp" # # target dgemm link options... these are the options needed to link blas (e.g. -lblas) # blas is used as a fall back option for sizes not included in the library or in those cases where it is faster # the same blas library should thus also be used when libsmm is linked. # blas_linking="-mkl=sequential" # # SIMD registers type (bytes): sse (16), avx (32), knc (64) # SIMD=knc # # Number of threads to be used on the card. # Do not use hyperthreads! # MIC_OMP_NUM_THREADS=58 # # host compiler... this is used only to compile a few tools needed to build # the library. The library itself is not compiled this way. # This compiler needs to be able to deal with some Fortran2003 constructs. # host_compile="ifort -O2" # # Set KMP affinity and other variables # export KMP_AFFINITY=verbose,granularity=fine,scatter export OFFLOAD_REPORT=3 export OMP_STACKSIZE=256M export MIC_STACKSIZE=256M ================================================ FILE: tools/build_libsmm/config/none.wlm ================================================ # Author: Alfio Lazzaro, alfio.lazzaro@mat.ethz.ch (2015) batch_cmd() { $@ } ================================================ FILE: tools/build_libsmm/config/pbs.wlm ================================================ # Author: Alfio Lazzaro, alazzaro@cray.com (2013) batch_cmd() { echo "${aprun_cmd} $@" | \ qsub -N ${test_name} -j oe -V -d ${PWD} -lnodes=1 -lwalltime=${wtime}; } ================================================ FILE: tools/build_libsmm/config/slurm.wlm ================================================ # Author: Alfio Lazzaro, alazzaro@cray.com (2013) batch_cmd() { sbatch -J ${test_name} -o "${test_name}-%j.out" -D ${PWD} --ntasks=1 --ntasks-per-node=1 --cpus-per-task=${ntasks} -t ${wtime} < C=C+MATMUL(A,B) # 2) 'tn' => C=C+MATMUL(TRANSPOSE(A),B) # 3) 'nt' => C=C+MATMUL(A,TRANSPOSE(B)) # 4) 'tt' => C=C+MATMUL(TRANPOSE(A),TRANPOSE(B)) # # select a tranpose_flavor from the list 1 2 3 4 # transpose_flavor=1 # 1) d => double precision real # 2) s => single precision real # 3) z => double precision complex # 4) c => single precision complex # # select a data_type from the list 1 2 3 4 # data_type=1 # # matrix dimensions for which optimized routines will be generated. # since all combinations of M,N,K are being generated the size of the library becomes very large # if too many sizes are being optimized for. Numbers have to be ascending. # dims_small="1 4 5 6 8 9 13 16 17 22 23 24 26 32" # # tiny dimensions used are used as primivitves and generated in an 'exhaustive' search. # They should be a sequence from 1 to N, # where N is a number that is large enough to have good in cache performance # dims_tiny=`seq 1 24` ================================================ FILE: tools/build_libsmm/generate ================================================ #!/bin/bash -e # # Author: Alfio Lazzaro, alfio.lazzaro@mat.ethz.ch (2013-2015) # Script to generate LIBSMM library # Run ./generate -h to see the help # echo echo "Script to generate LIBSMM library." echo "Author: Alfio Lazzaro, alfio.lazzaro@mat.ethz.ch (2013-2015)" echo # # Source the library with all routines # source generate.bash # # Default OPTIONS values # def_config_dir="config" def_config_file="${def_config_dir}/cray.gnu" def_SIMD="avx" def_ntasks="1" def_base_work_dir="output" def_target="all" def_njobs="1" def_wlm="slurm" def_wtime="01:00:00" show_help() { echo "Run with: ./generate [OPTIONS] [COMMAND]" echo echo "OPTIONS are:" echo " -h : show this help." echo " -c : config file to use (declared inside ${def_config_dir} directory)." echo " Default value is \"${def_config_file}\"." echo " -j <#> : set the number of jobs for batch submission. Setting to zero means no batch submission." echo " Default value is \"${def_njobs}\"." echo " -s : SIMD registers type (sse, avx, avx2, knc, avx512)." echo " Default value is \"${def_SIMD}\"." echo " -t <#> : set the number of tasks per each node." echo " Default value is ${def_ntasks}." echo " -w : workload manager for batch submission. The value must correspond to one of the files ${def_config_dir}/*.wlm." echo " Default value is \"${def_wlm}\"." echo " -m